harperdb 4.5.19 → 4.5.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +76 -76
- package/bin/lite.js +75 -75
- package/launchServiceScripts/launchNatsIngestService.js +75 -75
- package/launchServiceScripts/launchNatsReplyService.js +74 -74
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +75 -75
- package/npm-shrinkwrap.json +242 -220
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +75 -75
- package/server/threads/threadServer.js +75 -75
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.11098816.js → main.21e1301c.js} +2 -2
- package/utility/scripts/restartHdb.js +75 -75
- /package/studio/build-local/static/js/{main.11098816.js.LICENSE.txt → main.21e1301c.js.LICENSE.txt} +0 -0
|
@@ -1,132 +1,132 @@
|
|
|
1
|
-
"use strict";var PQ=Object.create;var Wd=Object.defineProperty;var DQ=Object.getOwnPropertyDescriptor;var LQ=Object.getOwnPropertyNames;var MQ=Object.getPrototypeOf,vQ=Object.prototype.hasOwnProperty;var a=(e,t)=>Wd(e,"name",{value:t,configurable:!0});var ye=(e,t)=>()=>(e&&(t=e(e=0)),t);var C=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),xe=(e,t)=>{for(var r in t)Wd(e,r,{get:t[r],enumerable:!0})},nP=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of LQ(t))!vQ.call(e,s)&&s!==r&&Wd(e,s,{get:()=>t[s],enumerable:!(n=DQ(t,s))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?PQ(MQ(e)):{},nP(t||!e||!e.__esModule?Wd(r,"default",{value:e,enumerable:!0}):r,e)),P=e=>nP(Wd({},"__esModule",{value:!0}),e);var pt=C(($Te,oP)=>{var{join:UQ,dirname:sP}=require("node:path"),{existsSync:xQ,readFileSync:BQ}=require("node:fs");function HQ(){let t=__dirname,r,n=0;for(;!xQ(r=UQ(t,"package.json"));)if(t===(t=sP(t))||n++>10)throw new Error("Could not find package root");return r}a(HQ,"findPackageJson");var iP=HQ(),kQ=JSON.parse(BQ(iP,"utf8")),FQ=sP(iP);oP.exports={packageJson:kQ,PACKAGE_ROOT:FQ}});var $={};xe($,{AUTH_AUDIT_STATUS:()=>Us,AUTH_AUDIT_TYPES:()=>Wo,BOOT_PROPS_FILE_NAME:()=>dj,BOOT_PROP_PARAMS:()=>lP,CLUSTERING_FLAG:()=>Bj,CLUSTERING_PROCESSES:()=>jQ,CLUSTER_MESSAGE_TYPE_ENUM:()=>iA,CLUSTER_OPERATIONS:()=>wj,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>uP,DATABASES_DIR_NAME:()=>ac,DATABASES_PARAM_CONFIG:()=>Dj,DEFAULT_DATABASE_NAME:()=>XQ,ESCAPED_FORWARD_SLASH_REGEX:()=>cj,FORWARD_SLASH_REGEX:()=>oj,FUNC_VAL:()=>$j,GEO_CONVERSION_ENUM:()=>Cj,HDB_COMPONENT_CONFIG_FILE:()=>$Q,HDB_CONFIG_FILE:()=>GQ,HDB_DEFAULT_CONFIG_FILE:()=>qQ,HDB_FILE_PERMISSIONS:()=>_j,HDB_HOME_DIR_NAME:()=>uj,HDB_PID_FILE:()=>JQ,HDB_PROCESS_SERVICES:()=>QQ,HDB_PROC_NAME:()=>VQ,HDB_RESTART_SCRIPT:()=>KQ,HDB_ROOT_DIR_NAME:()=>eA,HDB_SETTINGS_NAMES:()=>sA,HDB_SUPPORT_ADDRESS:()=>cP,INFO_TABLE_HASH_ATTRIBUTE:()=>Sj,INSERT_MAX_CHARACTER_SIZE:()=>Ej,INSTALL_PROMPTS:()=>pj,ITC_EVENT_TYPES:()=>aA,JOB_STATUS_ENUM:()=>yj,JOB_TYPE_ENUM:()=>Lj,JWT_ENUM:()=>Qd,LAUNCH_SERVICE_SCRIPTS:()=>tj,LEGACY_CONFIG_PARAMS:()=>Pj,LEGACY_DATABASES_DIR_NAME:()=>Om,LICENSE_FILE_NAME:()=>Rj,LICENSE_KEY_DIR_NAME:()=>nA,LICENSE_VALUES:()=>Mj,LOG_LEVELS:()=>ej,LOG_NAMES:()=>ZQ,MEM_SETTING_KEY:()=>lj,METADATA_PROPERTY:()=>xj,NODE_ERROR_CODES:()=>Uj,OPERATIONS_ENUM:()=>Vt,PERMS_CRUD_ENUM:()=>Gj,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>Fj,PRE_4_0_0_VERSION:()=>Vj,PROCESS_DESCRIPTORS:()=>zQ,PROCESS_NAME_ENV_PROP:()=>mj,RAM_ALLOCATION_ENUM:()=>vj,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>wm,REG_KEY_FILE_NAME:()=>Aj,RESTART_TIMEOUT_MS:()=>fj,ROLE_TYPES_ENUM:()=>rj,S3_BUCKET_AUTH_KEYS:()=>Oj,SEARCH_NOT_FOUND_MESSAGE:()=>sj,SEARCH_WILDCARDS:()=>qj,SERVICE_ACTIONS_ENUM:()=>Ij,SUPPORT_HELP_MSG:()=>nj,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>Tj,SYSTEM_SCHEMA_NAME:()=>zd,SYSTEM_TABLE_NAMES:()=>ql,THREAD_TYPES:()=>cA,TIME_STAMP_NAMES:()=>kj,TIME_STAMP_NAMES_ENUM:()=>Hj,TRANSACTIONS_DIR_NAME:()=>hj,UNICODE_FORWARD_SLASH:()=>aj,UNICODE_PERIOD:()=>ij,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>gj,VALID_S3_FILE_TYPES:()=>bj,VALID_SQL_OPS_ENUM:()=>Nj,VALUE_SEARCH_COMPARATORS:()=>Nm,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>oA});var ym,bm,GQ,qQ,eA,$Q,VQ,KQ,aP,ZT,tA,rA,YQ,WQ,zQ,QQ,jQ,JQ,XQ,ZQ,ej,tj,rj,cP,nj,sj,ij,oj,aj,cj,lj,zd,uj,nA,dj,fj,_j,ac,Om,hj,mj,lP,pj,Ej,gj,ql,Sj,Tj,Aj,Rj,yj,Vt,bj,Oj,Nj,wj,Ij,Cj,sA,Pj,B,uP,Dj,Lj,iA,Mj,vj,Uj,xj,Bj,dP,fP,Hj,kj,Fj,Nm,oA,Gj,qj,$j,wm,Qd,aA,cA,Vj,Us,Wo,k=ye(()=>{ym=require("node:path"),bm=M(pt()),GQ="harperdb-config.yaml",qQ="defaultConfig.yaml",eA="hdb",$Q="config.yaml",VQ="harperdb.js",KQ="restartHdb.js",aP="HarperDB",ZT="Custom Functions",tA="Clustering Hub",rA="Clustering Leaf",YQ="Clustering Ingest Service",WQ="Clustering Reply Service",zQ={HDB:aP,CLUSTERING_HUB:tA,CLUSTERING_LEAF:rA,CLUSTERING_INGEST_SERVICE:YQ,CLUSTERING_REPLY_SERVICE:WQ,CUSTOM_FUNCTIONS:ZT,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"},QQ={harperdb:aP,"clustering hub":tA,"clustering leaf":rA,"custom functions":ZT,custom_functions:ZT,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},jQ={CLUSTERING_HUB_PROC_DESCRIPTOR:tA,CLUSTERING_LEAF_PROC_DESCRIPTOR:rA},JQ="hdb.pid",XQ="data",ZQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},ej={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},tj={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,ym.join)(bm.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,ym.join)(bm.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,ym.join)(bm.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},rj={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},cP="support@harperdb.io",nj=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${cP}`,sj="None of the specified records were found.",ij="U+002E",oj=/\//g,aj="U+002F",cj=/U\+002F/g,lj="--max-old-space-size=",zd="system",uj=".harperdb",nA="keys",dj="hdb_boot_properties.file",fj=6e4,_j=448,ac="database",Om="schema",hj="transactions",mj="PROCESS_NAME",lP={SETTINGS_PATH_KEY:"settings_path"},pj={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"},Ej=250,gj={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ql={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"},Sj="info_id",Tj={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"},Aj="060493.ks",Rj=".license",yj={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Vt={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},bj={CSV:".csv",JSON:".json"},Oj={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Nj={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},wj={[Vt.INSERT]:Vt.INSERT,[Vt.UPDATE]:Vt.UPDATE,[Vt.UPSERT]:Vt.UPSERT,[Vt.DELETE]:Vt.DELETE},Ij={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},Cj={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},sA={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},Pj={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},uP={settings_path:lP.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];uP[t.toLowerCase()]=t}Dj={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Lj={csv_file_load:"csv_file_load",csv_data_load:Vt.CSV_DATA_LOAD,csv_url_load:Vt.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},iA={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},Mj={VERSION_DEFAULT:"2.2.0"},vj={DEVELOPMENT:8192,DEFAULT:512},Uj={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},xj=Symbol("metadata"),Bj="__clustering__",dP="__createdtime__",fP="__updatedtime__",Hj={CREATED_TIME:dP,UPDATED_TIME:fP},kj=[dP,fP],Fj=15984864e5,Nm={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},oA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},Gj={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},qj=["*","%"],$j="func_val",wm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Qd={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},aA={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"},cA={HTTP:"http"},Vj="3.x.x",Us={SUCCESS:"success",FAILURE:"failure"},Wo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var cc=C((KTe,mP)=>{"use strict";var _P=require("minimist");mP.exports=Kj;function Kj(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=hP(process.env),n=hP(_P(process.argv))):(r=process.env,n=_P(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(Kj,"assignCMDENVVariables");function hP(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(hP,"objKeysToLowerCase")});var ui=C(xs=>{"use strict";global.Resource=xs.Resource=void 0;global.tables=xs.tables={};global.databases=xs.databases={};global.getUser=xs.getUser=void 0;global.authenticateUser=xs.authenticateUser=void 0;global.server=xs.server={};global.contentTypes=xs.contentTypes=null;global.threads=xs.threads=[];global.logger={};xs._assignPackageExport=(e,t)=>{global[e]=xs[e]=t}});var X=C((PP,DP)=>{"use strict";var Qi=require("fs-extra"),{workerData:Yj,threadId:Wj,isMainThread:zj}=require("worker_threads"),fi=require("path"),SP=require("yaml"),TP=require("properties-reader"),Kt=(k(),P($)),pP=cc(),Qj=require("os"),{PACKAGE_ROOT:fA}=pt(),{_assignPackageExport:jj}=ui(),EP=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),_r={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},AP={STDOUT:"stdOut",STDERR:"stdErr"},Jj=fi.join(fA,"logs"),Xj=fi.join(fA,"config/yaml/",Kt.HDB_DEFAULT_CONFIG_FILE),Zj=1e4,lA,di,as,Cr,Im,jd,Cm,zo,Jd;Jd===void 0&&RP();Object.assign(PP,{notify:wP,fatal:IP,error:Pm,warn:CP,info:bP,debug:NP,trace:OP,setLogLevel:a2,log_level:Cr,loggerWithTag:r2,suppressLogging:n2,initLogSettings:RP,logCustomLevel:i2,closeLogFile:_A,logsAtLevel:e2,getLogFilePath:a(()=>Cm,"getLogFilePath"),OUTPUTS:AP,AuthAuditLog:u2});jj("logger",DP.exports);var uA;function e2(e){return _r[Cr]<=_r[e]}a(e2,"logsAtLevel");function RP(e=!1){try{if(Jd===void 0||e){_A();let t=o2(),r=pP(["ROOTPATH"]);try{Jd=TP(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Qi.pathExistsSync(fi.join(r.ROOTPATH,Kt.HDB_CONFIG_FILE)))throw n}if({level:Cr,config_log_path:jd,to_file:di,to_stream:as}=c2(r.ROOTPATH?fi.join(r.ROOTPATH,Kt.HDB_CONFIG_FILE):Jd.get("settings_path")),Im=Kt.LOG_NAMES.HDB,Cm=fi.join(jd,Im),zj)try{require("segfault-handler").registerHandler(fi.join(jd,"crash.log"))}catch{}}}catch(t){if(Jd=void 0,t.code===Kt.NODE_ERROR_CODES.ENOENT||t.code===Kt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=pP(Object.keys(Kt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Kt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Kt.CONFIG_PARAMS.LOGGING_LEVEL){Cr=l;continue}if(c===Kt.CONFIG_PARAMS.LOGGING_STDSTREAMS){as=l;continue}c===Kt.CONFIG_PARAMS.LOGGING_FILE&&(di=c),c===Kt.CONFIG_PARAMS.LOGGING_CONSOLE&&(lA=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=l2();di=di===void 0?s:di,di=gP(di),as=as===void 0?i:as,as=gP(as),Cr=Cr===void 0?n:Cr,jd=Jj,Im=Kt.LOG_NAMES.INSTALL,Cm=fi.join(jd,Im);return}throw Pm("Error initializing log settings"),Pm(t),t}process.env.DEV_MODE&&(as=!0),t2()}a(RP,"initLogSettings");var Qo=!0;function t2(){di&&(process.stdout.write=function(e){return typeof e=="string"&&Qo&&lA!==!1&&(dA(),e=e.toString(),e[e.length-1]===`
|
|
2
|
-
`&&(e=e.slice(0,-1)),
|
|
3
|
-
`&&(e=e.slice(0,-1)),
|
|
1
|
+
"use strict";var Mj=Object.create;var zd=Object.defineProperty;var vj=Object.getOwnPropertyDescriptor;var Uj=Object.getOwnPropertyNames;var xj=Object.getPrototypeOf,Bj=Object.prototype.hasOwnProperty;var a=(e,t)=>zd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Be=(e,t)=>{for(var r in t)zd(e,r,{get:t[r],enumerable:!0})},iP=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Uj(t))!Bj.call(e,s)&&s!==r&&zd(e,s,{get:()=>t[s],enumerable:!(n=vj(t,s))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?Mj(xj(e)):{},iP(t||!e||!e.__esModule?zd(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>iP(zd({},"__esModule",{value:!0}),e);var Et=P((QTe,cP)=>{var{join:Hj,dirname:oP}=require("node:path"),{existsSync:kj,readFileSync:Fj}=require("node:fs");function Gj(){let t=__dirname,r,n=0;for(;!kj(r=Hj(t,"package.json"));)if(t===(t=oP(t))||n++>10)throw new Error("Could not find package root");return r}a(Gj,"findPackageJson");var aP=Gj(),qj=JSON.parse(Fj(aP,"utf8")),$j=oP(aP);cP.exports={packageJson:qj,PACKAGE_ROOT:$j}});var $={};Be($,{AUTH_AUDIT_STATUS:()=>xs,AUTH_AUDIT_TYPES:()=>zo,BOOT_PROPS_FILE_NAME:()=>hQ,BOOT_PROP_PARAMS:()=>dP,CLUSTERING_FLAG:()=>FQ,CLUSTERING_PROCESSES:()=>Zj,CLUSTER_MESSAGE_TYPE_ENUM:()=>oA,CLUSTER_OPERATIONS:()=>PQ,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>fP,DATABASES_DIR_NAME:()=>cc,DATABASES_PARAM_CONFIG:()=>vQ,DEFAULT_DATABASE_NAME:()=>tQ,ESCAPED_FORWARD_SLASH_REGEX:()=>dQ,FORWARD_SLASH_REGEX:()=>lQ,FUNC_VAL:()=>YQ,GEO_CONVERSION_ENUM:()=>LQ,HDB_COMPONENT_CONFIG_FILE:()=>Yj,HDB_CONFIG_FILE:()=>Vj,HDB_DEFAULT_CONFIG_FILE:()=>Kj,HDB_FILE_PERMISSIONS:()=>mQ,HDB_HOME_DIR_NAME:()=>_Q,HDB_PID_FILE:()=>eQ,HDB_PROCESS_SERVICES:()=>Xj,HDB_PROC_NAME:()=>Wj,HDB_RESTART_SCRIPT:()=>zj,HDB_ROOT_DIR_NAME:()=>tA,HDB_SETTINGS_NAMES:()=>iA,HDB_SUPPORT_ADDRESS:()=>uP,INFO_TABLE_HASH_ATTRIBUTE:()=>RQ,INSERT_MAX_CHARACTER_SIZE:()=>TQ,INSTALL_PROMPTS:()=>SQ,ITC_EVENT_TYPES:()=>cA,JOB_STATUS_ENUM:()=>NQ,JOB_TYPE_ENUM:()=>UQ,JWT_ENUM:()=>Qd,LAUNCH_SERVICE_SCRIPTS:()=>sQ,LEGACY_CONFIG_PARAMS:()=>MQ,LEGACY_DATABASES_DIR_NAME:()=>Op,LICENSE_FILE_NAME:()=>OQ,LICENSE_KEY_DIR_NAME:()=>sA,LICENSE_VALUES:()=>xQ,LOG_LEVELS:()=>nQ,LOG_NAMES:()=>rQ,MEM_SETTING_KEY:()=>fQ,METADATA_PROPERTY:()=>kQ,NODE_ERROR_CODES:()=>HQ,OPERATIONS_ENUM:()=>Yt,PERMS_CRUD_ENUM:()=>VQ,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>$Q,PRE_4_0_0_VERSION:()=>WQ,PROCESS_DESCRIPTORS:()=>Jj,PROCESS_NAME_ENV_PROP:()=>gQ,RAM_ALLOCATION_ENUM:()=>BQ,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>wp,REG_KEY_FILE_NAME:()=>bQ,RESTART_TIMEOUT_MS:()=>pQ,ROLE_TYPES_ENUM:()=>iQ,S3_BUCKET_AUTH_KEYS:()=>IQ,SEARCH_NOT_FOUND_MESSAGE:()=>aQ,SEARCH_WILDCARDS:()=>KQ,SERVICE_ACTIONS_ENUM:()=>DQ,SUPPORT_HELP_MSG:()=>oQ,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>yQ,SYSTEM_SCHEMA_NAME:()=>jd,SYSTEM_TABLE_NAMES:()=>Fl,THREAD_TYPES:()=>lA,TIME_STAMP_NAMES:()=>qQ,TIME_STAMP_NAMES_ENUM:()=>GQ,TRANSACTIONS_DIR_NAME:()=>EQ,UNICODE_FORWARD_SLASH:()=>uQ,UNICODE_PERIOD:()=>cQ,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>AQ,VALID_S3_FILE_TYPES:()=>wQ,VALID_SQL_OPS_ENUM:()=>CQ,VALUE_SEARCH_COMPARATORS:()=>Np,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>aA});var yp,bp,Vj,Kj,tA,Yj,Wj,zj,lP,eA,rA,nA,jj,Qj,Jj,Xj,Zj,eQ,tQ,rQ,nQ,sQ,iQ,uP,oQ,aQ,cQ,lQ,uQ,dQ,fQ,jd,_Q,sA,hQ,pQ,mQ,cc,Op,EQ,gQ,dP,SQ,TQ,AQ,Fl,RQ,yQ,bQ,OQ,NQ,Yt,wQ,IQ,CQ,PQ,DQ,LQ,iA,MQ,B,fP,vQ,UQ,oA,xQ,BQ,HQ,kQ,FQ,_P,hP,GQ,qQ,$Q,Np,aA,VQ,KQ,YQ,wp,Qd,cA,lA,WQ,xs,zo,G=be(()=>{yp=require("node:path"),bp=M(Et()),Vj="harperdb-config.yaml",Kj="defaultConfig.yaml",tA="hdb",Yj="config.yaml",Wj="harperdb.js",zj="restartHdb.js",lP="HarperDB",eA="Custom Functions",rA="Clustering Hub",nA="Clustering Leaf",jj="Clustering Ingest Service",Qj="Clustering Reply Service",Jj={HDB:lP,CLUSTERING_HUB:rA,CLUSTERING_LEAF:nA,CLUSTERING_INGEST_SERVICE:jj,CLUSTERING_REPLY_SERVICE:Qj,CUSTOM_FUNCTIONS:eA,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},Xj={harperdb:lP,"clustering hub":rA,"clustering leaf":nA,"custom functions":eA,custom_functions:eA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},Zj={CLUSTERING_HUB_PROC_DESCRIPTOR:rA,CLUSTERING_LEAF_PROC_DESCRIPTOR:nA},eQ="hdb.pid",tQ="data",rQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},nQ={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},sQ={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,yp.join)(bp.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,yp.join)(bp.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,yp.join)(bp.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},iQ={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},uP="support@harperdb.io",oQ=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${uP}`,aQ="None of the specified records were found.",cQ="U+002E",lQ=/\//g,uQ="U+002F",dQ=/U\+002F/g,fQ="--max-old-space-size=",jd="system",_Q=".harperdb",sA="keys",hQ="hdb_boot_properties.file",pQ=6e4,mQ=448,cc="database",Op="schema",EQ="transactions",gQ="PROCESS_NAME",dP={SETTINGS_PATH_KEY:"settings_path"},SQ={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},TQ=250,AQ={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Fl={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},RQ="info_id",yQ={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},bQ="060493.ks",OQ=".license",NQ={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Yt={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},wQ={CSV:".csv",JSON:".json"},IQ={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},CQ={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},PQ={[Yt.INSERT]:Yt.INSERT,[Yt.UPDATE]:Yt.UPDATE,[Yt.UPSERT]:Yt.UPSERT,[Yt.DELETE]:Yt.DELETE},DQ={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},LQ={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},iA={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},MQ={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},fP={settings_path:dP.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];fP[t.toLowerCase()]=t}vQ={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},UQ={csv_file_load:"csv_file_load",csv_data_load:Yt.CSV_DATA_LOAD,csv_url_load:Yt.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},oA={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},xQ={VERSION_DEFAULT:"2.2.0"},BQ={DEVELOPMENT:8192,DEFAULT:512},HQ={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},kQ=Symbol("metadata"),FQ="__clustering__",_P="__createdtime__",hP="__updatedtime__",GQ={CREATED_TIME:_P,UPDATED_TIME:hP},qQ=[_P,hP],$Q=15984864e5,Np={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},aA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},VQ={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},KQ=["*","%"],YQ="func_val",wp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Qd={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cA={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},lA={HTTP:"http"},WQ="3.x.x",xs={SUCCESS:"success",FAILURE:"failure"},zo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var lc=P((XTe,EP)=>{"use strict";var pP=require("minimist");EP.exports=zQ;function zQ(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=mP(process.env),n=mP(pP(process.argv))):(r=process.env,n=pP(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(zQ,"assignCMDENVVariables");function mP(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(mP,"objKeysToLowerCase")});var ui=P(Bs=>{"use strict";global.Resource=Bs.Resource=void 0;global.tables=Bs.tables={};global.databases=Bs.databases={};global.getUser=Bs.getUser=void 0;global.authenticateUser=Bs.authenticateUser=void 0;global.server=Bs.server={};global.contentTypes=Bs.contentTypes=null;global.threads=Bs.threads=[];global.logger={};Bs._assignPackageExport=(e,t)=>{global[e]=Bs[e]=t}});var X=P((LP,MP)=>{"use strict";var zi=require("fs-extra"),{workerData:jQ,threadId:QQ,isMainThread:JQ}=require("worker_threads"),fi=require("path"),AP=require("yaml"),RP=require("properties-reader"),Wt=(G(),D($)),gP=lc(),XQ=require("os"),{PACKAGE_ROOT:_A}=Et(),{_assignPackageExport:ZQ}=ui(),SP=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),hr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},yP={STDOUT:"stdOut",STDERR:"stdErr"},e2=fi.join(_A,"logs"),t2=fi.join(_A,"config/yaml/",Wt.HDB_DEFAULT_CONFIG_FILE),r2=1e4,uA,di,as,Pr,Ip,Jd,Cp,jo,Xd;Xd===void 0&&bP();Object.assign(LP,{notify:CP,fatal:PP,error:Pp,warn:DP,info:NP,debug:IP,trace:wP,setLogLevel:u2,log_level:Pr,loggerWithTag:i2,suppressLogging:o2,initLogSettings:bP,logCustomLevel:c2,closeLogFile:hA,logsAtLevel:n2,getLogFilePath:a(()=>Cp,"getLogFilePath"),OUTPUTS:yP,AuthAuditLog:_2});ZQ("logger",MP.exports);var dA;function n2(e){return hr[Pr]<=hr[e]}a(n2,"logsAtLevel");function bP(e=!1){try{if(Xd===void 0||e){hA();let t=l2(),r=gP(["ROOTPATH"]);try{Xd=RP(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!zi.pathExistsSync(fi.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE)))throw n}if({level:Pr,config_log_path:Jd,to_file:di,to_stream:as}=d2(r.ROOTPATH?fi.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE):Xd.get("settings_path")),Ip=Wt.LOG_NAMES.HDB,Cp=fi.join(Jd,Ip),JQ)try{require("segfault-handler").registerHandler(fi.join(Jd,"crash.log"))}catch{}}}catch(t){if(Xd=void 0,t.code===Wt.NODE_ERROR_CODES.ENOENT||t.code===Wt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=gP(Object.keys(Wt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Wt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Wt.CONFIG_PARAMS.LOGGING_LEVEL){Pr=l;continue}if(c===Wt.CONFIG_PARAMS.LOGGING_STDSTREAMS){as=l;continue}c===Wt.CONFIG_PARAMS.LOGGING_FILE&&(di=c),c===Wt.CONFIG_PARAMS.LOGGING_CONSOLE&&(uA=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=f2();di=di===void 0?s:di,di=TP(di),as=as===void 0?i:as,as=TP(as),Pr=Pr===void 0?n:Pr,Jd=e2,Ip=Wt.LOG_NAMES.INSTALL,Cp=fi.join(Jd,Ip);return}throw Pp("Error initializing log settings"),Pp(t),t}process.env.DEV_MODE&&(as=!0),s2()}a(bP,"initLogSettings");var Qo=!0;function s2(){di&&(process.stdout.write=function(e){return typeof e=="string"&&Qo&&uA!==!1&&(fA(),e=e.toString(),e[e.length-1]===`
|
|
2
|
+
`&&(e=e.slice(0,-1)),zi.appendFileSync(jo,Hs("stdout",[e]))),SP.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Qo&&uA!==!1&&(fA(),e[e.length-1]===`
|
|
3
|
+
`&&(e=e.slice(0,-1)),zi.appendFileSync(jo,Hs("stderr",[e]))),SP.apply(process.stderr,arguments)})}a(s2,"stdioLogging");function i2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(CP,"notify"),fatal:n(PP,"fatal"),error:n(Pp,"error"),warn:n(DP,"warn"),info:n(NP,"info"),debug:n(IP,"debug"),trace:n(wP,"trace")};function n(s,i){return!t||hr[Pr]<=hr[i]?function(...o){return s(r,...o)}:null}}a(i2,"loggerWithTag");function o2(e){try{Qo=!1,e()}finally{Qo=!0}}a(o2,"suppressLogging");var a2=jQ?.name?.replace(/ /g,"-")||"main";function Hs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||a2+"/"+QQ);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
|
|
4
4
|
`+JSON.stringify(u)),u.cause&&(t[c--]=u.cause,u&&(n+=`
|
|
5
5
|
Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Object ["+Object.keys(u)+"]"}else n+=u;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
|
|
6
|
-
`}a(
|
|
7
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:f2.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(p2,"findPs")});var Ht=C((JTe,vP)=>{"use strict";var E2="__dbis__",g2="__txns__",S2="__environment_name__",T2="__dbi_defintion__",A2={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"},R2=["__createdtime__","__updatedtime__"],y2="\uFFFF",MP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},b2=Object.values(MP);vP.exports={AUDIT_STORE_NAME:g2,INTERNAL_DBIS_NAME:E2,DBI_DEFINITION_NAME:T2,SEARCH_TYPES:A2,TIMESTAMP_NAMES:R2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:S2,TRANSACTIONS_DBI_NAMES_ENUM:MP,TRANSACTIONS_DBIS:b2,OVERFLOW_MARKER:y2}});var Ln=C((XTe,$P)=>{"use strict";var UP=(k(),P($)),xP=Ht(),BP={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},HP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),kP={500:HP("There was an error processing your request."),400:"Invalid request"},O2=kP[BP.INTERNAL_SERVER_ERROR],N2={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},w2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},I2={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},C2={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${xP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${xP.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"},P2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${UP.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 ${UP.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"},FP={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"},D2={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},L2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},M2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},v2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},U2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},GP={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},qP={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},x2={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"},B2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},H2={...FP,...I2,...N2,...D2,...L2,...M2,...v2,...U2,...P2,...GP,...qP,...x2,...B2,...w2};$P.exports={CHECK_LOGS_WRAPPER:HP,HDB_ERROR_MSGS:H2,DEFAULT_ERROR_MSGS:kP,DEFAULT_ERROR_RESP:O2,HTTP_STATUS_CODES:BP,LMDB_ERRORS_ENUM:C2,AUTHENTICATION_ERROR_MSGS:FP,VALIDATION_ERROR_MSGS:GP,ITC_ERRORS:qP}});var pe=C((eAe,YP)=>{"use strict";var $l=Ln(),k2=X(),F2=(k(),P($)),Lm=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,VP),this.statusCode=n||$l.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($l.DEFAULT_ERROR_MSGS[n]?$l.DEFAULT_ERROR_MSGS[n]:$l.DEFAULT_ERROR_MSGS[$l.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&&k2[s](i)}},mA=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},pA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function VP(e,t,r,n=F2.LOG_LEVELS.ERROR,s=null,i=!1){if(KP(e))return e;let o=new Lm(e,t,r,n,s);return i&&delete o.stack,o}a(VP,"handleHDBError");function KP(e){return e.__proto__.constructor.name===Lm.name}a(KP,"isHDBError");YP.exports={isHDBError:KP,handleHDBError:VP,ClientError:mA,ServerError:pA,hdb_errors:$l}});var EA=C(WP=>{"use strict";var G2={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
6
|
+
`}a(Hs,"createLogRecord");function Zd(e){if(di){if(OP(e),as){Qo=!1;try{process.stdout.write(e)}finally{Qo=!0}}}else as&&process.stdout.write(e)}a(Zd,"logStdOut");function Dp(e){if(di){if(OP(e),as){Qo=!1;try{process.stderr.write(e)}finally{Qo=!0}}}else as&&process.stderr.write(e)}a(Dp,"logStdErr");function OP(e){fA(),jo?zi.appendFileSync(jo,e):dA||console.log(e)}a(OP,"logToFile");function hA(){try{zi.closeSync(jo)}catch{}jo=null}a(hA,"closeLogFile");function fA(){if(!jo){try{jo=zi.openSync(Cp,"a")}catch(e){dA||(dA=!0,console.error(e))}setTimeout(()=>{hA()},r2).unref()}}a(fA,"openLogFile");function NP(...e){hr[Pr]<=hr.info&&Zd(Hs("info",e))}a(NP,"info");function wP(...e){hr[Pr]<=hr.trace&&Zd(Hs("trace",e))}a(wP,"trace");function Pp(...e){hr[Pr]<=hr.error&&Dp(Hs("error",e))}a(Pp,"error");function IP(...e){hr[Pr]<=hr.debug&&Zd(Hs("debug",e))}a(IP,"debug");function CP(...e){hr[Pr]<=hr.notify&&Zd(Hs("notify",e))}a(CP,"notify");function PP(...e){hr[Pr]<=hr.fatal&&Dp(Hs("fatal",e))}a(PP,"fatal");function DP(...e){hr[Pr]<=hr.warn&&Dp(Hs("warn",e))}a(DP,"warn");function c2(e,t,...r){t===yP.STDERR?Dp(Hs(e,r)):Zd(Hs(e,r))}a(c2,"logCustomLevel");function l2(){let e;try{e=XQ.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=fi.join(e,Wt.HDB_HOME_DIR_NAME,Wt.BOOT_PROPS_FILE_NAME);return zi.existsSync(t)||(t=fi.join(_A,"utility/hdb_boot_properties.file")),t}a(l2,"getPropsFilePath");function u2(e){Pr=e}a(u2,"setLogLevel");function TP(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(TP,"autoCastBoolean");function d2(e){try{if(e.includes("config/settings.js")){let o=RP(e);return{level:o.get(Wt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:fi.dirname(o.get(Wt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=AP.parseDocument(zi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Wt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(d2,"getLogConfig");function f2(){try{let e=AP.parseDocument(zi.readFileSync(t2,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(f2,"getDefaultConfig");function _2(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(_2,"AuthAuditLog")});var pA=P((rAe,vP)=>{"use strict";var h2=require("util"),p2=require("path"),m2=require("child_process"),E2=h2.promisify(m2.execFile),g2=1e3*1e3*10;vP.exports={findPs:S2};async function S2(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await E2("ps",["wwxo",`pid,${r}`],{maxBuffer:g2});for(let s of n.trim().split(`
|
|
7
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:p2.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(S2,"findPs")});var Ft=P((sAe,xP)=>{"use strict";var T2="__dbis__",A2="__txns__",R2="__environment_name__",y2="__dbi_defintion__",b2={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},O2=["__createdtime__","__updatedtime__"],N2="\uFFFF",UP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},w2=Object.values(UP);xP.exports={AUDIT_STORE_NAME:A2,INTERNAL_DBIS_NAME:T2,DBI_DEFINITION_NAME:y2,SEARCH_TYPES:b2,TIMESTAMP_NAMES:O2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:R2,TRANSACTIONS_DBI_NAMES_ENUM:UP,TRANSACTIONS_DBIS:w2,OVERFLOW_MARKER:N2}});var Dn=P((iAe,KP)=>{"use strict";var BP=(G(),D($)),HP=Ft(),kP={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},FP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),GP={500:FP("There was an error processing your request."),400:"Invalid request"},I2=GP[kP.INTERNAL_SERVER_ERROR],C2={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},P2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},D2={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},L2={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${HP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${HP.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},M2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${BP.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${BP.INSERT_MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},qP={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},v2={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},U2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},x2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},B2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},H2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},$P={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},VP={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},k2={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},F2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},G2={...qP,...D2,...C2,...v2,...U2,...x2,...B2,...H2,...M2,...$P,...VP,...k2,...F2,...P2};KP.exports={CHECK_LOGS_WRAPPER:FP,HDB_ERROR_MSGS:G2,DEFAULT_ERROR_MSGS:GP,DEFAULT_ERROR_RESP:I2,HTTP_STATUS_CODES:kP,LMDB_ERRORS_ENUM:L2,AUTHENTICATION_ERROR_MSGS:qP,VALIDATION_ERROR_MSGS:$P,ITC_ERRORS:VP}});var he=P((aAe,zP)=>{"use strict";var Gl=Dn(),q2=X(),$2=(G(),D($)),Lp=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,YP),this.statusCode=n||Gl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Gl.DEFAULT_ERROR_MSGS[n]?Gl.DEFAULT_ERROR_MSGS[n]:Gl.DEFAULT_ERROR_MSGS[Gl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&q2[s](i)}},mA=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},EA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function YP(e,t,r,n=$2.LOG_LEVELS.ERROR,s=null,i=!1){if(WP(e))return e;let o=new Lp(e,t,r,n,s);return i&&delete o.stack,o}a(YP,"handleHDBError");function WP(e){return e.__proto__.constructor.name===Lp.name}a(WP,"isHDBError");zP.exports={isHDBError:WP,handleHDBError:YP,ClientError:mA,ServerError:EA,hdb_errors:Gl}});var gA=P(jP=>{"use strict";var V2={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
8
8
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
9
|
-
`)},q2="certificate.pem",$2="privateKey.pem",V2="caCertificate.pem",K2="natsCertificate.pem",Y2="natsCaCertificate.pem",At={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},W2={tls_certificate:At.SERVER,tls_certificateAuthority:At.CA,customFunctions_tls_certificate:At.SERVER,customFunctions_tls_certificateAuthority:At.CA,operationsApi_tls_certificate:At["OPERATIONS-API"],operationsApi_tls_certificateAuthority:At["OPERATIONS-CA"]},z2={[At.SERVER]:2,[At.DEFAULT]:1},Q2={[At["OPERATIONS-API"]]:3,[At.SERVER]:2,[At.DEFAULT]:1},j2={[At["OPERATIONS-API"]]:3,[At.SERVER]:2,[At.DEFAULT]:1},J2={[At["OPERATIONS-CA"]]:3,[At.CA]:2,[At["DEFAULT-CA"]]:1},X2={[At["OPERATIONS-CA"]]:3,[At.CA]:2,[At["DEFAULT-CA"]]:1},Z2={[At.CA]:2,[At["DEFAULT-CA"]]:1};Object.assign(WP,{CERTIFICATE_PEM_NAME:q2,PRIVATEKEY_PEM_NAME:$2,CA_PEM_NAME:V2,CERT_NAME:At,CERT_CONFIG_NAME_MAP:W2,CERT_PREFERENCE_APP:z2,CERT_PREFERENCE_OPS:Q2,CERT_PREFERENCE_REP:j2,CA_CERT_PREFERENCE_REP:J2,CA_CERT_PREFERENCE_OPS:X2,CA_CERT_PREFERENCE_APP:Z2,CERTIFICATE_VALUES:G2,NATS_CERTIFICATE_PEM_NAME:K2,NATS_CA_PEM_NAME:Y2})});var rt=C((nAe,zP)=>{"use strict";var on=require("validate.js");on.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||on.validators.type.checks[t](e)?null:` must be a '${t}' value`};on.validators.type.checks={Object:a(function(e){return on.isObject(e)&&!on.isArray(e)},"Object"),Array:on.isArray,Integer:on.isInteger,Number:on.isNumber,String:on.isString,Date:on.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};on.validators.hasValidFileExt=function(e,t){return on.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};zP.exports={validateObject:eJ,validateObjectAsync:tJ,validateBySchema:rJ};function eJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=on(e,t,{format:"flat"});return r?new Error(r):null}a(eJ,"validateObject");async function tJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await on.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(tJ,"validateObjectAsync");function rJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(rJ,"validateBySchema")});var SA=C((oAe,eD)=>{"use strict";var XP=require("fs-extra"),ge=require("joi"),nJ=require("os"),{boolean:ke,string:dt,number:Xt,array:jo}=ge.types(),{totalmem:QP}=require("os"),lc=require("path"),sJ=X(),gA=oe(),iAe=EA(),jP=(k(),P($)),iJ=rt(),JP="log",oJ="components",aJ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",cJ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",lJ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",uJ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",dJ="rootPath config parameter is undefined",an=ge.alternatives([Xt.min(0),dt]).optional().empty(null),Mm=ge.alternatives([jo.items(dt,{host:dt.required(),port:an},{hostname:dt.required(),port:an}).empty(null),jo.items(dt)]),_i,ZP=!1;eD.exports={configValidator:fJ,routesValidator:gJ,route_constraints:Mm};function fJ(e,t=!1){if(ZP=t,_i=e.rootPath,gA.isEmpty(_i))throw dJ;let r=ke.optional(),n=Xt.min(0).max(1e3).empty(null).default(EJ),s=dt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zd),i=dt.optional().empty(null),o=dt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(Zd),l=ge.custom(hJ).empty(null).default(Zd),u=e.clustering?.enabled,f=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:an,routes:Mm}).required()}).required(),leafNodes:ge.object({network:ge.object({port:an}).required()}).required(),network:ge.object({port:an}).required()}).required(),leafServer:ge.object({network:ge.object({port:an,routes:Mm}).required(),streams:ge.object({maxAge:Xt.min(120).allow(null).optional(),maxBytes:Xt.min(1).allow(null).optional(),maxMsgs:Xt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ke.optional(),databaseLevel:ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.required(),verify:ke.optional()}),user:dt.optional().empty(null)}).optional():d=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:Xt.required(),cookie:ge.object({domains:jo.items(dt).optional(),expires:dt.optional()}),enableSessions:ke,hashFunction:dt.valid("md5","sha256","argon2id").optional().empty(null)}),ke).optional(),analytics:ge.object({aggregatePeriod:Xt}),replication:ge.object({hostname:ge.alternatives(dt,Xt).optional().empty(null),url:dt.optional().empty(null),port:an,securePort:an,routes:jo.optional().empty(null),databases:ge.alternatives(dt,jo),enableRootCAs:ke.optional(),copyTablesToCatchUp:ke.optional()}).optional(),componentsRoot:s.optional(),clustering:d,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:dt.custom(pJ).optional().empty(null),maxSize:dt.custom(mJ).optional().empty(null),path:dt.optional().empty(null).default(Zd)}).required(),root:s,stdStreams:ke.required(),auditLog:ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:ke.optional(),corsAccessList:jo.optional(),headersTimeout:Xt.min(1).optional(),keepAliveTimeout:Xt.min(1).optional(),port:an,domainSocket:ge.optional().empty("hdb/operations-server").default(Zd),securePort:an,timeout:Xt.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(f),f])}).required(),rootPath:dt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:an,securePort:an,mtls:ge.alternatives([ke.optional(),ge.object({user:dt.optional(),certificateAuthority:i,required:ke.optional()})])}).required(),webSocket:ke.optional(),requireAuthentication:ke.optional()}),http:ge.object({compressionThreshold:Xt.optional(),cors:ke.optional(),corsAccessList:jo.optional(),headersTimeout:Xt.min(1).optional(),port:an,securePort:an,maxHeaderSize:Xt.optional(),mtls:ge.alternatives([ke.optional(),ge.object({user:dt.optional(),certificateAuthority:i,required:ke.optional()})]),threadRange:ge.alternatives([jo.optional(),dt.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(ke.optional(),ge.object({startingPort:Xt.min(1).optional(),host:dt.optional(),waitForDebugger:ke.optional()})),maxHeapMemory:Xt.min(0).optional()})),storage:ge.object({writeAsync:ke.required(),overlappingSync:ke.optional(),caching:ke.optional(),compression:ge.alternatives([ke.optional(),ge.object({dictionary:dt.optional(),threshold:Xt.optional()})]),compactOnStart:ke.optional(),compactOnStartKeepBackup:ke.optional(),noReadAhead:ke.optional(),path:l,prefetchWrites:ke.optional(),maxFreeSpaceToLoad:Xt.optional(),maxFreeSpaceToRetain:Xt.optional()}).required(),ignoreScripts:ke.optional(),tls:ge.alternatives([ge.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fJ,"configValidator");function _J(e){return ZP||XP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(_J,"doesPathExist");function hJ(e,t){ge.assert(e,dt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=_J(e);if(r)return t.message(r)}a(hJ,"validatePath");function mJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(aJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(lJ):e}a(mJ,"validateRotationMaxSize");function pJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(cJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(uJ):e}a(pJ,"validateRotationInterval");function EJ(e,t){let r=t.state.path.join("."),n=nJ.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||QP();return i=Math.round(Math.min(i,QP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),sJ.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(EJ,"setDefaultThreads");function Zd(e,t){let r=t.state.path.join(".");if(!gA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(gA.isEmpty(_i))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return lc.join(_i,oJ);case"logging.root":return lc.join(_i,JP);case"clustering.leafServer.streams.path":return lc.join(_i,"clustering","leaf");case"storage.path":let n=lc.join(_i,jP.LEGACY_DATABASES_DIR_NAME);return XP.existsSync(n)?n:lc.join(_i,jP.DATABASES_DIR_NAME);case"logging.rotation.path":return lc.join(_i,JP);case"operationsApi.network.domainSocket":return r==null?null:lc.join(_i,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Zd,"setDefaultRoot");function gJ(e){let t=ge.object({routes:Mm});return iJ.validateBySchema({routes:e},t)}a(gJ,"routesValidator")});var Vl={};xe(Vl,{server:()=>Ke});var tD,Ke,Pr=ye(()=>{tD=M(ui()),Ke={};(0,tD._assignPackageExport)("server",Ke)});var Nt=C(fD=>{"use strict";var cs=(k(),P($)),hr=oe(),Zt=X(),{configValidator:SJ,routesValidator:rD}=SA(),Gr=require("fs-extra"),sD=require("yaml"),vn=require("path"),TJ=require("is-number"),iD=require("properties-reader"),AJ=require("lodash"),{handleHDBError:RJ}=pe(),{HTTP_STATUS_CODES:yJ,HDB_ERROR_MSGS:Kl}=Ln(),{server:bJ}=(Pr(),P(Vl)),{PACKAGE_ROOT:oD}=pt(),{DATABASES_PARAM_CONFIG:ef,CONFIG_PARAMS:Mn,CONFIG_PARAM_MAP:Hs}=cs,OJ="Unable to get config value because config is uninitialized",NJ="Config successfully initialized",wJ="Error backing up config file",IJ="Empty parameter sent to getConfigValue",aD=vn.join(oD,"config","yaml",cs.HDB_DEFAULT_CONFIG_FILE),CJ=vn.join(oD,"config","yaml","defaultNatsConfig.yaml"),PJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",nD={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"},vm,Ot,Um;Object.assign(fD,{createConfigFile:DJ,getDefaultConfig:LJ,getConfigValue:lD,initConfig:xm,flattenConfig:Yl,updateConfigValue:uD,updateConfigObject:vJ,getConfiguration:BJ,setConfiguration:HJ,readConfigFile:yA,getClusteringRoutes:kJ,initOldConfig:dD,getConfigFromFile:FJ,getConfigFilePath:uc,addConfig:GJ,deleteConfigFromFile:qJ,getConfigObj:$J,resolvePath:TA,getFlatConfigObj:VJ});function TA(e){if(e?.startsWith("~/"))return vn.join(hr.getHomeDir(),e.slice(1));let t=ce();try{return vn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(TA,"resolvePath");function DJ(e,t=!1){let r=Jo(aD);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=sD.parseDocument(Gr.readFileSync(CJ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}vm=Yl(r.toJSON());let n;for(let c in e){let l=Hs[c.toLowerCase()];if(l===Mn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=AA(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){Zt.error(d)}}}n&&cD(r,n),RA(r,t);let s=r.toJSON();Ot=Yl(s);let i=r.getIn(["rootPath"]),o=vn.join(i,cs.HDB_CONFIG_FILE);if(Gr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Gr.writeFileSync(o,String(r)),Zt.trace(`Config file written to ${o}`)}a(DJ,"createConfigFile");function cD(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!hr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(ef.TABLES))for(let i in n[s][ef.TABLES])for(let o in n[s][ef.TABLES][i]){let c=n[s][ef.TABLES][i][o],l=[Mn.DATABASES,s,ef.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Mn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Zt.error("Error parsing schemas CLI/env config arguments",n)}}a(cD,"setSchemasConfig");function LJ(e){if(vm===void 0){let r=Jo(aD);vm=Yl(r.toJSON())}let t=Hs[e.toLowerCase()];if(t!==void 0)return vm[t.toLowerCase()]}a(LJ,"getDefaultConfig");function lD(e){if(e==null){Zt.info(IJ);return}if(Ot===void 0){Zt.trace(OJ);return}let t=Hs[e.toLowerCase()];if(t!==void 0)return Ot[t.toLowerCase()]}a(lD,"getConfigValue");function uc(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return TA(vn.join(t,cs.HDB_CONFIG_FILE));let r=iD(e);return TA(r.get(cs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(uc,"getConfigFilePath");function xm(e=!1){if(Ot===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{Gr.accessSync(t,Gr.constants.F_OK|Gr.constants.R_OK)}catch(i){throw Zt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=uc(t),n;if(r.includes("config/settings.js"))try{dD(r);return}catch(i){if(i.code!==cs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Jo(r)}catch(i){if(i.code===cs.NODE_ERROR_CODES.ENOENT){Zt.trace(`HarperDB config file not found at ${r}.
|
|
10
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Zt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}MJ(n,r),RA(n);let s=n.toJSON();if(bJ.config=s,Ot=Yl(s),Ot.logging_rotation_rotate)for(let i in nD)Ot[i]&&Zt.error(`Config ${nD[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Zt.trace(NJ)}}a(xm,"initConfig");function MJ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],vn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],vn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(Zt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Gr.writeFileSync(t,String(e))}}a(MJ,"checkForUpdatedConfig");function RA(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 Kl.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 Kl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=SJ(r,t);if(n.error)throw Kl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(RA,"validateConfig");function vJ(e,t){Ot===void 0&&(Ot={});let r=Hs[e.toLowerCase()];if(r===void 0){Zt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(vJ,"updateConfigObject");function uD(e,t,r=void 0,n=!1,s=!1,i=!1){Ot===void 0&&xm();let o=lD(Hs.hdb_root),c=vn.join(o,cs.HDB_CONFIG_FILE),l=Jo(c),u;if(r&&Ot){let h=!1;for(let _ in r)if(r[_]!=Ot[_.toLowerCase()]){h=!0;break}if(!h){Zt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Mn.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=Hs[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),m=AA(h,t);l.setIn([..._],m)}else for(let h in r){let _=Hs[h.toLowerCase()];if(_===Mn.HTTP_SECUREPORT&&r[h]===Ot[Mn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Mn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===Ot[Mn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Mn.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let m=l.getIn(["threads"]);m>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],m))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let m=_.split("_"),S=cs.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,m=S.split("_"));let g=AA(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{m.length>1&&typeof l.getIn(m.slice(0,-1))=="boolean"&&l.deleteIn(m.slice(0,-1)),l.setIn([...m],g)}catch(y){Zt.error(y)}}}u&&cD(l,u),RA(l);let f=l.getIn(["rootPath"]),d=vn.join(f,cs.HDB_CONFIG_FILE);if(n===!0&&UJ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Gr.writeFileSync(d,String(l)),s&&(Ot=Yl(l.toJSON())),Zt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(uD,"updateConfigValue");function UJ(e,t){try{let r=vn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${cs.HDB_CONFIG_FILE}.bak`);Gr.copySync(e,r),Zt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Zt.error(wJ),Zt.error(r)}}a(UJ,"backupConfigFile");var xJ=["databases"];function Yl(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}),Um=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])&&!xJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Mn[l.toUpperCase()]&&Hs[l]&&(s[Hs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Yl,"flattenConfig");function AA(e,t){if(e===Mn.CLUSTERING_NODENAME||e===Mn.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(TJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.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 hr.autoCast(t)}a(AA,"castConfigValue");function BJ(){let e=hr.getPropsFilePath(),t=uc(e);return Jo(t).toJSON()}a(BJ,"getConfiguration");async function HJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return uD(void 0,void 0,s,!0),PJ}catch(i){throw typeof i=="string"||i instanceof String?RJ(i,i,yJ.BAD_REQUEST,void 0,void 0,!0):i}}a(HJ,"setConfiguration");function yA(){let e=hr.getPropsFilePath();try{Gr.accessSync(e,Gr.constants.F_OK|Gr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw Zt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=uc(e);return Jo(t).toJSON()}a(yA,"readConfigFile");function Jo(e){return sD.parseDocument(Gr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Jo,"parseYamlDoc");function kJ(){let e=yA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=rD(t);if(r)throw Kl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=rD(n);if(s)throw Kl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Kl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(kJ,"getClusteringRoutes");function dD(e){let t=iD(e);Ot={};for(let r in Hs){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Hs[r].toLowerCase();s===Mn.LOGGING_ROOT?Ot[s]=vn.dirname(n):Ot[s]=n}return Ot}a(dD,"initOldConfig");function FJ(e){let t=yA();return AJ.get(t,e.replaceAll("_","."))}a(FJ,"getConfigFromFile");async function GJ(e,t){let r=Jo(uc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Gr.writeFile(uc(),String(r))}a(GJ,"addConfig");function qJ(e){let t=uc(hr.getPropsFilePath()),r=Jo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=vn.join(n,cs.HDB_CONFIG_FILE);Gr.writeFileSync(s,String(r))}a(qJ,"deleteConfigFromFile");function $J(){return Um||(xm(),Um)}a($J,"getConfigObj");function VJ(){return Ot||xm(),Ot}a(VJ,"getFlatConfigObj")});var ce=C((ED,gD)=>{"use strict";var bA=require("fs-extra"),dc=require("path"),_D=require("os"),KJ=require("properties-reader"),rf=X(),tf=oe(),Le=(k(),P($)),Bm=Nt(),YJ="Error initializing environment manager",Hm="BOOT_PROPS_FILE_PATH",hD=!1,WJ={[Le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ji={};Object.assign(ED,gD.exports={BOOT_PROPS_FILE_PATH:Hm,getHdbBasePath:zJ,setHdbBasePath:QJ,get:mD,initSync:JJ,setProperty:We,initTestEnvironment:ZJ,setCloneVar:XJ});function zJ(){return ji[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(zJ,"getHdbBasePath");function QJ(e){ji[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(QJ,"setHdbBasePath");function mD(e){let t=Bm.getConfigValue(e);return t===void 0?ji[e]:t}a(mD,"get");function We(e,t){WJ[e]&&(ji[e]=t),Bm.updateConfigObject(e,t)}a(We,"setProperty");function jJ(){let e;try{e=tf.getPropsFilePath(),bA.accessSync(e,bA.constants.F_OK|bA.constants.R_OK),hD=!0;let t=KJ(e);return ji[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),ji[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ji[Hm]=e,!0}catch{return rf.trace(`Environment manager found no properties file at ${e}`),!1}}a(jJ,"doesPropFileExist");function JJ(e=!1){try{((hD||jJ()||tf.noBootFile())&&!pD||e)&&(Bm.initConfig(e),ji[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Bm.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){rf.error(YJ),rf.error(t),console.error(t),process.exit(1)}}a(JJ,"initSync");var pD=!1;function XJ(e){pD=e}a(XJ,"setCloneVar");function ZJ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=dc.join(__dirname,"../../","unitTests");ji[Hm]=dc.join(l,"hdb_boot_properties.file"),We(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,dc.join(l,"settings.test")),We(Le.HDB_SETTINGS_NAMES.INSTALL_USER,_D.userInfo()?_D.userInfo().username:void 0),We(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),We(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,dc.join(l,"envDir","log")),We(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),We(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),We(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),We(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,dc.join(l,"envDir")),We(Le.CONFIG_PARAMS.STORAGE_PATH,dc.join(l,"envDir")),s&&(We(Le.CONFIG_PARAMS.HTTP_SECUREPORT,mD(Le.CONFIG_PARAMS.HTTP_PORT)),We(Le.CONFIG_PARAMS.HTTP_PORT,null)),We(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),We(Le.CONFIG_PARAMS.HTTP_PORT,9926),We(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),We(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),We(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,tf.isEmpty(i)?!1:i),We(Le.CONFIG_PARAMS.HTTP_CORS,tf.isEmpty(i)?!1:i),We(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),We(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),We(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),We(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),We(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,dc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),We(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,tf.isEmpty(c)?!1:c),o&&(We("CORS_ACCESSLIST",o),We(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(We(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),We(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(We(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),We(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(We(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),We(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Hm}. Please check your boot props and settings files`;rf.fatal(r),rf.error(t)}}a(ZJ,"initTestEnvironment")});var Et=C((dAe,OD)=>{"use strict";var cf=(k(),P($)),e4=oe(),cn=ce(),lf=require("path"),t4=require("minimist"),SD=require("fs-extra"),TD=require("lodash");cn.initSync();var{CONFIG_PARAMS:Xo,DATABASES_PARAM_CONFIG:nf,SYSTEM_SCHEMA_NAME:km}=cf,sf,of,af;function AD(){if(sf!==void 0)return sf;if(cn.getHdbBasePath()!==void 0)return sf=cn.get(Xo.STORAGE_PATH)||lf.join(cn.getHdbBasePath(),cf.DATABASES_DIR_NAME),sf}a(AD,"getBaseSchemaPath");function RD(){if(of!==void 0)return of;if(cn.getHdbBasePath()!==void 0)return of=bD(km),of}a(RD,"getSystemSchemaPath");function yD(){if(af!==void 0)return af;if(cn.getHdbBasePath()!==void 0)return af=cn.get(cf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||lf.join(cn.getHdbBasePath(),cf.TRANSACTIONS_DIR_NAME),af}a(yD,"getTransactionAuditStoreBasePath");function r4(e,t){let r=cn.get(Xo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||lf.join(yD(),e.toString())}a(r4,"getTransactionAuditStorePath");function bD(e,t){e=e.toString(),t=t&&t.toString();let r=cn.get(cf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||lf.join(AD(),e)}a(bD,"getSchemaPath");function n4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,t4(process.argv));let n=r[Xo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!e4.isObject(n))throw o;i=n}for(let o of i){let c=o[km];if(!c)continue;let l=cn.get(Xo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[nf.PATH];if(u)return TD.set(l,[km,nf.TABLES,t,nf.PATH],u),cn.setProperty(Xo.DATABASES,l),u;let f=c?.[nf.PATH];if(f)return TD.set(l,[km,nf.PATH],f),cn.setProperty(Xo.DATABASES,l),f}}let s=r[Xo.STORAGE_PATH.toUpperCase()];if(s){if(!SD.pathExistsSync(s))throw new Error(s+" does not exist");let i=lf.join(s,e);return SD.mkdirsSync(i),cn.setProperty(Xo.STORAGE_PATH,s),i}return RD()}a(n4,"initSystemSchemaPaths");function s4(){sf=void 0,of=void 0,af=void 0}a(s4,"resetPaths");OD.exports={getBaseSchemaPath:AD,getSystemSchemaPath:RD,getTransactionAuditStorePath:r4,getTransactionAuditStoreBasePath:yD,getSchemaPath:bD,initSystemSchemaPaths:n4,resetPaths:s4}});var ln=C((mAe,PD)=>{"use strict";var i4=Ln().LMDB_ERRORS_ENUM,_Ae=require("lmdb"),o4=Ht(),hAe=require("buffer").Buffer,{OVERFLOW_MARKER:ND,MAX_SEARCH_KEY_LENGTH:Fm}=o4,wD=["number","string","symbol","boolean","bigint"];function a4(e){if(e=e?.primaryStore||e,!e)throw new Error(i4.ENV_REQUIRED)}a(a4,"validateEnv");function c4(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(c4,"stringifyData");function l4(e){return e instanceof Date?e.valueOf():e}a(l4,"convertKeyValueToWrite");function u4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(wD.includes(typeof e))return e.length>Fm?[e.slice(0,Fm)+ND]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(wD.includes(typeof i))i.length>Fm?r.push(i.slice(0,Fm)+ND):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(u4,"getIndexedValues");var Gm=0,ID=0;function CD(){ID=Date.now()-performance.now()}a(CD,"adjustStartTime");CD();var d4=6e4;setInterval(CD,d4).unref();function f4(){let e=performance.now()+ID;return e>Gm?(Gm=e,e):(Gm+=488e-6,Gm)}a(f4,"getNextMonotonicTime");PD.exports={validateEnv:a4,stringifyData:c4,convertKeyValueToWrite:l4,getNextMonotonicTime:f4,getIndexedValues:u4}});var uf=C((EAe,DD)=>{"use strict";var _4=(k(),P($)).OPERATIONS_ENUM,OA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=_4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};DD.exports=OA});var df=C((TAe,UD)=>{"use strict";var SAe=uf(),qm=(k(),P($)),NA=oe(),LD=X(),h4=require("uuid"),{handleHDBError:$m,hdb_errors:m4}=pe(),{HDB_ERROR_MSGS:Vm,HTTP_STATUS_CODES:Km}=m4;UD.exports=MD;function MD(e,t,r){for(let s=0;s<t.length;s++)vD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];p4(i,r,e.operation)}}a(MD,"processRows");MD.validateAttribute=vD;function vD(e){if(Buffer.byteLength(String(e))>qm.INSERT_MAX_CHARACTER_SIZE)throw $m(new Error,Vm.ATTR_NAME_LENGTH_ERR(e),Km.BAD_REQUEST,void 0,void 0,!0);if(NA.isEmptyOrZeroLength(e)||NA.isEmpty(e.trim()))throw $m(new Error,Vm.ATTR_NAME_NULLISH_ERR,Km.BAD_REQUEST,void 0,void 0,!0)}a(vD,"validateAttribute");function p4(e,t,r){if(!e.hasOwnProperty(t)||NA.isEmptyOrZeroLength(e[t])){if(r===qm.OPERATIONS_ENUM.INSERT||r===qm.OPERATIONS_ENUM.UPSERT){e[t]=h4.v4();return}throw LD.error("Update transaction aborted due to record with no hash value:",e),$m(new Error,Vm.RECORD_MISSING_HASH_ERR,Km.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>qm.INSERT_MAX_CHARACTER_SIZE)throw LD.error(e),$m(new Error,Vm.HASH_VAL_LENGTH_ERR,Km.BAD_REQUEST,void 0,void 0,!0)}a(p4,"validateHash")});var xD,Un,wA,Wl=ye(()=>{xD=require("events"),Un=class extends xD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new wA;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)}},wA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function $D(e){CA=e}function T4(){S4=setInterval(function(){for(let e of IA)if(e.stale){let t=e.getContext()?.url;FD.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},g4).unref()}var PA,kD,FD,GD,qD,BD,IA,E4,ff,HD,CA,fc,Ym,g4,S4,Wm=ye(()=>{PA=M(ln()),kD=M(pe()),FD=M(X()),GD=M(ce());k();qD=M(oe()),BD=100,IA=new Set,E4=(0,qD.convertToMS)(GD.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a($D,"replicationConfirmation");fc=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),IA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(IA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(ff&&!this.overloadChecked&&performance.now()-HD>E4)throw new kD.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,PA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let m=this.writes[_];m&&(m.before||m.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let m;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let y=g[_===0?"before":"beforeIntermediate"];if(y){let E=y();m?m.push?m.push(E):m=[m,E]:m=E}}m&&await(m.push?Promise.all(m):m)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.doneWriting?2:1;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<BD>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return ff||(ff=s,HD=performance.now(),ff.then(()=>{ff=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];CA&&_&&i.push(CA(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+BD/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},Ym=class extends fc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,PA.getNextMonotonicTime)())}getReadTxn(){}},g4=3e4;a(T4,"startMonitoringTxns");T4()});function wt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new fc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var VD,_c=ye(()=>{VD=M(ui());Wm();a(wt,"transaction");(0,VD._assignPackageExport)("transaction",wt);wt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};wt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function LA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let m=e[_],S=u(m);d=d.concat(S)}let h=new Set;return d.filter(_=>{let m=_.key??_;return h.has(m)?!1:(h.add(m),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?LA(d.conditions,d.operator,r,n,s,i,o,c):jl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((m,S)=>{if(m.conditions){let E=m.operator==="or",T=f(m.conditions,!E,_);return E?(N,x)=>T.some(H=>H(N,x)):(N,x)=>T.every(H=>H(N,x))}let g=(m.attribute||m[0])===r.primaryKey,y=mf(m,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=C4(r.primaryStore,m.estimated_count,_)),y}).filter(Boolean)}a(f,"mapConditionsToFilters")}function jl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new dn.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],T=mi(n.attributes,E);if(T.relationship){if(o.length<2)throw new dn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let N=T.definition?.tableClass||T.elements?.definition?.tableClass,x=new Map,H=jl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,N,s,x);if(T.relationship.to){i[o[0]]=x;let q=!!mi(N.attributes,T.relationship.to)?.elements;H=O4(H,T,N.primaryStore,q,x)}if(T.relationship.from){let q=a(Q=>(Q?.key!==void 0&&(Q=Q.key),jl({attribute:T.relationship.from,value:Q},t,r,n,s,x)),"searchEntry");T.elements?(i[o[0]]=x,H=N4(H,T,N.primaryStore,x,q)):H=H.flatMap(q)}return H}else if(o.length===1)o=o[0];else throw new dn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(MA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=hi.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new dn.ClientError(`Unknown query comparator "${l}"`)}let m,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>ls.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,h=!1,m=mf(e,n,null,i,S)),typeof f=="string"&&f.length>ls.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,d=!0,m=m??mf(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new dn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new dn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new dn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new dn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(m=m??mf(e,n,null,i,S),!m)throw new dn.ClientError(`Unknown search operator ${e.comparator}`)}let y={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(y).map(m?function({key:T,value:N}){return this?.isSync?N&&m(N)?T:Zo.SKIP:new Promise((x,H)=>setImmediate(()=>{try{x(N&&m(N)?T:Zo.SKIP)}catch(q){H(q)}}))}:T=>T.value==null&&!(T.metadataFlags&(fn|ta))?Zo.SKIP:T);return E.hasEntries=!0,E}else return g?g.getRange(y).map(m?function({key:E,value:T}){let N;return typeof E=="string"&&E.length>ls.MAX_SEARCH_KEY_LENGTH?N=n.primaryStore.get(T):N={[o]:E},this.isSync?m(N)?T:Zo.SKIP:new Promise((x,H)=>setImmediate(()=>{try{x(m(N)?T:Zo.SKIP)}catch(q){H(q)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:T}){return this.isSync?T&&m(T)?E:Zo.SKIP:new Promise((N,x)=>setImmediate(()=>{try{N(T&&m(T)?E:Zo.SKIP)}catch(H){x(H)}}))})}function mi(e,t){if(Array.isArray(t))if(t.length>1){let r=mi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?mi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function O4(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function N4(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function mf(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=mi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],m=mf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!m)return;if(_){_.filters||(_.filters=[]),_.filters.push(m);return}let S=t.propertyResolvers?.[f],g,y=a((E,T)=>{let N,x;if(S){if(S.from&&m.idFilter){if(!g)if(m.idFilter.idSet?.size===1){for(let q of m.idFilter.idSet)e={attribute:S.from,value:q};g=u(S.from,m.idFilter,!0,!0)}else g=u(S.from,m.idFilter,!1,!0);let H=g(E);return g.idFilter&&(y.idFilter=g.idFilter),H}x=S(E,r,T),N=x?.value}else N=E[f];return N?Array.isArray(N)?N.some(m):m(N,x):!1},"recordFilter");return y}}switch(l instanceof Date&&(l=l.getTime()),MA[o]||o){case ls.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,hi.compareKeys)(f,l[0])>=0&&(0,hi.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,hi.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,hi.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,hi.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,hi.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,hi.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new dn.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let m;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&Qm(t)(e),m=e.estimated_count>>4,(isNaN(m)||m>=i)&&(h=!1));let S=0,g=3;function y(E){let T=E[f],N;if(typeof T!="object"||!T||_?N=d(T):Array.isArray(T)?N=T.some(d):T instanceof Date&&(N=d(T.getTime())),h&&(g++,!N&&!y.idFilter&&++S/g*(i-g)>m)){let x=jl(e,r.transaction.getReadTxn(),!1,t).map(Jl),H=new Set(x);y.idFilter=q=>H.has(Jl(q)),y.idFilter.idSet=H}return N}return a(y,"recordFilter"),s&&(y.idFilter=d),y}a(u,"attributeComparator")}function Qm(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Ji(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=MA[n]||n,n===ls.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=mi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Qm(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Ji(e.indices[i.relationship.from])/(Ji(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Ji(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=y4*Ji(e.primaryStore)+1:n==="between"?r.estimated_count=R4*Ji(e.primaryStore)+1:n==="sort"?r.estimated_count=Ji(e.primaryStore)+1:r.estimated_count=A4*Ji(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function jm(e){if(e)if(ea=e,zl.lastIndex=0,w4.test(e))try{let t=_f(new Ql,"");if(un!==ea.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${un} in '${ea}'`,t}else return new URLSearchParams(e)}function _f(e,t){let r=zl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(ea);){un=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=KD}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=hf(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=b4[d],l=DA[i]?KD:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=hf(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let m={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&YD(m,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(m),S.operator=u}else zm(e,u),e.conditions.push(m)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(hf(f)),s=void 0;break;case"(":zl.lastIndex=un;let _=_f(f?[]:new Ql,")");switch(f){case"":zm(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=WD(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}ea[un]===","?r.lastIndex=++un:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");zl.lastIndex=un,h=_f([],"}"),h.name=f,e.push(h),ea[un]===","?r.lastIndex=++un:o=!0;break;case"[":zl.lastIndex=un,f?(h=_f(new Ql,"]"),h.name=f):h=_f(e.conditions?new Ql:[],"]"),e.conditions?(zm(e,u),e.conditions.push(h),s=null):e.push(h),ea[un]===","?r.lastIndex=++un:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let m={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&YD(m,f),zm(e,u),e.conditions.push(m)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(hf(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?I4:zl,r.lastIndex=un),un===ea.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function zm(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function hf(e){return e.indexOf(".")>-1?e.split(".").map(hf):decodeURIComponent(e)}function KD(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new dn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function YD(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new dn.ClientError("wildcard can only be used at the end of a string")}function WD(e){let t=zD(e[0]);return e.length>1&&(t.next=WD(e.slice(1))),t}function zD(e){if(Array.isArray(e)){let t=zD(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Jl(e){return Array.isArray(e)?e.join("\0"):e}function Ji(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function C4(e,t,r){return t*r/Ji(e)}var dn,ls,hi,Zo,A4,R4,y4,b4,DA,MA,w4,zl,I4,un,ea,Ql,hc,pf=ye(()=>{dn=M(pe()),ls=M(Ht()),hi=require("ordered-binary"),Zo=require("lmdb");Ef();A4=.3,R4=.1,y4=.05,b4={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},DA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(LA,"executeConditions");a(jl,"searchByIndex");a(mi,"findAttribute");a(O4,"joinTo");a(N4,"joinFrom");MA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(mf,"filterByType");a(Qm,"estimateCondition");w4=/[()[\]|!<>.]|(=\w*=)/,zl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,I4=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(jm,"parseQuery");a(_f,"parseBlock");a(zm,"assignOperator");a(hf,"decodeProperty");a(KD,"typedDecoding");a(YD,"wildcardDecoding");a(WD,"toSortObject");a(zD,"toSortEntry");Ql=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Jl,"flattenKey");a(Ji,"estimatedEntryCount");a(C4,"intersectionEstimate");hc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var UA={};xe(UA,{MultiPartId:()=>Xm,Resource:()=>qr,snake_case:()=>D4,transformForSelect:()=>Zm});function D4(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function QD(e,t){if(mc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(mc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Xm;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){mc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return mc=!0,null;e[e.length-1]==="/"&&(mc=!0)}return t.coerceId(decodeURIComponent(e))}function xn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string")if(this.directURLMapping)c=c.slice(1);else{let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let m=this.parsePath(c,o,l);m?.id!==void 0?(m.query&&(l?l=Object.assign(m.query,l):l=m.query),u=m.isCollection,c=m.id):c=m}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new hc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return wt(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let m=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(m?.then)return m.then(S=>{if(!S)throw new Jm(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!m)throw new Jm(o.user)}return typeof f?.then=="function"?f.then(m=>e(_,l,o,m)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function Bn(e,t){let r=new XD.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 vA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Zm(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):vA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(vA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(vA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(m=>u[h.name||h]=m))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=Zm(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var jD,JD,XD,P4,qr,Jm,mc,Xm,ra=ye(()=>{jD=require("crypto");Wl();JD=M(ui()),XD=M(pe());_c();pf();P4={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=xn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Zm(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=xn(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Bn(t,"put")},{hasContent:!0,type:"update"});static patch=xn(function(t,r,n,s){return t.patch?t.patch(s,r):Bn(t,"patch")},{hasContent:!0,type:"update"});static delete=xn(function(t,r,n,s){return t.delete?t.delete(r):Bn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,jD.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),wt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Bn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=xn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Bn(t,"delete")},{hasContent:!1,type:"update"});static post=xn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=xn(function(t,r,n,s){return t.connect?t.connect(s,r):Bn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=xn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Bn(t,"subscribe")},{type:"read"});static publish=xn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):Bn(t,"publish")},{hasContent:!0,type:"create"});static search=xn(function(t,r,n,s){let i=t.search?t.search(r):Bn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Zm(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=xn(function(t,r,n,s){return t.search?t.search(s,r):Bn(t,"search")},{hasContent:!0,type:"read"});static copy=xn(function(t,r,n,s){return t.copy?t.copy(s,r):Bn(t,"copy")},{hasContent:!0,type:"create"});static move=xn(function(t,r,n,s){return t.move?t.move(s,r):Bn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;Bn(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return jm(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&P4[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:QD(t,this),isCollection:mc}}let i=QD(t,this);return mc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new Un}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Un}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,JD._assignPackageExport)("Resource",qr);a(D4,"snake_case");Jm=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(QD,"pathToId");Xm=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(xn,"transactional");a(Bn,"missingMethod");a(vA,"selectFromObject");a(Zm,"transformForSelect")});var na,xA=ye(()=>{na=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var tL={};xe(tL,{Resources:()=>ep,keyArrayToString:()=>Xl,resetResources:()=>L4,resources:()=>us});function L4(){return us=new ep,Ke.resources=us,us}function Xl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ZD,eL,ep,us,Zl=ye(()=>{_c();xA();ZD=M(X()),eL=M(pe());Pr();ep=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new eL.ServerError(`Conflicting paths for ${t}`);ZD.default.error(c),i.Resource=new na(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),f=this.get(u),d=-1;if(!f&&n===o&&(d=u.indexOf("?",s),d!==-1)){let h=u.slice(0,d);f=this.get(h)}if(f&&(!r||f.exportTypes?.[r]!==!1)){if(f.relativeURL=t.slice(d!==-1?d:n),!f.hasSubPaths)return f;i=f}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return wt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(L4,"resetResources");a(Xl,"keyArrayToString")});var BA=C((KAe,rL)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:f,spawn:d}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:h}=pt(),_=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],m="ts-build";if(u){let y=!1,E=!1;if(E=s(n(h,m))){let T=new Set;e.sync(_.map(N=>`${N}/**/*.ts`),{cwd:h}).forEach(N=>{let x=0,H=0;try{T.add(N),x=i(n(h,N)).mtimeMs-5e3,H=i(n(h,m,N.replace(/.ts$/,".js"))).mtimeMs}catch{}x>H&&(y=!0)}),e.sync(_.map(N=>`${N}/**/*.js`),{cwd:n(h,m)}).forEach(N=>{if(!T.has(N.replace(/.js$/,".ts")))try{l(n(h,m,N))}catch{}})}else y=!0;if(y){console.log("Compiling TypeScript...");let T=f("npx",["tsc"],{cwd:h});if(T.stdout?.length&&console.log(T.stdout.toString()),T.stderr?.length&&console.log(T.stderr.toString()),E){let N=n(t(),"harperdb-tsc.pid"),x=!1;if(s(N))try{process.kill(+o(N,"utf8"),0),x=!0}catch{}if(!x){console.log("Starting background TypeScript compilation...");let H=d("npx",["tsc","--watch"],{detached:!0,cwd:h,stdio:"ignore"});H.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),H.pid&&c(N,String(H.pid),"utf-8"),H.unref()}}}}let S=rL.constructor,g=S._findPath;S._findPath=function(y,E,T){if(y.startsWith(".")&&!T&&E.length===1&&E[0].startsWith(h)&&!E[0].includes("node_modules")){let N=r(h,E[0]),x;N.startsWith(m)?x=n(h,r(m,N)):x=n(h,m,N);let H=n(x,y),q=H+".js";if(s(q))return q;if(H.includes(".")&&s(H))return H}return g(y,E,T)}}});var FA={};xe(FA,{loadGQLSchema:()=>U4,start:()=>kA,startOnMainThread:()=>v4});function kA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],m;for(let y of d.definitions)switch(y.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(Q){if(Q.kind==="NonNullType"){let W=H(Q.type);return W.nullable=!1,W}if(Q.kind==="ListType")return{type:"array",elements:H(Q.type)};let se={type:Q.name?.value};return Object.defineProperty(se,"location",{value:Q.loc.startToken}),se};a(H,"getProperty");let E=y.name.value,T=[],N={table:null,database:null,properties:T};h.set(E,N);for(let Q of y.directives){if(Q.name.value==="table"){for(let se of Q.arguments)N[se.name.value]=se.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=E),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,_.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 se of Q.arguments)typeof N.export!="object"&&(N.export={}),N.export[se.name.value]=se.value.value}}let x=!1,q={};for(let Q of y.fields){let te=H(Q.type);te.name=Q.name.value,T.push(te),q[te.name]=void 0;for(let se of Q.directives){let W=se.name.value;if(W==="primaryKey")x?console.warn("Can not define two attributes as a primary key at",se.loc):(te.isPrimaryKey=!0,x=!0);else if(W==="indexed")te.indexed=!0;else if(W==="computed"){for(let ne of se.arguments||[])if(ne.name.value==="from"){let ue=ne.value.value;te.computed={from:g(ue,ne,q)},te.version==null&&(te.version=ue)}else ne.name.value==="version"&&(te.version=ne.value.value);te.computed=te.computed||!0}else if(W==="relationship"){let ne={};for(let ue of se.arguments)ne[ue.name.value]=ue.value.value;te.relationship=ne}else if(W==="createdTime")te.assignCreatedTime=!0;else if(W==="updatedTime")te.assignUpdatedTime=!0;else if(W==="expiresAt")te.expiresAt=!0;else if(W==="allow"){let ne=te.authorizedRoles=[];for(let ue of se.arguments)ue.name.value==="role"&&ne.push(ue.value.value)}else server.knownGraphQLDirectives.includes(W)&&console.warn(`@${W} is an unknown directive, at`,se.loc)}}N.type=E,E==="Query"&&(m=N)}function S(y){let E=h.get(y.type);E?(Object.defineProperty(y,"properties",{value:E.properties}),Object.defineProperty(y,"definition",{value:E})):y.type==="array"?S(y.elements):M4.includes(y.type)||(0,sL.getWorkerIndex)()===0&&console.error(`The type ${y.type} is unknown at line ${y.location.line}, column ${y.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let y of h.values())for(let E of y.properties)S(E);for(let y of _)y.tableClass=e(y),y.export&&(y.export.name===""?i.set((0,HA.dirname)(n),y.tableClass):i.set((0,HA.dirname)(n)+"/"+(y.export.name||y.type),y.tableClass,y.export));function g(y,E,T){return new nL.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${y}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(T)}a(g,"createComputedFrom")}}var HA,nL,sL,M4,v4,U4,iL=ye(()=>{HA=require("path"),nL=require("node:vm");Ue();sL=M(nt()),M4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(kA,"start");v4=kA,U4=kA({ensureTable:ft}).handleFile});var fL={};xe(fL,{parse:()=>qA,streamAsJSON:()=>gf,stringify:()=>pc});function gf(e){return new GA({value:e})}function oL(e){return console.error(e),JSON.stringify(e.toString())}function aL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function pc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===uL)return dL(e);if(t.resolution)return t.resolution.then(()=>pc(e));throw t}}function dL(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+=dL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+pc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function qA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),H4.test(e)?x4.parse(e):JSON.parse(e)):null}var cL,lL,x4,B4,uL,GA,H4,$A=ye(()=>{cL=require("stream"),lL=M(require("json-bigint-fixes")),x4=(0,lL.default)({useNativeBigInt:!0}),B4=1e4,uL={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw uL};a(gf,"streamAsJSON");GA=class extends cL.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),oL)}catch(s){yield oL(s)}else yield pc(t)}else yield pc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);aL(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>B4?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 aL(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(oL,"handleError");a(aL,"when");a(pc,"stringify");a(dL,"jsStringify");H4=/[[,:]\s*-?\d{16,}/;a(qA,"parse")});var pi=C(rp=>{var tp=X();for(let e of["trace","debug","info","warn","error","fatal","notify"])tp.logsAtLevel(e)&&(rp[e]=tp[e]);rp.loggerWithTag=e=>tp.loggerWithTag(e,!0);rp.setLogLevel=tp.setLogLevel});var fp={};xe(fp,{Blob:()=>gi,blobsWereEncoded:()=>Ec,databasePaths:()=>KA,decodeBlobsWithWrites:()=>dp,decodeFromDatabase:()=>gc,decodeWithBlobCallback:()=>yf,deleteBlob:()=>cp,deleteBlobsInObject:()=>sa,deleteRootBlobPathsForDB:()=>zA,encodeBlobsAsBuffers:()=>z4,encodeBlobsWithFilePath:()=>up,findBlobsInObject:()=>tu,getFileId:()=>lp,getFilePathForBlob:()=>AL,getRootBlobPathsForDB:()=>Rf,setDeletionDelay:()=>q4});function gL(){}function cp(e){let t=AL(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&Xi.default.debug?.("Error trying to remove blob file",r)})},SL)}function q4(e){SL=e}function TL(e){let t=_n.get(e);if(!t)t={storageIndex:0,fileId:null,store:hn},_n.set(e,t);else{if(t.saving)return t;t.store=hn}return V4(t),t.source?VA(e,t.source,t):t.contentBuffer?$4(e,t):VA(e,Tf.Readable.from(e.stream()),t),t}function VA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,je.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.end(Buffer.concat([m(BigInt(g.length)+0xff000000000000n),g]));return}let h=!1;e.size!==void 0&&(d.write(m(e.size)),h=!0);let _;o?(h||d.write(F4),_=(0,op.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(k4),t.pipe(d)),t.on("error",S);function m(g){let y=BigInt(g),E=new Uint8Array(mr),T=new DataView(E.buffer);return y|=BigInt(o?WA:EL)<<48n,T.setBigInt64(0,y),E}a(m,"createHeader");function S(g){i.unlock(f,0);let y=d.fd;g?(y&&(0,je.close)(y),u(g)):c?(0,je.fdatasync)(y,E=>{E&&u(E),l(),(0,je.close)(y)}):(l(),(0,je.close)(y))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-mr;e.size=g,(0,je.write)(d.fd,m(g),0,mr,0,S)}})}),e}function lp(e){return _n.get(e)?.fileId}function AL(e){let t=_n.get(e);return t?.fileId&&Af(t)}function Rf(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=KA.get(e);if(!t){if(!e.databaseName)return Xi.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,ap.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,eo.join)(n,e.databaseName)):t=[(0,eo.join)((0,ap.getHdbBasePath)(),"blobs",e.databaseName)],KA.set(e,t)}return t}async function zA(e){let t=Rf(e);t&&await Promise.all(t.map(r=>RL(r)))}async function RL(e){if((0,je.existsSync)(e)){for(let t of await(0,ds.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await RL((0,eo.join)(e,t.name));else try{await(0,ds.unlink)((0,eo.join)(e,t.name))}catch(r){Xi.default.warn?.("Error deleting file",r)}try{await(0,ds.rmdir)(e)}catch(t){Xi.default.warn?.("Error deleting directory",t)}}}function Af({storageIndex:e,fileId:t,store:r}){let n=Rf(r);return(0,eo.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 $4(e,t){let r=t.contentBuffer,n=r.length;if(!(n<pL))return e.size=n,VA(e,Tf.Readable.from([r]),t)}function V4(e){let t=Rf(e.store),r=K4(),n=t?.length>1?Y4(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Af(e),o=(0,eo.dirname)(i);(0,je.existsSync)(o)||(0,YA.ensureDirSync)(o),e.filePath=i}function K4(){let e=mL.get(hn);if(!e){let t=0,r=Rf(hn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,eo.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(hn.getUserSharedBuffer("blob-file-id",e.buffer)),mL.set(hn,e)}return Number(Atomics.add(e,0,1n))}function Y4(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(ip);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,W4(e)),e.frequencyTable[t%ip]}async function W4(e){if(!ds.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,ds.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,YA.ensureDirSync)(s),o=await(0,ds.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(ip),n=t.map(s=>1/s);for(let s=0;s<ip;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function up(e,t,r){eu=t,hn=r,Ec=!1;try{return e()}finally{eu=void 0,hn=void 0}}function z4(e){Dr=[];let t;try{t=e()}catch(n){throw Dr=void 0,n}let r=Dr.length<2?Dr[0]:Promise.all(Dr);return Dr=void 0,r?r.then(()=>e()):t}function dp(e,t){try{Dr=[],Zi=t,e()}catch(n){throw Zi=void 0,Dr=void 0,n}Zi=void 0;let r=Dr.length<2?Dr[0]:Promise.all(Dr);return Dr=void 0,r}function yf(e,t,r){hn=r;try{return Zi=t,e()}finally{Zi=void 0}}function gc(e,t){return hn=t,e()}function sa(e){tu(e,t=>{cp(t)})}function tu(e,t){if(e instanceof gi)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&tu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&tu(e[r],t)}}function Q4(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Ei,ds,je,op,Tf,YA,ap,eo,Xi,pL,mr,EL,WA,_L,k4,F4,hL,_n,Zi,gi,eu,Dr,hn,Ec,Sf,np,G4,sp,SL,KA,mL,ip,fs=ye(()=>{Ei=require("msgpackr"),ds=require("node:fs/promises"),je=require("node:fs"),op=require("node:zlib"),Tf=require("node:stream"),YA=require("fs-extra"),ap=M(ce());k();eo=require("path"),Xi=M(pi());to();pL=8192,mr=8,EL=0,WA=1,_L=255,k4=new Uint8Array([0,EL,255,255,255,255,255,255]),F4=new Uint8Array([0,WA,255,255,255,255,255,255]),hL=0xffffffffffff,_n=new WeakMap,gi=global.Blob||Q4(),Ec=!1,Sf=new Uint8Array(8),np=new DataView(Sf.buffer),G4=6e4;a(gL,"InstanceOfBlobWithNoConstructor");gL.prototype=gi.prototype;sp=class e extends gL{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=_n.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(jA()&&QA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=_n.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=Af(t),o,c=a(async()=>{let l,u=mr;try{if(l=await(0,ds.readFile)(i),l.length>=mr){l.copy(Sf,0,0,mr);let d=np.getBigUint64(0);if(Number(d>>48n)===_L)throw new Error("Error in blob: "+buffer.subarray(mr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<hL&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error("Incomplete blob");return new Promise((m,S)=>{if(h.attemptLock(_,0,()=>(o=!0,m(c()))))return o=!0,h.unlock(_,0),m(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===WA?new Promise((d,h)=>{(0,op.deflate)(l.subarray(mr),(_,m)=>{_?h(_):d(f(m))})}):f(l.subarray(mr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=_n.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(S){S.enqueue(r),S.close()}});let i=Af(t),o,c=0,l=0,u,f,d,h=!1,_=this;return new ReadableStream({start(){let S=1e3,g=a((y,E)=>{(0,je.open)(i,"r",(T,N)=>{if(T){if(T.code==="ENOENT"&&d!==!1&&(Xi.default.debug?.("File does not exist yet, waiting for it to be created",i,S),S-- >0))return setTimeout(()=>{m(),g(y,E)},20).unref();E(T),_.#e?.forEach(x=>x(T))}else o=N,y(N)})},"openFile");return new Promise(g)},pull:a(S=>{let g=0,y=100;return new Promise(a(function E(T,N){function x(q){(0,je.close)(o),clearTimeout(f),u&&u.close(),N(q),_.#e?.forEach(Q=>Q(q))}a(x,"onError");let H=Buffer.allocUnsafe(262144);(0,je.read)(o,H,0,H.length,c,(q,Q,te)=>{if(l+=Q,q)return x(q);if(c===0){if(Q<mr){y-- >0&&d!==!1?(m(),Xi.default.debug?.("File was empty, waiting for data to be written",i,y),setTimeout(()=>E(T,N),20).unref()):(Xi.default.debug?.("File was empty, throwing error",i,y),N(new Error(`Blob ${t.fileId} was empty`)));return}te.copy(Sf,0,0,mr);let se=np.getBigUint64(0);if(Number(se>>48n)===_L)return x(new Error("Error in blob: "+te.subarray(mr)));if(g=Number(se&0xffffffffffffn),g<hL&&_.size!==g&&(_.size=g,_.#t))for(let W of _.#t)W(g);te=te.subarray(mr,Q),l-=mr}else if(Q===0){let se=Buffer.allocUnsafe(8);return(0,je.read)(o,se,0,mr,0,W=>{if(W)return x(W);if(Sf.set(se),g=Number(np.getBigUint64(0)&0xffffffffffffn),g>l){m()?u?f=setTimeout(()=>{x(new Error("File read timed out"))},G4).unref():(u=(0,je.watch)(i,{persistent:!1},()=>{u.close(),u=null,f&&(clearTimeout(f),f=null,E(T,N))}),E(T,N)):h?x(new Error("Blob is incomplete")):(h=!0,E(T,N));return}(0,je.close)(o),S.close(),T()})}else te=te.subarray(0,Q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=Q,E(T,N);s&&l>=s&&(l>s&&(te=te.subarray(0,s-c)),l=g=s),n&&n>c&&(te=te.subarray(n-c))}c+=Q;try{S.enqueue(te)}catch(se){return Xi.default.debug?.("Error enqueuing chunk",se),T()}l===g&&((0,je.close)(o),S.close()),T()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(f),u&&u.close()}});function m(){if(d===void 0){let S=t.store,g=t.fileId+":blob";d=!S.attemptLock(g,0,()=>{d=!1}),d||S.unlock(g,0)}return d}}slice(t,r,n){let s=_n.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};_n.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};_n.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(hn=t?.primaryStore?.rootStore,!hn)throw new Error("No target table specified");return TL(this).saving??Promise.resolve()}},SL=500;a(cp,"deleteBlob");a(q4,"setDeletionDelay");global.createBlob=function(e,t){let r=new sp(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(_n.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Tf.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Tf.Readable.from(e);else throw new Error("Invalid source type");return r};a(TL,"saveBlob");a(VA,"writeBlobWithStream");a(lp,"getFileId");a(AL,"getFilePathForBlob");KA=new Map;a(Rf,"getRootBlobPathsForDB");a(zA,"deleteRootBlobPathsForDB");a(RL,"rimrafSteadily");a(Af,"getFilePath");a($4,"writeBlobWithBuffer");a(V4,"generateFilePath");mL=new Map;a(K4,"getNextFileId");ip=128;a(Y4,"getNextStorageIndex");a(W4,"createFrequencyTableForStoragePaths");a(up,"encodeBlobsWithFilePath");a(z4,"encodeBlobsAsBuffers");a(dp,"decodeBlobsWithWrites");a(yf,"decodeWithBlobCallback");a(gc,"decodeFromDatabase");a(sa,"deleteBlobsInObject");a(tu,"findBlobsInObject");(0,Ei.addExtension)({Class:gi,type:11,unpack:a(function(e){let t=(0,Ei.unpack)(e),r=new sp;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(_n.set(r,{storageIndex:t[1],fileId:t[2],store:hn}),Zi)return Zi(r)??r;if(!hn)throw new Error("No store specified, cannot load blob from storage")}else _n.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=_n.get(e);if(eu!==void 0&&(Ec=!0,t?.recordId!==void 0&&t.recordId!==eu))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<pL)return r.size=t.contentBuffer.length,(0,Ei.pack)([r,t.contentBuffer])}if(eu!==void 0){if(t=TL(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=eu,(0,Ei.pack)([r,t.storageIndex,t.fileId])}if(t){if(Zi)return Zi(e),(0,Ei.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,je.readFileSync)(Af(t));if(n.length>=mr&&(n.copy(Sf,0,0,mr),Number(np.getBigUint64(0)&0xffffffffffffn)===n.length-mr))return Buffer.concat([(0,Ei.pack)([r]),n]);if(Dr)Dr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Dr)return Dr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ei.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(Q4,"polyfillBlob")});var PL={};xe(PL,{asyncSerialization:()=>QA,contentTypes:()=>eR,findBestSerializer:()=>hp,getDeserializer:()=>so,hasAsyncSerialization:()=>jA,registerContentHandlers:()=>Nf,serialize:()=>wf,serializeMessage:()=>ia,toCsvStream:()=>_p});function J4(e){try{return e?.[0]===123?ZA(e):e}catch{return e}}function Nf(e){e.register(Z4,{serializers:[{regex:/^application\/json$/,serializer:gf},{regex:/^application\/cbor$/,serializer:a(function(t){return new Sc.EncoderStream(Of).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Tc.Readable.from((0,Si.encodeIter)(t,Of)):(0,Si.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),_p(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Si.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Sc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function hp(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let m of f){let S=m.indexOf("=");h[m.substring(0,S)]=m.substring(S+1)}d=+h.q;let _=$r.get(u);if(_){let m=(_.q||1)*d;m>s&&(n=_,i=_.type||u,s=m,o=h)}}if(!n){if(r)throw new OL.ClientError("No supported content types found in Accept header, supported types include: "+Array.from($r.keys()).join(", "),406);n=$r.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function wf(e,t,r){let n=bL&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof gi)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=hp(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}),XA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,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}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>bL?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,no.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function ia(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;ro=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=hp(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=bf(e);return ro?.length>0?(ro.length===1?ro[0]:Promise.all(ro)).then(()=>ia(e,t,!0)):n}finally{ro=void 0}}function QA(e){if(ro)ro.push(e);else throw new Error("Unable to serialize asynchronously")}function jA(){return!!ro}function e3(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 r3(e){return t3.includes(e)}function n3(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function so(e="",t=!1){let r=n3(e),n=r.type&&$r.get(r.type)?.deserialize||s3(r);return t?s=>e3(s).then(n):n}function s3(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!r3(e.parameters.charset)&&XA.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 ZA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function i3(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 _p(e,t){let r=Tc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new j4(n,s);return r.pipe(i)}var Si,Sc,no,OL,Tc,NL,JA,wL,XA,j4,IL,bf,ZA,Of,$r,eR,yL,CL,X4,Z4,bL,ro,t3,to=ye(()=>{$A();Si=require("msgpackr"),Sc=require("cbor-x"),no=require("zlib"),OL=M(pe()),Tc=M(require("stream"));Pr();NL=M(ui()),JA=M(ce());k();wL=M(require("yaml")),XA=M(pi());fs();({Transform:j4}=require("json2csv")),IL=JA.default.get(B.SERIALIZATION_BIGINT)!==!1,bf=IL?pc:JSON.stringify,ZA=IL?qA:JSON.parse,Of={useRecords:!1,useToJSON:!0},$r=new Map,eR=$r;Ke.contentTypes=eR;(0,NL._assignPackageExport)("contentTypes",eR);$r.set("application/json",{serializeStream:gf,serialize:bf,deserialize(e){return ZA(e)},q:.8});yL=new Sc.Encoder(Of);$r.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Sc.EncoderStream(Of).end(e)},serialize:yL.encode,deserialize:yL.decode,q:1});$r.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Tc.Readable.from((0,Si.encodeIter)(e,Of)):(0,Si.pack)(e)},serialize:Si.pack,deserialize:Si.unpack,q:.9});$r.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),_p(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]),_p(e,e?.getColumns?.())},q:.1});$r.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Tc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});$r.set("text/yaml",{serialize(e){return wL.stringify(e,{aliasDuplicateObjects:!1})},q:.7});$r.set("text/event-stream",{serializeStream:a(function(e){return Tc.Readable.from(i3(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
11
|
-
`),e.data){let r=e.data;typeof r=="object"&&(r=
|
|
9
|
+
`)},K2="certificate.pem",Y2="privateKey.pem",W2="caCertificate.pem",z2="natsCertificate.pem",j2="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Q2={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},J2={[Rt.SERVER]:2,[Rt.DEFAULT]:1},X2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},Z2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},eJ={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},tJ={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},rJ={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(jP,{CERTIFICATE_PEM_NAME:K2,PRIVATEKEY_PEM_NAME:Y2,CA_PEM_NAME:W2,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:Q2,CERT_PREFERENCE_APP:J2,CERT_PREFERENCE_OPS:X2,CERT_PREFERENCE_REP:Z2,CA_CERT_PREFERENCE_REP:eJ,CA_CERT_PREFERENCE_OPS:tJ,CA_CERT_PREFERENCE_APP:rJ,CERTIFICATE_VALUES:V2,NATS_CERTIFICATE_PEM_NAME:z2,NATS_CA_PEM_NAME:j2})});var nt=P((uAe,QP)=>{"use strict";var on=require("validate.js");on.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||on.validators.type.checks[t](e)?null:` must be a '${t}' value`};on.validators.type.checks={Object:a(function(e){return on.isObject(e)&&!on.isArray(e)},"Object"),Array:on.isArray,Integer:on.isInteger,Number:on.isNumber,String:on.isString,Date:on.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};on.validators.hasValidFileExt=function(e,t){return on.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};QP.exports={validateObject:nJ,validateObjectAsync:sJ,validateBySchema:iJ};function nJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=on(e,t,{format:"flat"});return r?new Error(r):null}a(nJ,"validateObject");async function sJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await on.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(sJ,"validateObjectAsync");function iJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(iJ,"validateBySchema")});var TA=P((_Ae,rD)=>{"use strict";var eD=require("fs-extra"),Ee=require("joi"),oJ=require("os"),{boolean:ke,string:ft,number:er,array:Jo}=Ee.types(),{totalmem:JP}=require("os"),uc=require("path"),aJ=X(),SA=oe(),fAe=gA(),XP=(G(),D($)),cJ=nt(),ZP="log",lJ="components",uJ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dJ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",fJ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",_J="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",hJ="rootPath config parameter is undefined",an=Ee.alternatives([er.min(0),ft]).optional().empty(null),Mp=Ee.alternatives([Jo.items(ft,{host:ft.required(),port:an},{hostname:ft.required(),port:an}).empty(null),Jo.items(ft)]),_i,tD=!1;rD.exports={configValidator:pJ,routesValidator:AJ,route_constraints:Mp};function pJ(e,t=!1){if(tD=t,_i=e.rootPath,SA.isEmpty(_i))throw hJ;let r=ke.optional(),n=er.min(0).max(1e3).empty(null).default(TJ),s=ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ef),i=ft.optional().empty(null),o=ft.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Ee.string().empty(null).default(ef),l=Ee.custom(EJ).empty(null).default(ef),u=e.clustering?.enabled,f=Ee.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Ee.object({enabled:r,hubServer:Ee.object({cluster:Ee.object({name:Ee.required().empty(null),network:Ee.object({port:an,routes:Mp}).required()}).required(),leafNodes:Ee.object({network:Ee.object({port:an}).required()}).required(),network:Ee.object({port:an}).required()}).required(),leafServer:Ee.object({network:Ee.object({port:an,routes:Mp}).required(),streams:Ee.object({maxAge:er.min(120).allow(null).optional(),maxBytes:er.min(1).allow(null).optional(),maxMsgs:er.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ke.optional(),databaseLevel:ke.optional(),tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.required(),verify:ke.optional()}),user:ft.optional().empty(null)}).optional():d=Ee.object({enabled:r,tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.optional()})}).optional(),Ee.object({authentication:Ee.alternatives(Ee.object({authorizeLocal:ke,cacheTTL:er.required(),cookie:Ee.object({domains:Jo.items(ft).optional(),expires:ft.optional()}),enableSessions:ke,hashFunction:ft.valid("md5","sha256","argon2id").optional().empty(null)}),ke).optional(),analytics:Ee.object({aggregatePeriod:er}),replication:Ee.object({hostname:Ee.alternatives(ft,er).optional().empty(null),url:ft.optional().empty(null),port:an,securePort:an,routes:Jo.optional().empty(null),databases:Ee.alternatives(ft,Jo),enableRootCAs:ke.optional(),copyTablesToCatchUp:ke.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Ee.object({enabled:r}).required(),logging:Ee.object({auditAuthEvents:Ee.object({logFailed:ke,logSuccessful:ke}),file:ke.required(),level:Ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Ee.object({enabled:ke.optional(),compress:ke.optional(),interval:ft.custom(SJ).optional().empty(null),maxSize:ft.custom(gJ).optional().empty(null),path:ft.optional().empty(null).default(ef)}).required(),root:s,stdStreams:ke.required(),auditLog:ke.required()}).required(),operationsApi:Ee.object({network:Ee.object({cors:ke.optional(),corsAccessList:Jo.optional(),headersTimeout:er.min(1).optional(),keepAliveTimeout:er.min(1).optional(),port:an,domainSocket:Ee.optional().empty("hdb/operations-server").default(ef),securePort:an,timeout:er.min(1).optional()}).optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).required(),rootPath:ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Ee.object({network:Ee.object({port:an,securePort:an,mtls:Ee.alternatives([ke.optional(),Ee.object({user:ft.optional(),certificateAuthority:i,required:ke.optional()})])}).required(),webSocket:ke.optional(),requireAuthentication:ke.optional()}),http:Ee.object({compressionThreshold:er.optional(),cors:ke.optional(),corsAccessList:Jo.optional(),headersTimeout:er.min(1).optional(),port:an,securePort:an,maxHeaderSize:er.optional(),mtls:Ee.alternatives([ke.optional(),Ee.object({user:ft.optional(),certificateAuthority:i,required:ke.optional()})]),threadRange:Ee.alternatives([Jo.optional(),ft.optional()])}).required(),threads:Ee.alternatives(n.optional(),Ee.object({count:n.optional(),debug:Ee.alternatives(ke.optional(),Ee.object({startingPort:er.min(1).optional(),host:ft.optional(),waitForDebugger:ke.optional()})),maxHeapMemory:er.min(0).optional()})),storage:Ee.object({writeAsync:ke.required(),overlappingSync:ke.optional(),caching:ke.optional(),compression:Ee.alternatives([ke.optional(),Ee.object({dictionary:ft.optional(),threshold:er.optional()})]),compactOnStart:ke.optional(),compactOnStartKeepBackup:ke.optional(),noReadAhead:ke.optional(),path:l,prefetchWrites:ke.optional(),maxFreeSpaceToLoad:er.optional(),maxFreeSpaceToRetain:er.optional()}).required(),ignoreScripts:ke.optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(pJ,"configValidator");function mJ(e){return tD||eD.existsSync(e)?null:`Specified path ${e} does not exist.`}a(mJ,"doesPathExist");function EJ(e,t){Ee.assert(e,ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=mJ(e);if(r)return t.message(r)}a(EJ,"validatePath");function gJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(uJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(fJ):e}a(gJ,"validateRotationMaxSize");function SJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(dJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(_J):e}a(SJ,"validateRotationInterval");function TJ(e,t){let r=t.state.path.join("."),n=oJ.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||JP();return i=Math.round(Math.min(i,JP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),aJ.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(TJ,"setDefaultThreads");function ef(e,t){let r=t.state.path.join(".");if(!SA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(SA.isEmpty(_i))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return uc.join(_i,lJ);case"logging.root":return uc.join(_i,ZP);case"clustering.leafServer.streams.path":return uc.join(_i,"clustering","leaf");case"storage.path":let n=uc.join(_i,XP.LEGACY_DATABASES_DIR_NAME);return eD.existsSync(n)?n:uc.join(_i,XP.DATABASES_DIR_NAME);case"logging.rotation.path":return uc.join(_i,ZP);case"operationsApi.network.domainSocket":return r==null?null:uc.join(_i,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ef,"setDefaultRoot");function AJ(e){let t=Ee.object({routes:Mp});return cJ.validateBySchema({routes:e},t)}a(AJ,"routesValidator")});var ql={};Be(ql,{server:()=>Ke});var nD,Ke,Dr=be(()=>{nD=M(ui()),Ke={};(0,nD._assignPackageExport)("server",Ke)});var wt=P(hD=>{"use strict";var cs=(G(),D($)),pr=oe(),tr=X(),{configValidator:RJ,routesValidator:sD}=TA(),Gr=require("fs-extra"),oD=require("yaml"),Mn=require("path"),yJ=require("is-number"),aD=require("properties-reader"),bJ=require("lodash"),{handleHDBError:OJ}=he(),{HTTP_STATUS_CODES:NJ,HDB_ERROR_MSGS:$l}=Dn(),{server:wJ}=(Dr(),D(ql)),{PACKAGE_ROOT:cD}=Et(),{DATABASES_PARAM_CONFIG:tf,CONFIG_PARAMS:Ln,CONFIG_PARAM_MAP:ks}=cs,IJ="Unable to get config value because config is uninitialized",CJ="Config successfully initialized",PJ="Error backing up config file",DJ="Empty parameter sent to getConfigValue",lD=Mn.join(cD,"config","yaml",cs.HDB_DEFAULT_CONFIG_FILE),LJ=Mn.join(cD,"config","yaml","defaultNatsConfig.yaml"),MJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",iD={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},vp,Nt,Up;Object.assign(hD,{createConfigFile:vJ,getDefaultConfig:UJ,getConfigValue:dD,initConfig:xp,flattenConfig:Vl,updateConfigValue:fD,updateConfigObject:BJ,getConfiguration:FJ,setConfiguration:GJ,readConfigFile:bA,getClusteringRoutes:qJ,initOldConfig:_D,getConfigFromFile:$J,getConfigFilePath:dc,addConfig:VJ,deleteConfigFromFile:KJ,getConfigObj:YJ,resolvePath:AA,getFlatConfigObj:WJ});function AA(e){if(e?.startsWith("~/"))return Mn.join(pr.getHomeDir(),e.slice(1));let t=ce();try{return Mn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(AA,"resolvePath");function vJ(e,t=!1){let r=Xo(lD);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=oD.parseDocument(Gr.readFileSync(LJ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}vp=Vl(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===Ln.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=RA(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){tr.error(d)}}}n&&uD(r,n),yA(r,t);let s=r.toJSON();Nt=Vl(s);let i=r.getIn(["rootPath"]),o=Mn.join(i,cs.HDB_CONFIG_FILE);if(Gr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Gr.writeFileSync(o,String(r)),tr.trace(`Config file written to ${o}`)}a(vJ,"createConfigFile");function uD(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!pr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(tf.TABLES))for(let i in n[s][tf.TABLES])for(let o in n[s][tf.TABLES][i]){let c=n[s][tf.TABLES][i][o],l=[Ln.DATABASES,s,tf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Ln.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){tr.error("Error parsing schemas CLI/env config arguments",n)}}a(uD,"setSchemasConfig");function UJ(e){if(vp===void 0){let r=Xo(lD);vp=Vl(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return vp[t.toLowerCase()]}a(UJ,"getDefaultConfig");function dD(e){if(e==null){tr.info(DJ);return}if(Nt===void 0){tr.trace(IJ);return}let t=ks[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(dD,"getConfigValue");function dc(e=pr.getPropsFilePath()){let t=pr.getEnvCliRootPath();if(t)return AA(Mn.join(t,cs.HDB_CONFIG_FILE));let r=aD(e);return AA(r.get(cs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(dc,"getConfigFilePath");function xp(e=!1){if(Nt===void 0||e){let t;if(!pr.noBootFile()){t=pr.getPropsFilePath();try{Gr.accessSync(t,Gr.constants.F_OK|Gr.constants.R_OK)}catch(i){throw tr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=dc(t),n;if(r.includes("config/settings.js"))try{_D(r);return}catch(i){if(i.code!==cs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Xo(r)}catch(i){if(i.code===cs.NODE_ERROR_CODES.ENOENT){tr.trace(`HarperDB config file not found at ${r}.
|
|
10
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw tr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}xJ(n,r),yA(n);let s=n.toJSON();if(wJ.config=s,Nt=Vl(s),Nt.logging_rotation_rotate)for(let i in iD)Nt[i]&&tr.error(`Config ${iD[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);tr.trace(CJ)}}a(xp,"initConfig");function xJ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(tr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Gr.writeFileSync(t,String(e))}}a(xJ,"checkForUpdatedConfig");function yA(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw $l.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw $l.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=RJ(r,t);if(n.error)throw $l.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(yA,"validateConfig");function BJ(e,t){Nt===void 0&&(Nt={});let r=ks[e.toLowerCase()];if(r===void 0){tr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a(BJ,"updateConfigObject");function fD(e,t,r=void 0,n=!1,s=!1,i=!1){Nt===void 0&&xp();let o=dD(ks.hdb_root),c=Mn.join(o,cs.HDB_CONFIG_FILE),l=Xo(c),u;if(r&&Nt){let h=!1;for(let _ in r)if(r[_]!=Nt[_.toLowerCase()]){h=!0;break}if(!h){tr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Ln.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=ks[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),p=RA(h,t);l.setIn([..._],p)}else for(let h in r){let _=ks[h.toLowerCase()];if(_===Ln.HTTP_SECUREPORT&&r[h]===Nt[Ln.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Ln.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===Nt[Ln.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Ln.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let p=_.split("_"),S=cs.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,p=S.split("_"));let g=RA(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(R){tr.error(R)}}}u&&uD(l,u),yA(l);let f=l.getIn(["rootPath"]),d=Mn.join(f,cs.HDB_CONFIG_FILE);if(n===!0&&HJ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Gr.writeFileSync(d,String(l)),s&&(Nt=Vl(l.toJSON())),tr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(fD,"updateConfigValue");function HJ(e,t){try{let r=Mn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${cs.HDB_CONFIG_FILE}.bak`);Gr.copySync(e,r),tr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){tr.error(PJ),tr.error(r)}}a(HJ,"backupConfigFile");var kJ=["databases"];function Vl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),Up=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!kJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Ln[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Vl,"flattenConfig");function RA(e,t){if(e===Ln.CLUSTERING_NODENAME||e===Ln.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(yJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return pr.autoCast(t)}a(RA,"castConfigValue");function FJ(){let e=pr.getPropsFilePath(),t=dc(e);return Xo(t).toJSON()}a(FJ,"getConfiguration");async function GJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return fD(void 0,void 0,s,!0),MJ}catch(i){throw typeof i=="string"||i instanceof String?OJ(i,i,NJ.BAD_REQUEST,void 0,void 0,!0):i}}a(GJ,"setConfiguration");function bA(){let e=pr.getPropsFilePath();try{Gr.accessSync(e,Gr.constants.F_OK|Gr.constants.R_OK)}catch(n){if(!pr.noBootFile())throw tr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Xo(t).toJSON()}a(bA,"readConfigFile");function Xo(e){return oD.parseDocument(Gr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xo,"parseYamlDoc");function qJ(){let e=bA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pr.isEmptyOrZeroLength(t)?[]:t;let r=sD(t);if(r)throw $l.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=pr.isEmptyOrZeroLength(n)?[]:n;let s=sD(n);if(s)throw $l.CONFIG_VALIDATION(s.message);if(!pr.isEmptyOrZeroLength(n)&&!pr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!pr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw $l.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(qJ,"getClusteringRoutes");function _D(e){let t=aD(e);Nt={};for(let r in ks){let n=t.get(r.toUpperCase());if(pr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Ln.LOGGING_ROOT?Nt[s]=Mn.dirname(n):Nt[s]=n}return Nt}a(_D,"initOldConfig");function $J(e){let t=bA();return bJ.get(t,e.replaceAll("_","."))}a($J,"getConfigFromFile");async function VJ(e,t){let r=Xo(dc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Gr.writeFile(dc(),String(r))}a(VJ,"addConfig");function KJ(e){let t=dc(pr.getPropsFilePath()),r=Xo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,cs.HDB_CONFIG_FILE);Gr.writeFileSync(s,String(r))}a(KJ,"deleteConfigFromFile");function YJ(){return Up||(xp(),Up)}a(YJ,"getConfigObj");function WJ(){return Nt||xp(),Nt}a(WJ,"getFlatConfigObj")});var ce=P((SD,TD)=>{"use strict";var OA=require("fs-extra"),fc=require("path"),pD=require("os"),zJ=require("properties-reader"),nf=X(),rf=oe(),Me=(G(),D($)),Bp=wt(),jJ="Error initializing environment manager",Hp="BOOT_PROPS_FILE_PATH",mD=!1,QJ={[Me.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ji={};Object.assign(SD,TD.exports={BOOT_PROPS_FILE_PATH:Hp,getHdbBasePath:JJ,setHdbBasePath:XJ,get:ED,initSync:e4,setProperty:ze,initTestEnvironment:r4,setCloneVar:t4});function JJ(){return ji[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(JJ,"getHdbBasePath");function XJ(e){ji[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(XJ,"setHdbBasePath");function ED(e){let t=Bp.getConfigValue(e);return t===void 0?ji[e]:t}a(ED,"get");function ze(e,t){QJ[e]&&(ji[e]=t),Bp.updateConfigObject(e,t)}a(ze,"setProperty");function ZJ(){let e;try{e=rf.getPropsFilePath(),OA.accessSync(e,OA.constants.F_OK|OA.constants.R_OK),mD=!0;let t=zJ(e);return ji[Me.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Me.HDB_SETTINGS_NAMES.INSTALL_USER),ji[Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ji[Hp]=e,!0}catch{return nf.trace(`Environment manager found no properties file at ${e}`),!1}}a(ZJ,"doesPropFileExist");function e4(e=!1){try{((mD||ZJ()||rf.noBootFile())&&!gD||e)&&(Bp.initConfig(e),ji[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Bp.getConfigValue(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){nf.error(jJ),nf.error(t),console.error(t),process.exit(1)}}a(e4,"initSync");var gD=!1;function t4(e){gD=e}a(t4,"setCloneVar");function r4(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=fc.join(__dirname,"../../","unitTests");ji[Hp]=fc.join(l,"hdb_boot_properties.file"),ze(Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,fc.join(l,"settings.test")),ze(Me.HDB_SETTINGS_NAMES.INSTALL_USER,pD.userInfo()?pD.userInfo().username:void 0),ze(Me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ze(Me.HDB_SETTINGS_NAMES.LOG_PATH_KEY,fc.join(l,"envDir","log")),ze(Me.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ze(Me.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ze(Me.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ze(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,fc.join(l,"envDir")),ze(Me.CONFIG_PARAMS.STORAGE_PATH,fc.join(l,"envDir")),s&&(ze(Me.CONFIG_PARAMS.HTTP_SECUREPORT,ED(Me.CONFIG_PARAMS.HTTP_PORT)),ze(Me.CONFIG_PARAMS.HTTP_PORT,null)),ze(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ze(Me.CONFIG_PARAMS.HTTP_PORT,9926),ze(Me.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ze(Me.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),ze(Me.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rf.isEmpty(i)?!1:i),ze(Me.CONFIG_PARAMS.HTTP_CORS,rf.isEmpty(i)?!1:i),ze(Me.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ze(Me.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,fc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ze(Me.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rf.isEmpty(c)?!1:c),o&&(ze("CORS_ACCESSLIST",o),ze(Me.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ze(Me.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ze(Me.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ze(Me.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Hp}. Please check your boot props and settings files`;nf.fatal(r),nf.error(t)}}a(r4,"initTestEnvironment")});var gt=P((gAe,wD)=>{"use strict";var lf=(G(),D($)),n4=oe(),cn=ce(),uf=require("path"),s4=require("minimist"),AD=require("fs-extra"),RD=require("lodash");cn.initSync();var{CONFIG_PARAMS:Zo,DATABASES_PARAM_CONFIG:sf,SYSTEM_SCHEMA_NAME:kp}=lf,of,af,cf;function yD(){if(of!==void 0)return of;if(cn.getHdbBasePath()!==void 0)return of=cn.get(Zo.STORAGE_PATH)||uf.join(cn.getHdbBasePath(),lf.DATABASES_DIR_NAME),of}a(yD,"getBaseSchemaPath");function bD(){if(af!==void 0)return af;if(cn.getHdbBasePath()!==void 0)return af=ND(kp),af}a(bD,"getSystemSchemaPath");function OD(){if(cf!==void 0)return cf;if(cn.getHdbBasePath()!==void 0)return cf=cn.get(lf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||uf.join(cn.getHdbBasePath(),lf.TRANSACTIONS_DIR_NAME),cf}a(OD,"getTransactionAuditStoreBasePath");function i4(e,t){let r=cn.get(Zo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||uf.join(OD(),e.toString())}a(i4,"getTransactionAuditStorePath");function ND(e,t){e=e.toString(),t=t&&t.toString();let r=cn.get(lf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||uf.join(yD(),e)}a(ND,"getSchemaPath");function o4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,s4(process.argv));let n=r[Zo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!n4.isObject(n))throw o;i=n}for(let o of i){let c=o[kp];if(!c)continue;let l=cn.get(Zo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[sf.PATH];if(u)return RD.set(l,[kp,sf.TABLES,t,sf.PATH],u),cn.setProperty(Zo.DATABASES,l),u;let f=c?.[sf.PATH];if(f)return RD.set(l,[kp,sf.PATH],f),cn.setProperty(Zo.DATABASES,l),f}}let s=r[Zo.STORAGE_PATH.toUpperCase()];if(s){if(!AD.pathExistsSync(s))throw new Error(s+" does not exist");let i=uf.join(s,e);return AD.mkdirsSync(i),cn.setProperty(Zo.STORAGE_PATH,s),i}return bD()}a(o4,"initSystemSchemaPaths");function a4(){of=void 0,af=void 0,cf=void 0}a(a4,"resetPaths");wD.exports={getBaseSchemaPath:yD,getSystemSchemaPath:bD,getTransactionAuditStorePath:i4,getTransactionAuditStoreBasePath:OD,getSchemaPath:ND,initSystemSchemaPaths:o4,resetPaths:a4}});var ln=P((RAe,LD)=>{"use strict";var c4=Dn().LMDB_ERRORS_ENUM,TAe=require("lmdb"),l4=Ft(),AAe=require("buffer").Buffer,{OVERFLOW_MARKER:ID,MAX_SEARCH_KEY_LENGTH:Fp}=l4,CD=["number","string","symbol","boolean","bigint"];function u4(e){if(e=e?.primaryStore||e,!e)throw new Error(c4.ENV_REQUIRED)}a(u4,"validateEnv");function d4(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(d4,"stringifyData");function f4(e){return e instanceof Date?e.valueOf():e}a(f4,"convertKeyValueToWrite");function _4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(CD.includes(typeof e))return e.length>Fp?[e.slice(0,Fp)+ID]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(CD.includes(typeof i))i.length>Fp?r.push(i.slice(0,Fp)+ID):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(_4,"getIndexedValues");var Gp=0,PD=0;function DD(){PD=Date.now()-performance.now()}a(DD,"adjustStartTime");DD();var h4=6e4;setInterval(DD,h4).unref();function p4(){let e=performance.now()+PD;return e>Gp?(Gp=e,e):(Gp+=488e-6,Gp)}a(p4,"getNextMonotonicTime");LD.exports={validateEnv:u4,stringifyData:d4,convertKeyValueToWrite:f4,getNextMonotonicTime:p4,getIndexedValues:_4}});var df=P((bAe,MD)=>{"use strict";var m4=(G(),D($)).OPERATIONS_ENUM,NA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=m4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};MD.exports=NA});var ff=P((wAe,BD)=>{"use strict";var NAe=df(),qp=(G(),D($)),wA=oe(),vD=X(),E4=require("uuid"),{handleHDBError:$p,hdb_errors:g4}=he(),{HDB_ERROR_MSGS:Vp,HTTP_STATUS_CODES:Kp}=g4;BD.exports=UD;function UD(e,t,r){for(let s=0;s<t.length;s++)xD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];S4(i,r,e.operation)}}a(UD,"processRows");UD.validateAttribute=xD;function xD(e){if(Buffer.byteLength(String(e))>qp.INSERT_MAX_CHARACTER_SIZE)throw $p(new Error,Vp.ATTR_NAME_LENGTH_ERR(e),Kp.BAD_REQUEST,void 0,void 0,!0);if(wA.isEmptyOrZeroLength(e)||wA.isEmpty(e.trim()))throw $p(new Error,Vp.ATTR_NAME_NULLISH_ERR,Kp.BAD_REQUEST,void 0,void 0,!0)}a(xD,"validateAttribute");function S4(e,t,r){if(!e.hasOwnProperty(t)||wA.isEmptyOrZeroLength(e[t])){if(r===qp.OPERATIONS_ENUM.INSERT||r===qp.OPERATIONS_ENUM.UPSERT){e[t]=E4.v4();return}throw vD.error("Update transaction aborted due to record with no hash value:",e),$p(new Error,Vp.RECORD_MISSING_HASH_ERR,Kp.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>qp.INSERT_MAX_CHARACTER_SIZE)throw vD.error(e),$p(new Error,Vp.HASH_VAL_LENGTH_ERR,Kp.BAD_REQUEST,void 0,void 0,!0)}a(S4,"validateHash")});var HD,vn,IA,Kl=be(()=>{HD=require("events"),vn=class extends HD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new IA;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},IA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function KD(e){PA=e}function y4(){R4=setInterval(function(){for(let e of CA)if(e.stale){let t=e.getContext()?.url;qD.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},A4).unref()}var DA,GD,qD,$D,VD,kD,CA,T4,_f,FD,PA,_c,Yp,A4,R4,Wp=be(()=>{DA=M(ln()),GD=M(he()),qD=M(X()),$D=M(ce());G();VD=M(oe()),kD=100,CA=new Set,T4=(0,VD.convertToMS)($D.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(KD,"replicationConfirmation");_c=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),CA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(CA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(_f&&!this.overloadChecked&&performance.now()-FD>T4)throw new GD.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,DA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let p=this.writes[_];p&&(p.before||p.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let p;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let R=g[_===0?"before":"beforeIntermediate"];if(R){let E=R();p?p.push?p.push(E):p=[p,E]:p=E}}p&&await(p.push?Promise.all(p):p)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.doneWriting?2:1;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<kD>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return _f||(_f=s,FD=performance.now(),_f.then(()=>{_f=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];PA&&_&&i.push(PA(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+kD/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},Yp=class extends _c{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DA.getNextMonotonicTime)())}getReadTxn(){}},A4=3e4;a(y4,"startMonitoringTxns");y4()});function It(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _c;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var YD,hc=be(()=>{YD=M(ui());Wp();a(It,"transaction");(0,YD._assignPackageExport)("transaction",It);It.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};It.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function MA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let p=e[_],S=u(p);d=d.concat(S)}let h=new Set;return d.filter(_=>{let p=_.key??_;return h.has(p)?!1:(h.add(p),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?MA(d.conditions,d.operator,r,n,s,i,o,c):zl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((p,S)=>{if(p.conditions){let E=p.operator==="or",T=f(p.conditions,!E,_);return E?(O,v)=>T.some(F=>F(O,v)):(O,v)=>T.every(F=>F(O,v))}let g=(p.attribute||p[0])===r.primaryKey,R=mf(p,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=L4(r.primaryStore,p.estimated_count,_)),R}).filter(Boolean)}a(f,"mapConditionsToFilters")}function zl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new dn.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],T=pi(n.attributes,E);if(T.relationship){if(o.length<2)throw new dn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=T.definition?.tableClass||T.elements?.definition?.tableClass,v=new Map,F=zl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,O,s,v);if(T.relationship.to){i[o[0]]=v;let q=!!pi(O.attributes,T.relationship.to)?.elements;F=I4(F,T,O.primaryStore,q,v)}if(T.relationship.from){let q=a(j=>(j?.key!==void 0&&(j=j.key),zl({attribute:T.relationship.from,value:j},t,r,n,s,v)),"searchEntry");T.elements?(i[o[0]]=v,F=C4(F,T,O.primaryStore,v,q)):F=F.flatMap(q)}return F}else if(o.length===1)o=o[0];else throw new dn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(vA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=hi.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new dn.ClientError(`Unknown query comparator "${l}"`)}let p,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>ls.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,h=!1,p=mf(e,n,null,i,S)),typeof f=="string"&&f.length>ls.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,d=!0,p=p??mf(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new dn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new dn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new dn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new dn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(p=p??mf(e,n,null,i,S),!p)throw new dn.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(R).map(p?function({key:T,value:O}){return this?.isSync?O&&p(O)?T:ea.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(O&&p(O)?T:ea.SKIP)}catch(q){F(q)}}))}:T=>T.value==null&&!(T.metadataFlags&(fn|ra))?ea.SKIP:T);return E.hasEntries=!0,E}else return g?g.getRange(R).map(p?function({key:E,value:T}){let O;return typeof E=="string"&&E.length>ls.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(T):O={[o]:E},this.isSync?p(O)?T:ea.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(p(O)?T:ea.SKIP)}catch(q){F(q)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:T}){return this.isSync?T&&p(T)?E:ea.SKIP:new Promise((O,v)=>setImmediate(()=>{try{O(T&&p(T)?E:ea.SKIP)}catch(F){v(F)}}))})}function pi(e,t){if(Array.isArray(t))if(t.length>1){let r=pi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?pi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function I4(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function C4(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function mf(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=pi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],p=mf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!p)return;if(_){_.filters||(_.filters=[]),_.filters.push(p);return}let S=t.propertyResolvers?.[f],g,R=a((E,T)=>{let O,v;if(S){if(S.from&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let q of p.idFilter.idSet)e={attribute:S.from,value:q};g=u(S.from,p.idFilter,!0,!0)}else g=u(S.from,p.idFilter,!1,!0);let F=g(E);return g.idFilter&&(R.idFilter=g.idFilter),F}v=S(E,r,T),O=v?.value}else O=E[f];return O?Array.isArray(O)?O.some(p):p(O,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),vA[o]||o){case ls.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,hi.compareKeys)(f,l[0])>=0&&(0,hi.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,hi.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,hi.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,hi.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,hi.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,hi.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new dn.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let p;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&jp(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(h=!1));let S=0,g=3;function R(E){let T=E[f],O;if(typeof T!="object"||!T||_?O=d(T):Array.isArray(T)?O=T.some(d):T instanceof Date&&(O=d(T.getTime())),h&&(g++,!O&&!R.idFilter&&++S/g*(i-g)>p)){let v=zl(e,r.transaction.getReadTxn(),!1,t).map(jl),F=new Set(v);R.idFilter=q=>F.has(jl(q)),R.idFilter.idSet=F}return O}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(u,"attributeComparator")}function jp(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Qi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=vA[n]||n,n===ls.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=pi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=jp(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Qi(e.indices[i.relationship.from])/(Qi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Qi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=N4*Qi(e.primaryStore)+1:n==="between"?r.estimated_count=O4*Qi(e.primaryStore)+1:n==="sort"?r.estimated_count=Qi(e.primaryStore)+1:r.estimated_count=b4*Qi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Qp(e){if(e)if(ta=e,Yl.lastIndex=0,P4.test(e))try{let t=hf(new Wl,"");if(un!==ta.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${un} in '${ta}'`,t}else return new URLSearchParams(e)}function hf(e,t){let r=Yl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(ta);){un=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=WD}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=pf(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=w4[d],l=LA[i]?WD:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=pf(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&zD(p,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(p),S.operator=u}else zp(e,u),e.conditions.push(p)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(pf(f)),s=void 0;break;case"(":Yl.lastIndex=un;let _=hf(f?[]:new Wl,")");switch(f){case"":zp(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=jD(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}ta[un]===","?r.lastIndex=++un:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");Yl.lastIndex=un,h=hf([],"}"),h.name=f,e.push(h),ta[un]===","?r.lastIndex=++un:o=!0;break;case"[":Yl.lastIndex=un,f?(h=hf(new Wl,"]"),h.name=f):h=hf(e.conditions?new Wl:[],"]"),e.conditions?(zp(e,u),e.conditions.push(h),s=null):e.push(h),ta[un]===","?r.lastIndex=++un:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let p={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&zD(p,f),zp(e,u),e.conditions.push(p)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(pf(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?D4:Yl,r.lastIndex=un),un===ta.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function zp(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function pf(e){return e.indexOf(".")>-1?e.split(".").map(pf):decodeURIComponent(e)}function WD(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new dn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zD(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new dn.ClientError("wildcard can only be used at the end of a string")}function jD(e){let t=QD(e[0]);return e.length>1&&(t.next=jD(e.slice(1))),t}function QD(e){if(Array.isArray(e)){let t=QD(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function jl(e){return Array.isArray(e)?e.join("\0"):e}function Qi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function L4(e,t,r){return t*r/Qi(e)}var dn,ls,hi,ea,b4,O4,N4,w4,LA,vA,P4,Yl,D4,un,ta,Wl,pc,Ef=be(()=>{dn=M(he()),ls=M(Ft()),hi=require("ordered-binary"),ea=require("lmdb");gf();b4=.3,O4=.1,N4=.05,w4={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},LA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(MA,"executeConditions");a(zl,"searchByIndex");a(pi,"findAttribute");a(I4,"joinTo");a(C4,"joinFrom");vA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(mf,"filterByType");a(jp,"estimateCondition");P4=/[()[\]|!<>.]|(=\w*=)/,Yl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,D4=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Qp,"parseQuery");a(hf,"parseBlock");a(zp,"assignOperator");a(pf,"decodeProperty");a(WD,"typedDecoding");a(zD,"wildcardDecoding");a(jD,"toSortObject");a(QD,"toSortEntry");Wl=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(jl,"flattenKey");a(Qi,"estimatedEntryCount");a(L4,"intersectionEstimate");pc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var xA={};Be(xA,{MultiPartId:()=>Xp,Resource:()=>qr,snake_case:()=>v4,transformForSelect:()=>Zp});function v4(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function JD(e,t){if(mc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(mc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Xp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){mc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return mc=!0,null;e[e.length-1]==="/"&&(mc=!0)}return t.coerceId(decodeURIComponent(e))}function Un(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string")if(this.directURLMapping)c=c.slice(1);else{let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let p=this.parsePath(c,o,l);p?.id!==void 0?(p.query&&(l?l=Object.assign(p.query,l):l=p.query),u=p.isCollection,c=p.id):c=p}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new pc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return It(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let p=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(p?.then)return p.then(S=>{if(!S)throw new Jp(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!p)throw new Jp(o.user)}return typeof f?.then=="function"?f.then(p=>e(_,l,o,p)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function xn(e,t){let r=new eL.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function UA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Zp(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):UA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(UA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(UA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(p=>u[h.name||h]=p))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=Zp(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var XD,ZD,eL,M4,qr,Jp,mc,Xp,na=be(()=>{XD=require("crypto");Kl();ZD=M(ui()),eL=M(he());hc();Ef();M4={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Un(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Zp(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Un(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):xn(t,"put")},{hasContent:!0,type:"update"});static patch=Un(function(t,r,n,s){return t.patch?t.patch(s,r):xn(t,"patch")},{hasContent:!0,type:"update"});static delete=Un(function(t,r,n,s){return t.delete?t.delete(r):xn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,XD.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),It(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):xn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=Un(function(t,r,n,s){return t.invalidate?t.invalidate(r):xn(t,"delete")},{hasContent:!1,type:"update"});static post=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Un(function(t,r,n,s){return t.connect?t.connect(s,r):xn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Un(function(t,r,n,s){return t.subscribe?t.subscribe(r):xn(t,"subscribe")},{type:"read"});static publish=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):xn(t,"publish")},{hasContent:!0,type:"create"});static search=Un(function(t,r,n,s){let i=t.search?t.search(r):xn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Zp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Un(function(t,r,n,s){return t.search?t.search(s,r):xn(t,"search")},{hasContent:!0,type:"read"});static copy=Un(function(t,r,n,s){return t.copy?t.copy(s,r):xn(t,"copy")},{hasContent:!0,type:"create"});static move=Un(function(t,r,n,s){return t.move?t.move(s,r):xn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;xn(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Qp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&M4[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:JD(t,this),isCollection:mc}}let i=JD(t,this);return mc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new vn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new vn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,ZD._assignPackageExport)("Resource",qr);a(v4,"snake_case");Jp=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(JD,"pathToId");Xp=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Un,"transactional");a(xn,"missingMethod");a(UA,"selectFromObject");a(Zp,"transformForSelect")});var sa,BA=be(()=>{sa=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var nL={};Be(nL,{Resources:()=>em,keyArrayToString:()=>Ql,resetResources:()=>U4,resources:()=>us});function U4(){return us=new em,Ke.resources=us,us}function Ql(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var tL,rL,em,us,Jl=be(()=>{hc();BA();tL=M(X()),rL=M(he());Dr();em=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new rL.ServerError(`Conflicting paths for ${t}`);tL.default.error(c),i.Resource=new sa(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),f=this.get(u),d=-1;if(!f&&n===o&&(d=u.indexOf("?",s),d!==-1)){let h=u.slice(0,d);f=this.get(h)}if(f&&(!r||f.exportTypes?.[r]!==!1)){if(f.relativeURL=t.slice(d!==-1?d:n),!f.hasSubPaths)return f;i=f}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return It(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(U4,"resetResources");a(Ql,"keyArrayToString")});var HA=P((XAe,sL)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:f,spawn:d}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:h}=Et(),_=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let R=!1,E=!1;if(E=s(n(h,p))){let T=new Set;e.sync(_.map(O=>`${O}/**/*.ts`),{cwd:h}).forEach(O=>{let v=0,F=0;try{T.add(O),v=i(n(h,O)).mtimeMs-5e3,F=i(n(h,p,O.replace(/.ts$/,".js"))).mtimeMs}catch{}v>F&&(R=!0)}),e.sync(_.map(O=>`${O}/**/*.js`),{cwd:n(h,p)}).forEach(O=>{if(!T.has(O.replace(/.js$/,".ts")))try{l(n(h,p,O))}catch{}})}else R=!0;if(R){console.log("Compiling TypeScript...");let T=f("npx",["tsc"],{cwd:h});if(T.stdout?.length&&console.log(T.stdout.toString()),T.stderr?.length&&console.log(T.stderr.toString()),E){let O=n(t(),"harperdb-tsc.pid"),v=!1;if(s(O))try{process.kill(+o(O,"utf8"),0),v=!0}catch{}if(!v){console.log("Starting background TypeScript compilation...");let F=d("npx",["tsc","--watch"],{detached:!0,cwd:h,stdio:"ignore"});F.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),F.pid&&c(O,String(F.pid),"utf-8"),F.unref()}}}}let S=sL.constructor,g=S._findPath;S._findPath=function(R,E,T){if(R.startsWith(".")&&!T&&E.length===1&&E[0].startsWith(h)&&!E[0].includes("node_modules")){let O=r(h,E[0]),v;O.startsWith(p)?v=n(h,r(p,O)):v=n(h,p,O);let F=n(v,R),q=F+".js";if(s(q))return q;if(F.includes(".")&&s(F))return F}return g(R,E,T)}}});var GA={};Be(GA,{loadGQLSchema:()=>H4,start:()=>FA,startOnMainThread:()=>B4});function FA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],p;for(let R of d.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(j){if(j.kind==="NonNullType"){let z=F(j.type);return z.nullable=!1,z}if(j.kind==="ListType")return{type:"array",elements:F(j.type)};let se={type:j.name?.value};return Object.defineProperty(se,"location",{value:j.loc.startToken}),se};a(F,"getProperty");let E=R.name.value,T=[],O={table:null,database:null,properties:T};h.set(E,O);for(let j of R.directives){if(j.name.value==="table"){for(let se of j.arguments)O[se.name.value]=se.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=E),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,_.push(O)}if(j.name.value==="sealed"&&(O.sealed=!0),j.name.value==="splitSegments"&&(O.splitSegments=!0),j.name.value==="replicate"&&(O.replicate=!0),j.name.value==="export"){O.export=!0;for(let se of j.arguments)typeof O.export!="object"&&(O.export={}),O.export[se.name.value]=se.value.value}}let v=!1,q={};for(let j of R.fields){let te=F(j.type);te.name=j.name.value,T.push(te),q[te.name]=void 0;for(let se of j.directives){let z=se.name.value;if(z==="primaryKey")v?console.warn("Can not define two attributes as a primary key at",se.loc):(te.isPrimaryKey=!0,v=!0);else if(z==="indexed")te.indexed=!0;else if(z==="computed"){for(let ne of se.arguments||[])if(ne.name.value==="from"){let le=ne.value.value;te.computed={from:g(le,ne,q)},te.version==null&&(te.version=le)}else ne.name.value==="version"&&(te.version=ne.value.value);te.computed=te.computed||!0}else if(z==="relationship"){let ne={};for(let le of se.arguments)ne[le.name.value]=le.value.value;te.relationship=ne}else if(z==="createdTime")te.assignCreatedTime=!0;else if(z==="updatedTime")te.assignUpdatedTime=!0;else if(z==="expiresAt")te.expiresAt=!0;else if(z==="allow"){let ne=te.authorizedRoles=[];for(let le of se.arguments)le.name.value==="role"&&ne.push(le.value.value)}else server.knownGraphQLDirectives.includes(z)&&console.warn(`@${z} is an unknown directive, at`,se.loc)}}O.type=E,E==="Query"&&(p=O)}function S(R){let E=h.get(R.type);E?(Object.defineProperty(R,"properties",{value:E.properties}),Object.defineProperty(R,"definition",{value:E})):R.type==="array"?S(R.elements):x4.includes(R.type)||(0,oL.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let R of h.values())for(let E of R.properties)S(E);for(let R of _)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,kA.dirname)(n),R.tableClass):i.set((0,kA.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,E,T){return new iL.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(T)}a(g,"createComputedFrom")}}var kA,iL,oL,x4,B4,H4,aL=be(()=>{kA=require("path"),iL=require("node:vm");Ue();oL=M(st()),x4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(FA,"start");B4=FA,H4=FA({ensureTable:_t}).handleFile});var hL={};Be(hL,{parse:()=>$A,streamAsJSON:()=>Sf,stringify:()=>Ec});function Sf(e){return new qA({value:e})}function cL(e){return console.error(e),JSON.stringify(e.toString())}function lL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ec(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===fL)return _L(e);if(t.resolution)return t.resolution.then(()=>Ec(e));throw t}}function _L(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=_L(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Ec(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function $A(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),G4.test(e)?k4.parse(e):JSON.parse(e)):null}var uL,dL,k4,F4,fL,qA,G4,VA=be(()=>{uL=require("stream"),dL=M(require("json-bigint-fixes")),k4=(0,dL.default)({useNativeBigInt:!0}),F4=1e4,fL={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw fL};a(Sf,"streamAsJSON");qA=class extends uL.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),cL)}catch(s){yield cL(s)}else yield Ec(t)}else yield Ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);lL(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>F4?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return lL(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(cL,"handleError");a(lL,"when");a(Ec,"stringify");a(_L,"jsStringify");G4=/[[,:]\s*-?\d{16,}/;a($A,"parse")});var mi=P(rm=>{var tm=X();for(let e of["trace","debug","info","warn","error","fatal","notify"])tm.logsAtLevel(e)&&(rm[e]=tm[e]);rm.loggerWithTag=e=>tm.loggerWithTag(e,!0);rm.setLogLevel=tm.setLogLevel});var fm={};Be(fm,{Blob:()=>gi,blobsWereEncoded:()=>gc,databasePaths:()=>YA,decodeBlobsWithWrites:()=>dm,decodeFromDatabase:()=>Sc,decodeWithBlobCallback:()=>bf,deleteBlob:()=>cm,deleteBlobsInObject:()=>ia,deleteRootBlobPathsForDB:()=>jA,encodeBlobsAsBuffers:()=>J4,encodeBlobsWithFilePath:()=>um,findBlobsInObject:()=>Zl,getFileId:()=>lm,getFilePathForBlob:()=>yL,getRootBlobPathsForDB:()=>yf,setDeletionDelay:()=>K4});function TL(){}function cm(e){let t=yL(e);t&&setTimeout(()=>{(0,Je.unlink)(t,r=>{r&&Ji.default.debug?.("Error trying to remove blob file",r)})},AL)}function K4(e){AL=e}function RL(e){let t=_n.get(e);if(!t)t={storageIndex:0,fileId:null,store:hn},_n.set(e,t);else{if(t.fileId)return t;t.store=hn}return W4(t),t.source?KA(e,t.source,t):t.contentBuffer?Y4(e,t):KA(e,Af.Readable.from(e.stream()),t),t}function KA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,Je.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.write(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g])),S(t.errored);return}let h=!1;e.size!==void 0&&(d.write(p(e.size)),h=!0);let _;o?(h||d.write($4),_=(0,om.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(q4),t.pipe(d)),t.on("error",S);function p(g){let R=BigInt(g),E=new Uint8Array(mr),T=new DataView(E.buffer);return R|=BigInt(o?zA:SL)<<48n,T.setBigInt64(0,R),E}a(p,"createHeader");function S(g){i.unlock(f,0);let R=d.fd;g?(R&&(0,Je.close)(R),u(g)):c?(0,Je.fdatasync)(R,E=>{E&&u(E),l(),(0,Je.close)(R)}):(l(),(0,Je.close)(R))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-mr;e.size=g,(0,Je.write)(d.fd,p(g),0,mr,0,S)}})}),e}function lm(e){return _n.get(e)?.fileId}function yL(e){let t=_n.get(e);return t?.fileId&&Rf(t)}function yf(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=YA.get(e);if(!t){if(!e.databaseName)return Ji.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,am.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Zi.join)(n,e.databaseName)):t=[(0,Zi.join)((0,am.getHdbBasePath)(),"blobs",e.databaseName)],YA.set(e,t)}return t}async function jA(e){let t=yf(e);t&&await Promise.all(t.map(r=>bL(r)))}async function bL(e){if((0,Je.existsSync)(e)){for(let t of await(0,ds.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await bL((0,Zi.join)(e,t.name));else try{await(0,ds.unlink)((0,Zi.join)(e,t.name))}catch(r){Ji.default.warn?.("Error deleting file",r)}try{await(0,ds.rmdir)(e)}catch(t){Ji.default.warn?.("Error deleting directory",t)}}}function Rf({storageIndex:e,fileId:t,store:r}){let n=yf(r);return(0,Zi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function Y4(e,t){let r=t.contentBuffer,n=r.length;if(!(n<gL))return e.size=n,KA(e,Af.Readable.from([r]),t)}function W4(e){let t=yf(e.store),r=z4(),n=t?.length>1?j4(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Rf(e),o=(0,Zi.dirname)(i);(0,Je.existsSync)(o)||(0,WA.ensureDirSync)(o),e.filePath=i}function z4(){let e=EL.get(hn);if(!e){let t=0,r=yf(hn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,Je.existsSync)(n))for(let c of(0,Je.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Zi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(hn.getUserSharedBuffer("blob-file-id",e.buffer)),EL.set(hn,e)}return Number(Atomics.add(e,0,1n))}function j4(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(im);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,Q4(e)),e.frequencyTable[t%im]}async function Q4(e){if(!ds.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,ds.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,WA.ensureDirSync)(s),o=await(0,ds.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(im),n=t.map(s=>1/s);for(let s=0;s<im;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function um(e,t,r){Xl=t,hn=r,gc=!1;try{return e()}finally{Xl=void 0,hn=void 0}}function J4(e){Lr=[];let t;try{t=e()}catch(n){throw Lr=void 0,n}let r=Lr.length<2?Lr[0]:Promise.all(Lr);return Lr=void 0,r?r.then(()=>e()):t}function dm(e,t){try{Lr=[],Xi=t,e()}catch(n){throw Xi=void 0,Lr=void 0,n}Xi=void 0;let r=Lr.length<2?Lr[0]:Promise.all(Lr);return Lr=void 0,r}function bf(e,t,r){hn=r;try{return Xi=t,e()}finally{Xi=void 0}}function Sc(e,t){return hn=t,e()}function ia(e){Zl(e,t=>{cm(t)})}function Zl(e,t){if(e instanceof gi)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Zl(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Zl(e[r],t)}}function Z4(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Ei,ds,Je,om,Af,WA,am,Zi,Ji,gL,mr,SL,zA,pL,q4,$4,mL,_n,Xi,gi,Xl,Lr,hn,gc,Tf,nm,V4,sm,AL,YA,EL,im,X4,fs=be(()=>{Ei=require("msgpackr"),ds=require("node:fs/promises"),Je=require("node:fs"),om=require("node:zlib"),Af=require("node:stream"),WA=require("fs-extra"),am=M(ce());G();Zi=require("path"),Ji=M(mi());eo();gL=8192,mr=8,SL=0,zA=1,pL=255,q4=new Uint8Array([0,SL,255,255,255,255,255,255]),$4=new Uint8Array([0,zA,255,255,255,255,255,255]),mL=0xffffffffffff,_n=new WeakMap,gi=global.Blob||Z4(),gc=!1,Tf=new Uint8Array(8),nm=new DataView(Tf.buffer),V4=6e4;a(TL,"InstanceOfBlobWithNoConstructor");TL.prototype=gi.prototype;sm=class e extends TL{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=_n.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(JA()&&QA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=_n.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=Rf(t),o,c=a(async()=>{let l,u=mr;try{if(l=await(0,ds.readFile)(i),l.length>=mr){l.copy(Tf,0,0,mr);let d=nm.getBigUint64(0);if(Number(d>>48n)===pL)throw new Error("Error in blob: "+buffer.subarray(mr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<mL&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((p,S)=>{if(h.attemptLock(_,0,()=>(o=!0,p(c()))))return o=!0,h.unlock(_,0),p(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===zA?new Promise((d,h)=>{(0,om.deflate)(l.subarray(mr),(_,p)=>{_?h(_):d(f(p))})}):f(l.subarray(mr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=_n.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(S){S.enqueue(r),S.close()}});let i=Rf(t),o,c=0,l=0,u,f,d,h=!1,_=this;return new ReadableStream({start(){let S=1e3,g=a((R,E)=>{(0,Je.open)(i,"r",(T,O)=>{if(T){if(T.code==="ENOENT"&&d!==!1&&(Ji.default.debug?.("File does not exist yet, waiting for it to be created",i,S),S-- >0))return setTimeout(()=>{p(),g(R,E)},20).unref();E(T),_.#e?.forEach(v=>v(T))}else o=O,R(O)})},"openFile");return new Promise(g)},pull:a(S=>{let g=0,R=100;return new Promise(a(function E(T,O){function v(q){(0,Je.close)(o),clearTimeout(f),u&&u.close(),O(q),_.#e?.forEach(j=>j(q))}a(v,"onError");let F=Buffer.allocUnsafe(262144);(0,Je.read)(o,F,0,F.length,c,(q,j,te)=>{if(l+=j,q)return v(q);if(c===0){if(j<mr){R-- >0&&d!==!1?(p(),Ji.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>E(T,O),20).unref()):(Ji.default.debug?.("File was empty, throwing error",i,R),O(new Error(`Blob ${t.fileId} was empty`)));return}te.copy(Tf,0,0,mr);let se=nm.getBigUint64(0);if(Number(se>>48n)===pL)return v(new Error("Error in blob: "+te.subarray(mr)));if(g=Number(se&0xffffffffffffn),g<mL&&_.size!==g&&(_.size=g,_.#t))for(let z of _.#t)z(g);te=te.subarray(mr,j),l-=mr}else if(j===0){let se=Buffer.allocUnsafe(8);return(0,Je.read)(o,se,0,mr,0,z=>{if(z)return v(z);if(Tf.set(se),g=Number(nm.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?f=setTimeout(()=>{v(new Error(`File read timed out reading from ${i}`))},V4).unref():(u=(0,Je.watch)(i,{persistent:!1},()=>{u.close(),u=null,f&&(clearTimeout(f),f=null,E(T,O))}),E(T,O)):h?v(new Error("Blob is incomplete")):(h=!0,E(T,O));return}(0,Je.close)(o),S.close(),T()})}else te=te.subarray(0,j);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=j,E(T,O);s&&l>=s&&(l>s&&(te=te.subarray(0,s-c)),l=g=s),n&&n>c&&(te=te.subarray(n-c))}c+=j;try{S.enqueue(te)}catch(se){return Ji.default.debug?.("Error enqueuing chunk",se),T()}l===g&&((0,Je.close)(o),S.close()),T()})},"readMore"))},"pull"),cancel(){(0,Je.close)(o),clearTimeout(f),u&&u.close()}});function p(){if(d===void 0){let S=t.store,g=t.fileId+":blob";d=!S.attemptLock(g,0,()=>{d=!1}),d||S.unlock(g,0)}return d}}slice(t,r,n){let s=_n.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};_n.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};_n.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(hn=t?.primaryStore?.rootStore,!hn)throw new Error("No target table specified");return RL(this).saving??Promise.resolve()}},AL=500;a(cm,"deleteBlob");a(K4,"setDeletionDelay");global.createBlob=function(e,t){let r=new sm(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(_n.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Af.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Af.Readable.from(e);else throw new Error("Invalid source type");return r};a(RL,"saveBlob");a(KA,"writeBlobWithStream");a(lm,"getFileId");a(yL,"getFilePathForBlob");YA=new Map;a(yf,"getRootBlobPathsForDB");a(jA,"deleteRootBlobPathsForDB");a(bL,"rimrafSteadily");a(Rf,"getFilePath");a(Y4,"writeBlobWithBuffer");a(W4,"generateFilePath");EL=new Map;a(z4,"getNextFileId");im=128;a(j4,"getNextStorageIndex");a(Q4,"createFrequencyTableForStoragePaths");a(um,"encodeBlobsWithFilePath");a(J4,"encodeBlobsAsBuffers");a(dm,"decodeBlobsWithWrites");a(bf,"decodeWithBlobCallback");a(Sc,"decodeFromDatabase");a(ia,"deleteBlobsInObject");a(Zl,"findBlobsInObject");X4=new Ei.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ei.addExtension)({Class:gi,type:11,unpack:a(function(e){let t=X4.unpack(e),r=new sm;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(_n.set(r,{storageIndex:t[1],fileId:t[2],store:hn}),Xi)return Xi(r)??r;if(!hn)throw new Error("No store specified, cannot load blob from storage")}else _n.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=_n.get(e);if(Xl!==void 0&&(gc=!0,t?.recordId!==void 0&&t.recordId!==Xl))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<gL)return r.size=t.contentBuffer.length,(0,Ei.pack)([r,t.contentBuffer])}if(Xl!==void 0){if(t=RL(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Xl,(0,Ei.pack)([r,t.storageIndex,t.fileId])}if(t){if(Xi)return Xi(e),(0,Ei.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Je.readFileSync)(Rf(t));if(n.length>=mr&&(n.copy(Tf,0,0,mr),Number(nm.getBigUint64(0)&0xffffffffffffn)===n.length-mr))return Buffer.concat([(0,Ei.pack)([r]),n]);if(Lr)Lr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Lr)return Lr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ei.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(Z4,"polyfillBlob")});var LL={};Be(LL,{asyncSerialization:()=>QA,contentTypes:()=>tR,findBestSerializer:()=>hm,getDeserializer:()=>no,hasAsyncSerialization:()=>JA,registerContentHandlers:()=>wf,serialize:()=>If,serializeMessage:()=>oa,toCsvStream:()=>_m});function t3(e){try{return e?.[0]===123?eR(e):e}catch{return e}}function wf(e){e.register(n3,{serializers:[{regex:/^application\/json$/,serializer:Sf},{regex:/^application\/cbor$/,serializer:a(function(t){return new Tc.EncoderStream(Nf).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Ac.Readable.from((0,Si.encodeIter)(t,Nf)):(0,Si.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),_m(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Si.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Tc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function hm(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let p of f){let S=p.indexOf("=");h[p.substring(0,S)]=p.substring(S+1)}d=+h.q;let _=$r.get(u);if(_){let p=(_.q||1)*d;p>s&&(n=_,i=_.type||u,s=p,o=h)}}if(!n){if(r)throw new wL.ClientError("No supported content types found in Accept header, supported types include: "+Array.from($r.keys()).join(", "),406);n=$r.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function If(e,t,r){let n=NL&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof gi)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=hm(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),ZA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ro.createBrotliCompress)({params:{[ro.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ro.constants.BROTLI_MODE_TEXT:ro.constants.BROTLI_MODE_GENERIC,[ro.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>NL?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ro.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function oa(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;to=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=hm(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Of(e);return to?.length>0?(to.length===1?to[0]:Promise.all(to)).then(()=>oa(e,t,!0)):n}finally{to=void 0}}function QA(e){if(to)to.push(e);else throw new Error("Unable to serialize asynchronously")}function JA(){return!!to}function s3(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function o3(e){return i3.includes(e)}function a3(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function no(e="",t=!1){let r=a3(e),n=r.type&&$r.get(r.type)?.deserialize||c3(r);return t?s=>s3(s).then(n):n}function c3(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!o3(e.parameters.charset)&&ZA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return eR(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function l3(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function _m(e,t){let r=Ac.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new e3(n,s);return r.pipe(i)}var Si,Tc,ro,wL,Ac,IL,XA,CL,ZA,e3,PL,Of,eR,Nf,$r,tR,OL,DL,r3,n3,NL,to,i3,eo=be(()=>{VA();Si=require("msgpackr"),Tc=require("cbor-x"),ro=require("zlib"),wL=M(he()),Ac=M(require("stream"));Dr();IL=M(ui()),XA=M(ce());G();CL=M(require("yaml")),ZA=M(mi());fs();({Transform:e3}=require("json2csv")),PL=XA.default.get(B.SERIALIZATION_BIGINT)!==!1,Of=PL?Ec:JSON.stringify,eR=PL?$A:JSON.parse,Nf={useRecords:!1,useToJSON:!0},$r=new Map,tR=$r;Ke.contentTypes=tR;(0,IL._assignPackageExport)("contentTypes",tR);$r.set("application/json",{serializeStream:Sf,serialize:Of,deserialize(e){return eR(e)},q:.8});OL=new Tc.Encoder(Nf);$r.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Tc.EncoderStream(Nf).end(e)},serialize:OL.encode,deserialize:OL.decode,q:1});$r.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Ac.Readable.from((0,Si.encodeIter)(e,Nf)):(0,Si.pack)(e)},serialize:Si.pack,deserialize:Si.unpack,q:.9});$r.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),_m(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),_m(e,e?.getColumns?.())},q:.1});$r.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Ac.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});$r.set("text/yaml",{serialize(e){return CL.stringify(e,{aliasDuplicateObjects:!1})},q:.7});$r.set("text/event-stream",{serializeStream:a(function(e){return Ac.Readable.from(l3(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
11
|
+
`),e.data){let r=e.data;typeof r=="object"&&(r=Of(r)),t+="data: "+r+`
|
|
12
12
|
`}return e.id&&(t+="id: "+e.id+`
|
|
13
13
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
14
14
|
`),t+`
|
|
15
|
-
`}else return typeof e=="object"?`data: ${
|
|
15
|
+
`}else return typeof e=="object"?`data: ${Of(e)}
|
|
16
16
|
|
|
17
17
|
`:`data: ${e}
|
|
18
18
|
|
|
19
|
-
`},"serialize"),compressible:!1,q:.8});$r.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});CL={type:"application/json",serializeStream:gf,serialize:bf,deserialize:J4,q:.5};$r.set("*/*",CL);$r.set("",CL);a(J4,"tryJSONParse");a(Nf,"registerContentHandlers");X4=require("fastify-plugin"),Z4=X4(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=hp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(hp,"findBestSerializer");bL=JA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(wf,"serialize");a(ia,"serializeMessage");a(QA,"asyncSerialization");a(jA,"hasAsyncSerialization");a(e3,"streamToBuffer");t3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(r3,"isBufferEncoding");a(n3,"parseContentType");a(so,"getDeserializer");a(s3,"deserializerUnknownType");a(i3,"transformIterable");a(_p,"toCsvStream")});var rR={};xe(rR,{start:()=>h3});function o3(e){if(e.kind!==Me.Kind.OPERATION_DEFINITION&&e.kind!==Me.Kind.FRAGMENT_DEFINITION)throw new Rr(`Unexpected non-executable definition type ${e.kind}.`)}function DL(e){if(typeof e!="object"||e===null)throw new Ti("Request body must be an object.");if(!("query"in e))throw new Ti("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ti("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ti("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ti("Request body `operationName` field must be a string.")}function tR(e){return parseInt(e.value,10)}function ML(e){return parseFloat(e.value)}function vL(e,t,r){let n=r.get(e.name.value);return UL(n)?xL(n,t):{attribute:t,value:n}}function UL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function xL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],UL(n)?xL(n,t):{attribute:t,value:n}))}function a3(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Me.Kind.NULL:return{attribute:t,value:null};case Me.Kind.INT:return{attribute:t,value:tR(e.value)};case Me.Kind.FLOAT:return{attribute:t,value:ML(e.value)};case Me.Kind.BOOLEAN:case Me.Kind.STRING:return{attribute:t,value:e.value.value};case Me.Kind.VARIABLE:return vL(e.value,t,r);case Me.Kind.OBJECT:return BL(e.value,t,r);case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Rr(`Value type, ${e.value.kind}, is not supported.`)}}function BL(e,t,r){return e.fields.flatMap(n=>a3(n,t,r))}function c3(e,t){switch(e.value.kind){case Me.Kind.NULL:return{attribute:e.name.value,value:null};case Me.Kind.INT:return{attribute:e.name.value,value:tR(e.value)};case Me.Kind.FLOAT:return{attribute:e.name.value,value:ML(e.value)};case Me.Kind.BOOLEAN:case Me.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Me.Kind.VARIABLE:return vL(e.value,e.name.value,t);case Me.Kind.OBJECT:return BL(e.value,[e.name.value],t);case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Rr(`Argument type, ${e.value.kind}, is not supported.`)}}function l3(e,t){return e.flatMap(r=>c3(r,t))}function mp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Me.Kind.FIELD:return r;case Me.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Rr(`Fragment \`${n}\` not found.`);return mp(s.selectionSet,t)}case Me.Kind.INLINE_FRAGMENT:return mp(r.selectionSet,t)}})}function HL(e,t){return mp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:HL(r.selectionSet,t)}:r.name.value)}async function u3(e,t,r,n){let s=us.getMatch(e.name.value,"graphql");if(s===void 0)throw new Rr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:HL(e.selectionSet,r),conditions:l3(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function kL(e){switch(e.kind){case Me.Kind.NULL:return null;case Me.Kind.INT:return tR(e);case Me.Kind.FLOAT:return parseFloat(e.value);case Me.Kind.STRING:case Me.Kind.BOOLEAN:return e.value;case Me.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:kL(r.value),...t}),{});case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Rr(`Value type, ${e.kind}, is not supported.`)}}function d3(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=kL(n.defaultValue)),n.type.kind===Me.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Rr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function f3(e,t,r,n){if(e.operation===Me.OperationTypeNode.SUBSCRIPTION)throw new Rr("Subscriptions are not supported.");if(e.operation===Me.OperationTypeNode.MUTATION)throw new Rr("Mutations are not supported yet.");let s=d3(e.variableDefinitions,t),i=await Promise.all(mp(e.selectionSet,r).map(c=>u3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function LL({query:e,variables:t={},operationName:r},n){let s=Me.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(o3(u),u.kind===Me.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Rr("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Rr(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Rr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Rr(`Operation \`${r}\` not found.`);let l=await f3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function _3(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 DL(r),LL(r,e)}case"POST":{let r=await so(e.headers.get("content-type"),!0)(e._nodeRequest);return DL(r),LL(r,e)}default:throw new Ti("Method Not Allowed",405,{Allow:"GET, POST"})}}function h3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await _3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Me.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Rr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Me.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Rr)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 Me,Rr,Ti,FL=ye(()=>{Me=M(require("graphql"));to();Zl();a(o3,"assertExecutableDefinitionNode");a(DL,"assertRequestParams");a(tR,"processIntValueNode");a(ML,"processFloatValueNode");a(vL,"processVariableNode");a(UL,"isObject");a(xL,"transformObjectIntoQueryCondition");a(a3,"processObjectFieldNode");a(BL,"processObjectValueNode");a(c3,"processArgumentNode");a(l3,"buildConditionsQuery");a(mp,"fillInFragments");a(HL,"buildSelectQuery");a(u3,"processFieldNode");a(kL,"processConstValueNode");a(d3,"resolveVariables");a(f3,"executeOperation");a(LL,"resolver");Rr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ti=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(_3,"graphqlQueryingHandler");a(h3,"start")});var Ri=C((cRe,$L)=>{"use strict";var qL=oe(),GL=(k(),P($)),ru=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ai=require("joi"),oa={schema_format:{pattern:ru,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},m3=Ai.alternatives(Ai.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ai.number(),Ai.array()).required(),p3=Ai.alternatives(Ai.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ai.number()),E3=Ai.alternatives(Ai.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ai.number()).required();function g3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oa.schema_length.maximum?`'${e}' maximum of 250 characters`:ru.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(g3,"checkValidTable");function S3(e,t){return qL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(S3,"validateSchemaExists");function T3(e,t){let r=t.state.ancestors[0].schema;return qL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(T3,"validateTableExists");function A3(e,t){return e.toLowerCase()===GL.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${GL.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(A3,"validateSchemaName");$L.exports={common_validators:oa,schema_regex:ru,hdb_schema_table:m3,validateSchemaExists:S3,validateTableExists:T3,validateSchemaName:A3,checkValidTable:g3,hdb_database:p3,hdb_table:E3}});var sR=C((uRe,KL)=>{var{hdb_table:R3,hdb_database:VL}=Ri(),y3=rt(),nR=require("joi"),b3={undefined:"undefined",null:"null"},O3=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||b3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),N3=nR.object({database:VL,schema:VL,table:R3,records:nR.array().items(nR.object().custom(O3)).required()});KL.exports=function(e){return y3.validateBySchema(e,N3)}});var WL=C((fRe,YL)=>{"use strict";var iR=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};YL.exports=iR});var QL=C((hRe,zL)=>{"use strict";var oR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};zL.exports=oR});var eM={};xe(eM,{HAS_EXPIRATION:()=>gp,HAS_RESIDENCY_ID:()=>_R,HAS_STRUCTURE_UPDATE:()=>Tp,LAST_TIMESTAMP_PLACEHOLDER:()=>Df,LOCAL_TIMESTAMP:()=>w3,METADATA:()=>Rc,NEW_TIMESTAMP_PLACEHOLDER:()=>JL,NO_TIMESTAMP:()=>aR,PENDING_LOCAL_TIME:()=>hR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>fR,RecordEncoder:()=>dR,TIMESTAMP_ASSIGN_LAST:()=>C3,TIMESTAMP_ASSIGN_NEW:()=>XL,TIMESTAMP_ASSIGN_PREVIOUS:()=>ZL,TIMESTAMP_PLACEHOLDER:()=>pp,TIMESTAMP_RECORD_PREVIOUS:()=>cR,handleLocalTimeForGets:()=>Ap,recordUpdater:()=>mR,removeEntry:()=>bc});function D3(){return Pf[0]=Pf[0]^64,I3.getFloat64(0)}function Ap(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[Rc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[Rc]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[Rc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ac.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Ac.length;u++){let f=Ac[u].deref();(!f||f.isDone||f.isCommitted)&&Ac.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function mR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?nu=i?.localTime?cR|ZL:aR:nu=l?i?.localTime?cR|16384:XL|16384:aR;let _=u?.expiresAt;if(_>=0&&(c|=gp),Cf=c,lR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:nu>0},S,g=0;try{let y=i?.residencyId,E=u?.residencyId;E&&(uR=E,Cf|=_R,g|=Oc),y!==E&&(g|=Nc,y||(y=0)),c&gp&&(g|=Mf),u?.originatingOperation&&(g|=Lf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&mn&&(r.getBinaryFast(i.localTime)||sa(i.value));let T;if(s!==void 0&&(T=up(()=>e.put(n,s,m),n,e.rootStore),Ec&&(g|=mn)),l){let N=u?.user?.username;if(h&&(up(()=>e.encoder.encode(h),n,e.rootStore),Ec&&(g|=mn)),e.encoder.hasStructureUpdate&&(g|=Tp,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let x=i?.localTime,H=r.get(x);if(H){let q=It(H).previousLocalTime;return T=r.put(x,yc(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,If,g,E,y,_),{ifVersion:S}),T}}T=r.put(s===void 0?JL:Df,yc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,If,g,E,y,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return T}catch(y){throw y.message+=" id: "+n+" options: "+m,y}}}function bc(e,t,r){if(t)return t.value&&t.metadataFlags&mn&&!e.auditStore.getBinaryFast(t.localTime)&&sa(t.value),e.remove(t.key,r)}var jL,Ep,pp,Df,fR,JL,w3,Rc,Pf,I3,aR,XL,C3,ZL,cR,gp,_R,hR,Tp,P3,If,nu,Cf,lR,uR,dR,Ac,su=ye(()=>{jL=require("msgpackr");io();Ep=M(X());fs();fs();pp=new Uint8Array([1,1,1,1,4,64,0,0]),Df=new Uint8Array([1,1,1,1,1,0,0,0]),fR=new Uint8Array([1,1,1,1,3,64,0,0]),JL=new Uint8Array([1,1,1,1,0,64,0,0]),w3=Symbol("local-timestamp"),Rc=Symbol("metadata"),Pf=new Uint8Array(8),I3=new DataView(Pf.buffer,0,8),aR=0,XL=0,C3=1,ZL=3,cR=4,gp=16,_R=32,hR=1,Tp=256,nu=0,Cf=-1,lR=-1,uR=0,dR=class extends jL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(nu||Cf>=0){let o=0,c=nu;c&&(o+=8,nu=0);let l=Cf,u=lR,f=uR;l>=0&&(o+=4,Cf=-1,u>=0&&(o+=8,lR=-1),f&&(o+=4,uR=0));let d=P3=r.call(this,s,i|2048|o);If=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(pp[4]=c,pp[5]=c>>8,d.set(pp,h),h+=8),Ec&&(l|=mn),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Sp<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return If=r.call(this,s,i),If};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Pf,0,c),c+=8;else for(let h=0;h<8;h++)Pf[h]=t[c++];l=D3(),i=t[c]}let u,f;i<32&&(i===Sp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&gp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&_R&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=gc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[Rc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:gc(()=>super.decode(t,r),this.rootStore)}catch(c){return Ep.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(D3,"getTimestamp");a(Ap,"handleLocalTimeForGets");Ac=[];setInterval(()=>{for(let e=0;e<Ac.length;e++){let t=Ac[e].deref();!t||t.isDone||t.isCommitted?Ac.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Ep.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Ep.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(mR,"recordUpdater");a(bc,"removeEntry")});var vf=C((TRe,rM)=>{"use strict";var tM=ce(),L3=(k(),P($)),{RecordEncoder:M3}=(su(),P(eM));tM.initSync();var v3=tM.get(L3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,pR=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=v3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:M3})}};rM.exports=pR});var Uf=C((RRe,nM)=>{"use strict";var Hn=ce(),_s=(k(),P($));Hn.initSync();var Rp=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Hn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Hn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Hn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Hn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Hn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Hn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Hn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Hn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Hn.get(_s.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};nM.exports=Rp;Rp.MAX_DBS=1e4});var _t=C((bRe,_M)=>{"use strict";var gR=require("lmdb"),ks=require("fs-extra"),kn=require("path"),yp=ln(),oM=X(),pn=Ln().LMDB_ERRORS_ENUM,bp=QL(),SR=vf(),aM=Uf(),aa=Ht(),sM=(k(),P($)),{table:U3,resetDatabases:x3}=(Ue(),P(ot)),iM=ce(),Fs=aa.INTERNAL_DBIS_NAME,cM=aa.DBI_DEFINITION_NAME,B3="data.mdb",H3="lock.mdb",xf=".mdb",k3="-lock",ER=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[aa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[aa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new gR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Op(e,t){if(e===void 0)throw new Error(pn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(pn.ENV_NAME_REQUIRED)}a(Op,"pathEnvNameValidation");async function TR(e,t,r=!0){try{await ks.access(e)}catch(n){throw n.code==="ENOENT"?new Error(pn.INVALID_BASE_PATH):n}try{let n=kn.join(e,t+xf);return await ks.access(n,ks.constants.R_OK|ks.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ks.access(kn.join(e,t,B3),ks.constants.R_OK|ks.constants.F_OK),kn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(pn.INVALID_ENVIRONMENT)}else throw new Error(pn.INVALID_ENVIRONMENT);throw n}}a(TR,"validateEnvironmentPath");function Np(e,t){if(yp.validateEnv(e),t===void 0)throw new Error(pn.DBI_NAME_REQUIRED)}a(Np,"validateEnvDBIName");async function F3(e,t,r=!1,n=!1){Op(e,t);let s=kn.basename(e);t=t.toString();let i=iM.get(sM.CONFIG_PARAMS.DATABASES);i||iM.setProperty(sM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await TR(e,t,n),lM(e,t,r)}catch(o){if(o.message===pn.INVALID_ENVIRONMENT){let c=kn.join(e,t);await ks.mkdirp(n?c:e);let l=new aM(n?c:c+xf,!1),u=gR.open(l);u.dbis=Object.create(null);let f=new SR(!1);u.openDB(Fs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=AR(e,t,r);return u[aa.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(F3,"createEnvironment");async function G3(e,t,r,n=!0){Op(e,t),t=t.toString();let s=kn.join(e,t);return U3({table:t,database:kn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(G3,"copyEnvironment");async function lM(e,t,r=!1){Op(e,t),t=t.toString();let n=AR(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 TR(e,t),i=kn.join(e,t+xf),o=s!=i,c=new aM(s,o),l=gR.open(c);l.dbis=Object.create(null);let u=dM(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[aa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(lM,"openEnvironment");async function q3(e,t,r=!1){Op(e,t),t=t.toString();let n=kn.join(e,t+xf),s=await TR(e,t);if(global.lmdb_map!==void 0){let i=AR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await uM(o),delete global.lmdb_map[i]}}await ks.remove(s),await ks.remove(s===n?s+k3:kn.join(kn.dirname(s),H3))}a(q3,"deleteEnvironment");async function uM(e){yp.validateEnv(e);let t=e[aa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(uM,"closeEnvironment");function AR(e,t,r=!1){let s=`${kn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(AR,"getCachedEnvironmentName");function $3(e){yp.validateEnv(e);let t=Object.create(null),r=hs(e,Fs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Fs)try{t[n]=Object.assign(new bp,s)}catch{oM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a($3,"listDBIDefinitions");function dM(e){yp.validateEnv(e);let t=[],r=hs(e,Fs);for(let{key:n}of r.getRange({start:!1}))n!==Fs&&t.push(n);return t}a(dM,"listDBIs");function V3(e,t){let n=hs(e,Fs).getEntry(t),s=new bp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{oM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(V3,"getDBIDefinition");function fM(e,t,r,n=!r){if(Np(e,t),t=t.toString(),t===Fs)throw new Error(pn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===pn.DBI_DOES_NOT_EXIST){let i=new SR(r,n===!0),o=e.openDB(t,i),c=new bp(r===!0,n);return o[cM]=c,hs(e,Fs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(fM,"createDBI");function hs(e,t){if(Np(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Fs?r=V3(e,t):r=new bp,r===void 0)throw new Error(pn.DBI_DOES_NOT_EXIST);let n;try{let s=new SR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(pn.DBI_DOES_NOT_EXIST):s}return n[cM]=r,e.dbis[t]=n,n}a(hs,"openDBI");function K3(e,t){Np(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[aa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(K3,"statDBI");async function Y3(e,t){try{let r=kn.join(e,t+xf);return(await ks.stat(r)).size}catch{throw new Error(pn.INVALID_ENVIRONMENT)}}a(Y3,"environmentDataSize");function W3(e,t){if(Np(e,t),t=t.toString(),t===Fs)throw new Error(pn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,Fs).removeSync(t)}a(W3,"dropDBI");function z3(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{hs(e,i)}catch(o){if(o.message===pn.DBI_DOES_NOT_EXIST)fM(e,i,i!==t,i===t),n=!0;else throw o}}n&&x3()}a(z3,"initializeDBIs");_M.exports={openDBI:hs,openEnvironment:lM,createEnvironment:F3,listDBIs:dM,listDBIDefinitions:$3,createDBI:fM,dropDBI:W3,statDBI:K3,deleteEnvironment:q3,initializeDBIs:z3,TransactionCursor:ER,environmentDataSize:Y3,copyEnvironment:G3,closeEnvironment:uM}});var mM=C((NRe,hM)=>{"use strict";var RR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};hM.exports=RR});var EM=C((IRe,pM)=>{"use strict";var yR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};pM.exports=yR});var SM=C((PRe,gM)=>{"use strict";var bR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};gM.exports=bR});var Ic=C((URe,RM)=>{"use strict";var Q3=_t(),j3=mM(),J3=EM(),X3=SM(),yi=ln(),Bf=Ln().LMDB_ERRORS_ENUM,Z3=Ht(),oo=(k(),P($)),eX=oe(),tX=require("uuid"),LRe=require("lmdb"),{handleHDBError:rX,hdb_errors:nX}=pe(),{OVERFLOW_MARKER:MRe,MAX_SEARCH_KEY_LENGTH:vRe}=Z3,TM=ce();TM.initSync();var wp=TM.get(oo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),OR=oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,wc=oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function sX(e,t,r,n,s=yi.getNextMonotonicTime()){CR(e,t,r,n),NR(e,t,r);let i=new j3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];AM(u,!0,s);let f=iX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return wR(o,c,n,i,s)}a(sX,"insertRecords");function iX(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let f=c([[{}]]);Array.isArray(f)&&(c=f[0][oo.FUNC_VAL],n[o]=c)}let l=yi.getIndexedValues(c),u=e.dbis[o];if(l){wp&&u.prefetch(l.map(f=>({key:f,value:s})),Ip);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}wp&&e.dbis[t].prefetch([s],Ip),e.dbis[t].put(s,n,n[wc])})}a(iX,"insertRecord");function oX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(oX,"removeSkippedRecords");function AM(e,t,r){let n=r>0;(n||!Number.isInteger(e[wc]))&&(e[wc]=r||(r=yi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[OR]))&&(e[OR]=r||yi.getNextMonotonicTime()):delete e[OR]}a(AM,"setTimestamps");function NR(e,t,r){r.indexOf(oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Q3.initializeDBIs(e,t,r)}a(NR,"initializeTransaction");async function aX(e,t,r,n,s=yi.getNextMonotonicTime()){CR(e,t,r,n),NR(e,t,r);let i=new J3,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=IR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return wR(c,l,n,i,s,o)}a(aX,"updateRecords");async function cX(e,t,r,n,s=yi.getNextMonotonicTime()){try{CR(e,t,r,n)}catch(l){throw rX(l,l.message,nX.HTTP_STATUS_CODES.BAD_REQUEST)}NR(e,t,r);let i=new X3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;eX.isEmpty(u[t])?(f=tX.v4(),u[t]=f):f=u[t];let d=IR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return wR(o,c,n,i,s)}a(cX,"upsertRecords");async function wR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||yi.getNextMonotonicTime(),oX(r,i),n}a(wR,"finalizeWrite");function IR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(AM(r,!f,o),Number.isInteger(r[wc])&&u[wc]>r[wc])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let S=r[m],g=e.dbis[m];if(g===void 0)continue;let y=u[m];if(typeof S=="function"){let T=S([[u]]);Array.isArray(T)&&(S=T[0][oo.FUNC_VAL],r[m]=S)}if(S===y)continue;let E=yi.getIndexedValues(y);if(E){wp&&g.prefetch(E.map(T=>({key:T,value:n})),Ip);for(let T=0,N=E.length;T<N;T++)g.remove(E[T],n)}if(E=yi.getIndexedValues(S),E){wp&&g.prefetch(E.map(T=>({key:T,value:n})),Ip);for(let T=0,N=E.length;T<N;T++)g.put(E[T],n)}}let _={...u,...r};c.put(n,_,_[wc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:IR(e,t,r,n,s,i,o))}a(IR,"updateUpsertRecord");function lX(e,t,r){if(yi.validateEnv(e),t===void 0)throw new Error(Bf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Bf.WRITE_ATTRIBUTES_REQUIRED):new Error(Bf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(lX,"validateBasic");function CR(e,t,r,n){if(lX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Bf.RECORDS_REQUIRED):new Error(Bf.RECORDS_MUST_BE_ARRAY)}a(CR,"validateWrite");function Ip(){}a(Ip,"noop");RM.exports={insertRecords:sX,updateRecords:aX,upsertRecords:cX}});var ao=C((BRe,uX)=>{uX.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var bM=C((HRe,yM)=>{"use strict";var dX=require("uuid"),PR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||dX.v4(),this.schema_table=`${this.schema}.${this.table}`}};yM.exports=PR});var Cp=C((FRe,OM)=>{"use strict";var fX=bM(),DR=class extends fX{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};OM.exports=DR});var wM=C((qRe,NM)=>{"use strict";NM.exports=hX;var _X="inserted";function hX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===_X?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(hX,"returnObject")});var Pp=C((KRe,CM)=>{"use strict";var mX=(k(),P($)),LR=_t(),pX=Ic(),{getSystemSchemaPath:EX,getSchemaPath:gX}=Et(),VRe=ao(),{validateBySchema:SX}=rt(),Hf=require("joi"),TX=Cp(),AX=wM(),{handleHDBError:RX,hdb_errors:yX,ClientError:bX}=pe(),IM=oe(),{HTTP_STATUS_CODES:OX}=yX,NX="inserted";CM.exports=wX;async function wX(e){let t=SX(e,Hf.object({database:Hf.string(),schema:Hf.string(),table:Hf.string().required(),attribute:Hf.string().required()}));if(t)throw new bX(t.message);let r=!e.skip_table_check&&IM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw RX(new Error,r,OX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=IM.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 TX(e.schema,e.table,e.attribute,e.id);try{let i=await LR.openEnvironment(gX(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);LR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await LR.openEnvironment(EX(),mX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await pX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return AX(NX,c,{records:[s]},l)}catch(i){throw i}}a(wX,"lmdbCreateAttribute")});var kf=C((zRe,DM)=>{"use strict";var co=oe(),PM=X(),WRe=sR(),{getDatabases:IX}=(Ue(),P(ot)),{ClientError:Cc}=pe();DM.exports=CX;function CX(e){if(co.isEmpty(e))throw new Cc("invalid update parameters defined.");if(co.isEmptyOrZeroLength(e.schema))throw new Cc("invalid schema specified.");if(co.isEmptyOrZeroLength(e.table))throw new Cc("invalid table specified.");if(!Array.isArray(e.records))throw new Cc("records must be an array");let t=IX()[e.schema]?.[e.table];if(co.isEmpty(t))throw new Cc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&co.isEmptyOrZeroLength(o[r]))throw PM.error("a valid hash attribute must be provided with update record:",o),new Cc("a valid hash attribute must be provided with update record, check log for more info");if(!co.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw PM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Cc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!co.isEmpty(o[r])&&o[r]!==""&&n.has(co.autoCast(o[r]))&&(o.skip=!0),n.add(co.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(CX,"insertUpdateValidate")});var MM=C((jRe,LM)=>{"use strict";var MR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};LM.exports=MR});var xM=C((XRe,UM)=>{"use strict";var vR=_t(),PX=X(),vM=Ln().LMDB_ERRORS_ENUM;UM.exports=DX;async function DX(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await vR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==vM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await vR.closeEnvironment(global.lmdb_map[n]),await vR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==vM.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){PX.error(t)}}a(DX,"cleanLMDBMap")});var QM=C((tye,zM)=>{"use strict";var UR=require("recursive-iterator"),LX=require("alasql"),xR=require("clone"),BM=oe(),{handleHDBError:HM,hdb_errors:MX}=pe(),{HDB_ERROR_MSGS:kM,HTTP_STATUS_CODES:FM}=MX,{getDatabases:vX}=(Ue(),P(ot)),UX=["DISTINCT_ARRAY"],GM=Symbol("validateTables"),BR=Symbol("validateTable"),eye=Symbol("getAllColumns"),qM=Symbol("validateAllColumns"),Dp=Symbol("findColumn"),$M=Symbol("validateOrderBy"),Ff=Symbol("validateSegment"),HR=Symbol("validateColumn"),VM=Symbol("setColumnsForTable"),KM=Symbol("checkColumnsForAsterisk"),YM=Symbol("validateGroupBy"),WM=Symbol("hasColumns"),kR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[GM](),this[KM](),this[qM]()}[GM](){if(this[WM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[BR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[BR](t.table)})}}[WM](){let t=!1,r=new UR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[BR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=vX();if(!r[t.databaseid])throw HM(new Error,kM.SCHEMA_NOT_FOUND(t.databaseid),FM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw HM(new Error,kM.TABLE_NOT_FOUND(t.databaseid,t.tableid),FM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=xR(s);i.table=xR(t),this.attributes.push(i)})}[Dp](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)}[KM](){let t=new UR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[VM](r.tableid)}[VM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new LX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qM](){this[Ff](this.statement.columns,!1),this[Ff](this.statement.joins,!1),this[Ff](this.statement.where,!1),this[YM](this.statement.group,!1),this[Ff](this.statement.order,!0)}[Ff](t,r){if(!t)return;let n=new UR(t),s=[];for(let{node:i,path:o}of n)!BM.isEmpty(i)&&!BM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$M](i):s.push(this[HR](i)));return s}[YM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&UX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=xR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Dp](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Dp](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[$M](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[HR](t)}[HR](t){let r=this[Dp](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]}};zM.exports=kR});var ZM=C((nye,XM)=>{"use strict";var jM=require("lodash"),Gf=require("mathjs"),xX=require("jsonata"),JM=oe();XM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?jM.uniqWith(e,jM.isEqual):e,"distinct_array"),searchJSON:BX,mad:qf.bind(null,Gf.mad),mean:qf.bind(null,Gf.mean),mode:qf.bind(null,Gf.mode),prod:qf.bind(null,Gf.prod),median:qf.bind(null,Gf.median)};function qf(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(qf,"aggregateFunction");function BX(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(JM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),JM.isEmpty(this.__ala__.res[r])){let n=xX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(BX,"searchJSON")});var tv=C((iye,ev)=>{"use strict";var er=require("moment"),FR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;ev.exports={current_date:a(()=>er().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>er().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return er(e).utc().format("YYYY");case"month":return er(e).utc().format("MM");case"day":return er(e).utc().format("DD");case"hour":return er(e).utc().format("HH");case"minute":return er(e).utc().format("mm");case"second":return er(e).utc().format("ss");case"millisecond":return er(e).utc().format("SSS");default:break}},"extract"),date:a(e=>er(e).utc().format(FR),"date"),date_format:a((e,t)=>er(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>er(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>er(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=er(e).utc(),s=er(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>er().utc().valueOf(),"now"),get_server_time:a(()=>er().format(FR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(FR),"offset_utc")}});var iv=C((aye,sv)=>{"use strict";var HX=require("@turf/area"),kX=require("@turf/length"),FX=require("@turf/circle"),GX=require("@turf/difference"),qX=require("@turf/distance"),$X=require("@turf/boolean-contains"),VX=require("@turf/boolean-equal"),KX=require("@turf/boolean-disjoint"),YX=require("@turf/helpers"),rv=(k(),P($)),Ve=oe(),lo=X();sv.exports={geoArea:WX,geoLength:zX,geoCircle:QX,geoDifference:jX,geoDistance:nv,geoNear:JX,geoContains:XX,geoEqual:ZX,geoCrosses:e6,geoConvert:t6};function WX(e){if(Ve.isEmpty(e))return NaN;typeof e=="string"&&(e=Ve.autoCastJSON(e));try{return HX.default(e)}catch(t){return lo.trace(t,e),NaN}}a(WX,"geoArea");function zX(e,t){if(Ve.isEmpty(e))return NaN;typeof e=="string"&&(e=Ve.autoCastJSON(e));try{return kX.default(e,{units:t||"kilometers"})}catch(r){return lo.trace(r,e),NaN}}a(zX,"geoLength");function QX(e,t,r){if(Ve.isEmpty(e))return NaN;if(Ve.isEmpty(t))return NaN;typeof e=="string"&&(e=Ve.autoCastJSON(e));try{return FX.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(QX,"geoCircle");function jX(e,t){if(Ve.isEmpty(e))return NaN;if(Ve.isEmpty(t))return NaN;typeof e=="string"&&(e=Ve.autoCastJSON(e)),typeof t=="string"&&(t=Ve.autoCastJSON(t));try{return GX(e,t)}catch(r){return lo.trace(r,e,t),NaN}}a(jX,"geoDifference");function nv(e,t,r){if(Ve.isEmpty(e))return NaN;if(Ve.isEmpty(t))return NaN;typeof e=="string"&&(e=Ve.autoCastJSON(e)),typeof t=="string"&&(t=Ve.autoCastJSON(t));try{return qX.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(nv,"geoDistance");function JX(e,t,r,n){if(Ve.isEmpty(e)||Ve.isEmpty(t))return!1;if(Ve.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ve.autoCastJSON(e)),typeof t=="string"&&(t=Ve.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return nv(e,t,n)<=r}catch(s){return lo.trace(s,e,t),!1}}a(JX,"geoNear");function XX(e,t){if(Ve.isEmpty(e)||Ve.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ve.autoCastJSON(e)),typeof t=="string"&&(t=Ve.autoCastJSON(t));try{return $X.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(XX,"geoContains");function ZX(e,t){if(Ve.isEmpty(e)||Ve.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ve.autoCastJSON(e)),typeof t=="string"&&(t=Ve.autoCastJSON(t));try{return VX.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(ZX,"geoEqual");function e6(e,t){if(Ve.isEmpty(e)||Ve.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ve.autoCastJSON(e)),typeof t=="string"&&(t=Ve.autoCastJSON(t));try{return!KX.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(e6,"geoCrosses");function t6(e,t,r){if(Ve.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ve.isEmpty(t))throw new Error("geo_type is required");if(Ve.isEmpty(rv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ve.autoCastJSON(e)),YX[t](e,r)}a(t6,"geoConvert")});var Lp=C((lye,ov)=>{var Pc=ZM(),Fn=tv(),bi=iv();ov.exports=e=>{e.aggr.mad=e.aggr.MAD=Pc.mad,e.aggr.mean=e.aggr.MEAN=Pc.mean,e.aggr.mode=e.aggr.MODE=Pc.mode,e.aggr.prod=e.aggr.PROD=Pc.prod,e.aggr.median=e.aggr.MEDIAN=Pc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Pc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Pc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Fn.current_time,e.fn.extract=e.fn.EXTRACT=Fn.extract,e.fn.date=e.fn.DATE=Fn.date,e.fn.date_format=e.fn.DATE_FORMAT=Fn.date_format,e.fn.date_add=e.fn.DATE_ADD=Fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Fn.date_diff,e.fn.now=e.fn.NOW=Fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Fn.get_server_time,e.fn.getdate=e.fn.GETDATE=Fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var uv=C((uye,lv)=>{"use strict";var $f=require("lodash"),En=require("alasql");En.options.cache=!1;var r6=Lp(),av=require("clone"),Mp=require("recursive-iterator"),He=X(),Je=oe(),iu=Gn(),n6=(k(),P($)),{hdb_errors:s6}=pe(),{getDatabases:cv}=(Ue(),P(ot)),i6="IS NULL",Gs="There was a problem performing this search. Please check the logs and try again.";r6(En);var GR=class{static{a(this,"SQLSearch")}constructor(t,r){if(Je.isEmpty(t))throw He.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Je.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Je.isEmptyOrZeroLength(n))return He.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw He.error("Error thrown from checkEmptySQL in SQLSearch class method search."),He.error(n),new Error(Gs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw He.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),He.error(n),new Error(Gs)}if(Object.keys(this.data).length===0)return He.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw He.error("Error thrown from processJoins in SQLSearch class method search."),He.error(n),new Error(Gs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw He.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),He.error(n),new Error(Gs)}try{return t=await this._finalSQL(),t}catch(n){throw He.error("Error thrown from finalSQL in SQLSearch class method search."),He.error(n),new Error(Gs)}}_getColumns(){let t=new Mp(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(av(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$f.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=cv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Je.isEmpty(this.statement.where)){He.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Je.isEmpty(r)&&r.right)if(Je.isNotEmptyAndHasValue(r.right.value)){let n=Je.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new En.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Je.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new En.yy.LogicValue({value:i}):n instanceof En.yy.StringValue&&Je.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new En.yy.NumValue({value:i}))});if(t){He.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Mp(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Je.isEmpty(n6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Je.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Je.isEmptyOrZeroLength(r.left.columnid)||Je.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Je.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Je.isEmpty(r.right.value)||!Je.isEmpty(r.left.value)?n.add(Je.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from)&&Je.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&$f.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Je.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Je.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(Je.isEmptyOrZeroLength(this.all_table_attributes)&&!Je.isEmptyOrZeroLength(this.columns.columns))return t;if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await En.promise(r)}catch(r){throw He.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),He.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(av(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Je.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(i6)>-1&&this.tables.forEach(s=>{let i={columnid:cv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$f.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Je.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await iu.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(Gs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await iu.getDataByValue(d);for(let[_,m]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(Gs)}else if(!Je.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let m=await iu.getDataByValue(c,_.operation);if(l)for(let[S]of m)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of m)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),He.error(f),new Error(Gs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await iu.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),He.error(f),new Error(Gs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof En.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new En.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new En.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new En.yy.FuncValue:new En.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let m=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(m+=" ON "+_.on.toString()),i.push(m),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let m=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${m}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${m}\` AS "${S}.${m}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(_,s);h=await En.promise(m,t),t=null}catch(_){throw He.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),He.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,m=h.length;_<m;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let m=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=$f.difference(m,[..._.keys].map(g=>g.toString()));for(let g=0,y=S.length;g<y;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Mp(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=$f.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw He.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),He.error(i),new Error(Gs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await iu.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let m=0;m<u;m++){let S=s.columns[m],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getData."),He.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();He.trace(`Final SQL: ${s}`),n=await En.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),He.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw He.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),He.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return He.error(s6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),He.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await iu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw He.error("There was an error when processing this SQL operation. Check your logs"),He.error(o),new Error(Gs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};lv.exports=GR});var Vr=C((fye,dv)=>{"use strict";var o6=QM();dv.exports={searchByConditions:c6,searchByHash:l6,searchByValue:u6,search:d6};var qR=Gn(),{transformReq:$R}=oe(),a6=uv();async function c6(e){return $R(e),qR.searchByConditions(e)}a(c6,"searchByConditions");async function l6(e){$R(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of qR.searchByHash(e))r&&t.push(r);return t}a(l6,"searchByHash");async function u6(e){$R(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of qR.searchByValue(e))t.push(r);return t}a(u6,"searchByValue");function d6(e,t){try{let r=new o6(e);r.validate(),new a6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(d6,"search")});var uo=C((hye,mv)=>{"use strict";var Vf=require("crypto"),f6=ce(),{CONFIG_PARAMS:_6}=(k(),P($)),_v="aes-256-cbc",h6=32,m6=16,VR=64,hv=32,p6=VR+hv,fv=new Map;mv.exports={encrypt:E6,decrypt:g6,createNatsTableStreamName:S6};function E6(e){let t=Vf.randomBytes(h6),r=Vf.randomBytes(m6),n=Vf.createCipheriv(_v,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(E6,"encrypt");function g6(e){let t=e.substr(0,VR),r=e.substr(VR,hv),n=e.substr(p6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Vf.createDecipheriv(_v,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(g6,"decrypt");function S6(e,t){let r=f6.get(_6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=fv.get(r);return n||(n=Vf.createHash("md5").update(r).digest("hex"),fv.set(r,n)),n}a(S6,"createNatsTableStreamName")});var fo=C((Eye,Sv)=>{"use strict";var pye=Vr(),Kf=X(),{validateBySchema:pv}=rt(),Dc=require("joi"),T6=uo(),vp=oe(),{handleHDBError:Up,hdb_errors:A6,ClientError:Ev}=pe(),{HDB_ERROR_MSGS:xp,HTTP_STATUS_CODES:KR}=A6,gv=ce();gv.initSync();var{getDatabases:YR}=(Ue(),P(ot)),R6=require("fs-extra"),y6=(k(),P($));Sv.exports={describeAll:b6,describeTable:Bp,describeSchema:O6};async function b6(e={}){try{let t=vp.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=YR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let m;if(t||s||r)m=await Bp({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;m=await Bp({schema:d,table:_,exact_count:u},S)}m&&l.push(m)}catch(m){Kf.error(m)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return Kf.error("Got an error in describeAll"),Kf.error(t),Up(new Error,xp.DESCRIBE_ALL_ERR)}}a(b6,"describeAll");async function Bp(e,t){vp.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=pv(e,Dc.object({database:Dc.string(),table:Dc.string().required(),exact_count:Dc.boolean().strict()}));if(i)throw new Ev(i.message);let c=YR()[r];if(!c)throw Up(new Error,xp.SCHEMA_NOT_FOUND(e.schema),KR.NOT_FOUND);let l=c[n];if(!l)throw Up(new Error,xp.TABLE_NOT_FOUND(e.schema,e.table),KR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(m=>({type:m.type,name:m.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(m=>{m.describe&&(_[m.attribute_name]=!0)}),l.attributes.forEach(m=>{_[m.name]&&u(m)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await R6.stat(l.primaryStore.env.path)).size}catch(_){Kf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),gv.get(y6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=T6.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:!!e.exact_count});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Kf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Bp,"descTable");async function O6(e){vp.transformReq(e);let t=pv(e,Dc.object({database:Dc.string(),exact_count:Dc.boolean().strict()}));if(t)throw new Ev(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=YR()[n];if(!i)throw Up(new Error,xp.SCHEMA_NOT_FOUND(e.schema),KR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),vp.isEmpty(l)||l.describe){let u=await Bp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(O6,"describeSchema")});var qs=C((Aye,bv)=>{var N6=ao(),{callbackify:Av,promisify:w6}=require("util"),{getDatabases:Rv}=(Ue(),P(ot));bv.exports={setSchemaDataToGlobal:Tv,getTableSchema:I6,getSystemSchema:C6,setSchemaDataToGlobalAsync:w6(Tv)};var yv=fo(),Sye=Av(yv.describeAll),Tye=Av(yv.describeTable);function Tv(e){global.hdb_schema=Rv(),e&&e()}a(Tv,"setSchemaDataToGlobal");function I6(e,t,r){let n=Rv()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(I6,"getTableSchema");function C6(){return N6}a(C6,"getSystemSchema")});var zR=C((yye,wv)=>{var P6=rt(),WR=require("joi"),{hdb_table:D6,hdb_database:Ov}=Ri(),Nv={schema:Ov,database:Ov,table:D6},L6={date:WR.date().iso().required()},M6={timestamp:WR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};wv.exports=function(e,t){let r=t==="timestamp"?{...Nv,...M6}:{...Nv,...L6},n=WR.object(r);return P6.validateBySchema(e,n)}});var Pv=C((bye,Cv)=>{var v6=rt(),QR=require("joi"),{hdb_table:U6,hdb_database:Iv}=Ri(),x6=QR.object({schema:Iv,database:Iv,table:U6,hash_values:QR.array().required(),ids:QR.array()});Cv.exports=function(e){return v6.validateBySchema(e,x6)}});var ZR=C((Oye,Dv)=>{"use strict";var jR=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},JR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},XR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Dv.exports={InsertObject:jR,NoSQLSeachObject:JR,DeleteResponseObject:XR}});var vc=C((wye,xv)=>{"use strict";var Mv=zR(),B6=Pv(),Lc=oe(),Lv=require("moment"),vv=X(),{promisify:H6,callbackify:k6}=require("util"),Mc=(k(),P($)),F6=qs(),ey=H6(F6.getTableSchema),ty=Gn(),{DeleteResponseObject:G6}=ZR(),{handleHDBError:ca,hdb_errors:q6}=pe(),{HDB_ERROR_MSGS:Hp,HTTP_STATUS_CODES:la}=q6,$6="records successfully deleted",V6=k6(Uv);xv.exports={delete:V6,deleteRecord:Uv,deleteFilesBefore:K6,deleteAuditLogsBefore:Y6};async function K6(e){let t=Mv(e,"date");if(t)throw ca(t,t.message,la.BAD_REQUEST,void 0,void 0,!0);if(Lc.transformReq(e),!Lv(e.date,Lv.ISO_8601).isValid())throw ca(new Error,Hp.INVALID_DATE,la.BAD_REQUEST,Mc.LOG_LEVELS.ERROR,Hp.INVALID_DATE,!0);let n=Lc.checkSchemaTableExist(e.schema,e.table);if(n)throw ca(new Error,n,la.NOT_FOUND,Mc.LOG_LEVELS.ERROR,n,!0);let s=await ty.deleteRecordsBefore(e);if(await ey(e.schema,e.table),vv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(K6,"deleteFilesBefore");async function Y6(e){let t=Mv(e,"timestamp");if(t)throw ca(t,t.message,la.BAD_REQUEST,void 0,void 0,!0);if(Lc.transformReq(e),isNaN(e.timestamp))throw ca(new Error,Hp.INVALID_VALUE("Timestamp"),la.BAD_REQUEST,Mc.LOG_LEVELS.ERROR,Hp.INVALID_VALUE("Timestamp"),!0);let r=Lc.checkSchemaTableExist(e.schema,e.table);if(r)throw ca(new Error,r,la.NOT_FOUND,Mc.LOG_LEVELS.ERROR,r,!0);let n=await ty.deleteAuditLogsBefore(e);return await ey(e.schema,e.table),vv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Y6,"deleteAuditLogsBefore");async function Uv(e){e.ids&&(e.hash_values=e.ids);let t=B6(e);if(t)throw ca(t,t.message,la.BAD_REQUEST,void 0,void 0,!0);Lc.transformReq(e);let r=Lc.checkSchemaTableExist(e.schema,e.table);if(r)throw ca(new Error,r,la.NOT_FOUND,Mc.LOG_LEVELS.ERROR,r,!0);try{await ey(e.schema,e.table);let n=await ty.deleteRecords(e);return Lc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${$6}`),n}catch(n){if(n.message===Mc.SEARCH_NOT_FOUND_MESSAGE){let s=new G6;return s.message=Mc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Uv,"deleteRecord")});var kp={};xe(kp,{HASH_FUNCTION:()=>zf,hash:()=>sy,validate:()=>iy});function ry(e=Wf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Yf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function sy(e,t=zf[Hv?.toUpperCase()]??"sha256"){return ny[t](e)}function iy(e,t,r=zf[Hv?.toUpperCase()]??"sha256"){return e?W6[r](e,t):!1}var Yf,ou,Bv,Hv,Wf,kv,zf,ny,W6,Fp=ye(()=>{Yf=M(require("node:crypto")),ou=M(require("argon2")),Bv=M(ce());k();Hv=(0,Bv.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Wf=16,kv=9,zf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(zf||{});a(ry,"generateSalt");ny={md5:a((e,t=void 0)=>{t=t??ry(kv);let r=Yf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??ry(Wf);let r=Yf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=ry(Wf),r=await ou.hash(e,{type:ou.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},W6={md5:a((e,t)=>{let r=e.slice(0,kv);return e===ny.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Wf);return e===ny.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await ou.verify(e.slice(Wf),t),"argon2id")};a(sy,"hash");a(iy,"validate")});var Gv=C((Dye,Fv)=>{var oy=rt(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function z6(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,oy.validateObject(e,Kr)}a(z6,"addUserValidation");function Q6(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,oy.validateObject(e,Kr)}a(Q6,"alterUserValidation");function j6(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,oy.validateObject(e,Kr)}a(j6,"dropUserValidation");Fv.exports={addUserValidation:z6,alterUserValidation:Q6,dropUserValidation:j6}});var Ct=C((vye,$v)=>{"use strict";var{platform:Mye}=require("os"),J6="nats-server.zip",ay="nats-server",X6=process.platform==="win32"?`${ay}.exe`:ay,Z6=/^[^\s.,*>]+$/,qv="__request__",eZ=a(e=>`${e}.${qv}`,"REQUEST_SUBJECT"),tZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},rZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},nZ={HUB:"hub.pid",LEAF:"leaf.pid"},sZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},iZ={SUCCESS:"success",ERROR:"error"},oZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},aZ={TXN:"txn",MSGID:"msgid"},au={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},cZ={[au.ERR]:1,[au.WRN]:2,[au.INF]:3,[au.DBG]:4,[au.TRC]:5},lZ={debug:"-D",trace:"-DVV"};$v.exports={NATS_SERVER_ZIP:J6,NATS_SERVER_NAME:ay,NATS_BINARY_NAME:X6,PID_FILES:nZ,NATS_CONFIG_FILES:rZ,SERVER_SUFFIX:sZ,NATS_TERM_CONSTRAINTS_RX:Z6,REQUEST_SUFFIX:qv,UPDATE_REMOTE_RESPONSE_STATUSES:iZ,CLUSTER_STATUS_STATUSES:oZ,REQUEST_SUBJECT:eZ,SUBJECT_PREFIXES:aZ,MSG_HEADERS:tZ,LOG_LEVELS:au,LOG_LEVEL_FLAGS:lZ,LOG_LEVEL_HIERARCHY:cZ}});var qn=C((xye,yr)=>{"use strict";var Yv="username is required",Wv="nothing to update, must supply active, role or password to update",zv="password cannot be an empty string",Qv="If role is specified, it cannot be empty.",jv="active must be true or false";yr.exports.addUser=gZ;yr.exports.alterUser=SZ;yr.exports.dropUser=AZ;yr.exports.getSuperUser=NZ;yr.exports.userInfo=RZ;yr.exports.listUsers=qp;yr.exports.listUsersExternal=yZ;yr.exports.setUsersWithRolesCache=Uc;yr.exports.findAndValidateUser=py;yr.exports.getClusterUser=wZ;yr.exports.getUsersWithRolesCache=OZ;yr.exports.USERNAME_REQUIRED=Yv;yr.exports.ALTERUSER_NOTHING_TO_UPDATE=Wv;yr.exports.EMPTY_PASSWORD=zv;yr.exports.EMPTY_ROLE=Qv;yr.exports.ACTIVE_BOOLEAN=jv;var Jv=gn(),uZ=vc(),Qf=(Fp(),P(kp)),Xv=Gv(),jf=Vr(),fy=ho(),Oi=oe(),Zv=require("validate.js"),_y=X(),{promisify:dZ}=require("util"),hy=uo(),ly=(k(),P($)),Vv=Ct(),fZ=Nt(),_Z=ce(),hZ=ao(),{hdb_errors:mZ,ClientError:$s}=pe(),{HTTP_STATUS_CODES:_o,AUTHENTICATION_ERROR_MSGS:cy,HDB_ERROR_MSGS:cu}=mZ,{UserEventMsg:my}=Vs(),uy=require("lodash"),{server:Gp}=(Pr(),P(Vl)),pZ=X();Gp.getUser=(e,t)=>py(e,t,t!=null);Gp.authenticateUser=(e,t)=>py(e,t);var eU={username:!0,active:!0,role:!0,password:!0},Kv=new Map,EZ=dZ(uZ.delete),dy=_Z.get(ly.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Qf.HASH_FUNCTION.SHA256,Ni;async function gZ(e){let t=Zv.cleanAttributes(e,eU),r=Xv.addUserValidation(t);if(r)throw new $s(r.message);let n=await jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new $s(cu.ROLE_NAME_NOT_FOUND(t.role),_o.NOT_FOUND);if(n.length>1)throw new $s(cu.DUP_ROLES_FOUND(t.role),_o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=hy.encrypt(t.password)),t.password=await Qf.hash(t.password,dy),t.hash_function=dy,t.role=n[0].id;let s=await Jv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(_y.debug(s),await Uc(),s.skipped_hashes.length===1)throw new $s(cu.USER_ALREADY_EXISTS(t.username),_o.CONFLICT);return fy.signalUserChange(new my(process.pid)),`${t.username} successfully added`}a(gZ,"addUser");async function SZ(e){let t=Zv.cleanAttributes(e,eU);if(Oi.isEmptyOrZeroLength(t.username))throw new Error(Yv);if(Oi.isEmptyOrZeroLength(t.password)&&Oi.isEmptyOrZeroLength(t.role)&&Oi.isEmptyOrZeroLength(t.active))throw new Error(Wv);if(!Oi.isEmpty(t.password)&&Oi.isEmptyOrZeroLength(t.password.trim()))throw new Error(zv);if(!Oi.isEmpty(t.active)&&!Oi.isBoolean(t.active))throw new Error(jv);if(!Oi.isEmpty(t.password)&&!Oi.isEmptyOrZeroLength(t.password.trim())&&(TZ(t.username)&&(t.hash=hy.encrypt(t.password)),t.password=await Qf.hash(t.password,dy)),t.role==="")throw new Error(Qv);if(t.role){let n=await jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new $s(cu.ALTER_USER_ROLE_NOT_FOUND(t.role),_o.NOT_FOUND);if(n.length>1)throw new $s(cu.DUP_ROLES_FOUND(t.role),_o.CONFLICT);t.role=n[0].id}let r=await Jv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Uc(),fy.signalUserChange(new my(process.pid)),r}a(SZ,"alterUser");function TZ(e){let t=!1,r=Ni.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(TZ,"isClusterUser");async function AZ(e){let t=Xv.dropUserValidation(e);if(t)throw new $s(t.message);if(Ni.get(e.username)===void 0)throw new $s(cu.USER_NOT_EXIST(e.username),_o.NOT_FOUND);let r=await EZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return _y.debug(r),await Uc(),fy.signalUserChange(new my(process.pid)),`${e.username} successfully deleted`}a(AZ,"dropUser");async function RZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=uy.cloneDeep(e.hdb_user);let r=await jf.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(RZ,"userInfo");async function yZ(){let e=await qp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(yZ,"listUsersExternal");async function qp(){let e=await jf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=uy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await jf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=uy.cloneDeep(s),s.role=t[s.role],bZ(s.role),n.set(s.username,s);return n}a(qp,"listUsers");function bZ(e){if(!e){_y.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(hZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(bZ,"appendSystemTablesToRole");async function Uc(e=void 0){e?Ni=e:Ni=await qp()}a(Uc,"setUsersWithRolesCache");async function OZ(){return Ni||await Uc(),Ni}a(OZ,"getUsersWithRolesCache");async function py(e,t,r=!0){Ni||await Uc();let n=Ni.get(e);if(!n){if(!r)return{username:e};throw new $s(cy.GENERIC_AUTH_FAIL,_o.UNAUTHORIZED)}if(n&&!n.active)throw new $s(cy.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(Kv.get(t)===n.password)return s;{let i=Qf.validate(n.password,t,n.hash_function||Qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)Kv.set(t,n.password);else throw new $s(cy.GENERIC_AUTH_FAIL,_o.UNAUTHORIZED)}}return s}a(py,"findAndValidateUser");async function NZ(){Ni||await Uc();for(let[,e]of Ni)if(e.role.role==="super_user")return e}a(NZ,"getSuperUser");async function wZ(){let e=await qp(),t=fZ.getConfigFromFile(ly.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==ly.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=hy.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Vv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Vv.SERVER_SUFFIX.ADMIN,r}a(wZ,"getClusterUser");var tU=[];Gp.invalidateUser=function(e){for(let t of tU)try{t(e)}catch(r){pZ.error("Error invalidating user",r)}};Gp.onInvalidatedUser=function(e){tU.push(e)}});var Xf=C((Fye,iU)=>{"use strict";var xc=X(),$n=(k(),P($)),IZ=xM(),Hye=qs(),kye=fo(),CZ=qn(),{validateEvent:rU}=Vs(),Jf=Gn(),PZ=require("process"),{resetDatabases:DZ}=(Ue(),P(ot)),LZ={[$n.ITC_EVENT_TYPES.SCHEMA]:MZ,[$n.ITC_EVENT_TYPES.USER]:sU};async function MZ(e){let t=rU(e);if(t){xc.error(t);return}xc.trace("ITC schemaHandler received schema event:",e),await IZ(e.message),await vZ(e.message)}a(MZ,"schemaHandler");async function vZ(e){try{Jf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Jf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Jf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=DZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){xc.error(t)}}a(vZ,"syncSchemaMetadata");var nU=[];async function sU(e){try{try{Jf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Jf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){xc.warn(r)}let t=rU(e);if(t){xc.error(t);return}xc.trace(`ITC userHandler ${$n.HDB_ITC_CLIENT_PREFIX}${PZ.pid} received user event:`,e),await CZ.setUsersWithRolesCache();for(let r of nU)r()}catch(t){xc.error(t)}}a(sU,"userHandler");sU.addListener=function(e){nU.push(e)};iU.exports=LZ});var Vs=C((Yye,aU)=>{"use strict";var qye=X(),Ey=oe(),UZ=(k(),P($)),{ITC_ERRORS:Zf}=Ln(),{parentPort:$ye,threadId:xZ,isMainThread:BZ,workerData:Vye}=require("worker_threads"),{onMessageFromWorkers:HZ,broadcast:Kye,broadcastWithAcknowledgement:kZ}=nt();aU.exports={sendItcEvent:FZ,validateEvent:oU,SchemaEventMsg:GZ,UserEventMsg:qZ};var $p;HZ(async(e,t)=>{$p=$p||Xf(),oU(e),$p[e.type]&&await $p[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function FZ(e){return!BZ&&e.message&&(e.message.originator=xZ),kZ(e)}a(FZ,"sendItcEvent");function oU(e){if(typeof e!="object")return Zf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ey.isEmpty(e.type))return Zf.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ey.isEmpty(e.message))return Zf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ey.isEmpty(e.message.originator))return Zf.MISSING_ORIGIN;if(UZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Zf.INVALID_EVENT(e.type)}a(oU,"validateEvent");function GZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(GZ,"SchemaEventMsg");function qZ(e){this.originator=e}a(qZ,"UserEventMsg")});var ho=C((Qye,dU)=>{"use strict";var cU=(k(),P($)),zye=oe(),Vp=X(),lU=MM(),lu,{sendItcEvent:uU}=Vs();function $Z(e){try{Vp.info("signalSchemaChange called with message:",e),lu=lu||Xf();let t=new lU(cU.ITC_EVENT_TYPES.SCHEMA,e);return lu.schema(t),uU(t)}catch(t){Vp.error(t)}}a($Z,"signalSchemaChange");function VZ(e){try{Vp.trace("signalUserChange called with message:",e),lu=lu||Xf();let t=new lU(cU.ITC_EVENT_TYPES.USER,e);return lu.user(t),uU(t)}catch(t){Vp.error(t)}}a(VZ,"signalUserChange");dU.exports={signalSchemaChange:$Z,signalUserChange:VZ}});var Kp=C((Jye,_U)=>{"use strict";var fU=oe(),KZ=(k(),P($)),YZ=X(),WZ=Pp(),zZ=Cp(),QZ=ho(),{SchemaEventMsg:jZ}=Vs(),JZ="already exists in";_U.exports=XZ;async function XZ(e,t,r){if(fU.isEmptyOrZeroLength(r))return r;let n=[];fU.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 ZZ(e,t.schema,t.name,i)})),s}a(XZ,"lmdbCheckForNewAttributes");async function ZZ(e,t,r,n){let s=new zZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await e8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(JZ))YZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(ZZ,"createNewAttribute");async function e8(e){let t;return t=await WZ(e),QZ.signalSchemaChange(new jZ(process.pid,KZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(e8,"createAttribute")});var uu=C((Zye,hU)=>{"use strict";var gy=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};hU.exports=gy});var pU=C((tbe,mU)=>{"use strict";var t8=uu(),r8=(k(),P($)).OPERATIONS_ENUM,Sy=class extends t8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(r8.INSERT,r,n,s,i),this.records=t}};mU.exports=Sy});var gU=C((nbe,EU)=>{"use strict";var n8=uu(),s8=(k(),P($)).OPERATIONS_ENUM,Ty=class extends n8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(s8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};EU.exports=Ty});var TU=C((ibe,SU)=>{"use strict";var i8=uu(),o8=(k(),P($)).OPERATIONS_ENUM,Ay=class extends i8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(o8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};SU.exports=Ay});var RU=C((abe,AU)=>{"use strict";var a8=uu(),c8=(k(),P($)).OPERATIONS_ENUM,Ry=class extends a8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(c8.DELETE,n,s,t,i),this.original_records=r}};AU.exports=Ry});var e_=C((ube,NU)=>{"use strict";var lbe=require("path"),yU=_t(),l8=pU(),u8=gU(),d8=TU(),f8=RU(),du=Ht(),bU=oe(),{CONFIG_PARAMS:_8}=(k(),P($)),OU=ce();OU.initSync();var Yp=(k(),P($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:h8}=Et();NU.exports=m8;async function m8(e,t){if(OU.get(_8.LOGGING_AUDITLOG)===!1)return;let r=h8(e.schema,e.table),n=await yU.openEnvironment(r,e.table,!0),s=p8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){yU.initializeDBIs(n,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,du.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),bU.isEmpty(s.user_name)||n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(m8,"writeTransaction");function p8(e,t){let r=bU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Yp.INSERT)return new l8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yp.UPDATE)return new u8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yp.UPSERT)return new d8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yp.DELETE)return new f8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(p8,"createTransactionObject")});var yy=C((_be,wU)=>{"use strict";var E8=kf(),fbe=uf(),t_=(k(),P($)),g8=df(),S8=Ic().insertRecords,T8=_t(),A8=X(),R8=Kp(),{getSchemaPath:y8}=Et(),b8=e_();wU.exports=O8;async function O8(e){try{let{schema_table:t,attributes:r}=E8(e);g8(e,r,t.hash_attribute),e.schema!==t_.SYSTEM_SCHEMA_NAME&&(r.includes(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await R8(e.hdb_auth_header,t,r),s=y8(e.schema,e.table),i=await T8.openEnvironment(s,e.table),o=await S8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await b8(e,o)}catch(c){A8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(O8,"lmdbCreateRecords")});var PU=C((mbe,CU)=>{"use strict";var IU=(k(),P($)),N8=yy(),w8=uf(),I8=require("fs-extra"),{getSchemaPath:C8}=Et();CU.exports=P8;async function P8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new w8(IU.SYSTEM_SCHEMA_NAME,IU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await N8(r),await I8.mkdirp(C8(e.schema))}a(P8,"lmdbCreateSchema")});var LU=C((Ebe,DU)=>{"use strict";var by=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};DU.exports=by});var xU=C((Rbe,UU)=>{"use strict";var MU=_t(),Oy=ln(),Ny=Ln().LMDB_ERRORS_ENUM,D8=Ht(),vU=X(),Sbe=oe(),L8=require("lmdb"),M8=LU(),v8=(k(),P($)),{OVERFLOW_MARKER:Tbe,MAX_SEARCH_KEY_LENGTH:Abe}=D8,U8=v8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function x8(e,t,r,n){if(Oy.validateEnv(e),t===void 0)throw new Error(Ny.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ny.IDS_REQUIRED):new Error(Ny.IDS_MUST_BE_ITERABLE);try{let s=MU.listDBIs(e);MU.initializeDBIs(e,t,s);let i=new M8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let m=e.dbis[t].get(o);if(!m||n&&m[U8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,L8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let y=s[g];if(!m.hasOwnProperty(y)||y===t)continue;let E=e.dbis[y],T=m[y];if(T!=null)try{let N=Oy.getIndexedValues(T);if(N)for(let x=0,H=N.length;x<H;x++)E.remove(N[x],o)}catch{vU.warn(`cannot delete from attribute: ${y}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){vU.warn(m),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=Oy.getNextMonotonicTime(),i}catch(s){throw s}}a(x8,"deleteRecords");UU.exports={deleteRecords:x8}});var r_=C((bbe,HU)=>{"use strict";var fu=oe(),B8=xU(),H8=_t(),{getSchemaPath:k8}=Et(),F8=e_(),G8=X();HU.exports=q8;async function q8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fu.isEmptyOrZeroLength(e.hash_values)&&!fu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fu.isEmpty(l)||e.hash_values.push(l)}}if(fu.isEmptyOrZeroLength(e.hash_values))return BU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fu.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=k8(e.schema,e.table),i=await H8.openEnvironment(s,e.table),o=await B8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await F8(e,o)}catch(c){G8.error(`unable to write transaction due to ${c.message}`)}return BU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(q8,"lmdbDeleteRecords");function BU(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(BU,"createDeleteResponse")});var Iy=C((wbe,kU)=>{"use strict";var $8=(k(),P($)),Nbe=ln();function wy(e,t){let r=Object.create(null);if(t.length===1&&$8.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(wy,"parseRow");function V8(e,t,r,n){let s=wy(r,e);n.push(s)}a(V8,"searchAll");function K8(e,t,r,n){let s=wy(r,e);n[t]=s}a(K8,"searchAllToMap");function Y8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Y8,"iterateDBI");function Bc(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Bc,"pushResults");function W8(e,t,r,n,s,i){t.toString().endsWith(e)&&Bc(t,r,n,s,i)}a(W8,"endsWith");function z8(e,t,r,n,s,i){t.toString().includes(e)&&Bc(t,r,n,s,i)}a(z8,"contains");function Q8(e,t,r,n,s,i){t>e&&Bc(t,r,n,s,i)}a(Q8,"greaterThanCompare");function j8(e,t,r,n,s,i){t>=e&&Bc(t,r,n,s,i)}a(j8,"greaterThanEqualCompare");function J8(e,t,r,n,s,i){t<e&&Bc(t,r,n,s,i)}a(J8,"lessThanCompare");function X8(e,t,r,n,s,i){t<=e&&Bc(t,r,n,s,i)}a(X8,"lessThanEqualCompare");kU.exports={parseRow:wy,searchAll:V8,searchAllToMap:K8,iterateDBI:Y8,endsWith:W8,contains:z8,greaterThanCompare:Q8,greaterThanEqualCompare:j8,lessThanCompare:J8,lessThanEqualCompare:X8,pushResults:Bc}});var _u=C((Lbe,YU)=>{"use strict";var ua=_t(),Cbe=X(),Vn=ln(),Wp=Ht(),Yt=Ln().LMDB_ERRORS_ENUM,Pbe=oe(),Z8=(k(),P($)),zp=Iy(),{parseRow:e5}=zp,Dbe=require("lmdb"),{OVERFLOW_MARKER:FU,MAX_SEARCH_KEY_LENGTH:t5}=Wp;function GU(e,t,r,n=!1,s=void 0,i=void 0){return Hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(GU,"iterateFullIndex");function n_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Hc(e,t,r,(f,d,h,_)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(E.values=!1,d.getRange(E).map(T=>({value:T}))):d.getRange(E)})}a(n_,"iterateRangeBetween");function Hc(e,t,r,n){let s=e.database||e,i=ua.openDBI(s,r);i[Wp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ua.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Hc,"setupTransaction");function qU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(FU)){if(!s)if(r)s=ua.openDBI(e,r);else{let l=ua.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ua.openDBI(e,l[u]),!s[Wp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(qU,"getOverflowCheck");function r5(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Yt.HASH_ATTRIBUTE_REQUIRED);return Hc(e,t,t,(o,c,l)=>(Qp(r),r=s_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>e5(u.value,r))))}a(r5,"searchAll");function n5(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Yt.HASH_ATTRIBUTE_REQUIRED);Qp(r),r=s_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of GU(e,t,t,n,s,i))o.set(c,zp.parseRow(l,r));return o}a(n5,"searchAllToMap");function s5(e,t,r=!1,n=void 0,s=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Yt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=GU(e,void 0,t,r,n,s),c=o.transaction,l=qU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(s5,"iterateDBI");function i5(e,t){if(Vn.validateEnv(e),t===void 0)throw new Error(Yt.HASH_ATTRIBUTE_REQUIRED);return ua.statDBI(e,t).entryCount}a(i5,"countAll");function o5(e,t,r,n,s=!1,i=void 0,o=void 0){return da(e,r,n),Hc(e,t,r,(c,l,u,f)=>(n=Vn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(o5,"equals");function a5(e,t,r){return da(e,t,r),ua.openDBI(e,t).getValuesCount(r)}a(a5,"count");function c5(e,t,r,n,s=!1,i=void 0,o=void 0){return da(e,r,n),Hc(e,null,r,(c,l)=>{n=Vn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(c5,"startsWith");function l5(e,t,r,n,s=!1,i=void 0,o=void 0){return $U(e,t,r,n,s,i,o,!0)}a(l5,"endsWith");function $U(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return da(e,r,n),Hc(e,null,r,(l,u,f,d)=>{let h=qU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let m=_.toString();return m.endsWith(FU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?m.endsWith(n):m.includes(n))?u[Wp.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a($U,"contains");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!0,!1)}a(u5,"greaterThan");function d5(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!1,!1)}a(d5,"greaterThanEqual");function f5(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!0)}a(f5,"lessThan");function _5(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!1)}a(_5,"lessThanEqual");function h5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Vn.validateEnv(e),r===void 0)throw new Error(Yt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Yt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Yt.END_VALUE_REQUIRED);if(n=Vn.convertKeyValueToWrite(n),s=Vn.convertKeyValueToWrite(s),n>s)throw new Error(Yt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return n_(e,t,r,n,s,i,o,c)}a(h5,"between");function m5(e,t,r,n){Vn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Yt.HASH_ATTRIBUTE_REQUIRED);if(Qp(r),r=s_(s,r),n===void 0)throw new Error(Yt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=zp.parseRow(c,r)),o}a(m5,"searchByHash");function p5(e,t,r){Vn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Yt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Yt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(p5,"checkHashExists");function E5(e,t,r,n,s=[]){return KU(e,t,r,n,s),VU(e,t,r,n,s).map(i=>i[1])}a(E5,"batchSearchByHash");function g5(e,t,r,n,s=[]){KU(e,t,r,n,s);let i=new Map;for(let[o,c]of VU(e,t,r,n,s))i.set(o,c);return i}a(g5,"batchSearchByHashToMap");function VU(e,t,r,n,s=[]){return Hc(e,t,t,(i,o,c)=>{r=s_(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,zp.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(VU,"batchHashSearch");function KU(e,t,r,n,s){if(Vn.validateEnv(e),t===void 0)throw new Error(Yt.HASH_ATTRIBUTE_REQUIRED);if(Qp(r),n==null)throw new Error(Yt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Yt.IDS_MUST_BE_ITERABLE)}a(KU,"initializeBatchSearchByHash");function Qp(e){if(!Array.isArray(e))throw e===void 0?new Error(Yt.FETCH_ATTRIBUTES_REQUIRED):new Error(Yt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Qp,"validateFetchAttributes");function da(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(Yt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Yt.SEARCH_VALUE_REQUIRED);if(r?.length>t5)throw new Error(Yt.SEARCH_VALUE_TOO_LARGE)}a(da,"validateComparisonFunctions");function s_(e,t){return t.length===1&&Z8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ua.listDBIs(e)),t}a(s_,"setGetWholeRowAttributes");YU.exports={searchAll:r5,searchAllToMap:n5,count:a5,countAll:i5,equals:o5,startsWith:c5,endsWith:l5,contains:$U,searchByHash:m5,setGetWholeRowAttributes:s_,batchSearchByHash:E5,batchSearchByHashToMap:g5,checkHashExists:p5,iterateDBI:s5,greaterThan:u5,greaterThanEqual:d5,lessThan:f5,lessThanEqual:_5,between:h5}});var hu=C((vbe,JU)=>{var WU=require("lodash"),zU=rt(),Fe=require("joi"),S5=oe(),{hdb_schema_table:i_,checkValidTable:QU,hdb_table:jU,hdb_database:jp}=Ri(),{handleHDBError:T5,hdb_errors:A5}=pe(),{getDatabases:R5}=(Ue(),P(ot)),{HTTP_STATUS_CODES:y5}=A5,b5=Fe.object({database:jp,schema:jp,table:jU,search_attribute:i_,search_value:Fe.any().required(),get_attributes:Fe.array().min(1).items(Fe.alternatives(i_,Fe.object())).optional(),desc:Fe.bool(),limit:Fe.number().integer().min(1),offset:Fe.number().integer().min(0)}),O5=Fe.object({database:jp,schema:jp,table:jU,operator:Fe.string().valid("and","or").default("and").lowercase(),offset:Fe.number().integer().min(0),limit:Fe.number().integer().min(1),get_attributes:Fe.array().min(1).items(Fe.alternatives(i_,Fe.object())).optional(),sort:Fe.object({attribute:Fe.alternatives(i_,Fe.array().min(1)),descending:Fe.bool().optional()}).optional(),conditions:Fe.array().min(1).items(Fe.alternatives(Fe.object({operator:Fe.string().valid("and","or").default("and").lowercase(),conditions:Fe.array()}),Fe.object({search_attribute:Fe.alternatives(i_,Fe.array().min(1)),search_type:Fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Fe.when("search_type",{switch:[{is:"equals",then:Fe.any()},{is:"between",then:Fe.array().items(Fe.alternatives([Fe.string(),Fe.number()])).length(2)}],otherwise:Fe.alternatives(Fe.string(),Fe.number())}).required()}))).required()});JU.exports=function(e,t){let r=null;switch(t){case"value":r=zU.validateBySchema(e,b5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(QU("database",e.schema)),i(QU("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=zU.validateBySchema(e,O5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=S5.checkGlobalSchemaTable(e.schema,e.table);if(s)return T5(new Error,s,y5.NOT_FOUND);let o=R5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=WU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!WU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var Cy=C((xbe,XU)=>{"use strict";var N5=_t(),w5=hu(),{getSchemaPath:I5}=Et();XU.exports=C5;function C5(e){let t=w5(e,"hashes");if(t)throw t;let r=I5(e.schema,e.table);return N5.openEnvironment(r,e.table)}a(C5,"initialize")});var Py=C((Hbe,ZU)=>{"use strict";var P5=_u(),D5=Cy();ZU.exports=L5;async function L5(e){let t=await D5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return P5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(L5,"lmdbGetDataByHash")});var mu=C((Fbe,e0)=>{"use strict";var Dy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};e0.exports=Dy});var r0=C(($be,t0)=>{"use strict";var qbe=mu(),M5=_u(),v5=Cy();t0.exports=U5;async function U5(e){let t=await v5(e),r=global.hdb_schema[e.schema][e.table];return M5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(U5,"lmdbSearchByHash")});var Ks=C((Kbe,n0)=>{"use strict";var Ly=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};n0.exports=Ly});var Jp=C((Wbe,l0)=>{"use strict";var Yr=_u(),x5=_t(),B5=oe(),Ge=Ht(),kc=(k(),P($)),H5=ao(),s0=Ln().LMDB_ERRORS_ENUM,{getSchemaPath:k5}=Et(),mo=kc.SEARCH_WILDCARDS;async function F5(e,t,r){let n;e.schema===kc.SYSTEM_SCHEMA_NAME?n=H5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=c0(e,n.hash_attribute,r,t);return o0(e,s,n.hash_attribute,r)}a(F5,"prepSearch");async function o0(e,t,r,n){let s=k5(e.schema,e.table),i=await x5.openEnvironment(s,e.table),o=a0(i,e,t,r),c=o.transaction||i;if([Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ge.SEARCH_TYPES.SEARCH_ALL,Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(G5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?i0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?i0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Yr.batchSearchByHashToMap(c,r,e.get_attributes,u):Yr.batchSearchByHash(c,r,e.get_attributes,u)}a(o0,"executeSearch");function a0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ge.SEARCH_TYPES.EQUALS:s=Yr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.CONTAINS:s=Yr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.ENDS_WITH:case Ge.SEARCH_TYPES._ENDS_WITH:s=Yr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.STARTS_WITH:case Ge.SEARCH_TYPES._STARTS_WITH:s=Yr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.SEARCH_ALL:return Yr.searchAll(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.BETWEEN:s=Yr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN:case Ge.SEARCH_TYPES._GREATER_THAN:s=Yr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ge.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN:case Ge.SEARCH_TYPES._LESS_THAN:s=Yr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN_EQUAL:case Ge.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(a0,"searchByType");function i0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(i0,"createMapFromIterable");function G5(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(G5,"checkToFetchMore");function c0(e,t,r,n){if(B5.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),mo.indexOf(s)>-1)return r===!0?Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ge.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(mo[0])<0&&s.indexOf(mo[1])<0)return c===!0?r===!0?Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ge.SEARCH_TYPES.EQUALS;if(mo.indexOf(i)>=0&&mo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ge.SEARCH_TYPES.CONTAINS;if(mo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ge.SEARCH_TYPES.ENDS_WITH;if(mo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ge.SEARCH_TYPES.STARTS_WITH;if(s.includes(mo[0])||s.includes(mo[1]))return Ge.SEARCH_TYPES.EQUALS;throw new Error(s0.UNKNOWN_SEARCH_TYPE)}else switch(n){case kc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ge.SEARCH_TYPES.BETWEEN;case kc.VALUE_SEARCH_COMPARATORS.GREATER:return Ge.SEARCH_TYPES.GREATER_THAN;case kc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ge.SEARCH_TYPES.GREATER_THAN_EQUAL;case kc.VALUE_SEARCH_COMPARATORS.LESS:return Ge.SEARCH_TYPES.LESS_THAN;case kc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ge.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(s0.UNKNOWN_SEARCH_TYPE)}}a(c0,"createSearchTypeFromSearchObject");l0.exports={executeSearch:o0,createSearchTypeFromSearchObject:c0,prepSearch:F5,searchByType:a0}});var d0=C((jbe,u0)=>{"use strict";var Qbe=Ks(),q5=hu(),$5=oe(),V5=(k(),P($)),K5=Jp();u0.exports=Y5;function Y5(e,t){if(!$5.isEmpty(t)&&V5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=q5(e,"value");if(n)throw n;return K5.prepSearch(e,t,!0)}a(Y5,"lmdbGetDataByValue")});var o_=C((Zbe,f0)=>{"use strict";var Xbe=Ks(),W5=hu(),z5=oe(),Q5=(k(),P($)),j5=Jp();f0.exports=J5;async function J5(e,t){if(!z5.isEmpty(t)&&Q5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=W5(e,"value");if(n)throw n;return j5.prepSearch(e,t,!1)}a(J5,"lmdbSearchByValue")});var h0=C((rOe,_0)=>{"use strict";var tOe=Ht(),My=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},vy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Uy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};_0.exports={SearchByConditionsObject:My,SearchCondition:vy,SortAttribute:Uy}});var S0=C((oOe,g0)=>{"use strict";var sOe=h0().SearchByConditionsObject,X5=Ks(),Z5=hu(),xy=_u(),Xp=Ht(),{Resource:iOe}=(ra(),P(UA)),E0=Jp(),e9=Iy(),t9=require("lodash"),{getSchemaPath:r9}=Et(),m0=_t(),{handleHDBError:n9,hdb_errors:s9}=pe(),{HTTP_STATUS_CODES:i9}=s9,o9=1e8;g0.exports=a9;async function a9(e){let t=Z5(e,"conditions");if(t)throw n9(t,t.message,i9.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=r9(e.schema,e.table),n=await m0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)m0.openDBI(n,u.search_attribute);let i=t9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Xp.SEARCH_TYPES.EQUALS?u.estimated_count=xy.count(n,u.search_attribute,u.search_value):f===Xp.SEARCH_TYPES.CONTAINS||f===Xp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=o9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await p0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(E0.filterByType),d=f.length,h=xy.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let m=0;m<d;m++)if(!f[m](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>e9.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await p0(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=xy.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(a9,"lmdbSearchByConditions");async function p0(e,t,r,n){let s=new X5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Xp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,E0.searchByType(e,s,i,n).map(o=>o.value)}a(p0,"executeConditionSearch")});var a_=C((cOe,T0)=>{"use strict";var c9=(k(),P($)).OPERATIONS_ENUM,By=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=c9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};T0.exports=By});var Hy=C((uOe,I0)=>{"use strict";var b0=Ks(),O0=a_(),N0=o_(),w0=r_(),Sn=(k(),P($)),A0=oe(),R0=_t(),{getTransactionAuditStorePath:l9,getSchemaPath:u9}=Et(),y0=X();I0.exports=d9;async function d9(e){try{if(A0.isEmpty(global.hdb_schema[e.schema])||A0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await f9(e),await _9(e);let t=u9(e.schema,e.table);try{await R0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")y0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=l9(e.schema,e.table);await R0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")y0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(d9,"lmdbDropTable");async function f9(e){let t=new b0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await N0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new O0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await w0(s)}a(f9,"deleteAttributesFromSystem");async function _9(e){let t=new b0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await N0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new O0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await w0(s)}catch(i){throw i}}a(_9,"dropTableFromSystem")});var P0=C((fOe,C0)=>{"use strict";var h9=require("fs-extra"),m9=Ks(),p9=mu(),E9=a_(),g9=Hy(),S9=r_(),T9=Py(),A9=o_(),po=(k(),P($)),{getSchemaPath:R9}=Et(),{handleHDBError:y9,hdb_errors:b9}=pe(),{HDB_ERROR_MSGS:O9,HTTP_STATUS_CODES:N9}=b9;C0.exports=w9;async function w9(e){let t;try{t=await I9(e.schema);let r=new m9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await A9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await g9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new E9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await S9(s);let i=R9(t);await h9.remove(i)}catch(r){throw r}}a(w9,"lmdbDropSchema");async function I9(e){let t=new p9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await T9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw y9(new Error,O9.SCHEMA_NOT_FOUND(e),N9.NOT_FOUND,void 0,void 0,!0);return n}a(I9,"validateDropSchema")});var c_=C((hOe,D0)=>{"use strict";var ky=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};D0.exports=ky});var Gy=C((EOe,L0)=>{"use strict";var C9=require("fs-extra"),Zp=_t(),{getTransactionAuditStorePath:P9}=Et(),Fy=Ht(),pOe=c_();L0.exports=D9;async function D9(e){let t;try{let r=P9(e.schema,e.table);await C9.mkdirp(r),t=await Zp.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{Zp.createDBI(t,Fy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Zp.createDBI(t,Fy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Zp.createDBI(t,Fy.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(D9,"createTransactionsAuditEnvironment")});var U0=C((TOe,v0)=>{"use strict";var qy=(k(),P($)),M0=_t(),L9=Ic(),{getSystemSchemaPath:M9,getSchemaPath:v9}=Et(),SOe=ao(),U9=Pp(),$y=Cp(),x9=X(),B9=Gy();v0.exports=H9;async function H9(e,t){let r=v9(t.schema,t.table),n=new $y(t.schema,t.table,qy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new $y(t.schema,t.table,qy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new $y(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await M0.createEnvironment(r,t.table),e!==void 0){let o=await M0.openEnvironment(M9(),qy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await L9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Vy(n),await Vy(s),await Vy(i)}await B9(t)}catch(o){throw o}}a(H9,"lmdbCreateTable");async function Vy(e){try{await U9(e)}catch(t){x9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Vy,"createAttribute")});var B0=C((ROe,x0)=>{"use strict";var k9=kf(),F9=df(),G9=Kp(),l_=(k(),P($)),q9=Ic().updateRecords,$9=_t(),{getSchemaPath:V9}=Et(),K9=e_(),Y9=X();x0.exports=W9;async function W9(e){try{let{schema_table:t,attributes:r}=k9(e);F9(e,r,t.hash_attribute),e.schema!==l_.SYSTEM_SCHEMA_NAME&&(r.includes(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await G9(e.hdb_auth_header,t,r),s=V9(e.schema,e.table),i=await $9.openEnvironment(s,e.table),o=await q9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await K9(e,o)}catch(c){Y9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(W9,"lmdbUpdateRecords")});var k0=C((bOe,H0)=>{"use strict";var z9=(k(),P($)).OPERATIONS_ENUM,Ky=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=z9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};H0.exports=Ky});var G0=C((wOe,F0)=>{"use strict";var NOe=k0(),Q9=kf(),j9=df(),J9=Kp(),u_=(k(),P($)),X9=Ic().upsertRecords,Z9=_t(),{getSchemaPath:e7}=Et(),t7=e_(),r7=X(),{handleHDBError:n7,hdb_errors:s7}=pe();F0.exports=i7;async function i7(e){let t;try{t=Q9(e)}catch(l){throw n7(l,l.message,s7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;j9(e,n,r.hash_attribute),e.schema!==u_.SYSTEM_SCHEMA_NAME&&(n.includes(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await J9(e.hdb_auth_header,r,n),i=e7(e.schema,e.table),o=await Z9.openEnvironment(i,e.table),c=await X9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await t7(e,c)}catch(l){r7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(i7,"lmdbUpsertRecords")});var $0=C((COe,q0)=>{"use strict";var Yy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};q0.exports=Yy});var K0=C((DOe,V0)=>{"use strict";var Wy=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};V0.exports=Wy});var z0=C((vOe,W0)=>{"use strict";var zy=_t(),{getTransactionAuditStorePath:o7}=Et(),MOe=$0(),d_=Ht(),a7=oe(),Y0=K0(),c7=require("util").promisify,l7=c7(setTimeout),u7=1e4,d7=100;W0.exports=f7;async function f7(e){let t=o7(e.schema,e.table),r=await zy.openEnvironment(t,e.table,!0),n=zy.listDBIs(r);zy.initializeDBIs(r,d_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new Y0;do s=await _7(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 l7(d7);while(s.transactions_deleted>0);return i}a(f7,"deleteAuditLogsBefore");async function _7(e,t){let r=new Y0;try{let n=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];a7.isEmpty(c)||(s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>u7)break}return await s,r}catch(n){throw n}}a(_7,"deleteTransactions")});var j0=C((xOe,Q0)=>{"use strict";var Qy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Q0.exports=Qy});var X0=C((kOe,J0)=>{"use strict";var h7=Ks(),m7=a_(),HOe=j0(),wi=(k(),P($)),p7=oe(),jy=_t(),E7=ao(),g7=o_(),S7=r_(),{getSchemaPath:T7}=Et();J0.exports=A7;async function A7(e,t=!0){let r;e.schema===wi.SYSTEM_SCHEMA_NAME?r=E7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await y7(e),s=T7(e.schema,e.table),i=await jy.openEnvironment(s,e.table);return t===!0&&await R7(e,i,r.hash_attribute),jy.dropDBI(i,e.attribute),n}a(A7,"lmdbDropAttribute");async function R7(e,t,r){let n=jy.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(R7,"removeAttributeFromAllObjects");async function y7(e){let t=new h7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await g7(t)).filter(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(p7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new m7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return S7(i)}a(y7,"dropAttributeFromSystem")});var sx=C((qOe,nx)=>{"use strict";var Jy=_t(),pu=Ht(),GOe=ln(),Xy=(k(),P($)),Z0=oe(),{getTransactionAuditStorePath:b7}=Et(),O7=_u(),eE=uu(),N7=X();nx.exports=w7;async function w7(e){let t=b7(e.schema,e.table),r=await Jy.openEnvironment(t,e.table,!0),n=Jy.listDBIs(r);Jy.initializeDBIs(r,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Xy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ex(r,e.search_values);case Xy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,C7(r,e.search_values,s);case Xy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return I7(r,e.search_values);default:return ex(r)}}a(w7,"readAuditLog");function ex(e,t=[0,Date.now()]){Z0.isEmpty(t[0])&&(t[0]=0),Z0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new eE,s))}a(ex,"searchTransactionsByTimestamp");function I7(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[pu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,rx(e,i))}return Object.fromEntries(r)}a(I7,"searchTransactionsByUsername");function C7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=O7.equals(e,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=rx(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);tx(l,"records",r,f,o),tx(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(C7,"searchTransactionsByHashValues");function tx(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new eE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new eE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(tx,"loopRecords");function rx(e,t){let r=[];try{let n=e.dbis[pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new eE,i);r.push(o)}}catch(i){N7.warn(i)}return r}catch(n){throw n}}a(rx,"batchSearchTransactions")});var ox=C((YOe,ix)=>{"use strict";var{getSchemaPath:VOe}=Et(),KOe=_t(),{database:P7}=(Ue(),P(ot));ix.exports={writeTransaction:D7};async function D7(e,t,r){return P7({database:e,table:t}).transaction(r)}a(D7,"writeTransaction")});var ux=C((zOe,lx)=>{"use strict";var{getSchemaPath:ax}=Et(),cx=_t();lx.exports={flush:L7,resetReadTxn:M7};async function L7(e,t){return(await cx.openEnvironment(ax(e,t),t.toString())).flushed}a(L7,"flush");async function M7(e,t){try{(await cx.openEnvironment(ax(e,t),t.toString())).resetReadTxn()}catch{}}a(M7,"resetReadTxn")});var hx=C((jOe,_x)=>{"use strict";var{Readable:v7}=require("stream"),{getDatabases:U7}=(Ue(),P(ot)),{readSync:x7,openSync:B7,createReadStream:dx}=require("fs"),{open:H7}=require("lmdb"),fx=vf(),k7=Uf(),{AUDIT_STORE_OPTIONS:F7}=(io(),P(mx)),{INTERNAL_DBIS_NAME:G7,AUDIT_STORE_NAME:q7}=Ht();_x.exports=V7;var Zy=32768,$7=100;async function V7(e){let t=e.database||e.schema||"data",r=U7()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=H7({noSync:!0,maxDbs:k7.MAX_DBS}),h,_=d.openDB(G7,new fx(!1)),m=f.useReadTransaction(),S=0,g=a(async function(E,T){T.encoding="binary",T.encoder=void 0;let N=d.openDB(E,T),x=f.openDB(E,T);for(let{key:H,version:q,value:Q}of x.getRange({start:null,transaction:m,versions:x.useVersions}))h=N.put(H,Q,q),S++%$7===0&&(await new Promise(te=>setTimeout(te,20)),m.openTimer&&(m.openTimer=0))},"copyDatabase");for(let{key:E,value:T}of f.getRange({transaction:m,start:!1}))if(s.some(N=>E.startsWith?.(N+"/"))){_.put(E,T);let[,N]=E.split("/"),x=!N,H=new fx(!x,x);await g(E,H)}e.include_audit&&await g(q7,{...F7}),await h;let y=dx(d.path);return y.headers=l(),y.on("close",()=>{m.done(),d.close()}),y}let o=r[Object.keys(r)[0]].primaryStore,c=B7(o.path);return o.transaction(()=>{let u=Buffer.alloc(Zy);x7(c,u,0,Zy),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=dx(null,{fd:c,start:Zy}),h=new v7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(V7,"getBackup")});var gx=C((XOe,Ex)=>{"use strict";var K7=X(),{handleHDBError:Y7}=pe(),W7=WL(),z7=Pp(),Q7=yy(),j7=PU(),J7=r_(),X7=Py(),Z7=r0(),eee=d0(),tee=o_(),ree=S0(),nee=P0(),see=U0(),iee=B0(),oee=G0(),aee=z0(),cee=Hy(),lee=X0(),uee=sx(),dee=ox(),px=ux(),fee=hx(),eb=class extends W7{static{a(this,"LMDBBridge")}async searchByConditions(t){return ree(t)}async getDataByHash(t){return await X7(t)}async searchByHash(t){return await Z7(t)}async getDataByValue(t,r){return await eee(t,r)}async searchByValue(t){return await tee(t)}async createSchema(t){return await j7(t)}async dropSchema(t){return await nee(t)}async createTable(t,r){return await see(t,r)}async dropTable(t){return await cee(t)}async createAttribute(t){return await z7(t)}async createRecords(t){return await Q7(t)}async updateRecords(t){return await iee(t)}async upsertRecords(t){try{return await oee(t)}catch(r){throw Y7(r,null,null,K7.ERR,r)}}async deleteRecords(t){return await J7(t)}async dropAttribute(t){return await lee(t)}async deleteAuditLogsBefore(t){return await aee(t)}async readAuditLog(t){return await uee(t)}writeTransaction(t,r,n){return dee.writeTransaction(t,r,n)}flush(t,r){return px.flush(t,r)}resetReadTxn(t,r){return px.resetReadTxn(t,r)}getBackup(t){return fee(t)}};Ex.exports=eb});var rb={};xe(rb,{add:()=>tE,applyReverse:()=>Sx,getRecordAtTime:()=>tb,rebuildUpdateBefore:()=>rE});function tE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function rE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,tE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Sx(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=_ee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Tx}}function tb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=It(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Sx(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Tx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=It(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var _ee,Tx,nE=ye(()=>{io();a(tE,"add");tE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};_ee={add:tE};a(rE,"rebuildUpdateBefore");a(Sx,"applyReverse");Tx={};a(tb,"getRecordAtTime")});function Tn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function aE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a number, attempt to assign ${h}`);Tn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be a number, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Kn.ClientError(`${l} must be a Date, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof gi||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){Tn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be an object, attempt to assign ${d}`);Tn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let m=this.getRecord()?.[l];return _.update(m)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=nb(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Kn.ClientError("Can not add a property to a sealed table schema");Tn(this)[c]=l}),i("deleteProperty",function(c){Tn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,Rx);break}o=c}while(o&&o!==Rx)}function nb(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends f_{static{a(this,"TrackedObject")}},aE(r,t)),new r(e)):new f_(e);case Array:let n=new iE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=nb(o,t?.elements)),n[s]=o}return n;default:return e}}function cE(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=cE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Gc(e,t=e.getChanges?.()){let r;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Gc(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=rb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Gc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)hee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function sE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Fc]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(sE(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(sE(s))return!0}else return!0}else return!0}}return!1}var Kn,Ax,Rx,f_,hee,Fc,iE,oE,sb=ye(()=>{Kn=M(pe());nE();fs();a(Tn,"getChanges");a(aE,"assignTrackedAccessors");Ax=Object.prototype,Rx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Ax[t])return Ax[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=nb(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(nb,"trackObject");f_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};aE(f_,{});a(cE,"collapseData");hee=Object.prototype.hasOwnProperty;a(Gc,"updateAndFreeze");a(sE,"hasChanges");Fc=Symbol.for("has-array-changes"),iE=class extends Array{static{a(this,"TrackedArray")}#e;[Fc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Fc]=!0,super.splice(...t)}push(...t){return this[Fc]=!0,super.push(...t)}pop(){return this[Fc]=!0,super.pop()}unshift(...t){return this[Fc]=!0,super.unshift(...t)}shift(){return this[Fc]=!0,super.shift()}};iE.prototype.constructor=Array;oE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Px={};xe(Px,{ResourceBridge:()=>ab});function cb({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 bx(e,t){let r=Ii(e),n=cb(e,r);if(!r)throw new Ys.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;wt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&cE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ii(e){let t=e.database||e.schema||pee,r=Xe()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,mee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Ox(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*Nx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var wx,lE,Ys,Ix,ib,ob,Cx,mee,pee,Eee,gee,yx,ab,Dx=ye(()=>{"use strict";wx=M(gx()),lE=M(hu()),Ys=M(pe());Ue();Ix=M(kf());k();ib=M(ho()),ob=M(Vs()),Cx=M(oe());_c();sb();({HDB_ERROR_MSGS:mee}=Ys.hdb_errors),pee="data",Eee=1e4,gee=10,ab=class extends wx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),yx=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,lE.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ii(t);if(!n)throw new Ys.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:cb(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ys.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}]}ft({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ii(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ii(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ii(t).dropTable()}createSchema(t){return Eu({database:t.schema,table:null}),ib.signalSchemaChange(new ob.SchemaEventMsg(process.pid,Vt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await lb(t.schema),ib.signalSchemaChange(new ob.SchemaEventMsg(process.pid,Vt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,yx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Ix.default)(t),s,i=Xe()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),wt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=cE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let m=f[_];if(typeof m=="function")try{let S=m([[h]]);Array.isArray(S)&&(m=S[0].func_val,f[_]=m)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Xe()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),wt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Ox(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Xe()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ys.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:Nm.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Cx.async_set_timeout)(gee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%Eee===0&&await u();return l.length>0&&await u(),s?Ox(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,lE.default)(t,"hashes");if(r)throw r;return bx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of bx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&oA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,lE.default)(t,"value");if(n)throw n;let s=Ii(t);if(!s)throw new Ys.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Nm.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:cb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ii(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ii({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ii(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ii(t),n={};switch(t.search_type){case wm.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case wm.USERNAME:let s=t.search_values;for await(let i of Nx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Nx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(cb,"getSelect");a(bx,"getRecords");a(Ii,"getTable");a(Ox,"createDeleteResponse");a(Nx,"groupRecordsInHistory")});var Gn=C((dNe,Lx)=>{"use strict";var{ResourceBridge:See}=(Dx(),P(Px)),Tee=ce();Tee.initSync();var uE;function Aee(){return uE||(uE=new See,uE)}a(Aee,"getBridge");Lx.exports=Aee()});var gn=C((_Ne,xx)=>{"use strict";var fE=sR(),Lr=oe(),Ree=require("util"),_E=Gn(),yee=qs(),Mx=X(),{handleHDBError:qc,hdb_errors:bee}=pe(),{HTTP_STATUS_CODES:$c}=bee,Oee=Ree.promisify(yee.getTableSchema),Nee="updated",vx="inserted",Ux="upserted";xx.exports={insert:Iee,update:Cee,upsert:Pee,validation:wee,flush:Dee};async function wee(e){if(Lr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Lr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Oee(e.schema,e.table),r=fE(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Lr.isEmptyOrZeroLength(c[n]))throw Mx.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(!Lr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Mx.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Lr.isEmpty(c[n])&&c[n]!==""&&s.has(Lr.autoCast(c[n]))&&(c.skip=!0),s.add(Lr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(wee,"validation");async function Iee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=fE(e);if(t)throw qc(new Error,t.message,$c.BAD_REQUEST);Lr.transformReq(e);let r=Lr.checkSchemaTableExist(e.schema,e.table);if(r)throw qc(new Error,r,$c.BAD_REQUEST);let n=await _E.createRecords(e);return dE(vx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Iee,"insertData");async function Cee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=fE(e);if(t)throw qc(new Error,t.message,$c.BAD_REQUEST);Lr.transformReq(e);let r=Lr.checkSchemaTableExist(e.schema,e.table);if(r)throw qc(new Error,r,$c.BAD_REQUEST);let n=await _E.updateRecords(e);return Lr.isEmpty(n.existing_rows)?dE(Nee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):dE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Cee,"updateData");async function Pee(e){if(e.operation!=="upsert")throw qc(new Error,"invalid operation, must be upsert",$c.INTERNAL_SERVER_ERROR);let t=fE(e);if(t)throw qc(new Error,t.message,$c.BAD_REQUEST);Lr.transformReq(e);let r=Lr.checkSchemaTableExist(e.schema,e.table);if(r)throw qc(new Error,r,$c.BAD_REQUEST);let n=await _E.upsertRecords(e);return dE(Ux,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Pee,"upsertData");function dE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===vx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Ux?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(dE,"returnObject");function Dee(e){return Lr.transformReq(e),_E.flush(e.schema,e.table)}a(Dee,"flush")});var qx=C((mNe,Gx)=>{var gu=require("validate.js"),Hx=rt(),Su=(k(),P($)),{handleHDBError:Lee,hdb_errors:Mee}=pe(),{HDB_ERROR_MSGS:Wt,HTTP_STATUS_CODES:vee}=Mee,ub=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Uee={STRUCTURE_USER:"structure_user"},Bx=Object.values(Su.ROLE_TYPES_ENUM),xee="attribute_permissions",Bee="attribute_name",{PERMS_CRUD_ENUM:Tu}=Su,Hee=[xee,...Object.values(Tu)],kx=[Tu.READ,Tu.INSERT,Tu.UPDATE],kee=[Bee,...kx];function Fee(e){let t=ub();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Fx(e,t)}a(Fee,"addRoleValidation");function Gee(e){let t=ub();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Fx(e,t)}a(Gee,"alterRoleValidation");function qee(e){let t=ub();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Hx.validateObject(e,t)}a(qee,"dropRoleValidation");var $ee=["operation","role","id","permission","hdb_user","access"];function Fx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)$ee.includes(n[o])||s.push(n[o]);s.length>0&&tr(Wt.INVALID_ROLE_JSON_KEYS(s),r);let i=Hx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{tr(o,r)}),e.permission){let o=Vee(e);o&&tr(o,r),Bx.forEach(c=>{e.permission[c]&&!gu.isBoolean(e.permission[c])&&tr(Wt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Bx.indexOf(o)<0){if(o===Uee.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||tr(Wt.SCHEMA_NOT_FOUND(d),r)}continue}tr(Wt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){tr(Wt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){tr(Wt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{Hee.includes(f)||tr(Wt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Tu).forEach(f=>{gu.isDefined(u[f])?gu.isBoolean(u[f])||tr(Wt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):tr(Wt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){tr(Wt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){tr(Wt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!kee.includes(S)&&S!==Tu.DELETE&&tr(Wt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!gu.isDefined(_.attribute_name)){tr(Wt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=_.attribute_name;if(!f.includes(m)){tr(Wt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}kx.forEach(S=>{gu.isDefined(_[S])?gu.isBoolean(_[S])||tr(Wt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):tr(Wt.ATTR_PERM_MISSING(S,m),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;tr(Wt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return Kee(r)}a(Fx,"customValidate");Gx.exports={addRoleValidation:Fee,alterRoleValidation:Gee,dropRoleValidation:qee};function Vee(e){let{operation:t,permission:r}=e;if(t===Su.OPERATIONS_ENUM.ADD_ROLE||t===Su.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 Wt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Su.ROLE_TYPES_ENUM.SUPER_USER:Su.ROLE_TYPES_ENUM.CLUSTER_USER;return Wt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Vee,"validateNoSUPerms");function Kee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Wt.ROLE_PERMS_ERROR,...e};return Lee(new Error,n,vee.BAD_REQUEST)}else return null}a(Kee,"generateRolePermResponse");function tr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(tr,"addPermError")});var h_=C((gNe,Yx)=>{"use strict";var $x=gn(),Vx=Vr(),Yee=vc(),fb=qx(),_b=ho(),ENe=require("uuid").v4,Wee=require("util"),hE=(k(),P($)),zee=oe(),hb=Vx.searchByValue,Qee=Vx.searchByHash,jee=Wee.promisify(Yee.delete),Jee=Ks(),Xee=mu(),{hdb_errors:Zee,handleHDBError:Vc}=pe(),{HDB_ERROR_MSGS:Kx,HTTP_STATUS_CODES:__}=Zee,{UserEventMsg:mb}=Vs();Yx.exports={addRole:ete,alterRole:tte,dropRole:rte,listRoles:nte};function db(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(db,"scrubRoleDetails");async function ete(e){let t=fb.addRoleValidation(e);if(t)throw t;e=db(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await hb(r)||[])}catch(i){throw Vc(i)}if(n&&n.length>0)throw Vc(new Error,Kx.ROLE_ALREADY_EXISTS(e.role),__.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await $x.insert(s),_b.signalUserChange(new mb(process.pid)),e=db(e),e}a(ete,"addRole");async function tte(e){let t=fb.alterRoleValidation(e);if(t)throw t;e=db(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await $x.update(r)}catch(s){throw Vc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Vc(new Error,"Invalid role id",__.BAD_REQUEST,void 0,void 0,!0);return await _b.signalUserChange(new mb(process.pid)),e}a(tte,"alterRole");async function rte(e){let t=fb.dropRoleValidation(e);if(t)throw Vc(new Error,t,__.BAD_REQUEST,void 0,void 0,!0);let r=new Xee(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Qee(r));if(n.length===0)throw Vc(new Error,Kx.ROLE_NOT_FOUND,__.NOT_FOUND,void 0,void 0,!0);let s=new Jee(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await hb(s)),o=!1;if(zee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Vc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,__.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await jee(c),_b.signalUserChange(new mb(process.pid)),`${n[0].role} successfully deleted`}a(rte,"dropRole");async function nte(){return hb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(nte,"listRoles")});var pb={};xe(pb,{start:()=>Qx,startOnMainThread:()=>ote});function Qx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Wx.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(ste.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await ite(i)}}}async function ite(e){let t=Xe().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,zx.isEqual)(i,e)?void 0:(e.id=r.id,(0,mE.alterRole)(e))}return(0,mE.addRole)(e)}var mE,Wx,zx,ste,ote,jx=ye(()=>{Ue();mE=M(h_()),Wx=require("yaml"),zx=require("lodash"),ste=["super_user","cluster_user","structure_user"];a(Qx,"start");a(ite,"ensureRole");ote=Qx});async function pE(e){let t=(0,Zx.pathToFileURL)(e).toString();if(ate)return m_||(m_=cte(ute)),(await(await m_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function cte(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),m_=new Compartment({console,Math,Date,fetch:lte,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Xx.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qr,tables:Yn,databases:Ye})}};let n=await(0,Jx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),m_}function lte(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 ute(){return{Resource:qr,tables:Yn}}var Jx,Xx,Zx,ate,m_,Eb=ye(()=>{ra();Ue();Jx=require("fs/promises"),Xx=require("path"),Zx=require("url"),ate=!1;a(pE,"secureImport");a(cte,"getCompartment");a(lte,"secureOnlyFetch");a(ute,"getGlobalVars")});var Sb={};xe(Sb,{handleFile:()=>dte});async function dte(e,t,r,n){let s=new Map,i=await pE(r);c(i.default)&&n.set((0,gb.dirname)(t),i.default),o(i,(0,gb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var gb,eB=ye(()=>{Eb();gb=require("path");a(dte,"handleFile")});var Ab={};xe(Ab,{start:()=>fte});function fte({resources:e}){e.set("login",Tb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Tb,tB=ye(()=>{ra();a(fte,"start");Tb=class extends qr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var A_={};xe(A_,{addAnalyticsListener:()=>T_,calculateCPUUtilization:()=>TB,diffResourceUsage:()=>AB,recordAction:()=>rr,recordActionBinary:()=>Wn,setAnalyticsEnabled:()=>_te});function _te(e){mB=e}function hte(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 mte(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},gE.set(e,o)}function rr(e,t,r,n,s){if(!mB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=gE.get(i);o?hte(e,o):mte(i,e,t,r,n,s),EE||pte()}function Wn(e,t,r,n,s){rr(!!e,t,r,n,s)}function T_(e){gB.push(e)}function pte(){EE=performance.now(),setTimeout(async()=>{let e=performance.now()-EE;EE=0;let t=[],r={time:Date.now(),period:e,threadId:Kc.threadId,metrics:t};for(let[s,i]of gE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of SB){let h=Math.floor(c*d),_=o[h-1];if(h>l){let m=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+m}:S.count+=m}else u.push(m>1?{value:_,count:m}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await RB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Kc.threadId,byThread:!0,...n});for(let s of gB)s(t);gE=new Map,Kc.parentPort?Kc.parentPort.postMessage({type:EB,report:r}):OB({report:r})},pB).unref()}function SE(e,t,r){let n={id:(0,g_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function TB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function AB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Ete(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};SE(e,"table-size",l),Yc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function rB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=hB.default.statSync(s.primaryStore.env.path).size,c=Ete(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};SE(e,"database-size",u),Yc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Yc.warn?.("Error getting DB size metrics",s)}}function nB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};SE(e,"storage-volume",o),Yc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Yc.warn?.("Error getting DB volume metrics",s)}}async function gte(e,t=6e4){let r=yb(),n=yB(),s=new Promise(E=>{let T=performance.now();setImmediate(()=>{let N=performance.now();N-T>5e3&&Yc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(N-T)+"ms"),T=performance.now()}),n.primaryStore.prefetch([1],()=>{let N=performance.now();N-T>5e3&&Yc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(N-T)+"ms"),E(N-T)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:T}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!T)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:N,threadId:x}=T;for(let H of N||[]){let{path:q,method:Q,type:te,metric:se,count:W,total:ne,distribution:ue,threads:ie,...Re}=H;W||(W=1);let Ee=se+(q?"-"+q:"");Q!==void 0&&(Ee+="-"+Q),te!==void 0&&(Ee+="-"+te);let Ae=c.get(Ee);if(Ae){if(Ae.threads){let ut=Ae.threads[x];if(ut)Ae=ut;else{Ae.threads[x]={...Re};continue}}Ae.count||(Ae.count=1);let vt=Ae.count;for(let ut in Re){let Cn=Re[ut];typeof Cn=="number"&&(Ae[ut]=(Ae[ut]*vt+Cn*W)/(vt+W))}Ae.count+=W,ne>=0&&(Ae.total+=ne,Ae.ratio=Ae.total/Ae.count)}else Ae={period:t,...H},delete Ae.distribution,c.set(Ee,Ae),Ae.byThread&&(Ae.threads=[],Ae.threads[x]={...Re},u.push(Ae));if(ue){ue=ue.map(ut=>typeof ut=="number"?{value:ut,count:1}:ut);let vt=l.get(Ee);vt?vt.push(...ue):l.set(Ee,ue)}}await RB()}for(let E of u){let{path:T,method:N,type:x,metric:H,count:q,total:Q,distribution:te,threads:se,...W}=E;se=se.filter(ne=>ne);for(let ne in W){if(typeof E[ne]!="number")continue;let ue=0;for(let ie of se){let Re=ie[ne];typeof Re=="number"&&(ue+=Re)}E[ne]=ue}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,T]of l){let N=c.get(E);T.sort((ut,Cn)=>ut.value>Cn.value?1:-1);let x=N.count-1,H=[],q=0,Q=0,te;for(let ut of SB){let Cn=x*ut;for(;q<Cn;)te=T[Q++],q+=te.count,Q===1&&q--;let nn=T[Q>1?Q-2:0];te||(te=T[0]),H.push(te.value-(te.value-nn.value)*(q-Cn)/te.count)}let[se,W,ne,ue,ie,Re,Ee,Ae,vt]=H;Object.assign(N,{p1:se,p10:W,p25:ne,median:ue,p75:ie,p90:Re,p95:Ee,p99:Ae,p999:vt})}let d;for(let[E,T]of c)T.id=(0,g_.getNextMonotonicTime)(),T.time=f,n.primaryStore.put(T.id,T,{append:!0}).then(N=>{N||n.primaryStore.put(T.id,T)}),d=!0;let h=Date.now(),{idle:_,active:m}=performance.eventLoopUtilization();if(d||m*10>_){let E=(0,g_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:_-sB,active:m-iB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(N=>{N||n.primaryStore.put(E,T)})}sB=_,iB=m;let S=process.resourceUsage(),g=AB(p_,S);g.time=h,g.period=p_.time?h-p_.time:t,g.cpuUtilization=TB(p_,g.period),SE(n,"resource-usage",g),p_=g;let y=Xe();rB(n,y),rB(n,{system:y.system}),nB(n,y),nB(n,{system:y.system})}async function oB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function yb(){return aB||(aB=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function yB(){return cB||(cB=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Ate(){bB=!0;let e=(0,S_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await gte(pB,e),await oB(yb(),Ste),await oB(yB(),Tte)},Math.min(e/2,2147483647)).unref()}function OB(e,t){let r=e.report;r.threadId=t?.threadId||Kc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(lB+=n.mean*n.count);r.totalBytesProcessed=lB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(uB.get(t))}),uB.set(t,t.performance.eventLoopUtilization())),r.id=(0,g_.getNextMonotonicTime)(),yb().primaryStore.put(r.id,r),bB||Ate(),Rte&&(NB=bte(r))}async function bte(e){if(await NB,!fa){let r=(0,E_.dirname)((0,fB.getLogFilePath)());try{fa=await(0,Rb.open)((0,E_.join)(r,"analytics.log"),"r+")}catch{fa=await(0,Rb.open)((0,E_.join)(r,"analytics.log"),"w+")}}let t=(await fa.stat()).size;if(t>yte){let r=Buffer.alloc(t);await fa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fa.write(r,{position:0}),await fa.truncate(r.length),t=r.length}await fa.write(JSON.stringify(e)+`
|
|
20
|
-
`,t)}var Kc,dB,fB,_B,E_,Rb,g_,S_,hB,Yc,gE,mB,EE,pB,EB,gB,SB,sB,iB,p_,RB,Ste,Tte,aB,cB,bB,lB,uB,Rte,NB,fa,yte,Ci=ye(()=>{Kc=require("worker_threads"),dB=M(nt());Ue();fB=M(X()),_B=M(pi()),E_=require("path"),Rb=require("fs/promises"),g_=M(ln()),S_=M(ce());k();Pr();hB=M(require("node:fs")),Yc=(0,_B.loggerWithTag)("analytics");(0,S_.initSync)();gE=new Map,mB=(0,S_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(_te,"setAnalyticsEnabled");a(hte,"recordExistingAction");a(mte,"recordNewAction");a(rr,"recordAction");Ke.recordAnalytics=rr;a(Wn,"recordActionBinary");EE=0,pB=1e3,EB="analytics-report",gB=[];a(T_,"addAnalyticsListener");SB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(pte,"sendAnalytics");a(SE,"storeMetric");a(TB,"calculateCPUUtilization");a(AB,"diffResourceUsage");a(Ete,"storeTableSizeMetrics");a(rB,"storeDBSizeMetrics");a(nB,"storeVolumeMetrics");a(gte,"aggregation");sB=0,iB=0,p_={},RB=a(()=>new Promise(setImmediate),"rest");a(oB,"cleanup");Ste=36e5,Tte=31536e6;a(yb,"getRawAnalyticsTable");a(yB,"getAnalyticsTable");(0,dB.setChildListenerByType)(EB,OB);a(Ate,"startScheduledTasks");lB=0,uB=new Map,Rte=!1;a(OB,"recordAnalytics");yte=1e6;a(bte,"logAnalytics")});var wB={};xe(wB,{Headers:()=>Eo,appendHeader:()=>TE,mergeHeaders:()=>bb});function TE(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function bb(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Eo(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 Eo,R_=ye(()=>{Eo=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(TE,"appendHeader");a(bb,"mergeHeaders")});function LB(e){let t={openapi:Ote,info:{title:"HarperDB HTTP REST interface",version:DB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:T,name:N,elements:x,relationship:H,definition:q}of o){if(H)T==="array"?u[N]={type:"array",items:{$ref:_a+x.type}}:u[N]={$ref:_a+T};else{let Q=q??x?.definition;if(Q){if(!t.components.schemas[Q.type]){let te={};Q.properties.forEach(se=>{te[se.name]=new Ib(Ob[se.type],se.type)}),t.components.schemas[Q.type]=new PB(te)}T==="array"?u[N]={type:"array",items:{$ref:_a+Q.type}}:u[N]={$ref:_a+Q.type}}else T==="array"?x.type==="Any"||x.type=="ID"?u[N]={type:"array",items:{format:x.type}}:u[N]={type:"array",items:new Ib(Ob[x.type],x.type)}:T==="Any"||T=="ID"?u[N]={format:T}:u[N]=new Ib(Ob[T],T)}f.push(new Cb(N,"query",u[N]))}let d=Object.keys(u),h=new Cb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new Cb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new PB(u);let m=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",y=typeof l.delete=="function",E="/"+s+"/";m&&(t.paths[E]={},t.paths[E].post=new Nte(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new Nb(f,r,{200:new wb({$ref:_a+i})},"search for records by the specified property name and value pairs")),y&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new CB(f,r,"delete all the records that match the provided query",{204:new IB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new Nb([h],r,{200:new wb({$ref:_a+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new wte([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),y&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new CB([h],r,"delete a record with the given primary key",{204:new IB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new Nb([h,_],r,{200:new wb({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Nte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:_a+e}}}},this.security=t,this.responses={200:{description:Pb,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Nb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function wb(e){this.description=Pb,this.content={"application/json":{schema:e}}}function IB(){this.description="successfully processed request, no content returned to client"}function wte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:_a+r}}}},this.responses={200:{description:Pb}}}function CB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function PB(e){this.type="object",this.properties=e}function Ib(e,t){this.type=e,this.format=t}function Cb(e,t,r){this.name=e,this.in=t,this.schema=r}var DB,Ote,Ob,_a,Pb,MB=ye(()=>{DB=M(pt()),Ote="3.0.3",Ob={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},_a="#/components/schemas/",Pb="successful operation";a(LB,"generateJsonApi");a(Nte,"Post");a(Nb,"Get");a(wb,"Response200");a(IB,"Response204");a(wte,"Put");a(CB,"Delete");a(PB,"ResourceSchema");a(Ib,"Type");a(Cb,"Parameter")});var UB={};xe(UB,{Request:()=>y_,createReuseportFd:()=>AE});var vB,y_,Db,Lb,AE,RE=ye(()=>{vB=require("os"),y_=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new Lb(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new Db(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},Db=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},Lb=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,vB.platform)()!="win32"&&(AE=require("node-unix-socket").createReuseportFd)});var bE={};xe(bE,{parseHeaderValue:()=>vb,start:()=>Pte});async function Cte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&jm(e);let i=new Eo;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==xB){let g=yE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new hc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let y=vb(g);for(let E of y)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=vb(u).map(y=>(y.next?.name==="confirm"&&y.next.value>=0&&(e.replicatedConfirmation=+y.next.value),y.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await wt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=so(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Au.ClientError(g,400)}if(e.authorize=!0,o===xB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return LB(yE);throw new Au.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Au.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Au.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,Mb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=bb(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=wf(d.data,e,d)),d}else if(_=e.lastModified){Ite[0]=_;let g=String.fromCharCode(34,(Mr[0]&63)+62,(Mr[0]>>6)+(Mr[1]<<2&63)+62,(Mr[1]>>4)+(Mr[2]<<4&63)+62,(Mr[2]>>2)+62,(Mr[3]&63)+62,(Mr[3]>>6)+(Mr[4]<<2&63)+62,(Mr[4]>>4)+(Mr[5]<<4&63)+62,(Mr[5]>>2)+62,(Mr[6]&63)+62,(Mr[6]>>6)+(Mr[7]<<2&63)+62,34),y=r["if-none-match"];y&&g==y?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),Mb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let m={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(m.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(m.body=wf(d,e,m),s==="HEAD"&&(m.body=void 0)),m}catch(o){o.statusCode?o.statusCode===500?Pi.warn(o):Pi.info(o):Pi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=wf(o.contentType?o:o.toString(),e,c),c}}function Pte(e){Mb=e,e.includeExpensiveRecordCountEstimates&&(y_.prototype.includeExpensiveRecordCountEstimates=!0),!BB&&(BB=!0,yE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Cte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{b_++;let s=new Un;HB||(HB=!0,T_(l=>{b_>0&&l.push({metric:"ws-connections",connections:b_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Pi.warn(l)});let o;t.on("message",a(function(u){o||(o=so(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);rr(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{b_--,Wn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=yE.getMatch(l,"ws");if(Wn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,rr(m=>({count:m.count,total:b_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new hc(u.relativeURL),d=u.Resource;c=(await wt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let m=await ia(_.value,r);t.send(m),rr(m.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(S=>t._socket.once("drain",S))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Pi.warn(l):Pi.info(l):Pi.error(l),t.close(Dte[l.statusCode]||1011,l.toString())}t.close()},e))}function vb(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Pi,Au,Mr,Ite,Mb,xB,BB,yE,HB,b_,Dte,kB=ye(()=>{to();Ci();Pi=M(X()),Au=M(pe());pf();Wl();_c();R_();MB();pf();RE();Mr=new Uint8Array(8),Ite=new Float64Array(Mr.buffer,0,1),Mb={},xB="openapi";a(Cte,"http");b_=0;a(Pte,"start");Dte={401:3e3,403:3003};a(vb,"parseHeaderValue")});var Ub=C((QNe,GB)=>{var{recordAction:OE,recordActionBinary:FB}=(Ci(),P(A_)),Lte=require("fastify-plugin"),Mte=200;GB.exports=Lte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),OE(o,"duration",u,d,f),FB(s.raw.statusCode<400,"success",u,d,f),FB(1,"response_"+s.raw.statusCode,u,d,f);let h=Mte;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{OE(performance.now()-c,"transfer",u,d,f),OE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,OE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),m=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",m?`${m}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var $B=C((jNe,qB)=>{var vte=rt(),Ute={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};qB.exports=function(e){return vte.validateObject(e,Ute)}});var NE=C((JNe,VB)=>{"use strict";var xte=(k(),P($)).OPERATIONS_ENUM,xb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=xte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};VB.exports=xb});var w_={};xe(w_,{createTokens:()=>Hte,getJWTRSAKeys:()=>DE,refreshOperationToken:()=>kte,validateOperationToken:()=>kb,validateRefreshToken:()=>LE});async function DE(){if(wE)return wE;try{let e=O_.default.join(N_.default.getHdbBasePath(),nA),t=await IE.default.readFile(O_.default.join(e,Qd.JWT_PASSPHRASE_NAME),"utf8"),r=await IE.default.readFile(O_.default.join(e,Qd.JWT_PRIVATE_KEY_NAME),"utf8");return wE={publicKey:await IE.default.readFile(O_.default.join(e,Qd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},wE}catch(e){throw PE.default.error(e),new Ws.ClientError(yu.NO_ENCRYPTION_KEYS,Ru.INTERNAL_SERVER_ERROR)}}async function Hte(e){let t=(0,Bb.validateBySchema)(e,Di.default.object({username:Di.default.string().optional(),password:Di.default.string().optional(),role:Di.default.string().optional(),expires_in:Di.default.alternatives(Di.default.string(),Di.default.number()).optional()}));if(t)throw new Ws.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,Hb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw PE.default.error(d),new Ws.ClientError(yu.INVALID_CREDENTIALS,Ru.UNAUTHORIZED)}if(!r)throw new Ws.ClientError(yu.INVALID_CREDENTIALS,Ru.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await DE(),c=await bu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??QB,algorithm:CE,subject:"operation"}),l=await bu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Bte,algorithm:CE,subject:"refresh"}),u=sy(l,"sha256");if((await(0,KB.update)(new YB.default(zd,ql.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ws.ClientError(yu.REFRESH_TOKEN_SAVE_FAILED,Ru.INTERNAL_SERVER_ERROR);return WB.default.signalUserChange(new zB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function kte(e){let t=(0,Bb.validateBySchema)(e,Di.default.object({refresh_token:Di.default.string().required()}).required());if(t)throw new Ws.ClientError(t.message);let{refresh_token:r}=e;await LE(r);let n=await DE(),s=await bu.default.decode(r);return{operation_token:await bu.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:QB,algorithm:CE,subject:"operation"})}}async function kb(e){return jB(e,"operation")}async function LE(e){return jB(e,"refresh")}async function jB(e,t){try{let r=await DE(),n=await bu.default.verify(e,r.publicKey,{algorithms:CE,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,Hb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!iy(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw PE.default.warn(r),r?.name==="TokenExpiredError"?new Ws.ClientError(yu.TOKEN_EXPIRED,Ru.FORBIDDEN):new Ws.ClientError(yu.INVALID_TOKEN,Ru.UNAUTHORIZED)}}var bu,IE,O_,Di,Bb,Ws,PE,Hb,KB,YB,WB,zB,N_,Ru,yu,QB,Bte,CE,wE,Ou=ye(()=>{bu=M(require("jsonwebtoken")),IE=M(require("fs-extra")),O_=M(require("node:path")),Di=M(require("joi")),Bb=M(rt());k();Ws=M(pe()),PE=M(X());Fp();Hb=M(qn()),KB=M(gn()),YB=M(NE()),WB=M(ho()),zB=M(Vs()),N_=M(ce()),{HTTP_STATUS_CODES:Ru,AUTHENTICATION_ERROR_MSGS:yu}=Ws.hdb_errors;N_.default.initSync();QB=N_.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Bte=N_.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",CE="RS256";a(DE,"getJWTRSAKeys");a(Hte,"createTokens");a(kte,"refreshOperationToken");a(kb,"validateOperationToken");a(LE,"validateRefreshToken");a(jB,"validateToken")});var Fb=C((rwe,ZB)=>{"use strict";var Fte=$B(),Nu=require("passport"),Gte=require("passport-local").Strategy,qte=require("passport-http").BasicStrategy,$te=require("util"),Vte=qn(),XB=$te.callbackify(Vte.findAndValidateUser),twe=Ln(),Kte=(k(),P($)),JB=(Ou(),P(w_));Nu.use(new Gte(function(e,t,r){XB(e,t,r)}));Nu.use(new qte(function(e,t,r){XB(e,t,r)}));Nu.serializeUser(function(e,t){t(null,e)});Nu.deserializeUser(function(e,t){t(null,e)});function Yte(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Nu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Kte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?JB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):JB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Yte,"authorize");function Wte(e,t){let r=Fte(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(Wte,"checkPermissions");ZB.exports={authorize:Yte,checkPermissions:Wte}});var ME=C((swe,eH)=>{"use strict";var zte=Gn();eH.exports={writeTransaction:Qte};function Qte(e,t,r){return zte.writeTransaction(e,t,r)}a(Qte,"writeTransaction")});var sH=C((awe,nH)=>{"use strict";var jte=Vr(),Jte=qs(),tH=X(),Xte=gn(),owe=ME(),Zte=require("clone"),qb=require("alasql"),ere=Lp(),rH=require("util"),tre=rH.promisify(Jte.getTableSchema),rre=rH.promisify(jte.search),nre=(k(),P($)),Gb=oe();ere(qb);nH.exports={update:ire};var sre="There was a problem performing this update. Please check the logs and try again.";async function ire({statement:e,hdb_user:t}){let r=await tre(e.table.databaseid,e.table.tableid),n=ore(e.columns);Gb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Zte(s),c=Gb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=qb.parse(l).statements[0],f=await rre(u),d=are(n,f);return cre(o,d,t)}a(ire,"update");function ore(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=qb.compile(`SELECT ${r.expression.toString()} AS [${nre.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tH.error(t),new Error(sre)}}a(ore,"createUpdateRecord");function are(e,t){return Gb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(are,"buildUpdateRecords");async function cre(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Xte.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){tH.error(`Error delete new_attributes from update response: ${i}`)}return s}a(cre,"updateRecords")});var oH=C((dwe,iH)=>{var lre=require("alasql"),ure=Vr(),dre=X(),fre=Gn(),Vb=require("util"),$b=oe(),_re=(k(),P($)),hre=qs(),lwe=ME(),uwe=gn(),mre="record",pre="successfully deleted",Ere=Vb.callbackify(Are),gre=Vb.promisify(ure.search),Sre=Vb.promisify(hre.getTableSchema);iH.exports={convertDelete:Ere};function Tre(e){return`${e.deleted_hashes.length} ${mre}${e.deleted_hashes.length===1?"":"s"} ${pre}`}a(Tre,"generateReturnMessage");async function Are({statement:e,hdb_user:t}){let r=await Sre(e.table.databaseid,e.table.tableid);$b.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$b.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=lre.parse(o).statements[0],l={operation:_re.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await gre(c);let u=await fre.deleteRecords(l);return $b.isEmptyOrZeroLength(u.message)&&(u.message=Tre(u)),delete u.txn_time,u}catch(u){throw dre.error(u),u.hdb_code?u.message:u}}a(Are,"convertDelete")});var dH=C((_we,uH)=>{"use strict";var Rre=fo(),{hdb_errors:aH}=pe(),{getDatabases:cH}=(Ue(),P(ot));uH.exports={checkSchemaExists:lH,checkSchemaTableExists:yre,schema_describe:Rre};async function lH(e){if(!cH()[e])return aH.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(lH,"checkSchemaExists");async function yre(e,t){let r=await lH(e);if(r)return r;if(!cH()[e][t])return aH.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(yre,"checkSchemaTableExists")});var Qb=C((gwe,yH)=>{"use strict";var{decode:bre}=require("msgpackr"),{isMainThread:mwe,parentPort:pwe,threadId:Ewe}=require("worker_threads"),xE=pr(),wu=Ct(),Wb=(k(),P($)),Wr=X(),Yb=ce(),Ore=(k(),P($)),{onMessageByType:Nre}=nt(),mH=uo(),{recordAction:fH,recordActionBinary:wre}=(Ci(),P(A_)),{publishToStream:Ire}=xE,{ConsumerEvents:_H}=require("nats"),Cre=Vr(),{promisify:Pre}=require("util"),{decodeBlobsWithWrites:Dre}=(fs(),P(fp)),pH=Pre(setTimeout),BE=1e4,HE,UE,Lre,Mre,EH,I_=new Map,Iu=new Map;yH.exports={initialize:gH,ingestConsumer:zb,setSubscription:vre,setIgnoreOrigin:Bre,getDatabaseSubscriptions:xre,updateConsumer:SH};async function gH(){Nre(Wb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await SH(n)}),EH=!0,Wr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await xE.getNATSReferences();HE=e,UE=e.info.server_name,Lre=t,Mre=r}a(gH,"initialize");async function SH(e){if(e.status==="start"){let{js:t,jsm:r}=await TH(e.node_domain_name);zb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=I_.get(e.stream_name+e.node_domain_name);t&&(Wr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),I_.set(e.stream_name+e.node_domain_name,"close")),Iu.get(e.node_domain_name)==="failed"&&Iu.set(e.node_domain_name,"close")}}a(SH,"updateConsumer");var kE=new Map;function vre(e,t,r){let n=kE.get(e);n||kE.set(e,n=new Map),n.set(t,r),EH||gH().then(Ure)}a(vre,"setSubscription");async function Ure(){let e=await Cre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+wu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await TH(r),!n))break;let{schema:o,table:c}=i,l=mH.createNatsTableStreamName(o,c);zb(l,n,s,r)}}}a(Ure,"accessConsumers");async function TH(e){let t,r,n=1;for(;!r;)try{t=await HE.jetstream({domain:e}),r=await HE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Iu.get(e)==="close")break;Iu.set(e,"failed"),n%10===1&&Wr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<BE?n++*100:BE;await pH(i)}return{js:t,jsm:r}}a(TH,"connectToRemoteJS");function xre(){return kE}a(xre,"getDatabaseSubscriptions");var AH;function Bre(e){AH=e}a(Bre,"setIgnoreOrigin");var RH=100,hH=new Array(RH),vE=0;async function zb(e,t,r,n){let{connection:s}=await xE.getNATSReferences();HE=s,UE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,UE),Wr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Iu.get(n)==="close")break;o%10===1&&Wr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Wr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await xE.createConsumer(r,e,UE,new Date(Date.now()).toISOString()));let f=o++*100<BE?o++*100:BE;await pH(f)}let c=!1,l;for(;!c;){if(I_.get(e+n)==="close"||Iu.get(n)==="close"){I_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Yb.get(Wb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),I_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===_H.ConsumerDeleted&&(await l.close(),c=!0),f.type===_H.HeartbeatsMissed){let d=f.data;Wr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Wr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await hH[vE],hH[vE]=Hre(f).catch(d=>{Wr.error(d)}),++vE>=RH&&(vE=0)}catch(f){f.message==="consumer deleted"?(Wr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Wr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(zb,"ingestConsumer");async function Hre(e){let t;await Dre(()=>{t=bre(e.data)}),fH(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Wr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Yb.get(Wb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(wu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(wu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(wu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!AH),wre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(wu.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;Wr.trace("processing message:",o,c,u,(f?"records: "+f.map(x=>x?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Wr.trace(`messageProcessor nats msg id: ${e.headers.get(wu.MSG_HEADERS.NATS_MSG_ID)}`);let m;f||(f=d);let S=new Promise(x=>m=x),{timestamp:g,user:y,node_name:E}=h||{},T=kE.get(c)?.get(u);if(!T)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=m,T.send(t);else if(f.length===1&&!l)T.send({type:Kb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:m,user:y,nodeName:E});else{let x=f.map((H,q)=>({type:Kb(o),value:H,expiresAt:_,id:d?.[q],table:u}));for(;l;)x.push({type:Kb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:x,table:u,timestamp:g,onCommit:m,user:y,nodeName:E})}Yb.get(Ore.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Ire(e.subject.split(".").slice(0,-1).join("."),mH.createNatsTableStreamName(c,u),e.headers,e.data),await S;let N=Date.now()-g;g&&fH(N,"replication-latency",e.subject,o,"ingest")}catch(o){Wr.error(o)}e.ack()}a(Hre,"messageProcessor");function Kb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Kb,"convertOperation")});var pr=C((Owe,FH)=>{"use strict";var br=ce();br.initSync();var kre=require("fs-extra"),Fre=require("semver"),D_=require("path"),{monotonicFactory:Gre}=require("ulidx"),OH=Gre(),qre=require("util"),NH=require("child_process"),$re=qre.promisify(NH.exec),Vre=NH.spawn,vr=Ct(),ze=(k(),P($)),{packageJson:Kre,PACKAGE_ROOT:Yre}=pt(),FE=oe(),zs=X(),GE=uo(),Wre=ME(),C_=Nt(),{broadcast:zre,onMessageByType:Qre,getWorkerIndex:jre}=nt(),{isMainThread:wH}=require("worker_threads"),{Encoder:Jre,decode:Zb}=require("msgpackr"),IH=new Jre,{isEmpty:jc}=FE,CH=qn(),Twe=48*36e11;wH&&Qre(ze.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,Qc=void 0});var{connect:Xre,StorageType:Zre,RetentionPolicy:ene,AckPolicy:eO,DeliverPolicy:tO,DiscardPolicy:tne,NatsConnection:Awe,JetStreamManager:Rwe,JetStreamClient:ywe,StringCodec:bwe,JSONCodec:rne,createInbox:rO,headers:nne,ErrorCode:bH}=require("nats"),{recordAction:sne}=(Ci(),P(A_)),{encodeBlobsAsBuffers:ine}=(fs(),P(fp)),PH=rne(),one="clustering",ane=Kre.engines[vr.NATS_SERVER_NAME],cne=D_.join(Yre,"dependencies"),Xb=D_.join(cne,`${process.platform}-${process.arch}`,vr.NATS_BINARY_NAME),jb,Jb,P_,Wc,zc;FH.exports={runCommand:DH,checkNATSServerInstalled:lne,createConnection:nO,getConnection:L_,getJetStreamManager:M_,getJetStream:MH,getNATSReferences:Li,getServerList:dne,createLocalStream:sO,listStreams:vH,deleteLocalStream:fne,getServerConfig:Cu,listRemoteStreams:_ne,viewStream:hne,viewStreamIterator:mne,publishToStream:pne,request:Sne,reloadNATS:iO,reloadNATSHub:Tne,reloadNATSLeaf:Ane,extractServerName:gne,requestErrorHandler:Rne,createLocalTableStream:HH,createTableStreams:One,purgeTableStream:kH,purgeSchemaTableStreams:Nne,getStreamInfo:wne,updateLocalStreams:Cne,closeConnection:une,getJsmServerName:qE,addNatsMsgHeader:UH,clearClientCache:LH,updateRemoteConsumer:yne,createConsumer:xH,updateConsumerIterator:bne};async function DH(e,t=void 0){let{stdout:r,stderr:n}=await $re(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
19
|
+
`},"serialize"),compressible:!1,q:.8});$r.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});DL={type:"application/json",serializeStream:Sf,serialize:Of,deserialize:t3,q:.5};$r.set("*/*",DL);$r.set("",DL);a(t3,"tryJSONParse");a(wf,"registerContentHandlers");r3=require("fastify-plugin"),n3=r3(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=hm(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(hm,"findBestSerializer");NL=XA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(If,"serialize");a(oa,"serializeMessage");a(QA,"asyncSerialization");a(JA,"hasAsyncSerialization");a(s3,"streamToBuffer");i3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(o3,"isBufferEncoding");a(a3,"parseContentType");a(no,"getDeserializer");a(c3,"deserializerUnknownType");a(l3,"transformIterable");a(_m,"toCsvStream")});var nR={};Be(nR,{start:()=>g3});function u3(e){if(e.kind!==ve.Kind.OPERATION_DEFINITION&&e.kind!==ve.Kind.FRAGMENT_DEFINITION)throw new yr(`Unexpected non-executable definition type ${e.kind}.`)}function ML(e){if(typeof e!="object"||e===null)throw new Ti("Request body must be an object.");if(!("query"in e))throw new Ti("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ti("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ti("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ti("Request body `operationName` field must be a string.")}function rR(e){return parseInt(e.value,10)}function UL(e){return parseFloat(e.value)}function xL(e,t,r){let n=r.get(e.name.value);return BL(n)?HL(n,t):{attribute:t,value:n}}function BL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function HL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],BL(n)?HL(n,t):{attribute:t,value:n}))}function d3(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case ve.Kind.NULL:return{attribute:t,value:null};case ve.Kind.INT:return{attribute:t,value:rR(e.value)};case ve.Kind.FLOAT:return{attribute:t,value:UL(e.value)};case ve.Kind.BOOLEAN:case ve.Kind.STRING:return{attribute:t,value:e.value.value};case ve.Kind.VARIABLE:return xL(e.value,t,r);case ve.Kind.OBJECT:return kL(e.value,t,r);case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Value type, ${e.value.kind}, is not supported.`)}}function kL(e,t,r){return e.fields.flatMap(n=>d3(n,t,r))}function f3(e,t){switch(e.value.kind){case ve.Kind.NULL:return{attribute:e.name.value,value:null};case ve.Kind.INT:return{attribute:e.name.value,value:rR(e.value)};case ve.Kind.FLOAT:return{attribute:e.name.value,value:UL(e.value)};case ve.Kind.BOOLEAN:case ve.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case ve.Kind.VARIABLE:return xL(e.value,e.name.value,t);case ve.Kind.OBJECT:return kL(e.value,[e.name.value],t);case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Argument type, ${e.value.kind}, is not supported.`)}}function _3(e,t){return e.flatMap(r=>f3(r,t))}function pm(e,t){return e.selections.flatMap(r=>{switch(r.kind){case ve.Kind.FIELD:return r;case ve.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new yr(`Fragment \`${n}\` not found.`);return pm(s.selectionSet,t)}case ve.Kind.INLINE_FRAGMENT:return pm(r.selectionSet,t)}})}function FL(e,t){return pm(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:FL(r.selectionSet,t)}:r.name.value)}async function h3(e,t,r,n){let s=us.getMatch(e.name.value,"graphql");if(s===void 0)throw new yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:FL(e.selectionSet,r),conditions:_3(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function GL(e){switch(e.kind){case ve.Kind.NULL:return null;case ve.Kind.INT:return rR(e);case ve.Kind.FLOAT:return parseFloat(e.value);case ve.Kind.STRING:case ve.Kind.BOOLEAN:return e.value;case ve.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:GL(r.value),...t}),{});case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Value type, ${e.kind}, is not supported.`)}}function p3(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=GL(n.defaultValue)),n.type.kind===ve.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new yr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function m3(e,t,r,n){if(e.operation===ve.OperationTypeNode.SUBSCRIPTION)throw new yr("Subscriptions are not supported.");if(e.operation===ve.OperationTypeNode.MUTATION)throw new yr("Mutations are not supported yet.");let s=p3(e.variableDefinitions,t),i=await Promise.all(pm(e.selectionSet,r).map(c=>h3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function vL({query:e,variables:t={},operationName:r},n){let s=ve.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(u3(u),u.kind===ve.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new yr("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new yr(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new yr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new yr(`Operation \`${r}\` not found.`);let l=await m3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function E3(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return ML(r),vL(r,e)}case"POST":{let r=await no(e.headers.get("content-type"),!0)(e._nodeRequest);return ML(r),vL(r,e)}default:throw new Ti("Method Not Allowed",405,{Allow:"GET, POST"})}}function g3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await E3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof ve.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof yr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof ve.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof yr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var ve,yr,Ti,qL=be(()=>{ve=M(require("graphql"));eo();Jl();a(u3,"assertExecutableDefinitionNode");a(ML,"assertRequestParams");a(rR,"processIntValueNode");a(UL,"processFloatValueNode");a(xL,"processVariableNode");a(BL,"isObject");a(HL,"transformObjectIntoQueryCondition");a(d3,"processObjectFieldNode");a(kL,"processObjectValueNode");a(f3,"processArgumentNode");a(_3,"buildConditionsQuery");a(pm,"fillInFragments");a(FL,"buildSelectQuery");a(h3,"processFieldNode");a(GL,"processConstValueNode");a(p3,"resolveVariables");a(m3,"executeOperation");a(vL,"resolver");yr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ti=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(E3,"graphqlQueryingHandler");a(g3,"start")});var Ri=P((pRe,KL)=>{"use strict";var VL=oe(),$L=(G(),D($)),eu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ai=require("joi"),aa={schema_format:{pattern:eu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},S3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number(),Ai.array()).required(),T3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number()),A3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number()).required();function R3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>aa.schema_length.maximum?`'${e}' maximum of 250 characters`:eu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(R3,"checkValidTable");function y3(e,t){return VL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(y3,"validateSchemaExists");function b3(e,t){let r=t.state.ancestors[0].schema;return VL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(b3,"validateTableExists");function O3(e,t){return e.toLowerCase()===$L.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${$L.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(O3,"validateSchemaName");KL.exports={common_validators:aa,schema_regex:eu,hdb_schema_table:S3,validateSchemaExists:y3,validateTableExists:b3,validateSchemaName:O3,checkValidTable:R3,hdb_database:T3,hdb_table:A3}});var iR=P((ERe,WL)=>{var{hdb_table:N3,hdb_database:YL}=Ri(),w3=nt(),sR=require("joi"),I3={undefined:"undefined",null:"null"},C3=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||I3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),P3=sR.object({database:YL,schema:YL,table:N3,records:sR.array().items(sR.object().custom(C3)).required()});WL.exports=function(e){return w3.validateBySchema(e,P3)}});var jL=P((SRe,zL)=>{"use strict";var oR=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};zL.exports=oR});var JL=P((ARe,QL)=>{"use strict";var aR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};QL.exports=aR});var rM={};Be(rM,{HAS_EXPIRATION:()=>gm,HAS_RESIDENCY_ID:()=>hR,HAS_STRUCTURE_UPDATE:()=>Tm,LAST_TIMESTAMP_PLACEHOLDER:()=>Lf,LOCAL_TIMESTAMP:()=>D3,METADATA:()=>yc,NEW_TIMESTAMP_PLACEHOLDER:()=>ZL,NO_TIMESTAMP:()=>cR,PENDING_LOCAL_TIME:()=>pR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>_R,RecordEncoder:()=>fR,TIMESTAMP_ASSIGN_LAST:()=>M3,TIMESTAMP_ASSIGN_NEW:()=>eM,TIMESTAMP_ASSIGN_PREVIOUS:()=>tM,TIMESTAMP_PLACEHOLDER:()=>mm,TIMESTAMP_RECORD_PREVIOUS:()=>lR,handleLocalTimeForGets:()=>Am,recordUpdater:()=>mR,removeEntry:()=>Oc});function U3(){return Df[0]=Df[0]^64,L3.getFloat64(0)}function Am(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[yc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[yc]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[yc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Rc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Rc.length;u++){let f=Rc[u].deref();(!f||f.isDone||f.isCommitted)&&Rc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function mR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?tu=i?.localTime?lR|tM:cR:tu=l?i?.localTime?lR|16384:eM|16384:cR;let _=u?.expiresAt;if(_>=0&&(c|=gm),Pf=c,uR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:o,instructedWrite:tu>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(dR=E,Pf|=hR,g|=Nc),R!==E&&(g|=wc,R||(R=0)),c&gm&&(g|=vf),u?.originatingOperation&&(g|=Mf),d&&(p.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&pn&&(r.getBinaryFast(i.localTime)||ia(i.value));let T;if(s!==void 0&&(T=um(()=>e.put(n,s,p),n,e.rootStore),gc&&(g|=pn)),l){let O=u?.user?.username;if(h&&(um(()=>e.encoder.encode(h),n,e.rootStore),gc&&(g|=pn)),e.encoder.hasStructureUpdate&&(g|=Tm,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,F=r.get(v);if(F){let q=Ct(F).previousLocalTime;return T=r.put(v,bc(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,O,f,Cf,g,E,R,_),{ifVersion:S}),T}}T=r.put(s===void 0?ZL:Lf,bc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,O,f,Cf,g,E,R,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+p,R}}}function Oc(e,t,r){if(t)return t.value&&t.metadataFlags&pn&&!e.auditStore.getBinaryFast(t.localTime)&&ia(t.value),e.remove(t.key,r)}var XL,Em,mm,Lf,_R,ZL,D3,yc,Df,L3,cR,eM,M3,tM,lR,gm,hR,pR,Tm,v3,Cf,tu,Pf,uR,dR,fR,Rc,ru=be(()=>{XL=require("msgpackr");so();Em=M(X());fs();fs();mm=new Uint8Array([1,1,1,1,4,64,0,0]),Lf=new Uint8Array([1,1,1,1,1,0,0,0]),_R=new Uint8Array([1,1,1,1,3,64,0,0]),ZL=new Uint8Array([1,1,1,1,0,64,0,0]),D3=Symbol("local-timestamp"),yc=Symbol("metadata"),Df=new Uint8Array(8),L3=new DataView(Df.buffer,0,8),cR=0,eM=0,M3=1,tM=3,lR=4,gm=16,hR=32,pR=1,Tm=256,tu=0,Pf=-1,uR=-1,dR=0,fR=class extends XL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(tu||Pf>=0){let o=0,c=tu;c&&(o+=8,tu=0);let l=Pf,u=uR,f=dR;l>=0&&(o+=4,Pf=-1,u>=0&&(o+=8,uR=-1),f&&(o+=4,dR=0));let d=v3=r.call(this,s,i|2048|o);Cf=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(mm[4]=c,mm[5]=c>>8,d.set(mm,h),h+=8),gc&&(l|=pn),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Sm<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return Cf=r.call(this,s,i),Cf};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Df,0,c),c+=8;else for(let h=0;h<8;h++)Df[h]=t[c++];l=U3(),i=t[c]}let u,f;i<32&&(i===Sm?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&gm&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&hR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=Sc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[yc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:Sc(()=>super.decode(t,r),this.rootStore)}catch(c){return Em.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(U3,"getTimestamp");a(Am,"handleLocalTimeForGets");Rc=[];setInterval(()=>{for(let e=0;e<Rc.length;e++){let t=Rc[e].deref();!t||t.isDone||t.isCommitted?Rc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Em.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Em.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(mR,"recordUpdater");a(Oc,"removeEntry")});var Uf=P((wRe,sM)=>{"use strict";var nM=ce(),x3=(G(),D($)),{RecordEncoder:B3}=(ru(),D(rM));nM.initSync();var H3=nM.get(x3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ER=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=H3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:B3})}};sM.exports=ER});var xf=P((CRe,iM)=>{"use strict";var Bn=ce(),_s=(G(),D($));Bn.initSync();var Rm=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Bn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Bn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Bn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Bn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Bn.get(_s.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};iM.exports=Rm;Rm.MAX_DBS=1e4});var ht=P((DRe,pM)=>{"use strict";var SR=require("lmdb"),Fs=require("fs-extra"),Hn=require("path"),ym=ln(),cM=X(),mn=Dn().LMDB_ERRORS_ENUM,bm=JL(),TR=Uf(),lM=xf(),ca=Ft(),oM=(G(),D($)),{table:k3,resetDatabases:F3}=(Ue(),D(at)),aM=ce(),Gs=ca.INTERNAL_DBIS_NAME,uM=ca.DBI_DEFINITION_NAME,G3="data.mdb",q3="lock.mdb",Bf=".mdb",$3="-lock",gR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[ca.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ca.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new SR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Om(e,t){if(e===void 0)throw new Error(mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(mn.ENV_NAME_REQUIRED)}a(Om,"pathEnvNameValidation");async function AR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(mn.INVALID_BASE_PATH):n}try{let n=Hn.join(e,t+Bf);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Hn.join(e,t,G3),Fs.constants.R_OK|Fs.constants.F_OK),Hn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(mn.INVALID_ENVIRONMENT)}else throw new Error(mn.INVALID_ENVIRONMENT);throw n}}a(AR,"validateEnvironmentPath");function Nm(e,t){if(ym.validateEnv(e),t===void 0)throw new Error(mn.DBI_NAME_REQUIRED)}a(Nm,"validateEnvDBIName");async function V3(e,t,r=!1,n=!1){Om(e,t);let s=Hn.basename(e);t=t.toString();let i=aM.get(oM.CONFIG_PARAMS.DATABASES);i||aM.setProperty(oM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await AR(e,t,n),dM(e,t,r)}catch(o){if(o.message===mn.INVALID_ENVIRONMENT){let c=Hn.join(e,t);await Fs.mkdirp(n?c:e);let l=new lM(n?c:c+Bf,!1),u=SR.open(l);u.dbis=Object.create(null);let f=new TR(!1);u.openDB(Gs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=RR(e,t,r);return u[ca.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(V3,"createEnvironment");async function K3(e,t,r,n=!0){Om(e,t),t=t.toString();let s=Hn.join(e,t);return k3({table:t,database:Hn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(K3,"copyEnvironment");async function dM(e,t,r=!1){Om(e,t),t=t.toString();let n=RR(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await AR(e,t),i=Hn.join(e,t+Bf),o=s!=i,c=new lM(s,o),l=SR.open(c);l.dbis=Object.create(null);let u=_M(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[ca.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(dM,"openEnvironment");async function Y3(e,t,r=!1){Om(e,t),t=t.toString();let n=Hn.join(e,t+Bf),s=await AR(e,t);if(global.lmdb_map!==void 0){let i=RR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fM(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+$3:Hn.join(Hn.dirname(s),q3))}a(Y3,"deleteEnvironment");async function fM(e){ym.validateEnv(e);let t=e[ca.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fM,"closeEnvironment");function RR(e,t,r=!1){let s=`${Hn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(RR,"getCachedEnvironmentName");function W3(e){ym.validateEnv(e);let t=Object.create(null),r=hs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new bm,s)}catch{cM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(W3,"listDBIDefinitions");function _M(e){ym.validateEnv(e);let t=[],r=hs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(_M,"listDBIs");function z3(e,t){let n=hs(e,Gs).getEntry(t),s=new bm;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{cM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(z3,"getDBIDefinition");function hM(e,t,r,n=!r){if(Nm(e,t),t=t.toString(),t===Gs)throw new Error(mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===mn.DBI_DOES_NOT_EXIST){let i=new TR(r,n===!0),o=e.openDB(t,i),c=new bm(r===!0,n);return o[uM]=c,hs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(hM,"createDBI");function hs(e,t){if(Nm(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=z3(e,t):r=new bm,r===void 0)throw new Error(mn.DBI_DOES_NOT_EXIST);let n;try{let s=new TR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(mn.DBI_DOES_NOT_EXIST):s}return n[uM]=r,e.dbis[t]=n,n}a(hs,"openDBI");function j3(e,t){Nm(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[ca.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(j3,"statDBI");async function Q3(e,t){try{let r=Hn.join(e,t+Bf);return(await Fs.stat(r)).size}catch{throw new Error(mn.INVALID_ENVIRONMENT)}}a(Q3,"environmentDataSize");function J3(e,t){if(Nm(e,t),t=t.toString(),t===Gs)throw new Error(mn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,Gs).removeSync(t)}a(J3,"dropDBI");function X3(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{hs(e,i)}catch(o){if(o.message===mn.DBI_DOES_NOT_EXIST)hM(e,i,i!==t,i===t),n=!0;else throw o}}n&&F3()}a(X3,"initializeDBIs");pM.exports={openDBI:hs,openEnvironment:dM,createEnvironment:V3,listDBIs:_M,listDBIDefinitions:W3,createDBI:hM,dropDBI:J3,statDBI:j3,deleteEnvironment:Y3,initializeDBIs:X3,TransactionCursor:gR,environmentDataSize:Q3,copyEnvironment:K3,closeEnvironment:fM}});var EM=P((MRe,mM)=>{"use strict";var yR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};mM.exports=yR});var SM=P((URe,gM)=>{"use strict";var bR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};gM.exports=bR});var AM=P((BRe,TM)=>{"use strict";var OR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};TM.exports=OR});var Cc=P((qRe,bM)=>{"use strict";var Z3=ht(),eX=EM(),tX=SM(),rX=AM(),yi=ln(),Hf=Dn().LMDB_ERRORS_ENUM,nX=Ft(),io=(G(),D($)),sX=oe(),iX=require("uuid"),kRe=require("lmdb"),{handleHDBError:oX,hdb_errors:aX}=he(),{OVERFLOW_MARKER:FRe,MAX_SEARCH_KEY_LENGTH:GRe}=nX,RM=ce();RM.initSync();var wm=RM.get(io.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),NR=io.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ic=io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function cX(e,t,r,n,s=yi.getNextMonotonicTime()){PR(e,t,r,n),wR(e,t,r);let i=new eX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];yM(u,!0,s);let f=lX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return IR(o,c,n,i,s)}a(cX,"insertRecords");function lX(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let f=c([[{}]]);Array.isArray(f)&&(c=f[0][io.FUNC_VAL],n[o]=c)}let l=yi.getIndexedValues(c),u=e.dbis[o];if(l){wm&&u.prefetch(l.map(f=>({key:f,value:s})),Im);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}wm&&e.dbis[t].prefetch([s],Im),e.dbis[t].put(s,n,n[Ic])})}a(lX,"insertRecord");function uX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(uX,"removeSkippedRecords");function yM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Ic]))&&(e[Ic]=r||(r=yi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[NR]))&&(e[NR]=r||yi.getNextMonotonicTime()):delete e[NR]}a(yM,"setTimestamps");function wR(e,t,r){r.indexOf(io.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(io.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Z3.initializeDBIs(e,t,r)}a(wR,"initializeTransaction");async function dX(e,t,r,n,s=yi.getNextMonotonicTime()){PR(e,t,r,n),wR(e,t,r);let i=new tX,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=CR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return IR(c,l,n,i,s,o)}a(dX,"updateRecords");async function fX(e,t,r,n,s=yi.getNextMonotonicTime()){try{PR(e,t,r,n)}catch(l){throw oX(l,l.message,aX.HTTP_STATUS_CODES.BAD_REQUEST)}wR(e,t,r);let i=new rX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;sX.isEmpty(u[t])?(f=iX.v4(),u[t]=f):f=u[t];let d=CR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return IR(o,c,n,i,s)}a(fX,"upsertRecords");async function IR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||yi.getNextMonotonicTime(),uX(r,i),n}a(IR,"finalizeWrite");function CR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(yM(r,!f,o),Number.isInteger(r[Ic])&&u[Ic]>r[Ic])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let S=r[p],g=e.dbis[p];if(g===void 0)continue;let R=u[p];if(typeof S=="function"){let T=S([[u]]);Array.isArray(T)&&(S=T[0][io.FUNC_VAL],r[p]=S)}if(S===R)continue;let E=yi.getIndexedValues(R);if(E){wm&&g.prefetch(E.map(T=>({key:T,value:n})),Im);for(let T=0,O=E.length;T<O;T++)g.remove(E[T],n)}if(E=yi.getIndexedValues(S),E){wm&&g.prefetch(E.map(T=>({key:T,value:n})),Im);for(let T=0,O=E.length;T<O;T++)g.put(E[T],n)}}let _={...u,...r};c.put(n,_,_[Ic])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:CR(e,t,r,n,s,i,o))}a(CR,"updateUpsertRecord");function _X(e,t,r){if(yi.validateEnv(e),t===void 0)throw new Error(Hf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Hf.WRITE_ATTRIBUTES_REQUIRED):new Error(Hf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(_X,"validateBasic");function PR(e,t,r,n){if(_X(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Hf.RECORDS_REQUIRED):new Error(Hf.RECORDS_MUST_BE_ARRAY)}a(PR,"validateWrite");function Im(){}a(Im,"noop");bM.exports={insertRecords:cX,updateRecords:dX,upsertRecords:fX}});var oo=P((VRe,hX)=>{hX.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var NM=P((KRe,OM)=>{"use strict";var pX=require("uuid"),DR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||pX.v4(),this.schema_table=`${this.schema}.${this.table}`}};OM.exports=DR});var Cm=P((WRe,wM)=>{"use strict";var mX=NM(),LR=class extends mX{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};wM.exports=LR});var CM=P((jRe,IM)=>{"use strict";IM.exports=gX;var EX="inserted";function gX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===EX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(gX,"returnObject")});var Pm=P((XRe,DM)=>{"use strict";var SX=(G(),D($)),MR=ht(),TX=Cc(),{getSystemSchemaPath:AX,getSchemaPath:RX}=gt(),JRe=oo(),{validateBySchema:yX}=nt(),kf=require("joi"),bX=Cm(),OX=CM(),{handleHDBError:NX,hdb_errors:wX,ClientError:IX}=he(),PM=oe(),{HTTP_STATUS_CODES:CX}=wX,PX="inserted";DM.exports=DX;async function DX(e){let t=yX(e,kf.object({database:kf.string(),schema:kf.string(),table:kf.string().required(),attribute:kf.string().required()}));if(t)throw new IX(t.message);let r=!e.skip_table_check&&PM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw NX(new Error,r,CX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=PM.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new bX(e.schema,e.table,e.attribute,e.id);try{let i=await MR.openEnvironment(RX(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);MR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await MR.openEnvironment(AX(),SX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await TX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return OX(PX,c,{records:[s]},l)}catch(i){throw i}}a(DX,"lmdbCreateAttribute")});var Ff=P((tye,MM)=>{"use strict";var ao=oe(),LM=X(),eye=iR(),{getDatabases:LX}=(Ue(),D(at)),{ClientError:Pc}=he();MM.exports=MX;function MX(e){if(ao.isEmpty(e))throw new Pc("invalid update parameters defined.");if(ao.isEmptyOrZeroLength(e.schema))throw new Pc("invalid schema specified.");if(ao.isEmptyOrZeroLength(e.table))throw new Pc("invalid table specified.");if(!Array.isArray(e.records))throw new Pc("records must be an array");let t=LX()[e.schema]?.[e.table];if(ao.isEmpty(t))throw new Pc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&ao.isEmptyOrZeroLength(o[r]))throw LM.error("a valid hash attribute must be provided with update record:",o),new Pc("a valid hash attribute must be provided with update record, check log for more info");if(!ao.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw LM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Pc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ao.isEmpty(o[r])&&o[r]!==""&&n.has(ao.autoCast(o[r]))&&(o.skip=!0),n.add(ao.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(MX,"insertUpdateValidate")});var UM=P((nye,vM)=>{"use strict";var vR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vM.exports=vR});var HM=P((iye,BM)=>{"use strict";var UR=ht(),vX=X(),xM=Dn().LMDB_ERRORS_ENUM;BM.exports=UX;async function UX(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await UR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==xM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await UR.closeEnvironment(global.lmdb_map[n]),await UR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==xM.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){vX.error(t)}}a(UX,"cleanLMDBMap")});var JM=P((cye,QM)=>{"use strict";var xR=require("recursive-iterator"),xX=require("alasql"),BR=require("clone"),kM=oe(),{handleHDBError:FM,hdb_errors:BX}=he(),{HDB_ERROR_MSGS:GM,HTTP_STATUS_CODES:qM}=BX,{getDatabases:HX}=(Ue(),D(at)),kX=["DISTINCT_ARRAY"],$M=Symbol("validateTables"),HR=Symbol("validateTable"),aye=Symbol("getAllColumns"),VM=Symbol("validateAllColumns"),Dm=Symbol("findColumn"),KM=Symbol("validateOrderBy"),Gf=Symbol("validateSegment"),kR=Symbol("validateColumn"),YM=Symbol("setColumnsForTable"),WM=Symbol("checkColumnsForAsterisk"),zM=Symbol("validateGroupBy"),jM=Symbol("hasColumns"),FR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$M](),this[WM](),this[VM]()}[$M](){if(this[jM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[HR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[HR](t.table)})}}[jM](){let t=!1,r=new xR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[HR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=HX();if(!r[t.databaseid])throw FM(new Error,GM.SCHEMA_NOT_FOUND(t.databaseid),qM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FM(new Error,GM.TABLE_NOT_FOUND(t.databaseid,t.tableid),qM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=BR(s);i.table=BR(t),this.attributes.push(i)})}[Dm](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[WM](){let t=new xR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[YM](r.tableid)}[YM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new xX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[VM](){this[Gf](this.statement.columns,!1),this[Gf](this.statement.joins,!1),this[Gf](this.statement.where,!1),this[zM](this.statement.group,!1),this[Gf](this.statement.order,!0)}[Gf](t,r){if(!t)return;let n=new xR(t),s=[];for(let{node:i,path:o}of n)!kM.isEmpty(i)&&!kM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KM](i):s.push(this[kR](i)));return s}[zM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&kX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=BR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Dm](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Dm](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[KM](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[kR](t)}[kR](t){let r=this[Dm](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};QM.exports=FR});var tv=P((uye,ev)=>{"use strict";var XM=require("lodash"),qf=require("mathjs"),FX=require("jsonata"),ZM=oe();ev.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?XM.uniqWith(e,XM.isEqual):e,"distinct_array"),searchJSON:GX,mad:$f.bind(null,qf.mad),mean:$f.bind(null,qf.mean),mode:$f.bind(null,qf.mode),prod:$f.bind(null,qf.prod),median:$f.bind(null,qf.median)};function $f(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a($f,"aggregateFunction");function GX(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(ZM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ZM.isEmpty(this.__ala__.res[r])){let n=FX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(GX,"searchJSON")});var nv=P((fye,rv)=>{"use strict";var rr=require("moment"),GR="YYYY-MM-DDTHH:mm:ss.SSSZZ";rr.suppressDeprecationWarnings=!0;rv.exports={current_date:a(()=>rr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>rr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return rr(e).utc().format("YYYY");case"month":return rr(e).utc().format("MM");case"day":return rr(e).utc().format("DD");case"hour":return rr(e).utc().format("HH");case"minute":return rr(e).utc().format("mm");case"second":return rr(e).utc().format("ss");case"millisecond":return rr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>rr(e).utc().format(GR),"date"),date_format:a((e,t)=>rr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>rr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>rr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=rr(e).utc(),s=rr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>rr().utc().valueOf(),"now"),get_server_time:a(()=>rr().format(GR),"get_server_time"),offset_utc:a((e,t)=>rr(e).utc().utcOffset(t).format(GR),"offset_utc")}});var av=P((hye,ov)=>{"use strict";var qX=require("@turf/area"),$X=require("@turf/length"),VX=require("@turf/circle"),KX=require("@turf/difference"),YX=require("@turf/distance"),WX=require("@turf/boolean-contains"),zX=require("@turf/boolean-equal"),jX=require("@turf/boolean-disjoint"),QX=require("@turf/helpers"),sv=(G(),D($)),$e=oe(),co=X();ov.exports={geoArea:JX,geoLength:XX,geoCircle:ZX,geoDifference:e6,geoDistance:iv,geoNear:t6,geoContains:r6,geoEqual:n6,geoCrosses:s6,geoConvert:i6};function JX(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return qX.default(e)}catch(t){return co.trace(t,e),NaN}}a(JX,"geoArea");function XX(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return $X.default(e,{units:t||"kilometers"})}catch(r){return co.trace(r,e),NaN}}a(XX,"geoLength");function ZX(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return VX.default(e,t,{units:r||"kilometers"})}catch(n){return co.trace(n,e,t),NaN}}a(ZX,"geoCircle");function e6(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return KX(e,t)}catch(r){return co.trace(r,e,t),NaN}}a(e6,"geoDifference");function iv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return YX.default(e,t,{units:r||"kilometers"})}catch(n){return co.trace(n,e,t),NaN}}a(iv,"geoDistance");function t6(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iv(e,t,n)<=r}catch(s){return co.trace(s,e,t),!1}}a(t6,"geoNear");function r6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return WX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(r6,"geoContains");function n6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return zX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(n6,"geoEqual");function s6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!jX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(s6,"geoCrosses");function i6(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(sv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),QX[t](e,r)}a(i6,"geoConvert")});var Lm=P((mye,cv)=>{var Dc=tv(),kn=nv(),bi=av();cv.exports=e=>{e.aggr.mad=e.aggr.MAD=Dc.mad,e.aggr.mean=e.aggr.MEAN=Dc.mean,e.aggr.mode=e.aggr.MODE=Dc.mode,e.aggr.prod=e.aggr.PROD=Dc.prod,e.aggr.median=e.aggr.MEDIAN=Dc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Dc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Dc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=kn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=kn.current_time,e.fn.extract=e.fn.EXTRACT=kn.extract,e.fn.date=e.fn.DATE=kn.date,e.fn.date_format=e.fn.DATE_FORMAT=kn.date_format,e.fn.date_add=e.fn.DATE_ADD=kn.date_add,e.fn.date_sub=e.fn.DATE_SUB=kn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=kn.date_diff,e.fn.now=e.fn.NOW=kn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=kn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=kn.get_server_time,e.fn.getdate=e.fn.GETDATE=kn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=kn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var fv=P((Eye,dv)=>{"use strict";var Vf=require("lodash"),En=require("alasql");En.options.cache=!1;var o6=Lm(),lv=require("clone"),Mm=require("recursive-iterator"),He=X(),Xe=oe(),nu=Fn(),a6=(G(),D($)),{hdb_errors:c6}=he(),{getDatabases:uv}=(Ue(),D(at)),l6="IS NULL",qs="There was a problem performing this search. Please check the logs and try again.";o6(En);var qR=class{static{a(this,"SQLSearch")}constructor(t,r){if(Xe.isEmpty(t))throw He.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Xe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Xe.isEmptyOrZeroLength(n))return He.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw He.error("Error thrown from checkEmptySQL in SQLSearch class method search."),He.error(n),new Error(qs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw He.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),He.error(n),new Error(qs)}if(Object.keys(this.data).length===0)return He.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw He.error("Error thrown from processJoins in SQLSearch class method search."),He.error(n),new Error(qs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw He.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),He.error(n),new Error(qs)}try{return t=await this._finalSQL(),t}catch(n){throw He.error("Error thrown from finalSQL in SQLSearch class method search."),He.error(n),new Error(qs)}}_getColumns(){let t=new Mm(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(lv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Vf.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=uv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Xe.isEmpty(this.statement.where)){He.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mm(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Xe.isEmpty(r)&&r.right)if(Xe.isNotEmptyAndHasValue(r.right.value)){let n=Xe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new En.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Xe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new En.yy.LogicValue({value:i}):n instanceof En.yy.StringValue&&Xe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new En.yy.NumValue({value:i}))});if(t){He.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Mm(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Xe.isEmpty(a6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Xe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Xe.isEmptyOrZeroLength(r.left.columnid)||Xe.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Xe.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Xe.isEmpty(r.right.value)||!Xe.isEmpty(r.left.value)?n.add(Xe.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from)&&Xe.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Vf.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Xe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Xe.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&!Xe.isEmptyOrZeroLength(this.columns.columns))return t;if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await En.promise(r)}catch(r){throw He.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),He.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(lv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Xe.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(l6)>-1&&this.tables.forEach(s=>{let i={columnid:uv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Vf.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Xe.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await nu.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await nu.getDataByValue(d);for(let[_,p]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(qs)}else if(!Xe.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let p=await nu.getDataByValue(c,_.operation);if(l)for(let[S]of p)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of p)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),He.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await nu.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),He.error(f),new Error(qs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof En.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new En.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new En.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new En.yy.FuncValue:new En.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let p=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(p+=" ON "+_.on.toString()),i.push(p),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let p=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${p}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${p}\` AS "${S}.${p}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,p=this._convertColumnsToIndexes(_,s);h=await En.promise(p,t),t=null}catch(_){throw He.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),He.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,p=h.length;_<p;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let p=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=Vf.difference(p,[..._.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Mm(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Vf.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw He.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),He.error(i),new Error(qs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await nu.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let p=0;p<u;p++){let S=s.columns[p],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getData."),He.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();He.trace(`Final SQL: ${s}`),n=await En.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),He.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw He.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),He.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return He.error(c6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),He.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await nu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw He.error("There was an error when processing this SQL operation. Check your logs"),He.error(o),new Error(qs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};dv.exports=qR});var Vr=P((Sye,_v)=>{"use strict";var u6=JM();_v.exports={searchByConditions:f6,searchByHash:_6,searchByValue:h6,search:p6};var $R=Fn(),{transformReq:VR}=oe(),d6=fv();async function f6(e){return VR(e),$R.searchByConditions(e)}a(f6,"searchByConditions");async function _6(e){VR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $R.searchByHash(e))r&&t.push(r);return t}a(_6,"searchByHash");async function h6(e){VR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $R.searchByValue(e))t.push(r);return t}a(h6,"searchByValue");function p6(e,t){try{let r=new u6(e);r.validate(),new d6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(p6,"search")});var lo=P((Aye,Ev)=>{"use strict";var Kf=require("crypto"),m6=ce(),{CONFIG_PARAMS:E6}=(G(),D($)),pv="aes-256-cbc",g6=32,S6=16,KR=64,mv=32,T6=KR+mv,hv=new Map;Ev.exports={encrypt:A6,decrypt:R6,createNatsTableStreamName:y6};function A6(e){let t=Kf.randomBytes(g6),r=Kf.randomBytes(S6),n=Kf.createCipheriv(pv,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(A6,"encrypt");function R6(e){let t=e.substr(0,KR),r=e.substr(KR,mv),n=e.substr(T6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Kf.createDecipheriv(pv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R6,"decrypt");function y6(e,t){let r=m6.get(E6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hv.get(r);return n||(n=Kf.createHash("md5").update(r).digest("hex"),hv.set(r,n)),n}a(y6,"createNatsTableStreamName")});var uo=P((bye,Av)=>{"use strict";var yye=Vr(),Yf=X(),{validateBySchema:gv}=nt(),Lc=require("joi"),b6=lo(),vm=oe(),{handleHDBError:Um,hdb_errors:O6,ClientError:Sv}=he(),{HDB_ERROR_MSGS:xm,HTTP_STATUS_CODES:YR}=O6,Tv=ce();Tv.initSync();var{getDatabases:WR}=(Ue(),D(at)),N6=require("fs-extra"),w6=(G(),D($));Av.exports={describeAll:I6,describeTable:Bm,describeSchema:C6};async function I6(e={}){try{let t=vm.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=WR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let p;if(t||s||r)p=await Bm({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;p=await Bm({schema:d,table:_,exact_count:u},S)}p&&l.push(p)}catch(p){Yf.error(p)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return Yf.error("Got an error in describeAll"),Yf.error(t),Um(new Error,xm.DESCRIBE_ALL_ERR)}}a(I6,"describeAll");async function Bm(e,t){vm.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=gv(e,Lc.object({database:Lc.string(),table:Lc.string().required(),exact_count:Lc.boolean().strict()}));if(i)throw new Sv(i.message);let c=WR()[r];if(!c)throw Um(new Error,xm.SCHEMA_NOT_FOUND(e.schema),YR.NOT_FOUND);let l=c[n];if(!l)throw Um(new Error,xm.TABLE_NOT_FOUND(e.schema,e.table),YR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(p=>({type:p.type,name:p.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(p=>{p.describe&&(_[p.attribute_name]=!0)}),l.attributes.forEach(p=>{_[p.name]&&u(p)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await N6.stat(l.primaryStore.env.path)).size}catch(_){Yf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),Tv.get(w6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=b6.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:!!e.exact_count});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let p=l.auditStore;if(p)for(let S of p.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Yf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Bm,"descTable");async function C6(e){vm.transformReq(e);let t=gv(e,Lc.object({database:Lc.string(),exact_count:Lc.boolean().strict()}));if(t)throw new Sv(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=WR()[n];if(!i)throw Um(new Error,xm.SCHEMA_NOT_FOUND(e.schema),YR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),vm.isEmpty(l)||l.describe){let u=await Bm({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(C6,"describeSchema")});var $s=P((Iye,Nv)=>{var P6=oo(),{callbackify:yv,promisify:D6}=require("util"),{getDatabases:bv}=(Ue(),D(at));Nv.exports={setSchemaDataToGlobal:Rv,getTableSchema:L6,getSystemSchema:M6,setSchemaDataToGlobalAsync:D6(Rv)};var Ov=uo(),Nye=yv(Ov.describeAll),wye=yv(Ov.describeTable);function Rv(e){global.hdb_schema=bv(),e&&e()}a(Rv,"setSchemaDataToGlobal");function L6(e,t,r){let n=bv()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(L6,"getTableSchema");function M6(){return P6}a(M6,"getSystemSchema")});var jR=P((Pye,Cv)=>{var v6=nt(),zR=require("joi"),{hdb_table:U6,hdb_database:wv}=Ri(),Iv={schema:wv,database:wv,table:U6},x6={date:zR.date().iso().required()},B6={timestamp:zR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Cv.exports=function(e,t){let r=t==="timestamp"?{...Iv,...B6}:{...Iv,...x6},n=zR.object(r);return v6.validateBySchema(e,n)}});var Lv=P((Dye,Dv)=>{var H6=nt(),QR=require("joi"),{hdb_table:k6,hdb_database:Pv}=Ri(),F6=QR.object({schema:Pv,database:Pv,table:k6,hash_values:QR.array().required(),ids:QR.array()});Dv.exports=function(e){return H6.validateBySchema(e,F6)}});var ey=P((Lye,Mv)=>{"use strict";var JR=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},XR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},ZR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Mv.exports={InsertObject:JR,NoSQLSeachObject:XR,DeleteResponseObject:ZR}});var Uc=P((vye,Hv)=>{"use strict";var Uv=jR(),G6=Lv(),Mc=oe(),vv=require("moment"),xv=X(),{promisify:q6,callbackify:$6}=require("util"),vc=(G(),D($)),V6=$s(),ty=q6(V6.getTableSchema),ry=Fn(),{DeleteResponseObject:K6}=ey(),{handleHDBError:la,hdb_errors:Y6}=he(),{HDB_ERROR_MSGS:Hm,HTTP_STATUS_CODES:ua}=Y6,W6="records successfully deleted",z6=$6(Bv);Hv.exports={delete:z6,deleteRecord:Bv,deleteFilesBefore:j6,deleteAuditLogsBefore:Q6};async function j6(e){let t=Uv(e,"date");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Mc.transformReq(e),!vv(e.date,vv.ISO_8601).isValid())throw la(new Error,Hm.INVALID_DATE,ua.BAD_REQUEST,vc.LOG_LEVELS.ERROR,Hm.INVALID_DATE,!0);let n=Mc.checkSchemaTableExist(e.schema,e.table);if(n)throw la(new Error,n,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,n,!0);let s=await ry.deleteRecordsBefore(e);if(await ty(e.schema,e.table),xv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(j6,"deleteFilesBefore");async function Q6(e){let t=Uv(e,"timestamp");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Mc.transformReq(e),isNaN(e.timestamp))throw la(new Error,Hm.INVALID_VALUE("Timestamp"),ua.BAD_REQUEST,vc.LOG_LEVELS.ERROR,Hm.INVALID_VALUE("Timestamp"),!0);let r=Mc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);let n=await ry.deleteAuditLogsBefore(e);return await ty(e.schema,e.table),xv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Q6,"deleteAuditLogsBefore");async function Bv(e){e.ids&&(e.hash_values=e.ids);let t=G6(e);if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);Mc.transformReq(e);let r=Mc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);try{await ty(e.schema,e.table);let n=await ry.deleteRecords(e);return Mc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${W6}`),n}catch(n){if(n.message===vc.SEARCH_NOT_FOUND_MESSAGE){let s=new K6;return s.message=vc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Bv,"deleteRecord")});var km={};Be(km,{HASH_FUNCTION:()=>jf,hash:()=>iy,validate:()=>oy});function ny(e=zf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Wf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function iy(e,t=jf[Fv?.toUpperCase()]??"sha256"){return sy[t](e)}function oy(e,t,r=jf[Fv?.toUpperCase()]??"sha256"){return e?J6[r](e,t):!1}var Wf,su,kv,Fv,zf,Gv,jf,sy,J6,Fm=be(()=>{Wf=M(require("node:crypto")),su=M(require("argon2")),kv=M(ce());G();Fv=(0,kv.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),zf=16,Gv=9,jf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(jf||{});a(ny,"generateSalt");sy={md5:a((e,t=void 0)=>{t=t??ny(Gv);let r=Wf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??ny(zf);let r=Wf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=ny(zf),r=await su.hash(e,{type:su.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},J6={md5:a((e,t)=>{let r=e.slice(0,Gv);return e===sy.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,zf);return e===sy.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await su.verify(e.slice(zf),t),"argon2id")};a(iy,"hash");a(oy,"validate")});var $v=P((Hye,qv)=>{var ay=nt(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function X6(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,ay.validateObject(e,Kr)}a(X6,"addUserValidation");function Z6(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,ay.validateObject(e,Kr)}a(Z6,"alterUserValidation");function eZ(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,ay.validateObject(e,Kr)}a(eZ,"dropUserValidation");qv.exports={addUserValidation:X6,alterUserValidation:Z6,dropUserValidation:eZ}});var Pt=P((Gye,Kv)=>{"use strict";var{platform:Fye}=require("os"),tZ="nats-server.zip",cy="nats-server",rZ=process.platform==="win32"?`${cy}.exe`:cy,nZ=/^[^\s.,*>]+$/,Vv="__request__",sZ=a(e=>`${e}.${Vv}`,"REQUEST_SUBJECT"),iZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},oZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},aZ={HUB:"hub.pid",LEAF:"leaf.pid"},cZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},lZ={SUCCESS:"success",ERROR:"error"},uZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},dZ={TXN:"txn",MSGID:"msgid"},iu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},fZ={[iu.ERR]:1,[iu.WRN]:2,[iu.INF]:3,[iu.DBG]:4,[iu.TRC]:5},_Z={debug:"-D",trace:"-DVV"};Kv.exports={NATS_SERVER_ZIP:tZ,NATS_SERVER_NAME:cy,NATS_BINARY_NAME:rZ,PID_FILES:aZ,NATS_CONFIG_FILES:oZ,SERVER_SUFFIX:cZ,NATS_TERM_CONSTRAINTS_RX:nZ,REQUEST_SUFFIX:Vv,UPDATE_REMOTE_RESPONSE_STATUSES:lZ,CLUSTER_STATUS_STATUSES:uZ,REQUEST_SUBJECT:sZ,SUBJECT_PREFIXES:dZ,MSG_HEADERS:iZ,LOG_LEVELS:iu,LOG_LEVEL_FLAGS:_Z,LOG_LEVEL_HIERARCHY:fZ}});var Gn=P(($ye,br)=>{"use strict";var zv="username is required",jv="nothing to update, must supply active, role or password to update",Qv="password cannot be an empty string",Jv="If role is specified, it cannot be empty.",Xv="active must be true or false";br.exports.addUser=RZ;br.exports.alterUser=yZ;br.exports.dropUser=OZ;br.exports.getSuperUser=PZ;br.exports.userInfo=NZ;br.exports.listUsers=qm;br.exports.listUsersExternal=wZ;br.exports.setUsersWithRolesCache=xc;br.exports.findAndValidateUser=Ey;br.exports.getClusterUser=DZ;br.exports.getUsersWithRolesCache=CZ;br.exports.USERNAME_REQUIRED=zv;br.exports.ALTERUSER_NOTHING_TO_UPDATE=jv;br.exports.EMPTY_PASSWORD=Qv;br.exports.EMPTY_ROLE=Jv;br.exports.ACTIVE_BOOLEAN=Xv;var Zv=gn(),hZ=Uc(),Qf=(Fm(),D(km)),eU=$v(),Jf=Vr(),_y=_o(),Oi=oe(),tU=require("validate.js"),hy=X(),{promisify:pZ}=require("util"),py=lo(),uy=(G(),D($)),Yv=Pt(),mZ=wt(),EZ=ce(),gZ=oo(),{hdb_errors:SZ,ClientError:Vs}=he(),{HTTP_STATUS_CODES:fo,AUTHENTICATION_ERROR_MSGS:ly,HDB_ERROR_MSGS:ou}=SZ,{UserEventMsg:my}=Ks(),dy=require("lodash"),{server:Gm}=(Dr(),D(ql)),TZ=X();Gm.getUser=(e,t)=>Ey(e,t,t!=null);Gm.authenticateUser=(e,t)=>Ey(e,t);var rU={username:!0,active:!0,role:!0,password:!0},Wv=new Map,AZ=pZ(hZ.delete),fy=EZ.get(uy.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Qf.HASH_FUNCTION.SHA256,Ni;async function RZ(e){let t=tU.cleanAttributes(e,rU),r=eU.addUserValidation(t);if(r)throw new Vs(r.message);let n=await Jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Vs(ou.ROLE_NAME_NOT_FOUND(t.role),fo.NOT_FOUND);if(n.length>1)throw new Vs(ou.DUP_ROLES_FOUND(t.role),fo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=py.encrypt(t.password)),t.password=await Qf.hash(t.password,fy),t.hash_function=fy,t.role=n[0].id;let s=await Zv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(hy.debug(s),await xc(),s.skipped_hashes.length===1)throw new Vs(ou.USER_ALREADY_EXISTS(t.username),fo.CONFLICT);return _y.signalUserChange(new my(process.pid)),`${t.username} successfully added`}a(RZ,"addUser");async function yZ(e){let t=tU.cleanAttributes(e,rU);if(Oi.isEmptyOrZeroLength(t.username))throw new Error(zv);if(Oi.isEmptyOrZeroLength(t.password)&&Oi.isEmptyOrZeroLength(t.role)&&Oi.isEmptyOrZeroLength(t.active))throw new Error(jv);if(!Oi.isEmpty(t.password)&&Oi.isEmptyOrZeroLength(t.password.trim()))throw new Error(Qv);if(!Oi.isEmpty(t.active)&&!Oi.isBoolean(t.active))throw new Error(Xv);if(!Oi.isEmpty(t.password)&&!Oi.isEmptyOrZeroLength(t.password.trim())&&(bZ(t.username)&&(t.hash=py.encrypt(t.password)),t.password=await Qf.hash(t.password,fy)),t.role==="")throw new Error(Jv);if(t.role){let n=await Jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Vs(ou.ALTER_USER_ROLE_NOT_FOUND(t.role),fo.NOT_FOUND);if(n.length>1)throw new Vs(ou.DUP_ROLES_FOUND(t.role),fo.CONFLICT);t.role=n[0].id}let r=await Zv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await xc(),_y.signalUserChange(new my(process.pid)),r}a(yZ,"alterUser");function bZ(e){let t=!1,r=Ni.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(bZ,"isClusterUser");async function OZ(e){let t=eU.dropUserValidation(e);if(t)throw new Vs(t.message);if(Ni.get(e.username)===void 0)throw new Vs(ou.USER_NOT_EXIST(e.username),fo.NOT_FOUND);let r=await AZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return hy.debug(r),await xc(),_y.signalUserChange(new my(process.pid)),`${e.username} successfully deleted`}a(OZ,"dropUser");async function NZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=dy.cloneDeep(e.hdb_user);let r=await Jf.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(NZ,"userInfo");async function wZ(){let e=await qm();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(wZ,"listUsersExternal");async function qm(){let e=await Jf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=dy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Jf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=dy.cloneDeep(s),s.role=t[s.role],IZ(s.role),n.set(s.username,s);return n}a(qm,"listUsers");function IZ(e){if(!e){hy.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(gZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(IZ,"appendSystemTablesToRole");async function xc(e=void 0){e?Ni=e:Ni=await qm()}a(xc,"setUsersWithRolesCache");async function CZ(){return Ni||await xc(),Ni}a(CZ,"getUsersWithRolesCache");async function Ey(e,t,r=!0){Ni||await xc();let n=Ni.get(e);if(!n){if(!r)return{username:e};throw new Vs(ly.GENERIC_AUTH_FAIL,fo.UNAUTHORIZED)}if(n&&!n.active)throw new Vs(ly.USER_INACTIVE,fo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(Wv.get(t)===n.password)return s;{let i=Qf.validate(n.password,t,n.hash_function||Qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)Wv.set(t,n.password);else throw new Vs(ly.GENERIC_AUTH_FAIL,fo.UNAUTHORIZED)}}return s}a(Ey,"findAndValidateUser");async function PZ(){Ni||await xc();for(let[,e]of Ni)if(e.role.role==="super_user")return e}a(PZ,"getSuperUser");async function DZ(){let e=await qm(),t=mZ.getConfigFromFile(uy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==uy.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=py.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yv.SERVER_SUFFIX.ADMIN,r}a(DZ,"getClusterUser");var nU=[];Gm.invalidateUser=function(e){for(let t of nU)try{t(e)}catch(r){TZ.error("Error invalidating user",r)}};Gm.onInvalidatedUser=function(e){nU.push(e)}});var Zf=P((Wye,aU)=>{"use strict";var Bc=X(),qn=(G(),D($)),LZ=HM(),Kye=$s(),Yye=uo(),MZ=Gn(),{validateEvent:sU}=Ks(),Xf=Fn(),vZ=require("process"),{resetDatabases:UZ}=(Ue(),D(at)),xZ={[qn.ITC_EVENT_TYPES.SCHEMA]:BZ,[qn.ITC_EVENT_TYPES.USER]:oU};async function BZ(e){let t=sU(e);if(t){Bc.error(t);return}Bc.trace("ITC schemaHandler received schema event:",e),await LZ(e.message),await HZ(e.message)}a(BZ,"schemaHandler");async function HZ(e){try{Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=UZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Bc.error(t)}}a(HZ,"syncSchemaMetadata");var iU=[];async function oU(e){try{try{Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Bc.warn(r)}let t=sU(e);if(t){Bc.error(t);return}Bc.trace(`ITC userHandler ${qn.HDB_ITC_CLIENT_PREFIX}${vZ.pid} received user event:`,e),await MZ.setUsersWithRolesCache();for(let r of iU)r()}catch(t){Bc.error(t)}}a(oU,"userHandler");oU.addListener=function(e){iU.push(e)};aU.exports=xZ});var Ks=P((Zye,lU)=>{"use strict";var jye=X(),gy=oe(),kZ=(G(),D($)),{ITC_ERRORS:e_}=Dn(),{parentPort:Qye,threadId:FZ,isMainThread:GZ,workerData:Jye}=require("worker_threads"),{onMessageFromWorkers:qZ,broadcast:Xye,broadcastWithAcknowledgement:$Z}=st();lU.exports={sendItcEvent:VZ,validateEvent:cU,SchemaEventMsg:KZ,UserEventMsg:YZ};var $m;qZ(async(e,t)=>{$m=$m||Zf(),cU(e),$m[e.type]&&await $m[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function VZ(e){return!GZ&&e.message&&(e.message.originator=FZ),$Z(e)}a(VZ,"sendItcEvent");function cU(e){if(typeof e!="object")return e_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||gy.isEmpty(e.type))return e_.MISSING_TYPE;if(!e.hasOwnProperty("message")||gy.isEmpty(e.message))return e_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||gy.isEmpty(e.message.originator))return e_.MISSING_ORIGIN;if(kZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return e_.INVALID_EVENT(e.type)}a(cU,"validateEvent");function KZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(KZ,"SchemaEventMsg");function YZ(e){this.originator=e}a(YZ,"UserEventMsg")});var _o=P((rbe,_U)=>{"use strict";var uU=(G(),D($)),tbe=oe(),Vm=X(),dU=UM(),au,{sendItcEvent:fU}=Ks();function WZ(e){try{Vm.info("signalSchemaChange called with message:",e),au=au||Zf();let t=new dU(uU.ITC_EVENT_TYPES.SCHEMA,e);return au.schema(t),fU(t)}catch(t){Vm.error(t)}}a(WZ,"signalSchemaChange");function zZ(e){try{Vm.trace("signalUserChange called with message:",e),au=au||Zf();let t=new dU(uU.ITC_EVENT_TYPES.USER,e);return au.user(t),fU(t)}catch(t){Vm.error(t)}}a(zZ,"signalUserChange");_U.exports={signalSchemaChange:WZ,signalUserChange:zZ}});var Km=P((sbe,pU)=>{"use strict";var hU=oe(),jZ=(G(),D($)),QZ=X(),JZ=Pm(),XZ=Cm(),ZZ=_o(),{SchemaEventMsg:e8}=Ks(),t8="already exists in";pU.exports=r8;async function r8(e,t,r){if(hU.isEmptyOrZeroLength(r))return r;let n=[];hU.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await n8(e,t.schema,t.name,i)})),s}a(r8,"lmdbCheckForNewAttributes");async function n8(e,t,r,n){let s=new XZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await s8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(t8))QZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(n8,"createNewAttribute");async function s8(e){let t;return t=await JZ(e),ZZ.signalSchemaChange(new e8(process.pid,jZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(s8,"createAttribute")});var cu=P((obe,mU)=>{"use strict";var Sy=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};mU.exports=Sy});var gU=P((cbe,EU)=>{"use strict";var i8=cu(),o8=(G(),D($)).OPERATIONS_ENUM,Ty=class extends i8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(o8.INSERT,r,n,s,i),this.records=t}};EU.exports=Ty});var TU=P((ube,SU)=>{"use strict";var a8=cu(),c8=(G(),D($)).OPERATIONS_ENUM,Ay=class extends a8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(c8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};SU.exports=Ay});var RU=P((fbe,AU)=>{"use strict";var l8=cu(),u8=(G(),D($)).OPERATIONS_ENUM,Ry=class extends l8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(u8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};AU.exports=Ry});var bU=P((hbe,yU)=>{"use strict";var d8=cu(),f8=(G(),D($)).OPERATIONS_ENUM,yy=class extends d8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(f8.DELETE,n,s,t,i),this.original_records=r}};yU.exports=yy});var t_=P((Ebe,IU)=>{"use strict";var mbe=require("path"),OU=ht(),_8=gU(),h8=TU(),p8=RU(),m8=bU(),lu=Ft(),NU=oe(),{CONFIG_PARAMS:E8}=(G(),D($)),wU=ce();wU.initSync();var Ym=(G(),D($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:g8}=gt();IU.exports=S8;async function S8(e,t){if(wU.get(E8.LOGGING_AUDITLOG)===!1)return;let r=g8(e.schema,e.table),n=await OU.openEnvironment(r,e.table,!0),s=T8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){OU.initializeDBIs(n,lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,lu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),NU.isEmpty(s.user_name)||n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(S8,"writeTransaction");function T8(e,t){let r=NU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Ym.INSERT)return new _8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ym.UPDATE)return new h8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ym.UPSERT)return new p8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ym.DELETE)return new m8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(T8,"createTransactionObject")});var by=P((Tbe,CU)=>{"use strict";var A8=Ff(),Sbe=df(),r_=(G(),D($)),R8=ff(),y8=Cc().insertRecords,b8=ht(),O8=X(),N8=Km(),{getSchemaPath:w8}=gt(),I8=t_();CU.exports=C8;async function C8(e){try{let{schema_table:t,attributes:r}=A8(e);R8(e,r,t.hash_attribute),e.schema!==r_.SYSTEM_SCHEMA_NAME&&(r.includes(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await N8(e.hdb_auth_header,t,r),s=w8(e.schema,e.table),i=await b8.openEnvironment(s,e.table),o=await y8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I8(e,o)}catch(c){O8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(C8,"lmdbCreateRecords")});var LU=P((Rbe,DU)=>{"use strict";var PU=(G(),D($)),P8=by(),D8=df(),L8=require("fs-extra"),{getSchemaPath:M8}=gt();DU.exports=v8;async function v8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new D8(PU.SYSTEM_SCHEMA_NAME,PU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await P8(r),await L8.mkdirp(M8(e.schema))}a(v8,"lmdbCreateSchema")});var vU=P((bbe,MU)=>{"use strict";var Oy=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};MU.exports=Oy});var HU=P((Cbe,BU)=>{"use strict";var UU=ht(),Ny=ln(),wy=Dn().LMDB_ERRORS_ENUM,U8=Ft(),xU=X(),Nbe=oe(),x8=require("lmdb"),B8=vU(),H8=(G(),D($)),{OVERFLOW_MARKER:wbe,MAX_SEARCH_KEY_LENGTH:Ibe}=U8,k8=H8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function F8(e,t,r,n){if(Ny.validateEnv(e),t===void 0)throw new Error(wy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wy.IDS_REQUIRED):new Error(wy.IDS_MUST_BE_ITERABLE);try{let s=UU.listDBIs(e);UU.initializeDBIs(e,t,s);let i=new B8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let p=e.dbis[t].get(o);if(!p||n&&p[k8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,x8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!p.hasOwnProperty(R)||R===t)continue;let E=e.dbis[R],T=p[R];if(T!=null)try{let O=Ny.getIndexedValues(T);if(O)for(let v=0,F=O.length;v<F;v++)E.remove(O[v],o)}catch{xU.warn(`cannot delete from attribute: ${R}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(p)}catch(p){xU.warn(p),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=Ny.getNextMonotonicTime(),i}catch(s){throw s}}a(F8,"deleteRecords");BU.exports={deleteRecords:F8}});var n_=P((Dbe,FU)=>{"use strict";var uu=oe(),G8=HU(),q8=ht(),{getSchemaPath:$8}=gt(),V8=t_(),K8=X();FU.exports=Y8;async function Y8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(uu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(uu.isEmptyOrZeroLength(e.hash_values)&&!uu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];uu.isEmpty(l)||e.hash_values.push(l)}}if(uu.isEmptyOrZeroLength(e.hash_values))return kU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(uu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=$8(e.schema,e.table),i=await q8.openEnvironment(s,e.table),o=await G8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await V8(e,o)}catch(c){K8.error(`unable to write transaction due to ${c.message}`)}return kU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Y8,"lmdbDeleteRecords");function kU(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(kU,"createDeleteResponse")});var Cy=P((vbe,GU)=>{"use strict";var W8=(G(),D($)),Mbe=ln();function Iy(e,t){let r=Object.create(null);if(t.length===1&&W8.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Iy,"parseRow");function z8(e,t,r,n){let s=Iy(r,e);n.push(s)}a(z8,"searchAll");function j8(e,t,r,n){let s=Iy(r,e);n[t]=s}a(j8,"searchAllToMap");function Q8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Q8,"iterateDBI");function Hc(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Hc,"pushResults");function J8(e,t,r,n,s,i){t.toString().endsWith(e)&&Hc(t,r,n,s,i)}a(J8,"endsWith");function X8(e,t,r,n,s,i){t.toString().includes(e)&&Hc(t,r,n,s,i)}a(X8,"contains");function Z8(e,t,r,n,s,i){t>e&&Hc(t,r,n,s,i)}a(Z8,"greaterThanCompare");function e5(e,t,r,n,s,i){t>=e&&Hc(t,r,n,s,i)}a(e5,"greaterThanEqualCompare");function t5(e,t,r,n,s,i){t<e&&Hc(t,r,n,s,i)}a(t5,"lessThanCompare");function r5(e,t,r,n,s,i){t<=e&&Hc(t,r,n,s,i)}a(r5,"lessThanEqualCompare");GU.exports={parseRow:Iy,searchAll:z8,searchAllToMap:j8,iterateDBI:Q8,endsWith:J8,contains:X8,greaterThanCompare:Z8,greaterThanEqualCompare:e5,lessThanCompare:t5,lessThanEqualCompare:r5,pushResults:Hc}});var du=P((kbe,zU)=>{"use strict";var da=ht(),xbe=X(),$n=ln(),Wm=Ft(),zt=Dn().LMDB_ERRORS_ENUM,Bbe=oe(),n5=(G(),D($)),zm=Cy(),{parseRow:s5}=zm,Hbe=require("lmdb"),{OVERFLOW_MARKER:qU,MAX_SEARCH_KEY_LENGTH:i5}=Wm;function $U(e,t,r,n=!1,s=void 0,i=void 0){return kc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a($U,"iterateFullIndex");function s_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return kc(e,t,r,(f,d,h,_)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(E.values=!1,d.getRange(E).map(T=>({value:T}))):d.getRange(E)})}a(s_,"iterateRangeBetween");function kc(e,t,r,n){let s=e.database||e,i=da.openDBI(s,r);i[Wm.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&da.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(kc,"setupTransaction");function VU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(qU)){if(!s)if(r)s=da.openDBI(e,r);else{let l=da.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=da.openDBI(e,l[u]),!s[Wm.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(VU,"getOverflowCheck");function o5(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return kc(e,t,t,(o,c,l)=>(jm(r),r=i_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>s5(u.value,r))))}a(o5,"searchAll");function a5(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);jm(r),r=i_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of $U(e,t,t,n,s,i))o.set(c,zm.parseRow(l,r));return o}a(a5,"searchAllToMap");function c5(e,t,r=!1,n=void 0,s=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=$U(e,void 0,t,r,n,s),c=o.transaction,l=VU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(c5,"iterateDBI");function l5(e,t){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return da.statDBI(e,t).entryCount}a(l5,"countAll");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){return fa(e,r,n),kc(e,t,r,(c,l,u,f)=>(n=$n.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(u5,"equals");function d5(e,t,r){return fa(e,t,r),da.openDBI(e,t).getValuesCount(r)}a(d5,"count");function f5(e,t,r,n,s=!1,i=void 0,o=void 0){return fa(e,r,n),kc(e,null,r,(c,l)=>{n=$n.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(f5,"startsWith");function _5(e,t,r,n,s=!1,i=void 0,o=void 0){return KU(e,t,r,n,s,i,o,!0)}a(_5,"endsWith");function KU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return fa(e,r,n),kc(e,null,r,(l,u,f,d)=>{let h=VU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let p=_.toString();return p.endsWith(qU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?p.endsWith(n):p.includes(n))?u[Wm.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(KU,"contains");function h5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),s_(e,t,r,n,l,s,i,o,!0,!1)}a(h5,"greaterThan");function p5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),s_(e,t,r,n,l,s,i,o,!1,!1)}a(p5,"greaterThanEqual");function m5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),s_(e,t,r,l,n,s,i,o,!1,!0)}a(m5,"lessThan");function E5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),s_(e,t,r,l,n,s,i,o,!1,!1)}a(E5,"lessThanEqual");function g5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if($n.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=$n.convertKeyValueToWrite(n),s=$n.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return s_(e,t,r,n,s,i,o,c)}a(g5,"between");function S5(e,t,r,n){$n.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(jm(r),r=i_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=zm.parseRow(c,r)),o}a(S5,"searchByHash");function T5(e,t,r){$n.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(T5,"checkHashExists");function A5(e,t,r,n,s=[]){return WU(e,t,r,n,s),YU(e,t,r,n,s).map(i=>i[1])}a(A5,"batchSearchByHash");function R5(e,t,r,n,s=[]){WU(e,t,r,n,s);let i=new Map;for(let[o,c]of YU(e,t,r,n,s))i.set(o,c);return i}a(R5,"batchSearchByHashToMap");function YU(e,t,r,n,s=[]){return kc(e,t,t,(i,o,c)=>{r=i_(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,zm.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(YU,"batchHashSearch");function WU(e,t,r,n,s){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(jm(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(WU,"initializeBatchSearchByHash");function jm(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(jm,"validateFetchAttributes");function fa(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>i5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(fa,"validateComparisonFunctions");function i_(e,t){return t.length===1&&n5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=da.listDBIs(e)),t}a(i_,"setGetWholeRowAttributes");zU.exports={searchAll:o5,searchAllToMap:a5,count:d5,countAll:l5,equals:u5,startsWith:f5,endsWith:_5,contains:KU,searchByHash:S5,setGetWholeRowAttributes:i_,batchSearchByHash:A5,batchSearchByHashToMap:R5,checkHashExists:T5,iterateDBI:c5,greaterThan:h5,greaterThanEqual:p5,lessThan:m5,lessThanEqual:E5,between:g5}});var fu=P((Gbe,ZU)=>{var jU=require("lodash"),QU=nt(),Fe=require("joi"),y5=oe(),{hdb_schema_table:o_,checkValidTable:JU,hdb_table:XU,hdb_database:Qm}=Ri(),{handleHDBError:b5,hdb_errors:O5}=he(),{getDatabases:N5}=(Ue(),D(at)),{HTTP_STATUS_CODES:w5}=O5,I5=Fe.object({database:Qm,schema:Qm,table:XU,search_attribute:o_,search_value:Fe.any().required(),get_attributes:Fe.array().min(1).items(Fe.alternatives(o_,Fe.object())).optional(),desc:Fe.bool(),limit:Fe.number().integer().min(1),offset:Fe.number().integer().min(0)}),C5=Fe.object({database:Qm,schema:Qm,table:XU,operator:Fe.string().valid("and","or").default("and").lowercase(),offset:Fe.number().integer().min(0),limit:Fe.number().integer().min(1),get_attributes:Fe.array().min(1).items(Fe.alternatives(o_,Fe.object())).optional(),sort:Fe.object({attribute:Fe.alternatives(o_,Fe.array().min(1)),descending:Fe.bool().optional()}).optional(),conditions:Fe.array().min(1).items(Fe.alternatives(Fe.object({operator:Fe.string().valid("and","or").default("and").lowercase(),conditions:Fe.array()}),Fe.object({search_attribute:Fe.alternatives(o_,Fe.array().min(1)),search_type:Fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Fe.when("search_type",{switch:[{is:"equals",then:Fe.any()},{is:"between",then:Fe.array().items(Fe.alternatives([Fe.string(),Fe.number()])).length(2)}],otherwise:Fe.alternatives(Fe.string(),Fe.number())}).required()}))).required()});ZU.exports=function(e,t){let r=null;switch(t){case"value":r=QU.validateBySchema(e,I5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(JU("database",e.schema)),i(JU("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=QU.validateBySchema(e,C5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=y5.checkGlobalSchemaTable(e.schema,e.table);if(s)return b5(new Error,s,w5.NOT_FOUND);let o=N5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=jU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!jU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var Py=P(($be,e0)=>{"use strict";var P5=ht(),D5=fu(),{getSchemaPath:L5}=gt();e0.exports=M5;function M5(e){let t=D5(e,"hashes");if(t)throw t;let r=L5(e.schema,e.table);return P5.openEnvironment(r,e.table)}a(M5,"initialize")});var Dy=P((Kbe,t0)=>{"use strict";var v5=du(),U5=Py();t0.exports=x5;async function x5(e){let t=await U5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return v5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(x5,"lmdbGetDataByHash")});var _u=P((Wbe,r0)=>{"use strict";var Ly=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};r0.exports=Ly});var s0=P((Qbe,n0)=>{"use strict";var jbe=_u(),B5=du(),H5=Py();n0.exports=k5;async function k5(e){let t=await H5(e),r=global.hdb_schema[e.schema][e.table];return B5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(k5,"lmdbSearchByHash")});var Ys=P((Xbe,i0)=>{"use strict";var My=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};i0.exports=My});var Jm=P((eOe,d0)=>{"use strict";var Yr=du(),F5=ht(),G5=oe(),Ge=Ft(),Fc=(G(),D($)),q5=oo(),o0=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:$5}=gt(),ho=Fc.SEARCH_WILDCARDS;async function V5(e,t,r){let n;e.schema===Fc.SYSTEM_SCHEMA_NAME?n=q5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=u0(e,n.hash_attribute,r,t);return c0(e,s,n.hash_attribute,r)}a(V5,"prepSearch");async function c0(e,t,r,n){let s=$5(e.schema,e.table),i=await F5.openEnvironment(s,e.table),o=l0(i,e,t,r),c=o.transaction||i;if([Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ge.SEARCH_TYPES.SEARCH_ALL,Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(K5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?a0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?a0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Yr.batchSearchByHashToMap(c,r,e.get_attributes,u):Yr.batchSearchByHash(c,r,e.get_attributes,u)}a(c0,"executeSearch");function l0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ge.SEARCH_TYPES.EQUALS:s=Yr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.CONTAINS:s=Yr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.ENDS_WITH:case Ge.SEARCH_TYPES._ENDS_WITH:s=Yr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.STARTS_WITH:case Ge.SEARCH_TYPES._STARTS_WITH:s=Yr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.SEARCH_ALL:return Yr.searchAll(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.BETWEEN:s=Yr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN:case Ge.SEARCH_TYPES._GREATER_THAN:s=Yr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ge.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN:case Ge.SEARCH_TYPES._LESS_THAN:s=Yr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN_EQUAL:case Ge.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(l0,"searchByType");function a0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(a0,"createMapFromIterable");function K5(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(K5,"checkToFetchMore");function u0(e,t,r,n){if(G5.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ho.indexOf(s)>-1)return r===!0?Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ge.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ho[0])<0&&s.indexOf(ho[1])<0)return c===!0?r===!0?Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ge.SEARCH_TYPES.EQUALS;if(ho.indexOf(i)>=0&&ho.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ge.SEARCH_TYPES.CONTAINS;if(ho.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ge.SEARCH_TYPES.ENDS_WITH;if(ho.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ge.SEARCH_TYPES.STARTS_WITH;if(s.includes(ho[0])||s.includes(ho[1]))return Ge.SEARCH_TYPES.EQUALS;throw new Error(o0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Fc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ge.SEARCH_TYPES.BETWEEN;case Fc.VALUE_SEARCH_COMPARATORS.GREATER:return Ge.SEARCH_TYPES.GREATER_THAN;case Fc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ge.SEARCH_TYPES.GREATER_THAN_EQUAL;case Fc.VALUE_SEARCH_COMPARATORS.LESS:return Ge.SEARCH_TYPES.LESS_THAN;case Fc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ge.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(o0.UNKNOWN_SEARCH_TYPE)}}a(u0,"createSearchTypeFromSearchObject");d0.exports={executeSearch:c0,createSearchTypeFromSearchObject:u0,prepSearch:V5,searchByType:l0}});var _0=P((nOe,f0)=>{"use strict";var rOe=Ys(),Y5=fu(),W5=oe(),z5=(G(),D($)),j5=Jm();f0.exports=Q5;function Q5(e,t){if(!W5.isEmpty(t)&&z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Y5(e,"value");if(n)throw n;return j5.prepSearch(e,t,!0)}a(Q5,"lmdbGetDataByValue")});var a_=P((oOe,h0)=>{"use strict";var iOe=Ys(),J5=fu(),X5=oe(),Z5=(G(),D($)),e9=Jm();h0.exports=t9;async function t9(e,t){if(!X5.isEmpty(t)&&Z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J5(e,"value");if(n)throw n;return e9.prepSearch(e,t,!1)}a(t9,"lmdbSearchByValue")});var m0=P((lOe,p0)=>{"use strict";var cOe=Ft(),vy=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Uy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},xy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};p0.exports={SearchByConditionsObject:vy,SearchCondition:Uy,SortAttribute:xy}});var A0=P((_Oe,T0)=>{"use strict";var dOe=m0().SearchByConditionsObject,r9=Ys(),n9=fu(),By=du(),Xm=Ft(),{Resource:fOe}=(na(),D(xA)),S0=Jm(),s9=Cy(),i9=require("lodash"),{getSchemaPath:o9}=gt(),E0=ht(),{handleHDBError:a9,hdb_errors:c9}=he(),{HTTP_STATUS_CODES:l9}=c9,u9=1e8;T0.exports=d9;async function d9(e){let t=n9(e,"conditions");if(t)throw a9(t,t.message,l9.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=o9(e.schema,e.table),n=await E0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)E0.openDBI(n,u.search_attribute);let i=i9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Xm.SEARCH_TYPES.EQUALS?u.estimated_count=By.count(n,u.search_attribute,u.search_value):f===Xm.SEARCH_TYPES.CONTAINS||f===Xm.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=u9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await g0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(S0.filterByType),d=f.length,h=By.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let p=0;p<d;p++)if(!f[p](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>s9.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await g0(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=By.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(d9,"lmdbSearchByConditions");async function g0(e,t,r,n){let s=new r9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Xm.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,S0.searchByType(e,s,i,n).map(o=>o.value)}a(g0,"executeConditionSearch")});var c_=P((pOe,R0)=>{"use strict";var f9=(G(),D($)).OPERATIONS_ENUM,Hy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=f9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};R0.exports=Hy});var ky=P((EOe,P0)=>{"use strict";var N0=Ys(),w0=c_(),I0=a_(),C0=n_(),Sn=(G(),D($)),y0=oe(),b0=ht(),{getTransactionAuditStorePath:_9,getSchemaPath:h9}=gt(),O0=X();P0.exports=p9;async function p9(e){try{if(y0.isEmpty(global.hdb_schema[e.schema])||y0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await m9(e),await E9(e);let t=h9(e.schema,e.table);try{await b0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")O0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_9(e.schema,e.table);await b0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")O0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(p9,"lmdbDropTable");async function m9(e){let t=new N0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await I0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new w0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await C0(s)}a(m9,"deleteAttributesFromSystem");async function E9(e){let t=new N0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await I0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new w0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await C0(s)}catch(i){throw i}}a(E9,"dropTableFromSystem")});var L0=P((SOe,D0)=>{"use strict";var g9=require("fs-extra"),S9=Ys(),T9=_u(),A9=c_(),R9=ky(),y9=n_(),b9=Dy(),O9=a_(),po=(G(),D($)),{getSchemaPath:N9}=gt(),{handleHDBError:w9,hdb_errors:I9}=he(),{HDB_ERROR_MSGS:C9,HTTP_STATUS_CODES:P9}=I9;D0.exports=D9;async function D9(e){let t;try{t=await L9(e.schema);let r=new S9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await O9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await R9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new A9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await y9(s);let i=N9(t);await g9.remove(i)}catch(r){throw r}}a(D9,"lmdbDropSchema");async function L9(e){let t=new T9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await b9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw w9(new Error,C9.SCHEMA_NOT_FOUND(e),P9.NOT_FOUND,void 0,void 0,!0);return n}a(L9,"validateDropSchema")});var l_=P((AOe,M0)=>{"use strict";var Fy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};M0.exports=Fy});var qy=P((bOe,v0)=>{"use strict";var M9=require("fs-extra"),Zm=ht(),{getTransactionAuditStorePath:v9}=gt(),Gy=Ft(),yOe=l_();v0.exports=U9;async function U9(e){let t;try{let r=v9(e.schema,e.table);await M9.mkdirp(r),t=await Zm.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Zm.createDBI(t,Gy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Zm.createDBI(t,Gy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Zm.createDBI(t,Gy.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(U9,"createTransactionsAuditEnvironment")});var B0=P((wOe,x0)=>{"use strict";var $y=(G(),D($)),U0=ht(),x9=Cc(),{getSystemSchemaPath:B9,getSchemaPath:H9}=gt(),NOe=oo(),k9=Pm(),Vy=Cm(),F9=X(),G9=qy();x0.exports=q9;async function q9(e,t){let r=H9(t.schema,t.table),n=new Vy(t.schema,t.table,$y.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Vy(t.schema,t.table,$y.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Vy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await U0.createEnvironment(r,t.table),e!==void 0){let o=await U0.openEnvironment(B9(),$y.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await x9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Ky(n),await Ky(s),await Ky(i)}await G9(t)}catch(o){throw o}}a(q9,"lmdbCreateTable");async function Ky(e){try{await k9(e)}catch(t){F9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ky,"createAttribute")});var k0=P((COe,H0)=>{"use strict";var $9=Ff(),V9=ff(),K9=Km(),u_=(G(),D($)),Y9=Cc().updateRecords,W9=ht(),{getSchemaPath:z9}=gt(),j9=t_(),Q9=X();H0.exports=J9;async function J9(e){try{let{schema_table:t,attributes:r}=$9(e);V9(e,r,t.hash_attribute),e.schema!==u_.SYSTEM_SCHEMA_NAME&&(r.includes(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await K9(e.hdb_auth_header,t,r),s=z9(e.schema,e.table),i=await W9.openEnvironment(s,e.table),o=await Y9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await j9(e,o)}catch(c){Q9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(J9,"lmdbUpdateRecords")});var G0=P((DOe,F0)=>{"use strict";var X9=(G(),D($)).OPERATIONS_ENUM,Yy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=X9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};F0.exports=Yy});var $0=P((vOe,q0)=>{"use strict";var MOe=G0(),Z9=Ff(),e7=ff(),t7=Km(),d_=(G(),D($)),r7=Cc().upsertRecords,n7=ht(),{getSchemaPath:s7}=gt(),i7=t_(),o7=X(),{handleHDBError:a7,hdb_errors:c7}=he();q0.exports=l7;async function l7(e){let t;try{t=Z9(e)}catch(l){throw a7(l,l.message,c7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;e7(e,n,r.hash_attribute),e.schema!==d_.SYSTEM_SCHEMA_NAME&&(n.includes(d_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(d_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(d_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(d_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await t7(e.hdb_auth_header,r,n),i=s7(e.schema,e.table),o=await n7.openEnvironment(i,e.table),c=await r7(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await i7(e,c)}catch(l){o7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(l7,"lmdbUpsertRecords")});var K0=P((xOe,V0)=>{"use strict";var Wy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};V0.exports=Wy});var W0=P((HOe,Y0)=>{"use strict";var zy=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};Y0.exports=zy});var Q0=P((GOe,j0)=>{"use strict";var jy=ht(),{getTransactionAuditStorePath:u7}=gt(),FOe=K0(),f_=Ft(),d7=oe(),z0=W0(),f7=require("util").promisify,_7=f7(setTimeout),h7=1e4,p7=100;j0.exports=m7;async function m7(e){let t=u7(e.schema,e.table),r=await jy.openEnvironment(t,e.table,!0),n=jy.listDBIs(r);jy.initializeDBIs(r,f_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new z0;do s=await E7(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await _7(p7);while(s.transactions_deleted>0);return i}a(m7,"deleteAuditLogsBefore");async function E7(e,t){let r=new z0;try{let n=e.dbis[f_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[f_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];d7.isEmpty(c)||(s=e.dbis[f_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[f_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>h7)break}return await s,r}catch(n){throw n}}a(E7,"deleteTransactions")});var X0=P(($Oe,J0)=>{"use strict";var Qy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};J0.exports=Qy});var ex=P((YOe,Z0)=>{"use strict";var g7=Ys(),S7=c_(),KOe=X0(),wi=(G(),D($)),T7=oe(),Jy=ht(),A7=oo(),R7=a_(),y7=n_(),{getSchemaPath:b7}=gt();Z0.exports=O7;async function O7(e,t=!0){let r;e.schema===wi.SYSTEM_SCHEMA_NAME?r=A7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await w7(e),s=b7(e.schema,e.table),i=await Jy.openEnvironment(s,e.table);return t===!0&&await N7(e,i,r.hash_attribute),Jy.dropDBI(i,e.attribute),n}a(O7,"lmdbDropAttribute");async function N7(e,t,r){let n=Jy.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(N7,"removeAttributeFromAllObjects");async function w7(e){let t=new g7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await R7(t)).filter(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new S7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return y7(i)}a(w7,"dropAttributeFromSystem")});var ox=P((jOe,ix)=>{"use strict";var Xy=ht(),hu=Ft(),zOe=ln(),Zy=(G(),D($)),tx=oe(),{getTransactionAuditStorePath:I7}=gt(),C7=du(),eE=cu(),P7=X();ix.exports=D7;async function D7(e){let t=I7(e.schema,e.table),r=await Xy.openEnvironment(t,e.table,!0),n=Xy.listDBIs(r);Xy.initializeDBIs(r,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rx(r,e.search_values);case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,M7(r,e.search_values,s);case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L7(r,e.search_values);default:return rx(r)}}a(D7,"readAuditLog");function rx(e,t=[0,Date.now()]){tx.isEmpty(t[0])&&(t[0]=0),tx.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new eE,s))}a(rx,"searchTransactionsByTimestamp");function L7(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,sx(e,i))}return Object.fromEntries(r)}a(L7,"searchTransactionsByUsername");function M7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=C7.equals(e,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=sx(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);nx(l,"records",r,f,o),nx(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(M7,"searchTransactionsByHashValues");function nx(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new eE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new eE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(nx,"loopRecords");function sx(e,t){let r=[];try{let n=e.dbis[hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new eE,i);r.push(o)}}catch(i){P7.warn(i)}return r}catch(n){throw n}}a(sx,"batchSearchTransactions")});var cx=P((ZOe,ax)=>{"use strict";var{getSchemaPath:JOe}=gt(),XOe=ht(),{database:v7}=(Ue(),D(at));ax.exports={writeTransaction:U7};async function U7(e,t,r){return v7({database:e,table:t}).transaction(r)}a(U7,"writeTransaction")});var fx=P((tNe,dx)=>{"use strict";var{getSchemaPath:lx}=gt(),ux=ht();dx.exports={flush:x7,resetReadTxn:B7};async function x7(e,t){return(await ux.openEnvironment(lx(e,t),t.toString())).flushed}a(x7,"flush");async function B7(e,t){try{(await ux.openEnvironment(lx(e,t),t.toString())).resetReadTxn()}catch{}}a(B7,"resetReadTxn")});var mx=P((nNe,px)=>{"use strict";var{Readable:H7}=require("stream"),{getDatabases:k7}=(Ue(),D(at)),{readSync:F7,openSync:G7,createReadStream:_x}=require("fs"),{open:q7}=require("lmdb"),hx=Uf(),$7=xf(),{AUDIT_STORE_OPTIONS:V7}=(so(),D(Ex)),{INTERNAL_DBIS_NAME:K7,AUDIT_STORE_NAME:Y7}=Ft();px.exports=z7;var eb=32768,W7=100;async function z7(e){let t=e.database||e.schema||"data",r=k7()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=q7({noSync:!0,maxDbs:$7.MAX_DBS}),h,_=d.openDB(K7,new hx(!1)),p=f.useReadTransaction(),S=0,g=a(async function(E,T){T.encoding="binary",T.encoder=void 0;let O=d.openDB(E,T),v=f.openDB(E,T);for(let{key:F,version:q,value:j}of v.getRange({start:null,transaction:p,versions:v.useVersions}))h=O.put(F,j,q),S++%W7===0&&(await new Promise(te=>setTimeout(te,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:E,value:T}of f.getRange({transaction:p,start:!1}))if(s.some(O=>E.startsWith?.(O+"/"))){_.put(E,T);let[,O]=E.split("/"),v=!O,F=new hx(!v,v);await g(E,F)}e.include_audit&&await g(Y7,{...V7}),await h;let R=_x(d.path);return R.headers=l(),R.on("close",()=>{p.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=G7(o.path);return o.transaction(()=>{let u=Buffer.alloc(eb);F7(c,u,0,eb),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=_x(null,{fd:c,start:eb}),h=new H7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(z7,"getBackup")});var Tx=P((iNe,Sx)=>{"use strict";var j7=X(),{handleHDBError:Q7}=he(),J7=jL(),X7=Pm(),Z7=by(),eee=LU(),tee=n_(),ree=Dy(),nee=s0(),see=_0(),iee=a_(),oee=A0(),aee=L0(),cee=B0(),lee=k0(),uee=$0(),dee=Q0(),fee=ky(),_ee=ex(),hee=ox(),pee=cx(),gx=fx(),mee=mx(),tb=class extends J7{static{a(this,"LMDBBridge")}async searchByConditions(t){return oee(t)}async getDataByHash(t){return await ree(t)}async searchByHash(t){return await nee(t)}async getDataByValue(t,r){return await see(t,r)}async searchByValue(t){return await iee(t)}async createSchema(t){return await eee(t)}async dropSchema(t){return await aee(t)}async createTable(t,r){return await cee(t,r)}async dropTable(t){return await fee(t)}async createAttribute(t){return await X7(t)}async createRecords(t){return await Z7(t)}async updateRecords(t){return await lee(t)}async upsertRecords(t){try{return await uee(t)}catch(r){throw Q7(r,null,null,j7.ERR,r)}}async deleteRecords(t){return await tee(t)}async dropAttribute(t){return await _ee(t)}async deleteAuditLogsBefore(t){return await dee(t)}async readAuditLog(t){return await hee(t)}writeTransaction(t,r,n){return pee.writeTransaction(t,r,n)}flush(t,r){return gx.flush(t,r)}resetReadTxn(t,r){return gx.resetReadTxn(t,r)}getBackup(t){return mee(t)}};Sx.exports=tb});var nb={};Be(nb,{add:()=>tE,applyReverse:()=>Ax,getRecordAtTime:()=>rb,rebuildUpdateBefore:()=>rE});function tE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function rE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,tE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ax(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Eee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Rx}}function rb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ct(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Ax(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Rx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ct(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Eee,Rx,nE=be(()=>{so();a(tE,"add");tE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};Eee={add:tE};a(rE,"rebuildUpdateBefore");a(Ax,"applyReverse");Rx={};a(rb,"getRecordAtTime")});function Tn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function aE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a number, attempt to assign ${h}`);Tn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be a number, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Vn.ClientError(`${l} must be a Date, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof gi||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){Tn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be an object, attempt to assign ${d}`);Tn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let p=this.getRecord()?.[l];return _.update(p)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=sb(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");Tn(this)[c]=l}),i("deleteProperty",function(c){Tn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,bx);break}o=c}while(o&&o!==bx)}function sb(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends __{static{a(this,"TrackedObject")}},aE(r,t)),new r(e)):new __(e);case Array:let n=new iE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=sb(o,t?.elements)),n[s]=o}return n;default:return e}}function cE(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=cE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function qc(e,t=e.getChanges?.()){let r;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=qc(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=nb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)gee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function sE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Gc]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(sE(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(sE(s))return!0}else return!0}else return!0}}return!1}var Vn,yx,bx,__,gee,Gc,iE,oE,ib=be(()=>{Vn=M(he());nE();fs();a(Tn,"getChanges");a(aE,"assignTrackedAccessors");yx=Object.prototype,bx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(yx[t])return yx[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=sb(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(sb,"trackObject");__=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};aE(__,{});a(cE,"collapseData");gee=Object.prototype.hasOwnProperty;a(qc,"updateAndFreeze");a(sE,"hasChanges");Gc=Symbol.for("has-array-changes"),iE=class extends Array{static{a(this,"TrackedArray")}#e;[Gc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Gc]=!0,super.splice(...t)}push(...t){return this[Gc]=!0,super.push(...t)}pop(){return this[Gc]=!0,super.pop()}unshift(...t){return this[Gc]=!0,super.unshift(...t)}shift(){return this[Gc]=!0,super.shift()}};iE.prototype.constructor=Array;oE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lx={};Be(Lx,{ResourceBridge:()=>cb});function lb({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Nx(e,t){let r=Ii(e),n=lb(e,r);if(!r)throw new Ws.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;It(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&cE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ii(e){let t=e.database||e.schema||Tee,r=Ze()[t];if(!r)throw(0,Ws.handleHDBError)(new Error,See.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wx(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*Ix(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var Cx,lE,Ws,Px,ob,ab,Dx,See,Tee,Aee,Ree,Ox,cb,Mx=be(()=>{"use strict";Cx=M(Tx()),lE=M(fu()),Ws=M(he());Ue();Px=M(Ff());G();ob=M(_o()),ab=M(Ks()),Dx=M(oe());hc();ib();({HDB_ERROR_MSGS:See}=Ws.hdb_errors),Tee="data",Aee=1e4,Ree=10,cb=class extends Cx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ox=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,lE.default)(t,"conditions");if(r)throw(0,Ws.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ii(t);if(!n)throw new Ws.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:lb(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ws.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}_t({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ii(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ii(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ii(t).dropTable()}createSchema(t){return pu({database:t.schema,table:null}),ob.signalSchemaChange(new ab.SchemaEventMsg(process.pid,Yt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await ub(t.schema),ob.signalSchemaChange(new ab.SchemaEventMsg(process.pid,Yt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Ox.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Px.default)(t),s,i=Ze()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),It(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=cE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let p=f[_];if(typeof p=="function")try{let S=p([[h]]);Array.isArray(S)&&(p=S[0].func_val,f[_]=p)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Ze()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),It(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return wx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Ze()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ws.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Np.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Dx.async_set_timeout)(Ree),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%Aee===0&&await u();return l.length>0&&await u(),s?wx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,lE.default)(t,"hashes");if(r)throw r;return Nx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Nx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&aA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,lE.default)(t,"value");if(n)throw n;let s=Ii(t);if(!s)throw new Ws.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Np.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:lb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ii(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ii({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ii(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ii(t),n={};switch(t.search_type){case wp.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case wp.USERNAME:let s=t.search_values;for await(let i of Ix(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Ix(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(lb,"getSelect");a(Nx,"getRecords");a(Ii,"getTable");a(wx,"createDeleteResponse");a(Ix,"groupRecordsInHistory")});var Fn=P((gNe,vx)=>{"use strict";var{ResourceBridge:yee}=(Mx(),D(Lx)),bee=ce();bee.initSync();var uE;function Oee(){return uE||(uE=new yee,uE)}a(Oee,"getBridge");vx.exports=Oee()});var gn=P((TNe,Hx)=>{"use strict";var fE=iR(),Mr=oe(),Nee=require("util"),_E=Fn(),wee=$s(),Ux=X(),{handleHDBError:$c,hdb_errors:Iee}=he(),{HTTP_STATUS_CODES:Vc}=Iee,Cee=Nee.promisify(wee.getTableSchema),Pee="updated",xx="inserted",Bx="upserted";Hx.exports={insert:Lee,update:Mee,upsert:vee,validation:Dee,flush:Uee};async function Dee(e){if(Mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Mr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cee(e.schema,e.table),r=fE(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Mr.isEmptyOrZeroLength(c[n]))throw Ux.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Mr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Ux.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Mr.isEmpty(c[n])&&c[n]!==""&&s.has(Mr.autoCast(c[n]))&&(c.skip=!0),s.add(Mr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Dee,"validation");async function Lee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=fE(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await _E.createRecords(e);return dE(xx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Lee,"insertData");async function Mee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=fE(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await _E.updateRecords(e);return Mr.isEmpty(n.existing_rows)?dE(Pee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):dE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Mee,"updateData");async function vee(e){if(e.operation!=="upsert")throw $c(new Error,"invalid operation, must be upsert",Vc.INTERNAL_SERVER_ERROR);let t=fE(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await _E.upsertRecords(e);return dE(Bx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(vee,"upsertData");function dE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===xx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Bx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(dE,"returnObject");function Uee(e){return Mr.transformReq(e),_E.flush(e.schema,e.table)}a(Uee,"flush")});var Vx=P((RNe,$x)=>{var mu=require("validate.js"),Fx=nt(),Eu=(G(),D($)),{handleHDBError:xee,hdb_errors:Bee}=he(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:Hee}=Bee,db=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),kee={STRUCTURE_USER:"structure_user"},kx=Object.values(Eu.ROLE_TYPES_ENUM),Fee="attribute_permissions",Gee="attribute_name",{PERMS_CRUD_ENUM:gu}=Eu,qee=[Fee,...Object.values(gu)],Gx=[gu.READ,gu.INSERT,gu.UPDATE],$ee=[Gee,...Gx];function Vee(e){let t=db();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,qx(e,t)}a(Vee,"addRoleValidation");function Kee(e){let t=db();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,qx(e,t)}a(Kee,"alterRoleValidation");function Yee(e){let t=db();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Fx.validateObject(e,t)}a(Yee,"dropRoleValidation");var Wee=["operation","role","id","permission","hdb_user","access"];function qx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Wee.includes(n[o])||s.push(n[o]);s.length>0&&nr(jt.INVALID_ROLE_JSON_KEYS(s),r);let i=Fx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=zee(e);o&&nr(o,r),kx.forEach(c=>{e.permission[c]&&!mu.isBoolean(e.permission[c])&&nr(jt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(kx.indexOf(o)<0){if(o===kee.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||nr(jt.SCHEMA_NOT_FOUND(d),r)}continue}nr(jt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(jt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){nr(jt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{qee.includes(f)||nr(jt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(gu).forEach(f=>{mu.isDefined(u[f])?mu.isBoolean(u[f])||nr(jt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(jt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(jt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(jt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!$ee.includes(S)&&S!==gu.DELETE&&nr(jt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!mu.isDefined(_.attribute_name)){nr(jt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let p=_.attribute_name;if(!f.includes(p)){nr(jt.INVALID_ATTRIBUTE_IN_PERMS(p),r,o,l);continue}Gx.forEach(S=>{mu.isDefined(_[S])?mu.isBoolean(_[S])||nr(jt.ATTR_PERM_NOT_BOOLEAN(S,p),r,o,l):nr(jt.ATTR_PERM_MISSING(S,p),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;nr(jt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return jee(r)}a(qx,"customValidate");$x.exports={addRoleValidation:Vee,alterRoleValidation:Kee,dropRoleValidation:Yee};function zee(e){let{operation:t,permission:r}=e;if(t===Eu.OPERATIONS_ENUM.ADD_ROLE||t===Eu.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return jt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Eu.ROLE_TYPES_ENUM.SUPER_USER:Eu.ROLE_TYPES_ENUM.CLUSTER_USER;return jt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(zee,"validateNoSUPerms");function jee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:jt.ROLE_PERMS_ERROR,...e};return xee(new Error,n,Hee.BAD_REQUEST)}else return null}a(jee,"generateRolePermResponse");function nr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(nr,"addPermError")});var p_=P((ONe,zx)=>{"use strict";var Kx=gn(),Yx=Vr(),Qee=Uc(),_b=Vx(),hb=_o(),bNe=require("uuid").v4,Jee=require("util"),hE=(G(),D($)),Xee=oe(),pb=Yx.searchByValue,Zee=Yx.searchByHash,ete=Jee.promisify(Qee.delete),tte=Ys(),rte=_u(),{hdb_errors:nte,handleHDBError:Kc}=he(),{HDB_ERROR_MSGS:Wx,HTTP_STATUS_CODES:h_}=nte,{UserEventMsg:mb}=Ks();zx.exports={addRole:ste,alterRole:ite,dropRole:ote,listRoles:ate};function fb(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(fb,"scrubRoleDetails");async function ste(e){let t=_b.addRoleValidation(e);if(t)throw t;e=fb(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await pb(r)||[])}catch(i){throw Kc(i)}if(n&&n.length>0)throw Kc(new Error,Wx.ROLE_ALREADY_EXISTS(e.role),h_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Kx.insert(s),hb.signalUserChange(new mb(process.pid)),e=fb(e),e}a(ste,"addRole");async function ite(e){let t=_b.alterRoleValidation(e);if(t)throw t;e=fb(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Kx.update(r)}catch(s){throw Kc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Kc(new Error,"Invalid role id",h_.BAD_REQUEST,void 0,void 0,!0);return await hb.signalUserChange(new mb(process.pid)),e}a(ite,"alterRole");async function ote(e){let t=_b.dropRoleValidation(e);if(t)throw Kc(new Error,t,h_.BAD_REQUEST,void 0,void 0,!0);let r=new rte(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Zee(r));if(n.length===0)throw Kc(new Error,Wx.ROLE_NOT_FOUND,h_.NOT_FOUND,void 0,void 0,!0);let s=new tte(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pb(s)),o=!1;if(Xee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Kc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,h_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await ete(c),hb.signalUserChange(new mb(process.pid)),`${n[0].role} successfully deleted`}a(ote,"dropRole");async function ate(){return pb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(ate,"listRoles")});var Eb={};Be(Eb,{start:()=>Jx,startOnMainThread:()=>ute});function Jx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,jx.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(cte.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await lte(i)}}}async function lte(e){let t=Ze().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Qx.isEqual)(i,e)?void 0:(e.id=r.id,(0,pE.alterRole)(e))}return(0,pE.addRole)(e)}var pE,jx,Qx,cte,ute,Xx=be(()=>{Ue();pE=M(p_()),jx=require("yaml"),Qx=require("lodash"),cte=["super_user","cluster_user","structure_user"];a(Jx,"start");a(lte,"ensureRole");ute=Jx});async function mE(e){let t=(0,tB.pathToFileURL)(e).toString();if(dte)return m_||(m_=fte(hte)),(await(await m_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function fte(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),m_=new Compartment({console,Math,Date,fetch:_te,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eB.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qr,tables:Kn,databases:Ye})}};let n=await(0,Zx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),m_}function _te(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function hte(){return{Resource:qr,tables:Kn}}var Zx,eB,tB,dte,m_,gb=be(()=>{na();Ue();Zx=require("fs/promises"),eB=require("path"),tB=require("url"),dte=!1;a(mE,"secureImport");a(fte,"getCompartment");a(_te,"secureOnlyFetch");a(hte,"getGlobalVars")});var Tb={};Be(Tb,{handleFile:()=>pte});async function pte(e,t,r,n){let s=new Map,i=await mE(r);c(i.default)&&n.set((0,Sb.dirname)(t),i.default),o(i,(0,Sb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var Sb,rB=be(()=>{gb();Sb=require("path");a(pte,"handleFile")});var Rb={};Be(Rb,{start:()=>mte});function mte({resources:e}){e.set("login",Ab),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ab,nB=be(()=>{na();a(mte,"start");Ab=class extends qr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var R_={};Be(R_,{addAnalyticsListener:()=>A_,calculateCPUUtilization:()=>RB,diffResourceUsage:()=>yB,recordAction:()=>Dt,recordActionBinary:()=>Yn,setAnalyticsEnabled:()=>Ete});function Ete(e){EB=e}function gte(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function Ste(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},gE.set(e,o)}function Dt(e,t,r,n,s){if(!EB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=gE.get(i);o?gte(e,o):Ste(i,e,t,r,n,s),EE||Tte()}function Yn(e,t,r,n,s){Dt(!!e,t,r,n,s)}function A_(e){TB.push(e)}function Tte(){EE=performance.now(),setTimeout(async()=>{let e=performance.now()-EE;EE=0;let t=[],r={time:Date.now(),period:e,threadId:Yc.threadId,metrics:t};for(let[s,i]of gE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of AB){let h=Math.floor(c*d),_=o[h-1];if(h>l){let p=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+p}:S.count+=p}else u.push(p>1?{value:_,count:p}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await bB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Yc.threadId,byThread:!0,...n});for(let s of TB)s(t);gE=new Map,Yc.parentPort?Yc.parentPort.postMessage({type:SB,report:r}):wB({report:r})},gB).unref()}function SE(e,t,r){let n={id:(0,S_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function RB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function yB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Ate(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};SE(e,"table-size",l),Wc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function sB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=mB.default.statSync(s.primaryStore.env.path).size,c=Ate(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};SE(e,"database-size",u),Wc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wc.warn?.("Error getting DB size metrics",s)}}function iB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};SE(e,"storage-volume",o),Wc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Wc.warn?.("Error getting DB volume metrics",s)}}async function Rte(e,t=6e4){let r=bb(),n=OB(),s=new Promise(E=>{let T=performance.now();setImmediate(()=>{let O=performance.now();O-T>5e3&&Wc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-T)+"ms"),T=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-T>5e3&&Wc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-T)+"ms"),E(O-T)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:T}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!T)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:O,threadId:v}=T;for(let F of O||[]){let{path:q,method:j,type:te,metric:se,count:z,total:ne,distribution:le,threads:ie,...Re}=F;z||(z=1);let pe=se+(q?"-"+q:"");j!==void 0&&(pe+="-"+j),te!==void 0&&(pe+="-"+te);let Ae=c.get(pe);if(Ae){if(Ae.threads){let dt=Ae.threads[v];if(dt)Ae=dt;else{Ae.threads[v]={...Re};continue}}Ae.count||(Ae.count=1);let xt=Ae.count;for(let dt in Re){let Cn=Re[dt];typeof Cn=="number"&&(Ae[dt]=(Ae[dt]*xt+Cn*z)/(xt+z))}Ae.count+=z,ne>=0&&(Ae.total+=ne,Ae.ratio=Ae.total/Ae.count)}else Ae={period:t,...F},delete Ae.distribution,c.set(pe,Ae),Ae.byThread&&(Ae.threads=[],Ae.threads[v]={...Re},u.push(Ae));if(le){le=le.map(dt=>typeof dt=="number"?{value:dt,count:1}:dt);let xt=l.get(pe);xt?xt.push(...le):l.set(pe,le)}}await bB()}for(let E of u){let{path:T,method:O,type:v,metric:F,count:q,total:j,distribution:te,threads:se,...z}=E;se=se.filter(ne=>ne);for(let ne in z){if(typeof E[ne]!="number")continue;let le=0;for(let ie of se){let Re=ie[ne];typeof Re=="number"&&(le+=Re)}E[ne]=le}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,T]of l){let O=c.get(E);T.sort((dt,Cn)=>dt.value>Cn.value?1:-1);let v=O.count-1,F=[],q=0,j=0,te;for(let dt of AB){let Cn=v*dt;for(;q<Cn;)te=T[j++],q+=te.count,j===1&&q--;let nn=T[j>1?j-2:0];te||(te=T[0]),F.push(te.value-(te.value-nn.value)*(q-Cn)/te.count)}let[se,z,ne,le,ie,Re,pe,Ae,xt]=F;Object.assign(O,{p1:se,p10:z,p25:ne,median:le,p75:ie,p90:Re,p95:pe,p99:Ae,p999:xt})}let d;for(let[E,T]of c)T.id=(0,S_.getNextMonotonicTime)(),T.time=f,n.primaryStore.put(T.id,T,{append:!0}).then(O=>{O||n.primaryStore.put(T.id,T)}),d=!0;let h=Date.now(),{idle:_,active:p}=performance.eventLoopUtilization();if(d||p*10>_){let E=(0,S_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:_-oB,active:p-aB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(O=>{O||n.primaryStore.put(E,T)})}oB=_,aB=p;let S=process.resourceUsage(),g=yB(E_,S);g.time=h,g.period=E_.time?h-E_.time:t,g.cpuUtilization=RB(E_,g.period),SE(n,"resource-usage",g),E_=g;let R=Ze();sB(n,R),sB(n,{system:R.system}),iB(n,R),iB(n,{system:R.system})}async function cB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bb(){return lB||(lB=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function OB(){return uB||(uB=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Ote(){NB=!0;let e=(0,T_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Rte(gB,e),await cB(bb(),yte),await cB(OB(),bte)},Math.min(e/2,2147483647)).unref()}function wB(e,t){let r=e.report;r.threadId=t?.threadId||Yc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(dB+=n.mean*n.count);r.totalBytesProcessed=dB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(fB.get(t))}),fB.set(t,t.performance.eventLoopUtilization())),r.id=(0,S_.getNextMonotonicTime)(),bb().primaryStore.put(r.id,r),NB||Ote(),Nte&&(IB=Ite(r))}async function Ite(e){if(await IB,!_a){let r=(0,g_.dirname)((0,hB.getLogFilePath)());try{_a=await(0,yb.open)((0,g_.join)(r,"analytics.log"),"r+")}catch{_a=await(0,yb.open)((0,g_.join)(r,"analytics.log"),"w+")}}let t=(await _a.stat()).size;if(t>wte){let r=Buffer.alloc(t);await _a.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await _a.write(r,{position:0}),await _a.truncate(r.length),t=r.length}await _a.write(JSON.stringify(e)+`
|
|
20
|
+
`,t)}var Yc,_B,hB,pB,g_,yb,S_,T_,mB,Wc,gE,EB,EE,gB,SB,TB,AB,oB,aB,E_,bB,yte,bte,lB,uB,NB,dB,fB,Nte,IB,_a,wte,Ci=be(()=>{Yc=require("worker_threads"),_B=M(st());Ue();hB=M(X()),pB=M(mi()),g_=require("path"),yb=require("fs/promises"),S_=M(ln()),T_=M(ce());G();Dr();mB=M(require("node:fs")),Wc=(0,pB.loggerWithTag)("analytics");(0,T_.initSync)();gE=new Map,EB=(0,T_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(Ete,"setAnalyticsEnabled");a(gte,"recordExistingAction");a(Ste,"recordNewAction");a(Dt,"recordAction");Ke.recordAnalytics=Dt;a(Yn,"recordActionBinary");EE=0,gB=1e3,SB="analytics-report",TB=[];a(A_,"addAnalyticsListener");AB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Tte,"sendAnalytics");a(SE,"storeMetric");a(RB,"calculateCPUUtilization");a(yB,"diffResourceUsage");a(Ate,"storeTableSizeMetrics");a(sB,"storeDBSizeMetrics");a(iB,"storeVolumeMetrics");a(Rte,"aggregation");oB=0,aB=0,E_={},bB=a(()=>new Promise(setImmediate),"rest");a(cB,"cleanup");yte=36e5,bte=31536e6;a(bb,"getRawAnalyticsTable");a(OB,"getAnalyticsTable");(0,_B.setChildListenerByType)(SB,wB);a(Ote,"startScheduledTasks");dB=0,fB=new Map,Nte=!1;a(wB,"recordAnalytics");wte=1e6;a(Ite,"logAnalytics")});var CB={};Be(CB,{Headers:()=>mo,appendHeader:()=>TE,mergeHeaders:()=>Ob});function TE(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function Ob(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new mo(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var mo,y_=be(()=>{mo=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(TE,"appendHeader");a(Ob,"mergeHeaders")});function vB(e){let t={openapi:Cte,info:{title:"HarperDB HTTP REST interface",version:MB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:T,name:O,elements:v,relationship:F,definition:q}of o){if(F)T==="array"?u[O]={type:"array",items:{$ref:ha+v.type}}:u[O]={$ref:ha+T};else{let j=q??v?.definition;if(j){if(!t.components.schemas[j.type]){let te={};j.properties.forEach(se=>{te[se.name]=new Cb(Nb[se.type],se.type)}),t.components.schemas[j.type]=new LB(te)}T==="array"?u[O]={type:"array",items:{$ref:ha+j.type}}:u[O]={$ref:ha+j.type}}else T==="array"?v.type==="Any"||v.type=="ID"?u[O]={type:"array",items:{format:v.type}}:u[O]={type:"array",items:new Cb(Nb[v.type],v.type)}:T==="Any"||T=="ID"?u[O]={format:T}:u[O]=new Cb(Nb[T],T)}f.push(new Pb(O,"query",u[O]))}let d=Object.keys(u),h=new Pb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new Pb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new LB(u);let p=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",E="/"+s+"/";p&&(t.paths[E]={},t.paths[E].post=new Pte(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new wb(f,r,{200:new Ib({$ref:ha+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new DB(f,r,"delete all the records that match the provided query",{204:new PB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new wb([h],r,{200:new Ib({$ref:ha+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new Dte([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new DB([h],r,"delete a record with the given primary key",{204:new PB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new wb([h,_],r,{200:new Ib({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Pte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ha+e}}}},this.security=t,this.responses={200:{description:Db,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function wb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Ib(e){this.description=Db,this.content={"application/json":{schema:e}}}function PB(){this.description="successfully processed request, no content returned to client"}function Dte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ha+r}}}},this.responses={200:{description:Db}}}function DB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function LB(e){this.type="object",this.properties=e}function Cb(e,t){this.type=e,this.format=t}function Pb(e,t,r){this.name=e,this.in=t,this.schema=r}var MB,Cte,Nb,ha,Db,UB=be(()=>{MB=M(Et()),Cte="3.0.3",Nb={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ha="#/components/schemas/",Db="successful operation";a(vB,"generateJsonApi");a(Pte,"Post");a(wb,"Get");a(Ib,"Response200");a(PB,"Response204");a(Dte,"Put");a(DB,"Delete");a(LB,"ResourceSchema");a(Cb,"Type");a(Pb,"Parameter")});var BB={};Be(BB,{Request:()=>b_,createReuseportFd:()=>AE});var xB,b_,Lb,Mb,AE,RE=be(()=>{xB=require("os"),b_=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new Mb(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new Lb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},Lb=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},Mb=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,xB.platform)()!="win32"&&(AE=require("node-unix-socket").createReuseportFd)});var bE={};Be(bE,{parseHeaderValue:()=>Ub,start:()=>vte});async function Mte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Qp(e);let i=new mo;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==HB){let g=yE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new pc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=Ub(g);for(let E of R)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=Ub(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await It(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=no(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Su.ClientError(g,400)}if(e.authorize=!0,o===HB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return vB(yE);throw new Su.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Su.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Su.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,vb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=Ob(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=If(d.data,e,d)),d}else if(_=e.lastModified){Lte[0]=_;let g=String.fromCharCode(34,(vr[0]&63)+62,(vr[0]>>6)+(vr[1]<<2&63)+62,(vr[1]>>4)+(vr[2]<<4&63)+62,(vr[2]>>2)+62,(vr[3]&63)+62,(vr[3]>>6)+(vr[4]<<2&63)+62,(vr[4]>>4)+(vr[5]<<4&63)+62,(vr[5]>>2)+62,(vr[6]&63)+62,(vr[6]>>6)+(vr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),vb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(p.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(p.body=If(d,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(o){o.statusCode?o.statusCode===500?Pi.warn(o):Pi.info(o):Pi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=If(o.contentType?o:o.toString(),e,c),c}}function vte(e){vb=e,e.includeExpensiveRecordCountEstimates&&(b_.prototype.includeExpensiveRecordCountEstimates=!0),!kB&&(kB=!0,yE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Mte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{O_++;let s=new vn;FB||(FB=!0,A_(l=>{O_>0&&l.push({metric:"ws-connections",connections:O_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Pi.warn(l)});let o;t.on("message",a(function(u){o||(o=no(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);Dt(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{O_--,Yn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=yE.getMatch(l,"ws");if(Yn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Dt(p=>({count:p.count,total:O_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new pc(u.relativeURL),d=u.Resource;c=(await It(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let p=await oa(_.value,r);t.send(p),Dt(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(S=>t._socket.once("drain",S))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Pi.warn(l):Pi.info(l):Pi.error(l),t.close(Ute[l.statusCode]||1011,l.toString())}t.close()},e))}function Ub(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Pi,Su,vr,Lte,vb,HB,kB,yE,FB,O_,Ute,GB=be(()=>{eo();Ci();Pi=M(X()),Su=M(he());Ef();Kl();hc();y_();UB();Ef();RE();vr=new Uint8Array(8),Lte=new Float64Array(vr.buffer,0,1),vb={},HB="openapi";a(Mte,"http");O_=0;a(vte,"start");Ute={401:3e3,403:3003};a(Ub,"parseHeaderValue")});var xb=P((rwe,$B)=>{var{recordAction:OE,recordActionBinary:qB}=(Ci(),D(R_)),xte=require("fastify-plugin"),Bte=200;$B.exports=xte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),OE(o,"duration",u,d,f),qB(s.raw.statusCode<400,"success",u,d,f),qB(1,"response_"+s.raw.statusCode,u,d,f);let h=Bte;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{OE(performance.now()-c,"transfer",u,d,f),OE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,OE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),p=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",p?`${p}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var KB=P((nwe,VB)=>{var Hte=nt(),kte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VB.exports=function(e){return Hte.validateObject(e,kte)}});var NE=P((swe,YB)=>{"use strict";var Fte=(G(),D($)).OPERATIONS_ENUM,Bb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Fte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YB.exports=Bb});var I_={};Be(I_,{createTokens:()=>qte,getJWTRSAKeys:()=>DE,refreshOperationToken:()=>$te,validateOperationToken:()=>Fb,validateRefreshToken:()=>LE});async function DE(){if(wE)return wE;try{let e=N_.default.join(w_.default.getHdbBasePath(),sA),t=await IE.default.readFile(N_.default.join(e,Qd.JWT_PASSPHRASE_NAME),"utf8"),r=await IE.default.readFile(N_.default.join(e,Qd.JWT_PRIVATE_KEY_NAME),"utf8");return wE={publicKey:await IE.default.readFile(N_.default.join(e,Qd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},wE}catch(e){throw PE.default.error(e),new zs.ClientError(Au.NO_ENCRYPTION_KEYS,Tu.INTERNAL_SERVER_ERROR)}}async function qte(e){let t=(0,Hb.validateBySchema)(e,Di.default.object({username:Di.default.string().optional(),password:Di.default.string().optional(),role:Di.default.string().optional(),expires_in:Di.default.alternatives(Di.default.string(),Di.default.number()).optional()}));if(t)throw new zs.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,kb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw PE.default.error(d),new zs.ClientError(Au.INVALID_CREDENTIALS,Tu.UNAUTHORIZED)}if(!r)throw new zs.ClientError(Au.INVALID_CREDENTIALS,Tu.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await DE(),c=await Ru.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??JB,algorithm:CE,subject:"operation"}),l=await Ru.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Gte,algorithm:CE,subject:"refresh"}),u=iy(l,"sha256");if((await(0,WB.update)(new zB.default(jd,Fl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new zs.ClientError(Au.REFRESH_TOKEN_SAVE_FAILED,Tu.INTERNAL_SERVER_ERROR);return jB.default.signalUserChange(new QB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function $te(e){let t=(0,Hb.validateBySchema)(e,Di.default.object({refresh_token:Di.default.string().required()}).required());if(t)throw new zs.ClientError(t.message);let{refresh_token:r}=e;await LE(r);let n=await DE(),s=await Ru.default.decode(r);return{operation_token:await Ru.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:JB,algorithm:CE,subject:"operation"})}}async function Fb(e){return XB(e,"operation")}async function LE(e){return XB(e,"refresh")}async function XB(e,t){try{let r=await DE(),n=await Ru.default.verify(e,r.publicKey,{algorithms:CE,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,kb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!oy(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw PE.default.warn(r),r?.name==="TokenExpiredError"?new zs.ClientError(Au.TOKEN_EXPIRED,Tu.FORBIDDEN):new zs.ClientError(Au.INVALID_TOKEN,Tu.UNAUTHORIZED)}}var Ru,IE,N_,Di,Hb,zs,PE,kb,WB,zB,jB,QB,w_,Tu,Au,JB,Gte,CE,wE,yu=be(()=>{Ru=M(require("jsonwebtoken")),IE=M(require("fs-extra")),N_=M(require("node:path")),Di=M(require("joi")),Hb=M(nt());G();zs=M(he()),PE=M(X());Fm();kb=M(Gn()),WB=M(gn()),zB=M(NE()),jB=M(_o()),QB=M(Ks()),w_=M(ce()),{HTTP_STATUS_CODES:Tu,AUTHENTICATION_ERROR_MSGS:Au}=zs.hdb_errors;w_.default.initSync();JB=w_.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Gte=w_.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",CE="RS256";a(DE,"getJWTRSAKeys");a(qte,"createTokens");a($te,"refreshOperationToken");a(Fb,"validateOperationToken");a(LE,"validateRefreshToken");a(XB,"validateToken")});var Gb=P((lwe,tH)=>{"use strict";var Vte=KB(),bu=require("passport"),Kte=require("passport-local").Strategy,Yte=require("passport-http").BasicStrategy,Wte=require("util"),zte=Gn(),eH=Wte.callbackify(zte.findAndValidateUser),cwe=Dn(),jte=(G(),D($)),ZB=(yu(),D(I_));bu.use(new Kte(function(e,t,r){eH(e,t,r)}));bu.use(new Yte(function(e,t,r){eH(e,t,r)}));bu.serializeUser(function(e,t){t(null,e)});bu.deserializeUser(function(e,t){t(null,e)});function Qte(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":bu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===jte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):ZB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:bu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Qte,"authorize");function Jte(e,t){let r=Vte(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(Jte,"checkPermissions");tH.exports={authorize:Qte,checkPermissions:Jte}});var ME=P((dwe,rH)=>{"use strict";var Xte=Fn();rH.exports={writeTransaction:Zte};function Zte(e,t,r){return Xte.writeTransaction(e,t,r)}a(Zte,"writeTransaction")});var oH=P((hwe,iH)=>{"use strict";var ere=Vr(),tre=$s(),nH=X(),rre=gn(),_we=ME(),nre=require("clone"),$b=require("alasql"),sre=Lm(),sH=require("util"),ire=sH.promisify(tre.getTableSchema),ore=sH.promisify(ere.search),are=(G(),D($)),qb=oe();sre($b);iH.exports={update:lre};var cre="There was a problem performing this update. Please check the logs and try again.";async function lre({statement:e,hdb_user:t}){let r=await ire(e.table.databaseid,e.table.tableid),n=ure(e.columns);qb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=nre(s),c=qb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=$b.parse(l).statements[0],f=await ore(u),d=dre(n,f);return fre(o,d,t)}a(lre,"update");function ure(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$b.compile(`SELECT ${r.expression.toString()} AS [${are.FUNC_VAL}] FROM ?`)}),t}catch(t){throw nH.error(t),new Error(cre)}}a(ure,"createUpdateRecord");function dre(e,t){return qb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dre,"buildUpdateRecords");async function fre(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await rre.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){nH.error(`Error delete new_attributes from update response: ${i}`)}return s}a(fre,"updateRecords")});var cH=P((gwe,aH)=>{var _re=require("alasql"),hre=Vr(),pre=X(),mre=Fn(),Kb=require("util"),Vb=oe(),Ere=(G(),D($)),gre=$s(),mwe=ME(),Ewe=gn(),Sre="record",Tre="successfully deleted",Are=Kb.callbackify(Ore),Rre=Kb.promisify(hre.search),yre=Kb.promisify(gre.getTableSchema);aH.exports={convertDelete:Are};function bre(e){return`${e.deleted_hashes.length} ${Sre}${e.deleted_hashes.length===1?"":"s"} ${Tre}`}a(bre,"generateReturnMessage");async function Ore({statement:e,hdb_user:t}){let r=await yre(e.table.databaseid,e.table.tableid);Vb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Vb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=_re.parse(o).statements[0],l={operation:Ere.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Rre(c);let u=await mre.deleteRecords(l);return Vb.isEmptyOrZeroLength(u.message)&&(u.message=bre(u)),delete u.txn_time,u}catch(u){throw pre.error(u),u.hdb_code?u.message:u}}a(Ore,"convertDelete")});var _H=P((Twe,fH)=>{"use strict";var Nre=uo(),{hdb_errors:lH}=he(),{getDatabases:uH}=(Ue(),D(at));fH.exports={checkSchemaExists:dH,checkSchemaTableExists:wre,schema_describe:Nre};async function dH(e){if(!uH()[e])return lH.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(dH,"checkSchemaExists");async function wre(e,t){let r=await dH(e);if(r)return r;if(!uH()[e][t])return lH.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wre,"checkSchemaTableExists")});var Qb=P((Owe,OH)=>{"use strict";var{decode:Ire}=require("msgpackr"),{isMainThread:Rwe,parentPort:ywe,threadId:bwe}=require("worker_threads"),xE=Er(),Ou=Pt(),zb=(G(),D($)),Wr=X(),Wb=ce(),Cre=(G(),D($)),{onMessageByType:Pre}=st(),EH=lo(),{recordAction:hH,recordActionBinary:Dre}=(Ci(),D(R_)),{publishToStream:Lre}=xE,{ConsumerEvents:pH}=require("nats"),Mre=Vr(),{promisify:vre}=require("util"),{decodeBlobsWithWrites:Ure}=(fs(),D(fm)),gH=vre(setTimeout),BE=1e4,HE,UE,xre,Bre,SH,C_=new Map,Nu=new Map;OH.exports={initialize:TH,ingestConsumer:jb,setSubscription:Hre,setIgnoreOrigin:Gre,getDatabaseSubscriptions:Fre,updateConsumer:AH};async function TH(){Pre(zb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await AH(n)}),SH=!0,Wr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await xE.getNATSReferences();HE=e,UE=e.info.server_name,xre=t,Bre=r}a(TH,"initialize");async function AH(e){if(e.status==="start"){let{js:t,jsm:r}=await RH(e.node_domain_name);jb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=C_.get(e.stream_name+e.node_domain_name);t&&(Wr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),C_.set(e.stream_name+e.node_domain_name,"close")),Nu.get(e.node_domain_name)==="failed"&&Nu.set(e.node_domain_name,"close")}}a(AH,"updateConsumer");var kE=new Map;function Hre(e,t,r){let n=kE.get(e);n||kE.set(e,n=new Map),n.set(t,r),SH||TH().then(kre)}a(Hre,"setSubscription");async function kre(){let e=await Mre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ou.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await RH(r),!n))break;let{schema:o,table:c}=i,l=EH.createNatsTableStreamName(o,c);jb(l,n,s,r)}}}a(kre,"accessConsumers");async function RH(e){let t,r,n=1;for(;!r;)try{t=await HE.jetstream({domain:e}),r=await HE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Nu.get(e)==="close")break;Nu.set(e,"failed"),n%10===1&&Wr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<BE?n++*100:BE;await gH(i)}return{js:t,jsm:r}}a(RH,"connectToRemoteJS");function Fre(){return kE}a(Fre,"getDatabaseSubscriptions");var yH;function Gre(e){yH=e}a(Gre,"setIgnoreOrigin");var bH=100,mH=new Array(bH),vE=0;async function jb(e,t,r,n){let{connection:s}=await xE.getNATSReferences();HE=s,UE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,UE),Wr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Nu.get(n)==="close")break;o%10===1&&Wr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Wr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await xE.createConsumer(r,e,UE,new Date(Date.now()).toISOString()));let f=o++*100<BE?o++*100:BE;await gH(f)}let c=!1,l;for(;!c;){if(C_.get(e+n)==="close"||Nu.get(n)==="close"){C_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Wb.get(zb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),C_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===pH.ConsumerDeleted&&(await l.close(),c=!0),f.type===pH.HeartbeatsMissed){let d=f.data;Wr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Wr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await mH[vE],mH[vE]=qre(f).catch(d=>{Wr.error(d)}),++vE>=bH&&(vE=0)}catch(f){f.message==="consumer deleted"?(Wr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Wr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(jb,"ingestConsumer");async function qre(e){let t;await Ure(()=>{t=Ire(e.data)}),hH(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Wr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Wb.get(zb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ou.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ou.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ou.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!yH),Dre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ou.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;Wr.trace("processing message:",o,c,u,(f?"records: "+f.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Wr.trace(`messageProcessor nats msg id: ${e.headers.get(Ou.MSG_HEADERS.NATS_MSG_ID)}`);let p;f||(f=d);let S=new Promise(v=>p=v),{timestamp:g,user:R,node_name:E}=h||{},T=kE.get(c)?.get(u);if(!T)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=p,T.send(t);else if(f.length===1&&!l)T.send({type:Yb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:p,user:R,nodeName:E});else{let v=f.map((F,q)=>({type:Yb(o),value:F,expiresAt:_,id:d?.[q],table:u}));for(;l;)v.push({type:Yb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:v,table:u,timestamp:g,onCommit:p,user:R,nodeName:E})}Wb.get(Cre.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Lre(e.subject.split(".").slice(0,-1).join("."),EH.createNatsTableStreamName(c,u),e.headers,e.data),await S;let O=Date.now()-g;g&&hH(O,"replication-latency",e.subject,o,"ingest")}catch(o){Wr.error(o)}e.ack()}a(qre,"messageProcessor");function Yb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Yb,"convertOperation")});var Er=P((Lwe,qH)=>{"use strict";var Or=ce();Or.initSync();var $re=require("fs-extra"),Vre=require("semver"),L_=require("path"),{monotonicFactory:Kre}=require("ulidx"),wH=Kre(),Yre=require("util"),IH=require("child_process"),Wre=Yre.promisify(IH.exec),zre=IH.spawn,Ur=Pt(),je=(G(),D($)),{packageJson:jre,PACKAGE_ROOT:Qre}=Et(),FE=oe(),js=X(),GE=lo(),Jre=ME(),P_=wt(),{broadcast:Xre,onMessageByType:Zre,getWorkerIndex:ene}=st(),{isMainThread:CH}=require("worker_threads"),{Encoder:tne,decode:eO}=require("msgpackr"),PH=new tne,{isEmpty:Jc}=FE,DH=Gn(),wwe=48*36e11;CH&&Zre(je.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,Qc=void 0});var{connect:rne,StorageType:nne,RetentionPolicy:sne,AckPolicy:tO,DeliverPolicy:rO,DiscardPolicy:ine,NatsConnection:Iwe,JetStreamManager:Cwe,JetStreamClient:Pwe,StringCodec:Dwe,JSONCodec:one,createInbox:nO,headers:ane,ErrorCode:NH}=require("nats"),{recordAction:cne}=(Ci(),D(R_)),{encodeBlobsAsBuffers:lne}=(fs(),D(fm)),LH=one(),une="clustering",dne=jre.engines[Ur.NATS_SERVER_NAME],fne=L_.join(Qre,"dependencies"),Zb=L_.join(fne,`${process.platform}-${process.arch}`,Ur.NATS_BINARY_NAME),Jb,Xb,D_,zc,jc;qH.exports={runCommand:MH,checkNATSServerInstalled:_ne,createConnection:sO,getConnection:M_,getJetStreamManager:v_,getJetStream:UH,getNATSReferences:Li,getServerList:pne,createLocalStream:iO,listStreams:xH,deleteLocalStream:mne,getServerConfig:wu,listRemoteStreams:Ene,viewStream:gne,viewStreamIterator:Sne,publishToStream:Tne,request:yne,reloadNATS:oO,reloadNATSHub:bne,reloadNATSLeaf:One,extractServerName:Rne,requestErrorHandler:Nne,createLocalTableStream:FH,createTableStreams:Cne,purgeTableStream:GH,purgeSchemaTableStreams:Pne,getStreamInfo:Dne,updateLocalStreams:Mne,closeConnection:hne,getJsmServerName:qE,addNatsMsgHeader:BH,clearClientCache:vH,updateRemoteConsumer:wne,createConsumer:HH,updateConsumerIterator:Ine};async function MH(e,t=void 0){let{stdout:r,stderr:n}=await Wre(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
21
21
|
`,""));return r.replace(`
|
|
22
|
-
`,"")}a(DH,"runCommand");async function lne(){try{await kre.access(Xb)}catch{return!1}let e=await DH(`${Xb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Fre.eq(t,ane)}a(lne,"checkNATSServerInstalled");async function nO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await CH.getClusterUser();if(jc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}zs.trace("create nats connection called");let i=await Xre({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:br.get(ze.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:br.get(ze.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:br.get(ze.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),zs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&zs.error("Error with Nats client connection, connection closed",o),i===zr&&LH()}),i}a(nO,"createConnection");function LH(){zr=void 0,Wc=void 0,zc=void 0,Qc=void 0}a(LH,"clearClientCache");async function une(){zr&&(await zr.drain(),zr=void 0,Wc=void 0,zc=void 0,Qc=void 0)}a(une,"closeConnection");var zr,Qc;async function L_(){return Qc||(Qc=nO(br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await Qc),zr||Qc}a(L_,"getConnection");async function M_(){if(Wc)return Wc;jc(zr)&&await L_();let{domain:e}=Cu(ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wc=await zr.jetstreamManager({domain:e,timeout:6e4}),Wc}a(M_,"getJetStreamManager");async function MH(){if(zc)return zc;jc(zr)&&await L_();let{domain:e}=Cu(ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return zc=zr.jetstream({domain:e,timeout:6e4}),zc}a(MH,"getJetStream");async function Li(){let e=zr||await L_(),t=Wc||await M_(),r=zc||await MH();return{connection:e,jsm:t,js:r}}a(Li,"getNATSReferences");async function dne(e){let t=br.get(ze.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await CH.getClusterUser(),s=await nO(t,r,n),i=rO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=PH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await FE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(dne,"getServerList");async function sO(e,t){let{jsm:r}=await Li(),n=br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Zre.File,retention:ene.Limits,subjects:t,discard:tne.Old,max_msgs:s,max_bytes:i,max_age:n})}a(sO,"createLocalStream");async function vH(){let{jsm:e}=await Li(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(vH,"listStreams");async function fne(e){let{jsm:t}=await Li();await t.streams.delete(e)}a(fne,"deleteLocalStream");async function _ne(e){let{connection:t}=await Li(),r=[],n=rO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(PH.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(_ne,"listRemoteStreams");async function hne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=OH(),o={durable_name:i,ack_policy:eO.Explicit};t&&(o.deliver_policy=tO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=Zb(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(vr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(hne,"viewStream");async function*mne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=OH(),o={durable_name:i,ack_policy:eO.Explicit};t&&(o.deliver_policy=tO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=Zb(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(vr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(mne,"viewStreamIterator");async function pne(e,t,r,n){zs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=UH(n,r);let{js:s}=await Li(),i=await qE(),o=`${e}.${i}`,c=await ine(()=>n instanceof Uint8Array?n:IH.encode(n));try{zs.trace(`publishToStream publishing to subject: ${o}`),sne(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return BH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){zs.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await sO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(pne,"publishToStream");function UH(e,t){t===void 0&&(t=nne());let r=br.get(ze.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(vr.MSG_HEADERS.ORIGIN)&&r&&t.append(vr.MSG_HEADERS.ORIGIN,r),t}a(UH,"addNatsMsgHeader");function Cu(e){e=e.toLowerCase();let t=D_.join(br.get(ze.CONFIG_PARAMS.ROOTPATH),one);if(e===ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return jc(Jb)&&(Jb={port:C_.getConfigFromFile(ze.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:C_.getConfigFromFile(ze.CONFIG_PARAMS.CLUSTERING_NODENAME)+vr.SERVER_SUFFIX.HUB,config_file:vr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:D_.join(t,vr.PID_FILES.HUB),hdb_nats_path:t}),Jb;if(e===ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return jc(jb)&&(jb={port:C_.getConfigFromFile(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:C_.getConfigFromFile(ze.CONFIG_PARAMS.CLUSTERING_NODENAME)+vr.SERVER_SUFFIX.LEAF,config_file:vr.NATS_CONFIG_FILES.LEAF_SERVER,domain:C_.getConfigFromFile(ze.CONFIG_PARAMS.CLUSTERING_NODENAME)+vr.SERVER_SUFFIX.LEAF,pid_file_path:D_.join(t,vr.PID_FILES.LEAF),hdb_nats_path:t}),jb;zs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Cu,"getServerConfig");async function xH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:eO.Explicit,durable_name:r,deliver_policy:tO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(xH,"createConsumer");async function Ene(e,t,r){await e.consumers.delete(t,r)}a(Ene,"removeConsumer");function gne(e){return e.split(".")[1]}a(gne,"extractServerName");async function Sne(e,t,r=6e4,n=rO()){if(!FE.isObject(t))throw new Error("data param must be an object");let s=IH.encode(t),{connection:i}=await Li(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Zb(c.data)}a(Sne,"request");function iO(e){return new Promise(async(t,r)=>{let n=Vre(Xb,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(iO,"reloadNATS");async function Tne(){let{pid_file_path:e}=Cu(ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await iO(e)}a(Tne,"reloadNATSHub");async function Ane(){let{pid_file_path:e}=Cu(ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await iO(e)}a(Ane,"reloadNATSLeaf");function Rne(e,t,r){let n;switch(e.code){case bH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case bH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Rne,"requestErrorHandler");async function yne(e,t){let r=t+vr.SERVER_SUFFIX.LEAF,{connection:n}=await Li(),{jsm:s}=await Dne(r),{schema:i,table:o}=e,c=GE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await BH(async()=>{if(e.subscribe===!0)await xH(s,c,n.info.server_name,l);else try{await Ene(s,c,n.info.server_name)}catch(u){zs.trace(u)}})}a(yne,"updateRemoteConsumer");async function bne(e,t,r,n){let s=GE.createNatsTableStreamName(e,t),i=r+vr.SERVER_SUFFIX.LEAF,o={type:ze.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!wH&&jre()<br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Qb();await c(o)}await zre(o),n==="stop"&&await FE.async_set_timeout(1e3)}a(bne,"updateConsumerIterator");function BH(e){return Wre.writeTransaction(ze.SYSTEM_SCHEMA_NAME,ze.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(BH,"exclusiveLock");async function HH(e,t){let r=GE.createNatsTableStreamName(e,t),n=await qE(),s=Ine(e,t,n);await sO(r,[s])}a(HH,"createLocalTableStream");async function One(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await HH(n,s)}}a(One,"createTableStreams");async function kH(e,t,r=void 0){if(br.get(ze.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=GE.createNatsTableStreamName(e,t),{domain:s}=Cu(ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await L_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")zs.warn(n);else throw n}}a(kH,"purgeTableStream");async function Nne(e,t){if(br.get(ze.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await kH(e,t[r])}a(Nne,"purgeSchemaTableStreams");async function wne(e){return(await M_()).streams.info(e)}a(wne,"getStreamInfo");function Ine(e,t,r){return`${vr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Ine,"createSubjectName");async function qE(){if(P_)return P_;if(P_=(await M_())?.nc?.info?.server_name,P_===void 0)throw new Error("Unable to get jetstream manager server name");return P_}a(qE,"getJsmServerName");async function Cne(){let e=await M_(),t=await qE(),r=await vH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Pne(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");zs.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(Cne,"updateLocalStreams");function Pne(e){let{config:t}=e,r=!1,n=br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=br.get(ze.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Pne,"updateStreamLimits");async function Dne(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw zs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Dne,"connectToRemoteJS")});function oO(e){let t=e.get($E),r=t?(0,Pu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=et(),s=!1;r.nodeName=et();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:U_(e)??1,nodes:[]})})}i[n]=0,e.putSync($E,(0,Pu.pack)(r))}return r}function v_(e){return oO(e).remoteNameToId}function qH(e,t){let r=oO(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync($E,(0,Pu.pack)(r)),s}function VE(e,t){let r=oO(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync($E,(0,Pu.pack)(r))}return GH.trace?.("The remote node name map",e,n,s),s}var GH,Pu,$E,aO=ye(()=>{GH=M(pi());ms();Pu=require("msgpackr"),$E=Symbol.for("remote-ids");a(oO,"getIdMappingRecord");a(v_,"exportIdMapping");a(qH,"remoteToLocalNodeId");a(VE,"getIdOfRemoteNode")});var cO={};xe(cO,{commits_awaiting_replication:()=>Lu,getHDBNodeTable:()=>nr,getReplicationSharedStatus:()=>KE,iterateRoutes:()=>B_,shouldReplicateToNode:()=>x_,subscribeToNodeUpdates:()=>Mu});function nr(){return $H||($H=ft({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function KE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Mu(e){nr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;WH.debug?.("adding node",n,"on node",et()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==et()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of nr().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function x_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&nr().primaryStore.get(et())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Lne(){Mu(e=>{ha({},(t,r)=>{let n=e.name,s=VH.get(n);if(s||VH.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=KE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Lu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*B_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Du.default.get(B.REPLICATION_SECUREPORT)??(!Du.default.get(B.REPLICATION_PORT)&&Du.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||Du.default.get(B.REPLICATION_PORT)||Du.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){KH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates}}}var KH,YH,Du,WH,$H,VH,Lu,Jc=ye(()=>{Ue();ms();Wm();KH=require("worker_threads"),YH=M(pe()),Du=M(ce());k();WH=M(pi());server.nodes=[];a(nr,"getHDBNodeTable");a(KE,"getReplicationSharedStatus");a(Mu,"subscribeToNodeUpdates");a(x_,"shouldReplicateToNode");VH=new Map;$D((e,t,r)=>{if(r>server.nodes.length)throw new YH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Lu||(Lu=new Map,Lne());let n=Lu.get(e);return n||(n=[],Lu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Lne,"startSubscriptionToReplications");a(B_,"iterateRoutes")});var JH={};xe(JH,{connectedToNode:()=>Xc,disconnectedFromNode:()=>Uu,ensureNode:()=>go,requestClusterStatus:()=>jH,startOnMainThread:()=>uO});async function uO(e){let t=0,r=Xe();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){YE.set(i,U_(l.auditStore));break}}}vi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of B_(e))try{let c=!o.subscriptions;if(c){let u=et(),f=nr().primaryStore.get(u);if(f!==null){let d=e.url??ma();(f===void 0||f.url!==d||f.shard!==e.shard)&&await go(u,{name:u,url:d,shard:e.shard,replicates:!0})}}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Mu(s)});let n;function s(i,o=i?.name){let c=et()&&o===et()||ma()&&i?.url===ma();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of nr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(at.trace("Setting up node replication for",i),!i){for(let[d,h]of Mi){let _;for(let[m,{worker:S,nodes:g}]of h){let y=g[0];if(y&&y.name==o){_=!0;for(let[E,{worker:T}]of h)h.delete(E),at.warn("Node was deleted, unsubscribing from node",o,E,d),T?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){Mi.get(d).iterator.remove(),Mi.delete(d);return}}return}if(c)return;if(!i.url){at.info(`Node ${i.name} is missing url`);return}let l=Mi.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(at.info(`Added node ${i.name} at ${i.url} for process ${et()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of vu)if(i.url===h.url){vu.delete(d);break}vu.set(i.name,i)}let u=Xe();if(l||(l=new Map,Mi.set(i.url,l)),l.iterator=ha(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(at.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){at.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),m,S=[{replicateByDefault:h,...i}];YE.has(d)&&(S.push({replicateByDefault:h,name:et(),start_time:YE.get(d),end_time:Date.now(),replicates:!0}),YE.delete(d));let g=x_(i,d),y=vi.workers.filter(E=>E.name==="http");if(_?(m=_.worker,_.nodes=S):g&&(t=t%y.length,m=y[t++],l.set(d,{worker:m,nodes:S,url:i.url}),m?.on("exit",()=>{l.get(d)?.worker===m&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};m?m.postMessage(E):H_(E)},Mne);else{at.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],nr().primaryStore.get(et())?.replicates),nr().primaryStore.get(et())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};m?m.postMessage(E):zE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Uu=a(function(i){try{at.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(vu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){at.warn("Disconnected node not found in node map",i.name,o);return}let u=Mi.get(i.url),f=u?.get(i.database);if(!f){at.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=d.shard,_=(l+1)%c.length;for(;l!==_;){let m=c[_],S=vu.get(m);u=Mi.get(S.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==h){_=(_+1)%c.length;continue}let{worker:y,nodes:E}=g,T=!1;for(let N of f.nodes){if(E.some(x=>x.name===N.name)){at.info(`Disconnected node is already failing over to ${m} for ${i.database}`);continue}N.end_time<Date.now()||(E.push(N),T=!0)}if(f.nodes=[f.nodes[0]],!T){at.info(`Disconnected node ${i.name} has no nodes to fail over to ${m}`);return}at.info(`Failing over ${i.database} from ${i.name} to ${m}`),y?y.postMessage({type:"subscribe-to-node",database:i.database,nodes:E}):H_({database:i.database,nodes:E});return}at.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){at.error("Error failing over node",o)}},"disconnectedFromNode"),Xc=a(function(i){let o=Mi.get(i.url),c=o?.get(i.database);if(!c){at.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];c.nodes=[l];let u=!1;for(let f of Mi.values()){let d=f.get(i.database);if(!d||d==c)continue;let{worker:h,nodes:_,connected:m}=d;if(m===!1&&_[0].shard===l.shard)u=!0,c.nodes.push(_[0]);else{let S=_.filter(g=>g.name!==l.name);S.length<_.length&&(d.nodes=S,h.postMessage({type:"subscribe-to-node",database:i.database,nodes:_}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,vi.onMessageByType)("disconnected-from-node",Uu),(0,vi.onMessageByType)("connected-to-node",Xc),(0,vi.onMessageByType)("request-cluster-status",jH)}function jH(e,t){let r=[];for(let[n,s]of vu)try{let i=Mi.get(s.url);at.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.filter(_=>!(_.end_time<Date.now())).map(_=>_.name)});let c=(0,lO.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){at.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function go(e,t){let r=nr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new QH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){at.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(at.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!zH.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,lO.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}at.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var vi,WE,at,lO,zH,QH,Mne,Mi,Uu,Xc,vu,YE,k_=ye(()=>{Ue();vi=M(nt());ms();WE=require("worker_threads");Jc();at=M(X()),lO=require("lodash"),zH=M(ce());k();QH=require("crypto"),Mne=200,Mi=new Map,vu=new Map,YE=new Map;a(uO,"startOnMainThread");a(jH,"requestClusterStatus");WE.parentPort&&(Uu=a(e=>{WE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Xc=a(e=>{WE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,vi.onMessageByType)("subscribe-to-node",e=>{H_(e)}),(0,vi.onMessageByType)("unsubscribe-from-node",e=>{zE(e)}));a(go,"ensureNode")});var Xs=C(Tk=>{"use strict";var sr=require("path"),{watch:vne}=require("chokidar"),An=require("fs-extra"),xu=require("node-forge"),nk=require("net"),{generateKeyPair:fO,X509Certificate:So,createPrivateKey:sk}=require("crypto"),Une=require("util");fO=Une.promisify(fO);var Rt=xu.pki,js=require("joi"),{v4:ik}=require("uuid"),{validateBySchema:pO}=rt(),gt=X(),zn=ce(),ps=(k(),P($)),{CONFIG_PARAMS:el}=ps,Js=EA(),{ClientError:Ea}=pe(),QE=require("node:tls"),{relative:ok,join:xne}=require("node:path"),{CERT_PREFERENCE_APP:qwe,CERTIFICATE_VALUES:XH}=Js,Bne=cc(),_O=Nt(),{table:Hne,getDatabases:kne,databases:dO}=(Ue(),P(ot)),{getJWTRSAKeys:ZH}=(Ou(),P(w_));Object.assign(Tk,{generateKeys:SO,updateConfigCert:hk,createCsr:Yne,signCertificate:Wne,setCertTable:Bu,loadCertificates:dk,reviewSelfSignedCert:AO,createTLSSelector:pk,listCertificates:gk,addCertificate:Zne,removeCertificate:tse,createNatsCerts:jne,generateCertsKeys:Qne,getReplicationCert:G_,getReplicationCertAuth:Kne,renewSelfSigned:Jne,hostnamesFromCert:RO,getKey:rse});var{urlToNodeName:ak,getThisNodeUrl:Fne,getThisNodeName:JE,clearThisNodeName:Gne}=(ms(),P(Ta)),{readFileSync:qne,statSync:ck}=require("node:fs"),$we=ce(),{getTicketKeys:$ne,onMessageFromWorkers:Vne}=nt(),pa=X(),{isMainThread:lk}=require("worker_threads"),{TLSSocket:uk,createSecureContext:Vwe}=require("node:tls"),EO=3650,F_=["127.0.0.1","localhost","::1"],gO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Vne(async e=>{e.type===ps.ITC_EVENT_TYPES.RESTART&&(zn.initSync(!0),await AO())});var Ur;function Sa(){return Ur||(Ur=kne().system.hdb_certificate,Ur||(Ur=Hne({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__"}]}))),Ur}a(Sa,"getCertTable");async function G_(){let e=pk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(JE());if(!r)return;let n=new So(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(G_,"getReplicationCert");async function Kne(){Sa();let e=(await G_()).options.cert,r=new So(e).issuer.match(/CN=(.*)/)?.[1];return Ur.get(r)}a(Kne,"getReplicationCertAuth");var ek,ga=new Map;function dk(){if(ek)return;ek=!0;let e=[{configKey:el.TLS},{configKey:el.OPERATIONSAPI_TLS}];Sa();let t=sr.dirname(_O.getConfigFilePath()),r;for(let{configKey:n}of e){let s=_O.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&ok(xne(t,"keys"),o);c&&tk(o,l=>{ga.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&lk){let f;tk(u,d=>{if(XH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=mk(u),m=new So(_),S;try{S=Sk(m)}catch(T){logger.error("error extracting host name from certificate",T);return}if(S==null){logger.error("No host name found on certificate");return}if(m.checkIssued(new So(XH.cert)))return;let g=Ur.primaryStore.get(S),y=ck(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&y<=E){y<E&>.info(`Certificate ${S} at ${u} is older (${new Date(y)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=Ur.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:y,details:{issuer:m.issuer.replace(/\n/g," "),subject:m.subject.replace(/\n/g," "),subject_alt_name:m.subjectAltName,serial_number:m.serialNumber,valid_from:m.validFrom,valid_to:m.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(dk,"loadCertificates");function tk(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&lk&>.warn(`Reloading ${r}:`,i),n=c,t(mk(i)))}catch(c){gt.error(`Error loading ${r}:`,i,c)}},"loadFile");An.existsSync(e)?s(e,ck(e)):gt.error(`${r} file not found:`,e),vne(e,{persistent:!1}).on("change",s)}a(tk,"loadAndWatch");function hO(){let e=Fne();if(e==null){let t=F_[0];return gt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return ak(e)}a(hO,"getHost");function jE(){let e=JE();if(e==null){let t=F_[0];return gt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(jE,"getCommonName");async function Yne(){let e=await G_(),t=Rt.certificateFromPem(e.options.cert),r=Rt.privateKeyFromPem(e.options.key);gt.info("Creating CSR with cert named:",e.name);let n=Rt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:jE()},...gO];gt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:fk()}];return gt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),xu.pki.certificationRequestToPem(n)}a(Yne,"createCsr");function fk(){let e=F_.includes(jE())?F_:[...F_,jE()];return e.includes(hO())||e.push(hO()),[{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=>nk.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(fk,"certExtensions");async function Wne(e){let t={},r=sr.join(zn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Sa();for await(let f of Ur.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(ga.has(f.private_key_name)){n=ga.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await An.exists(sr.join(r,f.private_key_name))){n=An.readFile(sr.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await mO();s=f.ca,n=f.private_key}n=Rt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Rt.certificateFromPem(s.certificate);gt.info("Signing CSR with cert named",s.name);let o=Rt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return gt.error(f),new Error("Error verifying CSR: "+f.message)}let c=xu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+EO),gt.info("sign cert setting validity:",c.validity),gt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),gt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;gt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,xu.md.sha256.create()),t.certificate=Rt.certificateToPem(c)}else gt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Wne,"signCertificate");async function zne(e,t){await Bu({name:JE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Bu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Rt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(zne,"createCertificateTable");async function Bu(e){let t=new So(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Sa(),await Ur.patch(e)}a(Bu,"setCertTable");async function SO(){let e=await fO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:Rt.publicKeyFromPem(e.publicKey),private_key:Rt.privateKeyFromPem(e.privateKey)}}a(SO,"generateKeys");async function TO(e,t,r){let n=Rt.createCertificate();if(!t){let o=await G_();t=Rt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+EO);let i=[{name:"commonName",value:jE()},...gO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(fk()),n.sign(e,xu.md.sha256.create()),Rt.certificateToPem(n)}a(TO,"generateCertificates");async function mO(){let e=await gk(),t;for(let r of e){if(!r.is_authority)continue;let n=await Ek(r.private_key_name);if(r.private_key_name&&n&&new So(r.certificate).checkPrivateKey(sk(n))){gt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;gt.trace("No CA found with matching private key")}a(mO,"getCertAuthority");async function _k(e,t,r=!0){let n=Rt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+EO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${zn.get(el.REPLICATION_HOSTNAME)??ak(zn.get(el.REPLICATION_URL))??ik().split("-")[0]}`},...gO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,xu.md.sha256.create());let o=sr.join(zn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),c=sr.join(o,Js.PRIVATEKEY_PEM_NAME);return r&&await An.writeFile(c,Rt.privateKeyToPem(e)),n}a(_k,"generateCertAuthority");async function Qne(){let{private_key:e,public_key:t}=await SO(),r=await _k(e,t),n=await TO(e,t,r);await zne(n,r),hk()}a(Qne,"generateCertsKeys");async function jne(){let e=await TO(Rt.privateKeyFromPem(Js.CERTIFICATE_VALUES.key),void 0,Rt.certificateFromPem(Js.CERTIFICATE_VALUES.cert)),t=sr.join(zn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=sr.join(t,Js.NATS_CERTIFICATE_PEM_NAME);await An.exists(r)||await An.writeFile(r,e);let n=sr.join(t,Js.NATS_CA_PEM_NAME);await An.exists(n)||await An.writeFile(n,Js.CERTIFICATE_VALUES.cert)}a(jne,"createNatsCerts");async function Jne(){Sa();for await(let e of Ur.search([{attribute:"is_self_signed",value:!0}]))await Ur.delete(e.name);await AO()}a(Jne,"renewSelfSigned");async function AO(){Gne(),await dk(),Sa();let e=await mO();if(!e){gt.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:Rt.privateKeyFromPem(An.readFileSync(u)),keyPath:u}}catch(f){return gt.warn(`Failed to parse private key from ${u}:`,f.message),{key:null,keyPath:u}}},"tryToParseKey"),n=zn.get(el.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let f=r(u.privateKey);if(s=f.key,i=f.keyPath,f.key)break}}else{let u=zn.get(el.TLS_PRIVATEKEY),f=r(u);s=f.key,i=f.keyPath}let o=sr.join(zn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),c=ok(o,i);s||(gt.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{private_key:s}=await SO(),An.existsSync(sr.join(o,Js.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${ik().split("-")[0]}.pem`),await An.writeFile(sr.join(o,c),Rt.privateKeyToPem(s)));let l=await _k(s,Rt.setRsaPublicKey(s.n,s.e),!1);await Bu({name:l.subject.getField("CN").value,uses:["https"],certificate:Rt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await G_()){let r=JE();gt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await mO();let n=Rt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await TO(Rt.privateKeyFromPem(e.private_key),s,n);await Bu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(AO,"reviewSelfSignedCert");function hk(){let e=Bne(Object.keys(ps.CONFIG_PARAM_MAP),!0),t=sr.join(zn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=sr.join(t,Js.PRIVATEKEY_PEM_NAME),n=sr.join(t,Js.NATS_CERTIFICATE_PEM_NAME),s=sr.join(t,Js.NATS_CA_PEM_NAME),i=ps.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),_O.updateConfigValue(void 0,void 0,o,!1,!0)}a(hk,"updateConfigCert");function mk(e){return e.startsWith("-----BEGIN")?e:qne(e,"utf8")}a(mk,"readPEM");var rk=QE.createSecureContext;QE.createSecureContext=function(e){if(!e.cert||!e.key)return rk(e);let t={...e};delete t.key,delete t.cert;let r=rk(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Xne=uk.prototype._init;uk.prototype._init=function(e,t){Xne.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Zc=new Map;function pk(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Zc.clear();let f=0;for await(let d of dO.system.hdb_certificate.search([])){let h=d.certificate,_=new So(h);d.is_authority&&(_.asString=h,Zc.set(_.subject,h))}for await(let d of dO.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let m=await Ek(d.private_key_name),S=d.certificate,g=new So(S);if(Zc.has(g.issuer)&&(S+=`
|
|
23
|
-
`+Zc.get(g.issuer)),!m||!S)throw new Error("Missing private key or certificate for secure server");let y={ciphers:d.ciphers,ticketKeys:$ne(),availableCAs:Zc,ca:t&&Array.from(Zc.values()),cert:S,key:m,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(y.sessionIdContext=o.sessionIdContext);let E=QE.createSecureContext(y);E.name=d.name,E.options=y,E.quality=_,E.certificateAuthorities=Array.from(Zc),E.certStart=S.toString().slice(0,100);let T=d.hostnames??RO(g);Array.isArray(T)||(T=[T]);let N;for(let x of T)if(x){x[0]==="*"&&(s=!0,x=x.slice(1)),x===hO()&&(_+=2),nk.isIP(x)&&(N=!0);let H=r.get(x)?.quality??0;_>H&&r.set(x,E)}else pa.error("No hostname found for certificate at",QE.certificate);pa.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",T,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){pa.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),dO.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){pa.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return pa.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?pa.debug("No certificate found to match",o,"using the default certificate"):pa.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):pa.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(pk,"createTLSSelector");async function Ek(e){let t=ga.get(e);return!t&&e?await An.readFile(sr.join(zn.get(el.ROOTPATH),ps.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(Ek,"getPrivateKeyByName");async function gk(){Sa();let e=[];for await(let t of Ur.search([]))e.push(t);return e}a(gk,"listCertificates");async function Zne(e){let t=pO(e,js.object({name:js.string().required(),certificate:js.string().required(),is_authority:js.boolean().required(),private_key:js.string(),hosts:js.array(),uses:js.array()}));if(t)throw new Ea(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new So(n),c=!1,l=!1,u;for(let[_,m]of ga)!s&&!c&&o.checkPrivateKey(sk(m))&&(c=!0,u=_),s&&s===m&&(l=!0,u=_);if(!i&&!s&&!c)throw new Ea("A suitable private key was not found for this certificate");let f;if(!r){try{f=Sk(o)}catch(_){gt.error(_)}if(f==null)throw new Ea("Error extracting certificate common name, please provide a name parameter")}let d=ese(r??f);s&&!c&&!l&&(await An.writeFile(sr.join(zn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,d+".pem"),s),ga.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),e.ciphers&&(h.ciphers=e.ciphers),await Bu(h),"Successfully added certificate: "+d}a(Zne,"addCertificate");function ese(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(ese,"sanitizeName");async function tse(e){let t=pO(e,js.object({name:js.string().required()}));if(t)throw new Ea(t.message);let{name:r}=e;Sa();let n=await Ur.get(r);if(!n)throw new Ea(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Ur.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(gt.info("Removing private key named",s),await An.remove(sr.join(zn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,s)))}return await Ur.delete(r),"Successfully removed "+r}a(tse,"removeCertificate");function Sk(e){let t=e.subject.match(/CN=(.*)/)?.[1];return t||RO(e)[0]}a(Sk,"getPrimaryHostName");function RO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=certObj.subject.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(RO,"hostnamesFromCert");async function rse(e){if(e.bypass_auth!==!0)throw new Ea("Unauthorized","401");let t=pO(e,js.object({name:js.string().required()}));if(t)throw new Ea(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await ZH()).privateKey;if(r===".jwtPublic")return(await ZH()).publicKey;if(ga.get(r))return ga.get(e.name);throw new Ea("Key not found")}a(rse,"getKey")});var Fk={};xe(Fk,{CONFIRMATION_STATUS_POSITION:()=>kk,NodeReplicationConnection:()=>$_,OPERATION_REQUEST:()=>NO,RECEIVED_TIME_POSITION:()=>IO,RECEIVED_VERSION_POSITION:()=>wO,SENDING_TIME_POSITION:()=>q_,createWebSocket:()=>sg,database_subscriptions:()=>Ra,replicateOverWS:()=>V_,table_update_listeners:()=>PO});async function sg(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=et(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!bO){let l=(0,Uk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),bO=u.secureContexts}if(i=bO.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,Bk.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=xk.createSecureContext({...i.options,ca:[...rl,...i.options.availableCAs.values()]})),new Mk.WebSocket(e,"harperdb-replication-v1",c)}function V_(e,t,r){let n=t.port||t.securePort,s=tl.pid%1e3+"-"+vk.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||Ra,d,h,_=!1,m=t.subscription;m?.then&&m.then(A=>m=A);let S=t.tables||u&&Xe()[u];if(!r){le.error?.("No authorization provided"),sn(1008,"Unauthorized");return}let g=new Map,y=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let T,N,x,H,q,Q,te,se=5e3,W,ne=0,ue=0,ie=0,Re=Lk.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,Ee=new Map,Ae=[],vt=0,ut;if(t.url){let A=a(()=>{q&&ue===e._socket?.bytesRead&&ie===e._socket?.bytesWritten?e.terminate():(q=performance.now(),e.ping(),ue=e._socket?.bytesRead,ie=e._socket?.bytesWritten)},"send_ping");x=setInterval(A,Pk).unref(),A()}else Cn();e._socket?.setMaxListeners(200);function Cn(){clearTimeout(H),ue=e._socket?.bytesRead,ie=e._socket?.bytesWritten,H=setTimeout(()=>{ue===e._socket?.bytesRead&&ie===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},Pk*2).unref()}a(Cn,"resetPingTimer");function nn(){return h||(h=KE(d,u,E)),h}a(nn,"getSharedStatus"),u&&nc(u);let Nr,Fd,tc=[],VT=[],KT,Ut=[],Gd=[],qd=[],YT=150,gm=25,$d=0,Ce=0,Vd=!1,Wi,wr,Pn,rc;e.on("message",A=>{ne=performance.now();try{let R=A.dataView=new nl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let v=(0,Ze.decode)(A),[I,L,G]=v;switch(I){case Rk:{if(L){if(E){if(E!==L){le.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${L}, disconnecting`),e.send((0,Ze.encode)([Hu])),sn(1008,"Node name mismatch");return}}else if(E=L,t.connection?.tentativeNode){let ae=t.connection.tentativeNode;ae.name=E,t.connection.tentativeNode=null,go(E,ae)}if(t.connection&&(t.connection.nodeName=E),le.debug?.(s,"received node name:",E,"db:",u),!u)try{nc(u=v[2]),u==="system"&&(Nr=ha(t,(ae,V)=>{Fl(V)&&Gl(V)}),e.on("close",()=>{Nr?.remove()}))}catch(ae){le.warn?.(s,"Error setting database",ae),e.send((0,Ze.encode)([Hu])),sn(1008,ae.message);return}Kd()}break}case Ik:{le.debug?.(s,"Received table definitions for",L.map(ae=>ae.table));for(let ae of L){let V=v[2];ae.database=V;let J;Fl(V)&&(V==="system"?Ye[V]?.[ae.table]||(J=D(ae,Ye[V]?.[ae.table])):J=D(ae,Ye[V]?.[ae.table]),d||(d=J?.auditStore),S||(S=Xe()?.[V]))}break}case Hu:sn();break;case NO:try{let ae=r?.replicates||r?.subscribers||r?.name;server.operation(L,{user:r},!ae).then(V=>{Array.isArray(V)&&(V={results:V}),V.requestId=L.requestId,e.send((0,Ze.encode)([ZE,V]))},V=>{e.send((0,Ze.encode)([ZE,{requestId:L.requestId,error:V instanceof Error?V.toString():V}]))})}catch(ae){e.send((0,Ze.encode)([ZE,{requestId:L.requestId,error:ae instanceof Error?ae.toString():ae}]))}break;case ZE:let{resolve:z,reject:j}=g.get(L.requestId);L.error?j(new Error(L.error)):z(L),g.delete(L.requestId);break;case yO:let F=v[3];S||(u?le.error?.(s,"No tables found for",u):le.error?.(s,"Database name never received"));let De=S[F];De=D({table:F,database:u,attributes:L.attributes,schemaDefined:L.schemaDefined},De),tc[G]={name:F,decoder:new Ze.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:L.typedStructs,structures:L.structures}),getEntry(ae){return De.primaryStore.getEntry(ae)},rootStore:De.primaryStore.rootStore};break;case yk:rc=d?qH(L,d):new Map,KT=v[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${KT}`);break;case bk:let he=G;qd[he]=L;break;case wk:nn()[kk]=L,le.trace?.(s,"received and broadcasting committed update",L),nn().buffer.notify();break;case Nk:T=L,m.send({type:"end_txn",localTime:T,remoteNodeIds:y});break;case eg:{let ae=v[1],{fileId:V,size:J,finished:de,error:me}=ae,fe=Ee.get(V);le.debug?.("Received blob",V,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",v[2].length,"finished",de),fe||(fe=new OO.PassThrough,fe.expectedSize=J,Ee.set(V,fe)),fe.lastChunk=Date.now();try{de?(me?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+me))):fe.end(v[2]),fe.connectedToBlob&&Ee.delete(V)):fe.write(v[2])}catch(ve){le.error?.(`Error receiving blob for ${fe.recordId} from ${E} and streaming to storage`,ve),Ee.delete(V)}break}case Ok:{let ae=L,V;try{let J=v[3],de=VT[G]||(VT[G]=S[v[4]]);if(!de)return le.warn?.("Unknown table id trying to handle record request",G);let me=de.primaryStore.getBinaryFast(Symbol.for("structures")),fe=me.length;if(fe!==Ce){Ce=fe;let Ie=(0,Ze.decode)(me);e.send((0,Ze.encode)([yO,{typedStructs:Ie.typed,structures:Ie.named},G,de.tableName]))}let ve=de.primaryStore.getBinaryFast(J);if(ve){let Ie=de.primaryStore.decoder.decode(ve,{valueAsBuffer:!0}),$e=Ie.value;Ie[Rc]&mn&&($e=Buffer.from($e),yf(()=>de.primaryStore.decoder.decode(ve),Ir,de.primaryStore.rootStore)),V=(0,Ze.encode)([XE,ae,{value:$e,expiresAt:Ie.expiresAt,version:Ie.version,residencyId:Ie.residencyId,nodeId:Ie.nodeId,user:Ie.user}])}else V=(0,Ze.encode)([XE,ae])}catch(J){V=(0,Ze.encode)([XE,ae,{error:J.message}])}e.send(V);break}case XE:{let{resolve:ae,reject:V,tableId:J,key:de}=g.get(v[1]),me=v[2];if(me?.error)V(new Error(me.error));else if(me){let fe;dp(()=>{let ve=tc[J].decoder.decode(me.value);me.value=ve,me.key=de,ae(me)||fe&&setTimeout(()=>fe.forEach(cp),6e4).unref()},ve=>{let Ie=kl(ve,de);return fe||(fe=[]),fe.push(Ie),Ie})}else ae();g.delete(v[1]);break}case Ak:{Pn=L;let ae,V,J=!1;if(m){if(u!==m.databaseName&&!m.then){le.error?.("Subscription request for wrong database",u,m.databaseName);return}}else m=f.get(u);if(le.debug?.(s,"received subscription request for",u,"at",Pn),!m){let Oe;m=new Promise(xt=>{le.debug?.("Waiting for subscription to database "+u),Oe=xt}),m.ready=Oe,Ra.set(u,m)}if(r.name)V=nr().subscribe(r.name),V.then(async Oe=>{ae=Oe;for await(let xt of ae){let bt=xt.value;if(!(bt?.replicates===!0||bt?.replicates?.receives||bt?.subscriptions?.some(Ar=>(Ar.database||Ar.schema)===u&&Ar.publish!==!1))){J=!0,e.send((0,Ze.encode)([Hu])),sn(1008,`Unauthorized database subscription to ${u}`);return}}},Oe=>{le.error?.(s,"Error subscribing to HDB nodes",Oe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,Ze.encode)([Hu])),sn(1008,`Unauthorized database subscription to ${u}`);return}if(wr&&(le.debug?.(s,"stopping previous subscription",u),wr.emit("close")),Pn.length===0)return;let de=Pn[0],me=a(Oe=>{if(Oe&&(de.replicateByDefault?!de.tables.includes(Oe.tableName):de.tables.includes(Oe.tableName)))return{table:Oe}},"tableToTableEntry"),fe={txnTime:0},ve,Ie,$e=1/0,Fr,Dn=a((Oe,xt)=>{if(Oe.type==="end_txn"){fe.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),zi(9),zi(ng),p(Fr=xt),li()),i=c,fe.txnTime=0;return}let bt=Oe.nodeId,Ar=Oe.tableId,Tt=Ie[Ar];if(!Tt&&(Tt=Ie[Ar]=me(m.tableById[Ar]),!Tt))return le.debug?.("Not subscribed to table",Ar);let os=Tt.table,Bt=os.primaryStore,Ms=Bt.encoder;(Oe.extendedType&Tp||!Ms.typedStructs)&&(Ms._mergeStructures(Ms.getStructures()),Ms.typedStructs&&(Ms.lastTypedStructuresLength=Ms.typedStructs.length));let Tm=ve[bt];if(!(Tm&&Tm.startTime<xt&&(!Tm.endTime||Tm.endTime>xt)))return rg&&le.trace?.(s,"skipping replication update",Oe.recordId,"to:",E,"from:",bt,"subscribed:",ve),tP();rg&&le.trace?.(s,"sending replication update",Oe.recordId,"to:",E,"from:",bt,"subscribed:",ve);let WT=Oe.version;fe.txnTime!==WT&&(fe.txnTime&&(rg&&le.trace?.(s,"new txn time, sending queued txn",fe.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),li()),fe.txnTime=WT,i=c,p(WT));let oc=Oe.residencyId,zT=Yo(oc,os),Am;if(zT&&!zT.includes(E)){let vs=Yo(Oe.previousResidencyId,os);if(vs&&!vs.includes(E)&&(Oe.type==="put"||Oe.type==="patch")||os.getResidencyById)return tP();let Yd=Oe.recordId;le.trace?.(s,"sending invalidation",Yd,E,"from",bt);let JT=0;oc&&(JT|=Oc),Oe.previousResidencyId&&(JT|=Nc);let XT,Rm=null;for(let rP in os.indices){if(!Rm){if(XT=Oe.getValue(Bt,!0),!XT)break;Rm={}}Rm[rP]=XT[rP]}Am=yc(Oe.version,Ar,Yd,null,bt,Oe.user,Oe.type==="put"||Oe.type==="patch"?"invalidate":Oe.type,Ms.encode(Rm),JT,oc,Oe.previousResidencyId,Oe.expiresAt)}function tP(){return le.trace?.(s,"skipping audit record",Oe.recordId),Q||(Q=setTimeout(()=>{Q=null,(Fr||0)+Ck/2<$e&&(rg&&le.trace?.(s,"sending skipped sequence update",$e),e.send((0,Ze.encode)([Nk,$e])))},Ck).unref()),new Promise(setImmediate)}a(tP,"skipAuditRecord");let QT=Ms.typedStructs,jT=Ms.structures;if((QT?.length!=Tt.typed_length||jT?.length!=Tt.structure_length)&&(Tt.typed_length=QT?.length,Tt.structure_length=jT.length,le.debug?.(s,"send table struct",Tt.typed_length,Tt.structure_length),Tt.sentName||(Tt.sentName=!0),e.send((0,Ze.encode)([yO,{typedStructs:QT,structures:jT,attributes:os.attributes,schemaDefined:os.schemaDefined},Ar,Tt.table.tableName]))),oc&&!Gd[oc]&&(e.send((0,Ze.encode)([bk,zT,oc])),Gd[oc]=!0),Am)zi(Am.length),Y(Am);else{let vs=Oe.encoded;Oe.extendedType&mn&&yf(()=>Oe.getValue(Bt),Ir,Bt.rootStore);let Yd=vs[0]===66?8:0;zi(vs.length-Yd),Y(vs,Yd),le.trace?.("wrote record",Oe.recordId,"length:",vs.length)}return e._socket.writableNeedDrain?new Promise(vs=>{le.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",vs)}):vt>gm?new Promise(vs=>{ut=vs}):new Promise(setImmediate)},"sendAuditRecord"),li=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i)):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");wr=new CO.EventEmitter,wr.once("close",()=>{J=!0,ae?.end()});for(let{startTime:Oe}of Pn)Oe<$e&&($e=Oe);(V||Promise.resolve()).then(async()=>{m=await m,d=m.auditStore,Ie=m.tableById.map(me),ve=[];for(let{name:xt,startTime:bt,endTime:Ar}of Pn){let Tt=VE(xt,d);le.debug?.("subscription to",xt,"using local id",Tt,"starting",bt),ve[Tt]={startTime:bt,endTime:Ar}}Gl(u),Nr||(Nr=sl(xt=>{xt.databaseName===u&&Gl(u)}),Fd=K_(xt=>{xt===u&&(e.send((0,Ze.encode)([Hu])),sn())}),e.on("close",()=>{Nr?.remove(),Fd?.remove()})),e.send((0,Ze.encode)([yk,v_(m.auditStore),Pn.map(({name:xt})=>xt)]));let Oe=!0;do{isFinite($e)||(le.warn?.("Invalid sequence id "+$e),sn(1008,"Invalid sequence id"+$e));let xt;if(Oe&&!J&&(Oe=!1,$e===0)){let bt=$e,Ar=ig(d);for(let Tt in S){if(!me(Tt))continue;let os=S[Tt];le.warn?.(`Fully copying ${Tt} table to ${E}`);for(let Bt of os.primaryStore.getRange({snapshot:!1,versions:!0})){if(J)return;if(Bt.localTime>=$e){le.trace?.(s,"Copying record from",u,Tt,Bt.key,Bt.localTime),bt=Math.max(Bt.localTime,bt),xt=!0,nn()[q_]=1;let Ms=yc(Bt.version,os.tableId,Bt.key,null,Ar,null,"put",yf(()=>os.primaryStore.encoder.encode(Bt.value),Ir),Bt.metadataFlags&-256,Bt.residencyId,null,Bt.expiresAt);await Dn({recordId:Bt.key,tableId:os.tableId,type:"put",getValue(){return Bt.value},encoded:Ms,version:Bt.version,residencyId:Bt.residencyId,nodeId:Ar,extendedType:Bt.metadataFlags},Bt.localTime)}}}xt&&Dn({type:"end_txn"},$e),nn()[q_]=0,$e=bt}for(let{key:bt,value:Ar}of d.getRange({start:$e||1,exclusiveStart:!0,snapshot:!1})){if(J)return;let Tt=It(Ar);le.debug?.("sending audit record",new Date(bt)),nn()[q_]=bt,$e=bt,await Dn(Tt,bt),wr.startTime=bt,xt=!0}xt&&Dn({type:"end_txn"},$e),nn()[q_]=0,await Gk(d)}while(!J)}).catch(Oe=>{le.error?.(s,"Error handling subscription to node",Oe),sn(1008,"Error handling subscription to node")});break}}return}R.position=8;let w=!0,b,U;do{nn();let v=R.readInt();if(v===9&&R.getUint8(R.position)==ng){R.position++,T=U=R.readFloat64(),h[wO]=T,h[IO]=Date.now(),le.trace?.("received remote sequence update",T,u);break}let I=R.position,L=It(A,I,I+v),G=tc[L.tableId];G||le.error?.(`No table found with an id of ${L.tableId}`);let z;L.residencyId&&(z=qd[L.residencyId],le.trace?.(s,"received residency list",z,L.type,L.recordId));try{let j=L.recordId;dp(()=>{b={table:G.name,id:j,type:L.type,nodeId:rc.get(L.nodeId),residencyList:z,timestamp:L.version,value:L.getValue(G),user:L.user,beginTxn:w,expiresAt:L.expiresAt}},F=>kl(F,j))}catch(j){throw j.message+="typed structures for current decoder"+JSON.stringify(G.decoder.typedStructs),j}w=!1,le.trace?.(s,"received replication message",L.type,"id",b.id,"version",new Date(L.version),"nodeId",b.nodeId),h[wO]=L.version,h[IO]=Date.now(),m.send(b),R.position=I+v}while(R.position<A.byteLength);$d++,rr(A.byteLength,"bytes-received",`${E}.${u}.${b?.table||"unknown_table"}`,"replication","ingest"),$d>YT&&!Vd&&(Vd=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),m.send({type:"end_txn",localTime:T,remoteNodeIds:y,async onCommit(){if(b){let v=Date.now()-b.timestamp;rr(v,"replication-latency",E+"."+u+"."+b.table,b.type,"ingest")}$d--,Vd&&(Vd=!1,e.resume(),le.debug?.(`Replication resuming ${E}`)),Ae.length>0&&await Promise.all(Ae),le.trace?.("All blobs finished"),!N&&U&&(le.trace?.(s,"queuing confirmation of a commit at",U),setTimeout(()=>{e.send((0,Ze.encode)([wk,N])),le.trace?.(s,"sent confirmation of a commit at",N),N=null},sse)),N=U,le.debug?.("last sequence committed",new Date(U),u)}})}catch(R){le.error?.(s,"Error handling incoming replication message",R)}}),e.on("ping",Cn),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-q,Xc({name:E,database:u,url:t.url,latency:t.connection.latency})),q=null}),e.on("close",(A,R)=>{clearInterval(x),clearTimeout(H),clearInterval(te),wr&&wr.emit("close"),Wi&&Wi.end();for(let[w,{reject:b}]of g)b(new Error(`Connection closed ${R?.toString()} ${A}`));le.debug?.(s,"closed",A,R?.toString())});function sn(A,R){e.isFinished=!0,e.close(A,R),t.connection?.emit("finished")}a(sn,"close");async function Ir(A){let R=lp(A);try{let w;vt++;for await(let b of A.stream())w&&(le.debug?.("Sending blob chunk",R,"length",w.length),e.send((0,Ze.encode)([eg,{fileId:R,size:A.size},w]))),w=b,e._socket.writableNeedDrain&&(le.debug?.("draining",R),await new Promise(U=>e._socket.once("drain",U)),le.debug?.("drained",R));le.debug?.("Sending final blob chunk",R,"length",w.length),e.send((0,Ze.encode)([eg,{fileId:R,size:A.size,finished:!0},w]))}catch(w){le.debug?.("Error sending blob",w),e.send((0,Ze.encode)([eg,{fileId:R,finished:!0,error:w.toString()},Buffer.alloc(0)]))}finally{vt--,vt<gm&&ut?.()}}a(Ir,"sendBlobs");function kl(A,R){let w=lp(A),b=Ee.get(w);le.debug?.("Received transaction with blob",w,"has stream",!!b,"ended",!!b?.writableEnded),b?b.writableEnded&&Ee.delete(w):(b=new OO.PassThrough,Ee.set(w,b)),b.connectedToBlob=!0,b.lastChunk=Date.now(),b.recordId=R,A.size===void 0&&b.expectedSize&&(A.size=b.expectedSize);let U=createBlob(b,A),v=U.save({primaryStore:m.auditStore});return v&&(v.blobId=w,Ae.push(v),v.finally(()=>{le.debug?.(`Finished receiving blob stream ${w}`),Ae.splice(Ae.indexOf(v),1)})),U}a(kl,"receiveBlobs");function Kd(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Kd)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;d||(d=m?.auditStore);try{for(let b of m?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let U of b.value.nodes||[])U.lastTxnTime>(A.get(U.id)??0)&&A.set(U.id,U.lastTxnTime)}catch(b){if(!b.message.includes("Can not re"))throw b}let R=t.connection?.nodeSubscriptions?.[0];y=[];let w=t.connection?.nodeSubscriptions.map((b,U)=>{let v=[],{replicateByDefault:I}=b;if(b.subscriptions){for(let j of b.subscriptions)if(j.subscribe&&(j.schema||j.database)===u){let F=j.table;S?.[F]?.replicate!==!1&&v.push(F)}I=!1}else for(let j in S)(I?S[j].replicate===!1:S[j].replicate)&&v.push(j);let L=d&&VE(b.name,d),G=m?.dbisDB?.get([Symbol.for("seq"),L])??1,z=Math.max(G?.seqId??1,(typeof b.start_time=="string"?new Date(b.start_time).getTime():b.start_time)??1);if(le.debug?.("Starting time recorded in db",b.name,L,u,G?.seqId,"start time:",z,new Date(z)),R!==b){let j=d&&VE(R.name,d),F=m?.dbisDB?.get([Symbol.for("seq"),j])??1;for(let De of F?.nodes||[])De.name===b.name&&(z=De.seqId,le.debug?.("Using sequence id from proxy node",R.name,z))}if(L===void 0?le.warn("Starting subscription request from node",b,"but no node id found"):y.push(L),A.get(L)>z&&(z=A.get(L),le.debug?.("Updating start time from more recent txn recorded",R.name,z)),z===1&&tg)try{new URL(tg).hostname===b.name&&E===b.name?(le.warn?.(`Requesting full copy of database ${u} from ${tg}`),z=0):z=Date.now()-6e4}catch(j){le.error?.("Error parsing leader URL",tg,j)}return le.trace?.(s,"defining subscription request",b.name,u,new Date(z)),{name:b.name,replicateByDefault:I,tables:v,startTime:z,endTime:b.end_time}});if(w)if(le.debug?.(s,"sending subscription request",w,m?.dbisDB?.path),clearTimeout(W),w.length>0)e.send((0,Ze.encode)([Ak,w]));else{let b=a(()=>{let U=performance.now();W=setTimeout(()=>{ne<=U?sn(1008,"Connection has no subscriptions and is no longer used"):b()},se).unref()},"schedule_close");b()}}a(Kd,"sendSubscriptionRequestUpdate");function Yo(A,R){if(!A)return;let w=Ut[A];return w||(w=R.getResidencyRecord(A),Ut[A]=w),w}a(Yo,"getResidence");function Fl(A){return!(Aa&&Aa!="*"&&!Aa[A]&&!Aa.includes?.(A)&&!Aa.some?.(R=>R.name===A))}a(Fl,"checkDatabaseAccess");function nc(A){if(m=m||f.get(A),!Fl(A))throw new Error(`Access to database "${A}" is not permitted`);m||le.warn?.(`No database named "${A}" was declared and registered`),d=m?.auditStore,S||(S=Xe()?.[A]);let R=et();if(R===E)throw R?new Error("Should not connect to self",R):new Error("Node name not defined");return sc(R,A),!0}a(nc,"setDatabase");function sc(A,R){let w=Xe()?.[R],b=[];for(let U in w){let v=w[U];b.push({table:U,schemaDefined:v.schemaDefined,attributes:v.attributes.map(I=>({name:I.name,type:I.type,isPrimaryKey:I.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",R),e.send((0,Ze.encode)([Rk,A,R,b]))}a(sc,"sendNodeDBName");function Gl(A){let R=Xe()?.[A],w=[];for(let b in R){if(Pn&&!Pn.some(v=>v.replicateByDefault?!v.tables.includes(b):v.tables.includes(b)))continue;let U=R[b];w.push({table:b,schemaDefined:U.schemaDefined,attributes:U.attributes.map(v=>({name:v.name,type:v.type,isPrimaryKey:v.isPrimaryKey}))})}e.send((0,Ze.encode)([Ik,w,A]))}a(Gl,"sendDBSchema"),te=setInterval(()=>{for(let[A,R]of Ee)R.lastChunk+Re<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${R.recordId??"unknown"} from ${E}`),Ee.delete(A),R.end())},Re).unref();let Sm=1,ic=[];return{end(){Wi&&Wi.end(),wr&&wr.emit("close")},getRecord(A){let R=Sm++;return new Promise((w,b)=>{let U=[Ok,R,A.table.tableId,A.id];ic[A.table.tableId]||(U.push(A.table.tableName),ic[A.table.tableId]=!0),e.send((0,Ze.encode)(U)),ne=performance.now(),g.set(R,{tableId:A.table.tableId,key:A.id,resolve(v){let{table:I,entry:L}=A;if(w(v),v)return I._recordRelocate(L,v)},reject:b})})},sendOperation(A){let R=Sm++;return A.requestId=R,e.send((0,Ze.encode)([NO,A])),new Promise((w,b)=>{g.set(R,{resolve:w,reject:b})})}};function zi(A){O(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function Y(A,R=0,w=A.length){let b=w-R;O(b),A.copy(o,c,R,w),c+=b}function p(A){O(8),l.setFloat64(c,A),c+=8}function O(A){if(A+16>o.length-c){let R=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(R,0,i,c),c=c-i,i=0,o=R,l=new DataView(o.buffer,0,o.length)}}function D(A,R){let w=A.database??"data";if(w!=="data"&&!Ye[w]){le.warn?.("Database not found",A.database);return}R||(R={});let b=R.schemaDefined,U=!1,v=A.schemaDefined,I=R.attributes||[];for(let L=0;L<A.attributes?.length;L++){let G=A.attributes[L],z=I.find(j=>j.name===G.name);(!z||z.type!==G.type)&&(b?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${G.name}: ${G.type}' from '${E}' does not match local attribute ${z?"'"+z.name+": "+z.type+"'":"which does not exist"}`):(U=!0,v||(G.indexed=!0),z?I[I.indexOf(z)]=G:I.push(G)))}return U?(le.debug?.("(Re)creating",A),ft({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:I,...R})):R}}var Lk,Ze,Mk,vk,le,CO,Uk,xk,tl,Bk,OO,Hk,Ak,Rk,yk,Hu,bk,yO,Ok,XE,NO,ZE,Nk,wk,Ik,eg,kk,wO,IO,q_,nse,tg,PO,Ra,rg,Ck,sse,Pk,bO,Dk,$_,DO=ye(()=>{Ue();io();aO();LO();ms();Lk=M(ce());k();su();Ze=require("msgpackr"),Mk=require("ws"),vk=require("worker_threads"),le=M(pi());k_();CO=require("events"),Uk=M(Xs()),xk=M(require("node:tls"));Jc();tl=M(require("node:process")),Bk=require("node:net");Ci();fs();OO=require("node:stream"),Hk=M(require("minimist")),Ak=129,Rk=140,yk=141,Hu=142,bk=130,yO=132,Ok=133,XE=134,NO=136,ZE=137,Nk=143,wk=144,Ik=145,eg=146,kk=0,wO=1,IO=2,q_=3,nse=(0,Hk.default)(tl.argv),tg=nse.HDB_LEADER_URL??tl.env.HDB_LEADER_URL,PO=new Map,Ra=new Map,rg=!0,Ck=300,sse=2,Pk=3e4;a(sg,"createWebSocket");Dk=500,$_=class extends CO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Qs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=Dk;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await sg(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${tl.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=Dk,Xc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=V_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?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 ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(Uu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();le.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(V_,"replicateOverWS")});var Ta={};xe(Ta,{clearThisNodeName:()=>fse,disableReplication:()=>cse,enabled_databases:()=>Aa,forEachReplicatedDatabase:()=>ha,getThisNodeId:()=>ig,getThisNodeName:()=>et,getThisNodeUrl:()=>ma,hostnameToUrl:()=>lg,lastTimeInAuditStore:()=>U_,monitorNodeCAs:()=>Qk,replicateOperation:()=>hse,replication_certificate_authorities:()=>rl,sendOperationToNode:()=>W_,servers:()=>ose,setReplicator:()=>Jk,start:()=>ase,startOnMainThread:()=>uO,subscribeToNode:()=>H_,unsubscribeFromNode:()=>zE,urlToNodeName:()=>Qs});function ase(e){if(e.port||(e.port=Es.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Es.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!et())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of B_(e))t.set(Qs(s.url),s);lse(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ke.ws(async(s,i,o,c)=>{if(i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,o);await o,s._socket.unref(),V_(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&ir.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ke.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!s.authorized&&s._nodeRequest.socket.authorizationError&&ir.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let o=nr().primaryStore;if(s.authorized&&s.peerCertificate.subject){let c=s.peerCertificate.subject,l=c&&(o.get(c.CN)||t.get(c.CN));if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){ir.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else ir.warn(`No node found for certificate common name ${c.CN}, available nodes are ${Array.from(o.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=o.get(s.ip)||t.get(s.ip);c?s.user=c:ir.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...o.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=a(()=>{let o=new Set(s.secureContexts.values());s.defaultContext&&o.add(s.defaultContext);for(let c of o)try{let l=Array.from(rl);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=cg.createSecureContext(u)}catch(l){ir.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}Qk(()=>{for(let s of n)s()})}function Qk(e){let t=0;Mu(r=>{r?.ca&&(rl.add(r.ca),rl.size!==t&&(t=rl.size,e?.()))})}function cse(e=!0){zk=e}function lse(e){zk||(Xe(),Aa=e.databases,ha(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ra;for(let[s,i]of Y_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];Jk(r,s,e),PO.get(s)?.forEach(i=>i(s))}}))}function Jk(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 jk extends qr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ra,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(ir.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Un,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=use(h,jk.subscription,e);_?.isConnected&&!u.has(_)&&h!==Ke.hostname&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Yk.ServerError("No connection to any other nodes are available",502);let d={requestId:ise++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;ir.warn("Error in load from node",ag,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Xk(e,t,r,n,s){let i=Y_.get(e);i||Y_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new $_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function use(e,t,r){let n=qk.get(e)?.get(r);if(n)return n;let s=nr().primaryStore.get(e);return s?.url&&(n=Xk(s.url,t,r,e,s.authorization),qk.set(e,Y_.get(s.url))),n}async function W_(e,t,r){r||(r={}),r.serverName=e.name;let n=await sg(e.url,r),s=V_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{ir.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function H_(e){try{Wk.isMainThread&&ir.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ra.get(e.database);if(!t){let n;t=new Promise(s=>{ir.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ra.set(e.database,t)}let r=Xk(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>x_(n,e.database)),e.replicateByDefault)}catch(t){ir.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function zE({name:e,url:t,database:r}){ir.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(nr().primaryStore.getRange({})));let n=Y_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function dse(){if(MO!==void 0)return MO;let e=Es.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Es.default.get(B.TLS_CERTIFICATE);if(e)return MO=new Vk.X509Certificate((0,Kk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function et(){return ag||(ag=Es.default.get("replication_hostname")??Qs(Es.default.get("replication_url"))??dse()??$k("operationsapi_network_secureport")??$k("operationsapi_network_port")??"127.0.0.1")}function fse(){ag=void 0}function $k(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function og(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function ig(e){return v_(e)?.[et()]}function ma(){let e=Es.default.get("replication_url");return e||lg(et())}function lg(e){let t=og("replication_port");if(t)return`ws://${e}:${t}`;if(t=og("replication_secureport"),t)return`wss://${e}:${t}`;if(t=og("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=og("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Qs(e){if(e)return new URL(e).hostname}function ha(e,t){for(let n of Object.getOwnPropertyNames(Ye))r(n);return K_(n=>{r(n)}),sl((n,s)=>{r(n.databaseName)});function r(n){let s=Ye[n];ir.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):_se(n)&&t(s,n,!1)}a(r,"forDatabase")}function _se(e){let t=Ye[e];for(let r in t)if(t[r].replicate)return!0}function U_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function hse(e){let t={message:""};if(e.replicated){e.replicated=!1,ir.trace?.("Replicating operation",e.operation,"to nodes",Ke.nodes.map(n=>n.name));let r=await Promise.allSettled(Ke.nodes.map(n=>W_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ke.nodes[s]?.name,i})}return t}var Es,ir,Vk,Kk,cg,Yk,Wk,zk,ise,ose,rl,Aa,Y_,qk,MO,ag,ms=ye(()=>{Ue();ra();Wl();DO();Pr();Es=M(ce()),ir=M(X()),Vk=require("crypto"),Kk=require("fs");k_();Jc();k();aO();cg=M(require("node:tls")),Yk=M(pe()),Wk=require("worker_threads"),ise=1,ose=[],rl=Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(cg.rootCertificates):new Set;a(ase,"start");a(Qk,"monitorNodeCAs");a(cse,"disableReplication");a(lse,"assignReplicationSource");a(Jk,"setReplicator");Y_=new Map;a(Xk,"getConnection");qk=new Map;a(use,"getConnectionByName");a(W_,"sendOperationToNode");a(H_,"subscribeToNode");a(zE,"unsubscribeFromNode");a(dse,"getCommonNameFromCert");a(et,"getThisNodeName");a(fse,"clearThisNodeName");Object.defineProperty(Ke,"hostname",{get(){return et()}});a($k,"getHostFromListeningPort");a(og,"getPortFromListeningPort");a(ig,"getThisNodeId");Ke.replication={getThisNodeId:ig,exportIdMapping:v_};a(ma,"getThisNodeUrl");a(lg,"hostnameToUrl");a(Qs,"urlToNodeName");a(ha,"forEachReplicatedDatabase");a(_se,"hasExplicitlyReplicatedTable");a(U_,"lastTimeInAuditStore");a(hse,"replicateOperation")});var hg=C((pIe,nF)=>{"use strict";var ku=dH(),{validateBySchema:z_}=rt(),{common_validators:Fu,schema_regex:vO}=Ri(),or=require("joi"),mse=X(),pse=require("uuid").v4,fg=ho(),Gu=(k(),P($)),Ese=require("util"),ya=Gn(),{handleHDBError:To,hdb_errors:gse,ClientError:Q_}=pe(),{HDB_ERROR_MSGS:ug,HTTP_STATUS_CODES:Ao}=gse,{SchemaEventMsg:_g}=Vs(),Zk=pr(),{getDatabases:Sse}=(Ue(),P(ot)),{transformReq:qu}=oe(),{replicateOperation:eF}=(ms(),P(Ta)),dg=or.string().min(1).max(Fu.schema_length.maximum).pattern(vO).messages({"string.pattern.base":"{:#label} "+Fu.schema_format.message}),Tse=or.string().min(1).max(Fu.schema_length.maximum).pattern(vO).messages({"string.pattern.base":"{:#label} "+Fu.schema_format.message}).required(),Ase=or.string().min(1).max(Fu.schema_length.maximum).pattern(vO).messages({"string.pattern.base":"{:#label} "+Fu.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();nF.exports={createSchema:Rse,createSchemaStructure:tF,createTable:yse,createTableStructure:rF,createAttribute:Ise,dropSchema:bse,dropTable:Ose,dropAttribute:Nse,getBackup:Cse};async function Rse(e){let t=await tF(e);return fg.signalSchemaChange(new _g(process.pid,e.operation,e.schema)),t}a(Rse,"createSchema");async function tF(e){let t=z_(e,or.object({database:dg,schema:dg}));if(t)throw new Q_(t.message);if(qu(e),!await ku.checkSchemaExists(e.schema))throw To(new Error,ug.SCHEMA_EXISTS_ERR(e.schema),Ao.BAD_REQUEST,Gu.LOG_LEVELS.ERROR,ug.SCHEMA_EXISTS_ERR(e.schema),!0);return await ya.createSchema(e),`database '${e.schema}' successfully created`}a(tF,"createSchemaStructure");async function yse(e){return qu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await rF(e)}a(yse,"createTable");async function rF(e){let t=z_(e,or.object({database:dg,schema:dg,table:Tse,residence:or.array().items(or.string().min(1)).optional(),hash_attribute:Ase}));if(t)throw new Q_(t.message);if(!await ku.checkSchemaTableExists(e.schema,e.table))throw To(new Error,ug.TABLE_EXISTS_ERR(e.schema,e.table),Ao.BAD_REQUEST,Gu.LOG_LEVELS.ERROR,ug.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:pse(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ya.createTable(n,e);else throw To(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ao.BAD_REQUEST);else await ya.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(rF,"createTableStructure");async function bse(e){let t=z_(e,or.object({database:or.string(),schema:or.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Q_(t.message);qu(e);let r=await ku.checkSchemaExists(e.schema);if(r)throw To(new Error,r,Ao.NOT_FOUND,Gu.LOG_LEVELS.ERROR,r,!0);let n=await ku.schema_describe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ya.dropSchema(e),fg.signalSchemaChange(new _g(process.pid,e.operation,e.schema)),await Zk.purgeSchemaTableStreams(e.schema,s);let i=await eF(e);return i.message=`successfully deleted '${e.schema}'`,i}a(bse,"dropSchema");async function Ose(e){let t=z_(e,or.object({database:or.string(),schema:or.string(),table:or.string().required()}));if(t)throw new Q_(t.message);qu(e);let r=await ku.checkSchemaTableExists(e.schema,e.table);if(r)throw To(new Error,r,Ao.NOT_FOUND,Gu.LOG_LEVELS.ERROR,r,!0);await ya.dropTable(e),await Zk.purgeTableStream(e.schema,e.table);let n=await eF(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Ose,"dropTable");async function Nse(e){let t=z_(e,or.object({database:or.string(),schema:or.string(),table:or.string().required(),attribute:or.string().required()}));if(t)throw new Q_(t.message);qu(e);let r=await ku.checkSchemaTableExists(e.schema,e.table);if(r)throw To(new Error,r,Ao.NOT_FOUND,Gu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw To(new Error,"You cannot drop a hash attribute",Ao.BAD_REQUEST,void 0,void 0,!0);if(Gu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw To(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ao.BAD_REQUEST,void 0,void 0,!0);try{return await ya.dropAttribute(e),wse(e),fg.signalSchemaChange(new _g(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw mse.error(`Got an error deleting attribute ${Ese.inspect(e)}.`),n}}a(Nse,"dropAttribute");function wse(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(wse,"dropAttributeFromGlobal");async function Ise(e){qu(e);let t=Sse()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw To(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Ao.BAD_REQUEST,void 0,void 0,!0);return await ya.createAttribute(e),fg.signalSchemaChange(new _g(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Ise,"createAttribute");function Cse(e){return ya.getBackup(e)}a(Cse,"getBackup")});var iF=C((gIe,sF)=>{"use strict";var{OPERATIONS_ENUM:Pse}=(k(),P($)),UO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Pse.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};sF.exports=UO});var xO=C((AIe,uF)=>{"use strict";var Dse=Gn(),TIe=iF(),mg=oe(),pg=(k(),P($)),Lse=ce(),{handleHDBError:oF,hdb_errors:Mse}=pe(),{HDB_ERROR_MSGS:aF,HTTP_STATUS_CODES:cF}=Mse,vse=Object.values(pg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),lF="To use this operation audit log must be enabled in harperdb-config.yaml";uF.exports=Use;async function Use(e){if(mg.isEmpty(e.schema))throw new Error(aF.SCHEMA_REQUIRED_ERR);if(mg.isEmpty(e.table))throw new Error(aF.TABLE_REQUIRED_ERR);if(!Lse.get(pg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw oF(new Error,lF,cF.BAD_REQUEST,pg.LOG_LEVELS.ERROR,lF,!0);let t=mg.checkSchemaTableExist(e.schema,e.table);if(t)throw oF(new Error,t,cF.NOT_FOUND,pg.LOG_LEVELS.ERROR,t,!0);if(!mg.isEmpty(e.search_type)&&vse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Dse.readAuditLog(e)}a(Use,"readAuditLog")});var fF=C((yIe,dF)=>{"use strict";var{OPERATIONS_ENUM:xse}=(k(),P($)),BO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=xse.GET_BACKUP,this.schema=t,this.table=r}};dF.exports=BO});var mF=C((wIe,hF)=>{"use strict";var Bse=Gn(),OIe=fF(),HO=oe(),Hse=(k(),P($)),NIe=ce(),{handleHDBError:kse,hdb_errors:Fse}=pe(),{HDB_ERROR_MSGS:_F,HTTP_STATUS_CODES:Gse}=Fse;hF.exports=qse;async function qse(e){if(HO.isEmpty(e.schema))throw new Error(_F.SCHEMA_REQUIRED_ERR);if(HO.isEmpty(e.table))throw new Error(_F.TABLE_REQUIRED_ERR);let t=HO.checkSchemaTableExist(e.schema,e.table);if(t)throw kse(new Error,t,Gse.NOT_FOUND,Hse.LOG_LEVELS.ERROR,t,!0);return await Bse.getBackup(read_audit_log_object)}a(qse,"getBackup")});var SF=C((CIe,gF)=>{"use strict";var $se=ce(),ba=require("joi"),Vse=rt(),pF=require("moment"),Kse=require("fs-extra"),kO=require("path"),Yse=require("lodash"),j_=(k(),P($)),{LOG_LEVELS:il}=(k(),P($)),Wse="YYYY-MM-DD hh:mm:ss",zse=kO.resolve(__dirname,"../logs");gF.exports=function(e){return Vse.validateBySchema(e,Qse)};var Qse=ba.object({from:ba.custom(EF),until:ba.custom(EF),level:ba.valid(il.NOTIFY,il.FATAL,il.ERROR,il.WARN,il.INFO,il.DEBUG,il.TRACE),order:ba.valid("asc","desc"),limit:ba.number().min(1),start:ba.number().min(0),log_name:ba.custom(jse)});function EF(e,t){if(pF(e,pF.ISO_8601).format(Wse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(EF,"validateDatetime");function jse(e,t){if(Yse.invert(j_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=$se.get(j_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?j_.LOG_NAMES.HDB:e,i=s===j_.LOG_NAMES.INSTALL?kO.join(zse,j_.LOG_NAMES.INSTALL):kO.join(n,s);return Kse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(jse,"validateReadLogPath")});var GO=C((DIe,AF)=>{"use strict";var Eg=(k(),P($)),Jse=X(),Xse=ce(),Zse=SF(),FO=require("path"),TF=require("fs-extra"),{once:eie}=require("events"),{handleHDBError:tie,hdb_errors:rie}=pe(),{PACKAGE_ROOT:nie}=pt(),sie=FO.join(nie,"logs"),iie=1e3,oie=200;AF.exports=aie;async function aie(e){let t=Zse(e);if(t)throw tie(t,t.message,rie.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Xse.get(Eg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Eg.LOG_NAMES.HDB:e.log_name,s=n===Eg.LOG_NAMES.INSTALL?FO.join(sie,Eg.LOG_NAMES.INSTALL):FO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?iie:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,m=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(TF.statSync(s).size-(m+5)*oie,0));let g=TF.createReadStream(s,{start:S});g.on("error",H=>{Jse.error(H)});let y=0,E=[],T="",N;g.on("data",H=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=T+H;let Q=0,te;for(;(te=q.exec(H))&&!g.destroyed;){N&&(N.message=H.slice(Q,te.index),x(N));let[se,W,ne]=te,ue=ne.split("] ["),ie=ue[0],Re=ue[1];ue.splice(0,2),N={timestamp:W,thread:ie,level:Re,tags:ue,message:""},Q=te.index+se.length}T=H.slice(Q)}),g.on("end",H=>{g.destroyed||N&&(N.message=T.trim(),x(N))}),g.resume();function x(H){let q,Q,te;switch(!0){case(i&&c&&u):q=new Date(H.timestamp),Q=new Date(l),te=new Date(f),H.level===o&&q>=Q&&q<=te&&y<_?y++:H.level===o&&q>=Q&&q<=te&&(Oa(H,h,E),y++,y===m&&g.destroy());break;case(i&&c):q=new Date(H.timestamp),Q=new Date(l),H.level===o&&q>=Q&&y<_?y++:H.level===o&&q>=Q&&(Oa(H,h,E),y++,y===m&&g.destroy());break;case(i&&u):q=new Date(H.timestamp),te=new Date(f),H.level===o&&q<=te&&y<_?y++:H.level===o&&q<=te&&(Oa(H,h,E),y++,y===m&&g.destroy());break;case(c&&u):q=new Date(H.timestamp),Q=new Date(l),te=new Date(f),q>=Q&&q<=te&&y<_?y++:q>=Q&&q<=te&&(Oa(H,h,E),y++,y===m&&g.destroy());break;case i:H.level===o&&y<_?y++:H.level===o&&(Oa(H,h,E),y++,y===m&&g.destroy());break;case c:q=new Date(H.timestamp),Q=new Date(l),q>=Q&&y<_?y++:q>=Q&&y>=_&&(Oa(H,h,E),y++,y===m&&g.destroy());break;case u:q=new Date(H.timestamp),te=new Date(f),q<=te&&y<_?y++:q<=te&&y>=_&&(Oa(H,h,E),y++,y===m&&g.destroy());break;default:y<_?y++:(Oa(H,h,E),y++,y===m&&g.destroy())}}return a(x,"onLogMessage"),await eie(g,"close"),E}a(aie,"readLog");function Oa(e,t,r){t==="desc"?cie(e,r):t==="asc"?lie(e,r):r.push(e)}a(Oa,"pushLineToResult");function cie(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(cie,"insertDescending");function lie(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(lie,"insertAscending")});var gg=C((BIe,OF)=>{"use strict";var qO=require("joi"),{string:$u,boolean:RF,date:uie}=qO.types(),die=rt(),{validateSchemaExists:MIe,validateTableExists:vIe,validateSchemaName:UIe}=Ri(),fie=(k(),P($)),_ie=Ct(),yF=ce();yF.initSync();var xIe=$u.invalid(yF.get(fie.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(_ie.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),bF={operation:$u.valid("add_node","update_node","set_node_replication"),node_name:$u.optional(),subscriptions:qO.array().items({table:$u.optional(),schema:$u.optional(),database:$u.optional(),subscribe:RF.required(),publish:RF.required().custom(mie),start_time:uie.iso()})};function hie(e){return die.validateBySchema(e,qO.object(bF))}a(hie,"addUpdateNodeValidator");function mie(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(mie,"checkForFalsy");OF.exports={addUpdateNodeValidator:hie,validation_schema:bF}});var Vu=C((kIe,NF)=>{"use strict";var $O=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},VO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};NF.exports={Node:$O,NodeSubscription:VO}});var IF=C((GIe,wF)=>{"use strict";var pie=(k(),P($)).OPERATIONS_ENUM,KO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=pie.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wF.exports=KO});var J_=C(($Ie,CF)=>{"use strict";var YO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},WO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};CF.exports={RemotePayloadObject:YO,RemotePayloadSubscription:WO}});var DF=C((KIe,PF)=>{"use strict";var zO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};PF.exports=zO});var MF=C((JIe,LF)=>{"use strict";var Eie=DF(),WIe=Ht(),zIe=_t(),gie=X(),{getSchemaPath:QIe,getTransactionAuditStorePath:jIe}=Et(),{getDatabases:Sie}=(Ue(),P(ot));LF.exports=Tie;async function Tie(e){let t=new Eie;try{let r=Sie()[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){gie.warn(`unable to stat table dbi due to ${r}`)}return t}a(Tie,"lmdbGetTableSize")});var UF=C((ZIe,vF)=>{"use strict";var QO=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};vF.exports=QO});var Yu=C((iCe,kF)=>{"use strict";var Aie=require("fs-extra"),Rie=require("path"),Qr=require("systeminformation"),Na=X(),xF=pr(),tCe=Ct(),Ku=(k(),P($)),yie=MF(),bie=fo(),{getThreadInfo:BF}=nt(),X_=ce();X_.initSync();var Oie=UF(),{openEnvironment:rCe}=_t(),{getSchemaPath:nCe}=Et(),{database:sCe,databases:jO}=(Ue(),P(ot)),Sg;kF.exports={getHDBProcessInfo:eN,getNetworkInfo:rN,getDiskInfo:tN,getMemoryInfo:ZO,getCPUInfo:XO,getTimeInfo:JO,getSystemInformation:nN,systemInformation:Nie,getTableSize:sN,getMetrics:iN};function JO(){return Qr.time()}a(JO,"getTimeInfo");async function XO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await Qr.cpu();f.cpu_speed=await Qr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:m,raw_currentload_system:S,raw_currentload_user:g,cpus:y,...E}=await Qr.currentLoad();return E.cpus=[],y.forEach(T=>{let{raw_load:N,raw_load_idle:x,raw_load_irq:H,raw_load_nice:q,raw_load_system:Q,raw_load_user:te,...se}=T;E.cpus.push(se)}),f.current_load=E,f}catch(e){return Na.error(`error in getCPUInfo: ${e}`),{}}}a(XO,"getCPUInfo");async function ZO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Qr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Na.error(`error in getMemoryInfo: ${e}`),{}}}a(ZO,"getMemoryInfo");async function eN(){let e={core:[],clustering:[]};try{let t=await Qr.processes(),r;try{r=Number.parseInt(await Aie.readFile(Rie.join(X_.get(Ku.CONFIG_PARAMS.ROOTPATH),Ku.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ku.NODE_ERROR_CODES.ENOENT)Na.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 Na.error(`error in getHDBProcessInfo: ${t}`),e}}a(eN,"getHDBProcessInfo");async function tN(){let e={};try{if(!X_.get(Ku.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Qr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Qr.fsStats();return e.read_write=u,e.size=await Qr.fsSize(),e}catch(t){return Na.error(`error in getDiskInfo: ${t}`),e}}a(tN,"getDiskInfo");async function rN(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return X_.get(Ku.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Qr.networkInterfaceDefault(),e.latency=await Qr.inetChecksite("google.com"),(await Qr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await Qr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Na.error(`error in getNetworkInfo: ${t}`),e}}a(rN,"getNetworkInfo");async function nN(){if(Sg!==void 0)return Sg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Qr.osInfo();e=c;let l=await Qr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Sg=e,Sg}catch(t){return Na.error(`error in getSystemInformation: ${t}`),e}}a(nN,"getSystemInformation");async function sN(){let e=[],t=await bie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await yie(n));return e}a(sN,"getTableSize");async function iN(){let e={};for(let t in jO){let r=e[t]={},n=r.tables={};for(let s in jO[t])try{let i=jO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Na.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(iN,"getMetrics");async function HF(){if(X_.get(Ku.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await xF.getNATSReferences(),t=await xF.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(HF,"getNatsStreamInfo");async function Nie(e){let t=new Oie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await nN(),t.time=JO(),t.cpu=await XO(),t.memory=await ZO(),t.disk=await tN(),t.network=await rN(),t.harperdb_processes=await eN(),t.table_size=await sN(),t.metrics=await iN(),t.threads=await BF(),t.replication=await HF(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await nN();break;case"time":t.time=JO();break;case"cpu":t.cpu=await XO();break;case"memory":t.memory=await ZO();break;case"disk":t.disk=await tN();break;case"network":t.network=await rN();break;case"harperdb_processes":t.harperdb_processes=await eN();break;case"table_size":t.table_size=await sN();break;case"database_metrics":case"metrics":t.metrics=await iN();break;case"threads":t.threads=await BF();break;case"replication":t.replication=await HF();break;default:break}return t}a(Nie,"systemInformation")});var Ro=C((uCe,$F)=>{"use strict";var wie=gn(),oN=oe(),Iie=require("util"),ol=(k(),P($)),FF=ce();FF.initSync();var Cie=Fb(),GF=Vr(),{Node:aCe,NodeSubscription:cCe}=Vu(),Pie=mu(),Die=IF(),{RemotePayloadObject:Lie,RemotePayloadSubscription:Mie}=J_(),{handleHDBError:vie,hdb_errors:Uie}=pe(),{HTTP_STATUS_CODES:xie,HDB_ERROR_MSGS:Bie}=Uie,Hie=Ks(),kie=Yu(),{packageJson:Fie}=pt(),{getDatabases:Gie}=(Ue(),P(ot)),lCe=Iie.promisify(Cie.authorize),qie=GF.searchByHash,$ie=GF.searchByValue;$F.exports={isEmpty:Vie,getNodeRecord:Kie,upsertNodeRecord:Yie,buildNodePayloads:Wie,checkClusteringEnabled:zie,getAllNodeRecords:Qie,getSystemInfo:jie,reverseSubscription:qF};function Vie(e){return e==null}a(Vie,"isEmpty");async function Kie(e){let t=new Pie(ol.SYSTEM_SCHEMA_NAME,ol.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qie(t)}a(Kie,"getNodeRecord");async function Yie(e){let t=new Die(ol.SYSTEM_SCHEMA_NAME,ol.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return wie.upsert(t)}a(Yie,"upsertNodeRecord");function qF(e){if(oN.isEmpty(e.subscribe)||oN.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(qF,"reverseSubscription");function Wie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=oN.getTableHashAttribute(l,u),{subscribe:d,publish:h}=qF(c),_=Gie()[l]?.[u],m=new Mie(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(m)}return new Lie(r,t,s,n)}a(Wie,"buildNodePayloads");function zie(){if(!FF.get(ol.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vie(new Error,Bie.CLUSTERING_NOT_ENABLED,xie.BAD_REQUEST,void 0,void 0,!0)}a(zie,"checkClusteringEnabled");async function Qie(){let e=new Hie(ol.SYSTEM_SCHEMA_NAME,ol.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $ie(e))}a(Qie,"getAllNodeRecords");async function jie(){let e=await kie.getSystemInformation();return{hdb_version:Fie.version,node_version:e.node_version,platform:e.platform}}a(jie,"getSystemInfo")});var aN=C((fCe,JF)=>{"use strict";var Tg=pr(),VF=oe(),KF=Ct(),YF=(k(),P($)),Ag=X(),WF=hg(),Jie=c_(),{RemotePayloadObject:Xie}=J_(),{handleHDBError:zF,hdb_errors:Zie}=pe(),{HTTP_STATUS_CODES:QF}=Zie,{NodeSubscription:jF}=Vu();JF.exports=eoe;async function eoe(e,t){let r;try{r=await Tg.request(`${t}.${KF.REQUEST_SUFFIX}`,new Xie(YF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ag.trace("Response from remote describe all request:",r)}catch(o){Ag.error(`addNode received error from describe all request to remote node: ${o}`);let c=Tg.requestErrorHandler(o,"add_node",t);throw zF(new Error,c,QF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===KF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw zF(new Error,o,QF.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===YF.SYSTEM_SCHEMA_NAME){await Tg.createLocalTableStream(l,c);let m=new jF(l,c,o.publish,o.subscribe);m.start_time=o.start_time,i.push(m);continue}let u=VF.doesSchemaExist(l),f=n[l]!==void 0,d=c?VF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(Ag.trace(`addNode creating schema: ${l}`),await WF.createSchema({operation:"create_schema",schema:l})),!d&&h){Ag.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let m=new Jie(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(m.attributes=n[l][c].attributes),await WF.createTable(m)}await Tg.createLocalTableStream(l,c);let _=new jF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(eoe,"reviewSubscriptions")});var al={};xe(al,{addNodeBack:()=>ioe,removeNodeBack:()=>ooe,setNode:()=>soe});async function soe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Qs(t)):t=lg(r);let n=(0,ZF.validateBySchema)(e,noe);if(n)throw(0,yo.handleHDBError)(n,n.message,roe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new yo.ClientError("url or hostname is required for remove_node operation");let _=r,m=nr(),S=await m.get(_);if(!S)throw new yo.ClientError(_+" does not exist");try{await W_({url:S.url},{operation:Vt.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?et():_},void 0)}catch(g){Qn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await m.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new yo.ClientError("url required for this operation");let s=ma();if(s==null)throw new yo.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,gs.getReplicationCert)();let _=await(0,gs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,gs.createCsr)(),Qn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,Qn.info("Sending CA named",_.name,"to target node",t))}let l={operation:Vt.ADD_NODE_BACK,hostname:(0,Ia.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Ia.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Ia.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(XF):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=XF(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await W_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,Qn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Qn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,gs.setCertTable)({name:toe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,gs.setCertTable)({name:et(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?d.shard=u.shard:e.shard!==void 0&&(d.shard=e.shard),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};(0,Ia.get)(B.REPLICATION_SHARD)!==void 0&&(_.shard=(0,Ia.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await go(et(),_)}await go(u?u.nodeName:d.name??Qs(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function ioe(e){Qn.trace("addNodeBack received request:",e);let t=await(0,gs.signCertificate)(e),r;e.csr?(r=t.signingCA,Qn.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,Qn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,gs.getReplicationCertAuth)();if(n.replicates){let i={url:ma(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Ia.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Ia.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await go(et(),i)}return await go(e.hostname,n),t.nodeName=et(),t.usingCA=s?.certificate,Qn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function ooe(e){Qn.trace("removeNodeBack received request:",e),await nr().delete(e.name)}function XF(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var gs,ZF,wa,Ia,Qn,yo,toe,roe,noe,cl=ye(()=>{gs=M(Xs()),ZF=M(rt()),wa=M(require("joi")),Ia=M(ce());k();k_();Jc();ms();Qn=M(X()),yo=M(pe()),{pki:toe}=require("node-forge"),{HTTP_STATUS_CODES:roe}=yo.hdb_errors,noe=wa.default.object({hostname:wa.default.string(),verify_tls:wa.default.boolean(),replicates:wa.default.boolean(),subscriptions:wa.default.array(),revoked_certificates:wa.default.array(),shard:wa.default.number()});a(soe,"setNode");a(ioe,"addNodeBack");a(ooe,"removeNodeBack");a(XF,"reverseSubscription")});var Ng=C((ACe,tG)=>{"use strict";var{handleHDBError:Rg,hdb_errors:aoe}=pe(),{HTTP_STATUS_CODES:yg}=aoe,{addUpdateNodeValidator:coe}=gg(),bg=X(),Og=(k(),P($)),eG=Ct(),loe=oe(),Z_=pr(),eh=Ro(),cN=ce(),uoe=aN(),{Node:doe,NodeSubscription:foe}=Vu(),{broadcast:_oe}=nt(),{setNode:hoe}=(cl(),P(al)),SCe=ce(),TCe=(k(),P($)),moe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",poe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Eoe=cN.get(Og.CONFIG_PARAMS.CLUSTERING_NODENAME);tG.exports=goe;async function goe(e,t=!1){if(bg.trace("addNode called with:",e),cN.get(Og.CONFIG_PARAMS.REPLICATION_URL)||cN.get(Og.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hoe(e);eh.checkClusteringEnabled();let r=coe(e);if(r)throw Rg(r,r.message,yg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await eh.getNodeRecord(n);if(!loe.isEmptyOrZeroLength(d))throw Rg(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,yg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await uoe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=moe,o;let c=eh.buildNodePayloads(s,Eoe,Og.OPERATIONS_ENUM.ADD_NODE,await eh.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new foe(_.schema,_.table,_.publish,_.subscribe))}bg.trace("addNode sending remote payload:",c);let u;try{u=await Z_.request(`${n}.${eG.REQUEST_SUFFIX}`,c)}catch(d){bg.error(`addNode received error from request: ${d}`);for(let _=0,m=s.length;_<m;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await Z_.updateRemoteConsumer(S,n)}let h=Z_.requestErrorHandler(d,"add_node",n);throw Rg(new Error,h,yg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===eG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Rg(new Error,d,yg.INTERNAL_SERVER_ERROR,"error",d)}bg.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await Z_.updateRemoteConsumer(_,n),_.subscribe===!0&&await Z_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new doe(n,l,u.system_info);return await eh.upsertNodeRecord(f),_oe({type:"nats_update"}),i.length>0?o.message=poe:o.message=`Successfully added '${n}' to manifest`,o}a(goe,"addNode")});var fN=C((bCe,nG)=>{"use strict";var{handleHDBError:lN,hdb_errors:Soe}=pe(),{HTTP_STATUS_CODES:uN}=Soe,{addUpdateNodeValidator:Toe}=gg(),th=X(),wg=(k(),P($)),rG=Ct(),yCe=oe(),rh=pr(),nh=Ro(),dN=ce(),{cloneDeep:Aoe}=require("lodash"),Roe=aN(),{Node:yoe,NodeSubscription:boe}=Vu(),{broadcast:Ooe}=nt(),{setNode:Noe}=(cl(),P(al)),woe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ioe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Coe=dN.get(wg.CONFIG_PARAMS.CLUSTERING_NODENAME);nG.exports=Poe;async function Poe(e){if(th.trace("updateNode called with:",e),dN.get(wg.CONFIG_PARAMS.REPLICATION_URL)??dN.get(wg.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Noe(e);nh.checkClusteringEnabled();let t=Toe(e);if(t)throw lN(t,t.message,uN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await nh.getNodeRecord(r);s.length>0&&(n=Aoe(s));let{added:i,skipped:o}=await Roe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=woe,c;let l=nh.buildNodePayloads(i,Coe,wg.OPERATIONS_ENUM.UPDATE_NODE,await nh.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];th.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}th.trace("updateNode sending remote payload:",l);let u;try{u=await rh.request(`${r}.${rG.REQUEST_SUFFIX}`,l)}catch(f){th.error(`updateNode received error from request: ${f}`);let d=rh.requestErrorHandler(f,"update_node",r);throw lN(new Error,d,uN.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===rG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw lN(new Error,f,uN.INTERNAL_SERVER_ERROR,"error",f)}th.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await rh.updateRemoteConsumer(h,r),h.subscribe===!0?await rh.updateConsumerIterator(h.schema,h.table,r,"start"):await rh.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new yoe(r,[],u.system_info)]),await Doe(n[0],i,u.system_info),o.length>0?c.message=Ioe:c.message=`Successfully updated '${r}'`,c}a(Poe,"updateNode");async function Doe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new boe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await nh.upsertNodeRecord(n),Ooe({type:"nats_update"})}a(Doe,"updateNodeTable")});var cG=C((NCe,aG)=>{"use strict";var oG=require("joi"),{string:sG}=oG.types(),Loe=rt(),iG=(k(),P($)),Moe=ce(),voe=Ct();aG.exports=Uoe;function Uoe(e){let t=sG.invalid(Moe.get(iG.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(voe.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=oG.object({operation:sG.valid(iG.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Loe.validateBySchema(e,r)}a(Uoe,"removeNodeValidator")});var Ig=C((ICe,_G)=>{"use strict";var{handleHDBError:lG,hdb_errors:xoe}=pe(),{HTTP_STATUS_CODES:uG}=xoe,Boe=cG(),sh=X(),dG=Ro(),Hoe=oe(),Wu=(k(),P($)),fG=Ct(),_N=pr(),hN=ce(),{RemotePayloadObject:koe}=J_(),{NodeSubscription:Foe}=Vu(),Goe=a_(),qoe=vc(),{broadcast:$oe}=nt(),{setNode:Voe}=(cl(),P(al)),Koe=hN.get(Wu.CONFIG_PARAMS.CLUSTERING_NODENAME);_G.exports=Yoe;async function Yoe(e){if(sh.trace("removeNode called with:",e),hN.get(Wu.CONFIG_PARAMS.REPLICATION_URL)??hN.get(Wu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Voe(e);dG.checkClusteringEnabled();let t=Boe(e);if(t)throw lG(t,t.message,uG.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await dG.getNodeRecord(r);if(Hoe.isEmptyOrZeroLength(n))throw lG(new Error,`Node '${r}' was not found.`,uG.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new koe(Wu.OPERATIONS_ENUM.REMOVE_NODE,Koe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await _N.updateConsumerIterator(f.schema,f.table,r,"stop");try{await _N.updateRemoteConsumer(new Foe(f.schema,f.table,!1,!1),r)}catch(d){sh.error(d)}}try{i=await _N.request(`${r}.${fG.REQUEST_SUFFIX}`,s),sh.trace("Remove node reply from remote node:",r,i)}catch(l){sh.error("removeNode received error from request:",l),o=!0}let c=new Goe(Wu.SYSTEM_SCHEMA_NAME,Wu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await qoe.deleteRecord(c),$oe({type:"nats_update"}),i?.status===fG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(sh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Yoe,"removeNode")});var pG=C((PCe,mG)=>{"use strict";var hG=require("joi"),{string:Woe,array:zoe}=hG.types(),Qoe=rt(),joe=gg();mG.exports=Joe;function Joe(e){let t=hG.object({operation:Woe.valid("configure_cluster").required(),connections:zoe.items(joe.validation_schema).required()});return Qoe.validateBySchema(e,t)}a(Joe,"configureClusterValidator")});var mN=C((LCe,AG)=>{"use strict";var EG=(k(),P($)),Cg=X(),Xoe=oe(),Zoe=ce(),eae=Ig(),tae=Ng(),rae=Ro(),nae=pG(),{handleHDBError:gG,hdb_errors:sae}=pe(),{HTTP_STATUS_CODES:SG}=sae,iae="Configure cluster complete.",oae="Failed to configure the cluster. Check the logs for more details.",aae="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";AG.exports=cae;async function cae(e){Cg.trace("configure cluster called with:",e);let t=nae(e);if(t)throw gG(t,t.message,SG.BAD_REQUEST,void 0,void 0,!0);let r=await rae.getAllNodeRecords(),n=[];if(Zoe.get(EG.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await TG(eae,{operation:EG.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}Cg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await TG(tae,d,d.node_name);s.push(h)}Cg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(Cg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(Xoe.isEmptyOrZeroLength(o))return{message:iae,connections:c};if(l)return{message:aae,failed_nodes:o,connections:c};throw gG(new Error,oae,SG.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(cae,"configureCluster");async function TG(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(TG,"functionWrapper")});var OG=C((vCe,bG)=>{"use strict";var ih=require("joi"),lae=rt(),{validateSchemaExists:RG,validateTableExists:uae,validateSchemaName:yG}=Ri(),dae=ih.object({operation:ih.string().valid("purge_stream"),schema:ih.string().custom(RG).custom(yG).optional(),database:ih.string().custom(RG).custom(yG).optional(),table:ih.string().custom(uae).required()});function fae(e){return lae.validateBySchema(e,dae)}a(fae,"purgeStreamValidator");bG.exports=fae});var pN=C((xCe,NG)=>{"use strict";var{handleHDBError:_ae,hdb_errors:hae}=pe(),{HTTP_STATUS_CODES:mae}=hae,pae=OG(),Eae=pr(),gae=Ro();NG.exports=Sae;async function Sae(e){e.schema=e.schema??e.database;let t=pae(e);if(t)throw _ae(t,t.message,mae.BAD_REQUEST,void 0,void 0,!0);gae.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Eae.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Sae,"purgeStream")});var SN=C((HCe,MG)=>{"use strict";var gN=Ro(),Tae=pr(),Dg=ce(),zu=(k(),P($)),ll=Ct(),Aae=oe(),EN=X(),{RemotePayloadObject:Rae}=J_(),{ErrorCode:wG}=require("nats"),{parentPort:IG}=require("worker_threads"),{onMessageByType:yae}=nt(),{getThisNodeName:bae}=(ms(),P(Ta)),{requestClusterStatus:Oae}=(k_(),P(JH)),{getReplicationSharedStatus:Nae,getHDBNodeTable:wae}=(Jc(),P(cO)),{CONFIRMATION_STATUS_POSITION:Iae,RECEIVED_VERSION_POSITION:Cae,RECEIVED_TIME_POSITION:Pae,SENDING_TIME_POSITION:Dae}=(DO(),P(Fk)),CG=Dg.get(zu.CONFIG_PARAMS.CLUSTERING_ENABLED),PG=Dg.get(zu.CONFIG_PARAMS.CLUSTERING_NODENAME);MG.exports={clusterStatus:Lae,buildNodeStatus:LG};var DG;yae("cluster-status",async e=>{DG(e)});async function Lae(){if(Dg.get(zu.CONFIG_PARAMS.REPLICATION_URL)||Dg.get(zu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(IG){IG.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{DG=i});for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let d of Object.values(databases[l]||{}))if(u=d.auditStore,u)break;if(!u)continue;let f=Nae(u,l,o);c.lastCommitConfirmed=Pg(f[Iae]),c.lastReceivedRemoteTime=Pg(f[Cae]),c.lastReceivedLocalTime=Pg(f[Pae]),c.sendingMessage=Pg(f[Dae])}}}else n=Oae();n.node_name=bae();let s=wae().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:PG,is_enabled:CG,connections:[]};if(!CG)return e;let t=await gN.getAllNodeRecords();if(Aae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(LG(t[n],e.connections));return await Promise.allSettled(r),e}a(Lae,"clusterStatus");function Pg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(Pg,"asDate");async function LG(e,t){let r=e.name,n=new Rae(zu.OPERATIONS_ENUM.CLUSTER_STATUS,PG,void 0,await gN.getSystemInfo()),s,i,o=ll.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Tae.request(ll.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ll.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ll.CLUSTER_STATUS_STATUSES.CLOSED,EN.error(`Error getting node status from ${r} `,s))}catch(l){EN.warn(`Error getting node status from ${r}`,l),l.code===wG.NoResponders?o=ll.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===wG.Timeout?o=ll.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ll.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mae(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==zu.PRE_4_0_0_VERSION&&await gN.upsertNodeRecord(l)}catch(l){EN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(LG,"buildNodeStatus");function Mae(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Mae,"NodeStatusObject")});var AN=C((FCe,vG)=>{"use strict";var{handleHDBError:vae,hdb_errors:Uae}=pe(),{HTTP_STATUS_CODES:xae}=Uae,Bae=pr(),Hae=Ro(),TN=oe(),Lg=require("joi"),kae=rt(),Fae=2e3,Gae=Lg.object({timeout:Lg.number().min(1),connected_nodes:Lg.boolean(),routes:Lg.boolean()});vG.exports=qae;async function qae(e){Hae.checkClusteringEnabled();let t=kae.validateBySchema(e,Gae);if(t)throw vae(t,t.message,xae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||TN.autoCastBoolean(n),o=s===void 0||TN.autoCastBoolean(s),c={nodes:[]},l=await Bae.getServerList(r??Fae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let m={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(m.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{m.connected_nodes.includes(S.name.slice(0,-4))||m.connected_nodes.push(S.name.slice(0,-4))})),o&&(m.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:TN.autoCast(S.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(qae,"clusterNetwork")});var HG=C((qCe,BG)=>{"use strict";var RN=require("joi"),UG=rt(),{route_constraints:xG}=SA();BG.exports={setRoutesValidator:$ae,deleteRoutesValidator:Vae};function $ae(e){let t=RN.object({server:RN.valid("hub","leaf"),routes:xG.required()});return UG.validateBySchema(e,t)}a($ae,"setRoutesValidator");function Vae(e){let t=RN.object({routes:xG.required()});return UG.validateBySchema(e,t)}a(Vae,"deleteRoutesValidator")});var Mg=C((VCe,KG)=>{"use strict";var bo=Nt(),yN=oe(),Ss=(k(),P($)),Qu=ce(),kG=HG(),{handleHDBError:FG,hdb_errors:Kae}=pe(),{HTTP_STATUS_CODES:GG}=Kae,qG="cluster routes successfully set",$G="cluster routes successfully deleted";KG.exports={setRoutes:Wae,getRoutes:zae,deleteRoutes:Qae};function Yae(e){let t=bo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=yN.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?bo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):bo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:qG,set:i,skipped:s}}a(Yae,"setRoutesNats");function Wae(e){let t=kG.setRoutesValidator(e);if(t)throw FG(t,t.message,GG.BAD_REQUEST,void 0,void 0,!0);if(Qu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return Yae(e);let r=[],n=[],s=Qu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{VG(s,i)?n.push(i):(s.push(i),r.push(i))}),bo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:qG,set:r,skipped:n}}a(Wae,"setRoutes");function VG(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(VG,"existsInArray");function zae(){if(Qu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=bo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Qu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(zae,"getRoutes");function Qae(e){let t=kG.deleteRoutesValidator(e);if(t)throw FG(t,t.message,GG.BAD_REQUEST,void 0,void 0,!0);if(Qu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return jae(e);let r=[],n=[],s=Qu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{VG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),bo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:$G,deleted:r,skipped:n}}a(Qae,"deleteRoutes");function jae(e){let t=bo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let m=r[h];if(f.host===m.host&&f.port===m.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,m=n.length;_<m;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=yN.isEmptyOrZeroLength(r)?null:r,bo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=yN.isEmptyOrZeroLength(n)?null:n,bo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:$G,deleted:s,skipped:i}}a(jae,"deleteRoutesNats")});var WG=C((YCe,YG)=>{"use strict";var oh=require("alasql"),ul=require("recursive-iterator"),Zs=X(),Jae=oe(),ah=(k(),P($)),bN=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Zae(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>ah.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!ah.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Xae(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new oh.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Xae(e){return e.filter(t=>t[ah.PERMS_CRUD_ENUM.READ])}a(Xae,"filterReadRestrictedAttrs");function Zae(e,t,r,n,s){ece(e,t,r,n,s)}a(Zae,"interpretAST");function ch(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(ch,"addSchemaTableToMap");function ece(e,t,r,n,s){if(!e){Zs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof oh.yy.Insert?sce(e,t,r):e instanceof oh.yy.Select?tce(e,t,r,n,s):e instanceof oh.yy.Update?rce(e,t,r):e instanceof oh.yy.Delete?nce(e,t,r):Zs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(ece,"getRecordAttributesAST");function tce(e,t,r,n,s){if(!e){Zs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Jae.isEmptyOrZeroLength(i)){Zs.error("No schema specified");return}e.from.forEach(c=>{ch(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ch(c.table,t,r,n,s)});let o=new ul(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Zs.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 ul(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{Zs.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new ul(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{Zs.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new ul(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{Zs.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(tce,"getSelectAttributes");function rce(e,t,r){if(!e){Zs.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ul(e.columns),s=e.table.databaseid;ch(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ON(e.table.tableid,s,i.columnid,t,r)}a(rce,"getUpdateAttributes");function nce(e,t,r){if(!e){Zs.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ul(e.where),s=e.table.databaseid;ch(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ON(e.table.tableid,s,i.columnid,t,r)}a(nce,"getDeleteAttributes");function sce(e,t,r){if(!e){Zs.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ul(e.columns),s=e.into.databaseid;ch(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&ON(e.into.tableid,s,i.columnid,t,r)}a(sce,"getInsertAttributes");function ON(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(ON,"pushAttribute");YG.exports=bN});var QG=C((zCe,zG)=>{"use strict";var vg=(k(),P($)),Ug=class{static{a(this,"BaseLicense")}constructor(t=0,r=vg.RAM_ALLOCATION_ENUM.DEFAULT,n=vg.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},NN=class extends Ug{static{a(this,"ExtendedLicense")}constructor(t=0,r=vg.RAM_ALLOCATION_ENUM.DEFAULT,n=vg.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};zG.exports={BaseLicense:Ug,ExtendedLicense:NN}});var Xu=C((jCe,tq)=>{"use strict";var Ju=require("fs-extra"),xg=(Fp(),P(kp)),JG=require("crypto"),ice=require("moment"),oce=require("uuid").v4,jr=X(),IN=require("path"),ace=oe(),dl=(k(),P($)),{totalmem:jG}=require("os"),cce=QG().ExtendedLicense,ju="invalid license key format",lce="061183",uce="mofi25",dce="aes-256-cbc",fce=16,_ce=32,XG=ce(),{resolvePath:ZG}=Nt();XG.initSync();var wN;tq.exports={validateLicense:eq,generateFingerPrint:mce,licenseSearch:DN,getLicense:gce,checkMemoryLimit:Sce};function CN(){return IN.join(XG.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.LICENSE_FILE_NAME)}a(CN,"getLicenseDirPath");function hce(){let e=CN();return ZG(IN.join(e,dl.LICENSE_FILE_NAME))}a(hce,"getLicenseFilePath");function PN(){let e=CN();return ZG(IN.join(e,dl.REG_KEY_FILE_NAME))}a(PN,"getFingerPrintFilePath");async function mce(){let e=PN();try{return await Ju.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await pce();throw jr.error(`Error writing fingerprint file to ${e}`),jr.error(t),new Error("There was an error generating the fingerprint")}}a(mce,"generateFingerPrint");async function pce(){let e=oce(),t=xg.hash(e,xg.HASH_FUNCTION.MD5),r=PN();try{await Ju.mkdirp(CN()),await Ju.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw jr.error(`Error writing fingerprint file to ${r}`),jr.error(n),new Error("There was an error generating the fingerprint")}return t}a(pce,"writeFingerprint");function eq(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:dl.RAM_ALLOCATION_ENUM.DEFAULT,version:dl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jr.error("empty license key passed to validate."),r;let n=PN(),s=!1;try{s=Ju.statSync(n)}catch(i){jr.error(i)}if(s){let i;try{i=Ju.readFileSync(n,"utf8")}catch{jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uce),c=o[1];c=Buffer.concat([Buffer.from(c)],fce);let l=Buffer.concat([Buffer.from(i)],_ce),u=JG.createDecipheriv(dce,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=Ece(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ju),jr.error(ju),new Error(ju)}let d;if(isNaN(f))try{d=JSON.parse(f),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ju),jr.error(ju),new Error(ju)}else r.exp_date=f;r.exp_date<ice().valueOf()&&(r.valid_date=!1),xg.validate(o[1],`${lce}${i}${t}`,xg.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||jr.error("Invalid licence"),r}a(eq,"validateLicense");function Ece(e,t){try{let r=JG.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{jr.warn("Check old license failed")}}a(Ece,"checkOldLicense");function DN(){let e=new cce,t=[];try{t=Ju.readFileSync(hce(),"utf-8").split(`\r
|
|
24
|
-
`)}catch(r){r.code==="ENOENT"?jr.debug("no license file found"):jr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(ace.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=eq(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){jr.error("There was an error parsing the license string."),jr.error(s),e.ram_allocation=dl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return wN=e,e}a(DN,"licenseSearch");async function gce(){return wN||await DN(),wN}a(gce,"getLicense");function Sce(){let e=DN().ram_allocation,t=process.constrainedMemory?.()||jG();if(t=Math.round(Math.min(t,jG())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(Sce,"checkMemoryLimit")});var vN=C((XCe,iq)=>{var Bg=Xu(),rq=require("chalk"),jn=X(),nq=require("prompt"),{promisify:Tce}=require("util"),LN=(k(),P($)),Ace=require("fs-extra"),Rce=require("path"),yce=oe(),{packageJson:bce}=pt(),sq=ce();sq.initSync();var Oce=require("moment"),Nce=Tce(nq.get),wce=Rce.join(sq.getHdbBasePath(),LN.LICENSE_KEY_DIR_NAME,LN.LICENSE_FILE_NAME,LN.LICENSE_FILE_NAME);iq.exports={getFingerprint:Cce,setLicense:Ice,parseLicense:MN,register:Pce,getRegistrationInfo:Lce};async function Ice(e){if(e&&e.key&&e.company){try{jn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await MN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw jn.error(r),jn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Ice,"setLicense");async function Cce(){let e={};try{e=await Bg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw jn.error(r),jn.error(t),new Error(r)}return e}a(Cce,"getFingerprint");async function MN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");jn.info("Validating license input...");let r=Bg.validateLicense(e,t);if(jn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(jn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(jn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{jn.info("writing license to disk"),await Ace.writeFile(wce,JSON.stringify({license_key:e,company:t}))}catch(n){throw jn.error("Failed to write License"),n}return"Registration successful."}a(MN,"parseLicense");async function Pce(){let e=await Dce();return MN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Pce,"register");async function Dce(){let e=await Bg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:rq.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:rq.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{nq.start()}catch(n){jn.error(n)}let r;try{r=await Nce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Dce,"promptForRegistration");async function Lce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Bg.getLicense()}catch(r){throw jn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(yce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=bce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Oce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Lce,"getRegistrationInfo")});var aq=C((ePe,oq)=>{"use strict";var Mce=Ct(),UN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,m){this.port=t,o===null&&(o=void 0),this.server_name=r+Mce.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:m}},this.system_account="SYS"}};oq.exports=UN});var uq=C((rPe,lq)=>{"use strict";var cq=Ct(),xN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+cq.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+cq.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};lq.exports=xN});var fq=C((sPe,dq)=>{"use strict";var BN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};dq.exports=BN});var hq=C((oPe,_q)=>{"use strict";var vce=Ct(),HN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+vce.SERVER_SUFFIX.ADMIN,this.password=r}};_q.exports=HN});var Gg=C((cPe,Eq)=>{"use strict";var fl=require("path"),_l=require("fs-extra"),Uce=aq(),xce=uq(),Bce=fq(),Hce=hq(),kN=qn(),ed=oe(),Rn=Nt(),kg=(k(),P($)),lh=Ct(),{CONFIG_PARAMS:zt}=kg,td=X(),uh=ce(),mq=uo(),FN=pr(),kce=Xs(),Zu="clustering",Fce=1e4,pq=50;Eq.exports={generateNatsConfig:qce,removeNatsConfig:$ce,getHubConfigPath:Gce};function Gce(){let e=uh.get(zt.ROOTPATH);return fl.join(e,Zu,lh.NATS_CONFIG_FILES.HUB_SERVER)}a(Gce,"getHubConfigPath");async function qce(e=!1,t=void 0){let r=uh.get(zt.ROOTPATH);_l.ensureDirSync(fl.join(r,"clustering","leaf")),uh.initSync();let n=Rn.getConfigFromFile(zt.CLUSTERING_TLS_CERT_AUTH),s=Rn.getConfigFromFile(zt.CLUSTERING_TLS_PRIVATEKEY),i=Rn.getConfigFromFile(zt.CLUSTERING_TLS_CERTIFICATE);!await _l.exists(i)&&!await _l.exists(!n)&&await kce.createNatsCerts();let o=fl.join(r,Zu,lh.PID_FILES.HUB),c=fl.join(r,Zu,lh.PID_FILES.LEAF),l=Rn.getConfigFromFile(zt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=fl.join(r,Zu,lh.NATS_CONFIG_FILES.HUB_SERVER),f=fl.join(r,Zu,lh.NATS_CONFIG_FILES.LEAF_SERVER),d=Rn.getConfigFromFile(zt.CLUSTERING_TLS_INSECURE),h=Rn.getConfigFromFile(zt.CLUSTERING_TLS_VERIFY),_=Rn.getConfigFromFile(zt.CLUSTERING_NODENAME),m=Rn.getConfigFromFile(zt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await FN.checkNATSServerInstalled()||Fg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await kN.listUsers(),g=Rn.getConfigFromFile(zt.CLUSTERING_USER),y=await kN.getClusterUser();(ed.isEmpty(y)||y.active!==!0)&&Fg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Hg(zt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Hg(zt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Hg(zt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Hg(zt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],T=[];for(let[se,W]of S.entries())W.role?.role===kg.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(E.push(new Hce(W.username,mq.decrypt(W.hash))),T.push(new Bce(W.username,mq.decrypt(W.hash))));let N=[],{hub_routes:x}=Rn.getClusteringRoutes();if(!ed.isEmptyOrZeroLength(x))for(let se of x)N.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${se.host}:${se.port}`);let H=new Uce(Rn.getConfigFromFile(zt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,m,Rn.getConfigFromFile(zt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Rn.getConfigFromFile(zt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,E,T);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=ed.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===kg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _l.writeJson(u,H),td.trace(`Hub server config written to ${u}`));let q=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${m}`,Q=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${m}`,te=new xce(Rn.getConfigFromFile(zt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[q],[Q],E,T,i,s,n,d);n==null&&delete te.tls.ca_file,(t===void 0||t===kg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _l.writeJson(f,te),td.trace(`Leaf server config written to ${f}`))}a(qce,"generateNatsConfig");async function Hg(e){let t=uh.get(e);return ed.isEmpty(t)&&Fg(`port undefined for '${e}'`),await ed.isPortTaken(t)&&Fg(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(Hg,"isPortAvailable");function Fg(e){let t=`Error generating clustering config: ${e}`;td.error(t),console.error(t),process.exit(1)}a(Fg,"generateNatsConfigError");async function $ce(e){let{port:t,config_file:r}=FN.getServerConfig(e),{username:n,decrypt_hash:s}=await kN.getClusterUser(),i=0,o=2e3;for(;i<pq;){try{let f=await FN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){td.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=pq)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&td.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ed.async_set_timeout(u)}let c="0".repeat(Fce),l=fl.join(uh.get(zt.ROOTPATH),Zu,r);await _l.writeFile(l,c),await _l.remove(l),td.notify(e,"started.")}a($ce,"removeNatsConfig")});var $N={};xe($N,{compactOnStart:()=>Vce,copyDb:()=>yq});async function Vce(){Ca.notify("Running compact on start"),console.log("Running compact on start");let e=(0,GN.get)(B.ROOTPATH),t=new Map,r=Xe();(0,qN.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,qg.join)(e,"backup",n+".mdb"),o=(0,qg.join)(e,ac,n+"-copy.mdb"),c=0;try{c=await gq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Ca.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await yq(n,o),console.log("Backing up",n,"to",i),await(0,hl.move)(s,i,{overwrite:!0})}try{rd()}catch(n){Ca.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,hl.move)(i,s,{overwrite:!0}),await(0,hl.remove)((0,qg.join)(e,ac,`${n}-copy.mdb-lock`));try{rd()}catch(n){Ca.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Ca.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,hl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw rd(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await gq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
22
|
+
`,"")}a(MH,"runCommand");async function _ne(){try{await $re.access(Zb)}catch{return!1}let e=await MH(`${Zb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Vre.eq(t,dne)}a(_ne,"checkNATSServerInstalled");async function sO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await DH.getClusterUser();if(Jc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}js.trace("create nats connection called");let i=await rne({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(je.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(je.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(je.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),js.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&js.error("Error with Nats client connection, connection closed",o),i===zr&&vH()}),i}a(sO,"createConnection");function vH(){zr=void 0,zc=void 0,jc=void 0,Qc=void 0}a(vH,"clearClientCache");async function hne(){zr&&(await zr.drain(),zr=void 0,zc=void 0,jc=void 0,Qc=void 0)}a(hne,"closeConnection");var zr,Qc;async function M_(){return Qc||(Qc=sO(Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await Qc),zr||Qc}a(M_,"getConnection");async function v_(){if(zc)return zc;Jc(zr)&&await M_();let{domain:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return zc=await zr.jetstreamManager({domain:e,timeout:6e4}),zc}a(v_,"getJetStreamManager");async function UH(){if(jc)return jc;Jc(zr)&&await M_();let{domain:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return jc=zr.jetstream({domain:e,timeout:6e4}),jc}a(UH,"getJetStream");async function Li(){let e=zr||await M_(),t=zc||await v_(),r=jc||await UH();return{connection:e,jsm:t,js:r}}a(Li,"getNATSReferences");async function pne(e){let t=Or.get(je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await DH.getClusterUser(),s=await sO(t,r,n),i=nO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=LH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await FE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(pne,"getServerList");async function iO(e,t){let{jsm:r}=await Li(),n=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:nne.File,retention:sne.Limits,subjects:t,discard:ine.Old,max_msgs:s,max_bytes:i,max_age:n})}a(iO,"createLocalStream");async function xH(){let{jsm:e}=await Li(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(xH,"listStreams");async function mne(e){let{jsm:t}=await Li();await t.streams.delete(e)}a(mne,"deleteLocalStream");async function Ene(e){let{connection:t}=await Li(),r=[],n=nO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(LH.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Ene,"listRemoteStreams");async function gne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=wH(),o={durable_name:i,ack_policy:tO.Explicit};t&&(o.deliver_policy=rO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=eO(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Ur.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(gne,"viewStream");async function*Sne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=wH(),o={durable_name:i,ack_policy:tO.Explicit};t&&(o.deliver_policy=rO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=eO(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Ur.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Sne,"viewStreamIterator");async function Tne(e,t,r,n){js.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=BH(n,r);let{js:s}=await Li(),i=await qE(),o=`${e}.${i}`,c=await lne(()=>n instanceof Uint8Array?n:PH.encode(n));try{js.trace(`publishToStream publishing to subject: ${o}`),cne(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return kH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){js.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await iO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Tne,"publishToStream");function BH(e,t){t===void 0&&(t=ane());let r=Or.get(je.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ur.MSG_HEADERS.ORIGIN)&&r&&t.append(Ur.MSG_HEADERS.ORIGIN,r),t}a(BH,"addNatsMsgHeader");function wu(e){e=e.toLowerCase();let t=L_.join(Or.get(je.CONFIG_PARAMS.ROOTPATH),une);if(e===je.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jc(Xb)&&(Xb={port:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.HUB,config_file:Ur.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:L_.join(t,Ur.PID_FILES.HUB),hdb_nats_path:t}),Xb;if(e===je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jc(Jb)&&(Jb={port:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.LEAF,config_file:Ur.NATS_CONFIG_FILES.LEAF_SERVER,domain:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.LEAF,pid_file_path:L_.join(t,Ur.PID_FILES.LEAF),hdb_nats_path:t}),Jb;js.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wu,"getServerConfig");async function HH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:tO.Explicit,durable_name:r,deliver_policy:rO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(HH,"createConsumer");async function Ane(e,t,r){await e.consumers.delete(t,r)}a(Ane,"removeConsumer");function Rne(e){return e.split(".")[1]}a(Rne,"extractServerName");async function yne(e,t,r=6e4,n=nO()){if(!FE.isObject(t))throw new Error("data param must be an object");let s=PH.encode(t),{connection:i}=await Li(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return eO(c.data)}a(yne,"request");function oO(e){return new Promise(async(t,r)=>{let n=zre(Zb,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(oO,"reloadNATS");async function bne(){let{pid_file_path:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await oO(e)}a(bne,"reloadNATSHub");async function One(){let{pid_file_path:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await oO(e)}a(One,"reloadNATSLeaf");function Nne(e,t,r){let n;switch(e.code){case NH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case NH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Nne,"requestErrorHandler");async function wne(e,t){let r=t+Ur.SERVER_SUFFIX.LEAF,{connection:n}=await Li(),{jsm:s}=await Une(r),{schema:i,table:o}=e,c=GE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await kH(async()=>{if(e.subscribe===!0)await HH(s,c,n.info.server_name,l);else try{await Ane(s,c,n.info.server_name)}catch(u){js.trace(u)}})}a(wne,"updateRemoteConsumer");async function Ine(e,t,r,n){let s=GE.createNatsTableStreamName(e,t),i=r+Ur.SERVER_SUFFIX.LEAF,o={type:je.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!CH&&ene()<Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Qb();await c(o)}await Xre(o),n==="stop"&&await FE.async_set_timeout(1e3)}a(Ine,"updateConsumerIterator");function kH(e){return Jre.writeTransaction(je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(kH,"exclusiveLock");async function FH(e,t){let r=GE.createNatsTableStreamName(e,t),n=await qE(),s=Lne(e,t,n);await iO(r,[s])}a(FH,"createLocalTableStream");async function Cne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await FH(n,s)}}a(Cne,"createTableStreams");async function GH(e,t,r=void 0){if(Or.get(je.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=GE.createNatsTableStreamName(e,t),{domain:s}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await M_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")js.warn(n);else throw n}}a(GH,"purgeTableStream");async function Pne(e,t){if(Or.get(je.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await GH(e,t[r])}a(Pne,"purgeSchemaTableStreams");async function Dne(e){return(await v_()).streams.info(e)}a(Dne,"getStreamInfo");function Lne(e,t,r){return`${Ur.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Lne,"createSubjectName");async function qE(){if(D_)return D_;if(D_=(await v_())?.nc?.info?.server_name,D_===void 0)throw new Error("Unable to get jetstream manager server name");return D_}a(qE,"getJsmServerName");async function Mne(){let e=await v_(),t=await qE(),r=await xH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=vne(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");js.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(Mne,"updateLocalStreams");function vne(e){let{config:t}=e,r=!1,n=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(vne,"updateStreamLimits");async function Une(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw js.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Une,"connectToRemoteJS")});function aO(e){let t=e.get($E),r=t?(0,Iu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=tt(),s=!1;r.nodeName=tt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:x_(e)??1,nodes:[]})})}i[n]=0,e.putSync($E,(0,Iu.pack)(r))}return r}function U_(e){return aO(e).remoteNameToId}function VH(e,t){let r=aO(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync($E,(0,Iu.pack)(r)),s}function VE(e,t){let r=aO(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync($E,(0,Iu.pack)(r))}return $H.trace?.("The remote node name map",e,n,s),s}var $H,Iu,$E,cO=be(()=>{$H=M(mi());ps();Iu=require("msgpackr"),$E=Symbol.for("remote-ids");a(aO,"getIdMappingRecord");a(U_,"exportIdMapping");a(VH,"remoteToLocalNodeId");a(VE,"getIdOfRemoteNode")});var lO={};Be(lO,{commits_awaiting_replication:()=>Pu,getHDBNodeTable:()=>sr,getReplicationSharedStatus:()=>KE,iterateRoutes:()=>H_,shouldReplicateToNode:()=>B_,subscribeToNodeUpdates:()=>Du});function sr(){return KH||(KH=_t({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function KE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Du(e){sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;jH.debug?.("adding node",n,"on node",tt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==tt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of sr().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function B_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&sr().primaryStore.get(tt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function xne(){Du(e=>{pa({},(t,r)=>{let n=e.name,s=YH.get(n);if(s||YH.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=KE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Pu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*H_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Cu.default.get(B.REPLICATION_SECUREPORT)??(!Cu.default.get(B.REPLICATION_PORT)&&Cu.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Cu.default.get(B.REPLICATION_PORT)||Cu.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){WH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates}}}var WH,zH,Cu,jH,KH,YH,Pu,Xc=be(()=>{Ue();ps();Wp();WH=require("worker_threads"),zH=M(he()),Cu=M(ce());G();jH=M(mi());server.nodes=[];a(sr,"getHDBNodeTable");a(KE,"getReplicationSharedStatus");a(Du,"subscribeToNodeUpdates");a(B_,"shouldReplicateToNode");YH=new Map;KD((e,t,r)=>{if(r>server.nodes.length)throw new zH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Pu||(Pu=new Map,xne());let n=Pu.get(e);return n||(n=[],Pu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(xne,"startSubscriptionToReplications");a(H_,"iterateRoutes")});var ZH={};Be(ZH,{connectedToNode:()=>Zc,disconnectedFromNode:()=>Mu,ensureNode:()=>Eo,requestClusterStatus:()=>XH,startOnMainThread:()=>dO});async function dO(e){let t=0,r=Ze();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){YE.set(i,x_(l.auditStore));break}}}vi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of H_(e))try{let c=!o.subscriptions;if(c){let u=tt(),f=sr().primaryStore.get(u);if(f!==null){let d=e.url??ma();(f===void 0||f.url!==d||f.shard!==e.shard)&&await Eo(u,{name:u,url:d,shard:e.shard,replicates:!0})}}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Du(s)});let n;function s(i,o=i?.name){let c=tt()&&o===tt()||ma()&&i?.url===ma();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of sr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(ct.trace("Setting up node replication for",i),!i){for(let[d,h]of Mi){let _;for(let[p,{worker:S,nodes:g}]of h){let R=g[0];if(R&&R.name==o){_=!0;for(let[E,{worker:T}]of h)h.delete(E),ct.warn("Node was deleted, unsubscribing from node",o,E,d),T?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){Mi.get(d).iterator.remove(),Mi.delete(d);return}}return}if(c)return;if(!i.url){ct.info(`Node ${i.name} is missing url`);return}let l=Mi.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ct.info(`Added node ${i.name} at ${i.url} for process ${tt()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Lu)if(i.url===h.url){Lu.delete(d);break}Lu.set(i.name,i)}let u=Ze();if(l||(l=new Map,Mi.set(i.url,l)),l.iterator=pa(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(ct.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){ct.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),p,S=[{replicateByDefault:h,...i}];YE.has(d)&&(S.push({replicateByDefault:h,name:tt(),start_time:YE.get(d),end_time:Date.now(),replicates:!0}),YE.delete(d));let g=B_(i,d),R=vi.workers.filter(E=>E.name==="http");if(_?(p=_.worker,_.nodes=S):g&&(t=t%R.length,p=R[t++],l.set(d,{worker:p,nodes:S,url:i.url}),p?.on("exit",()=>{l.get(d)?.worker===p&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};p?p.postMessage(E):k_(E)},Bne);else{ct.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],sr().primaryStore.get(tt())?.replicates),sr().primaryStore.get(tt())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};p?p.postMessage(E):zE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Mu=a(function(i){try{ct.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Lu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){ct.warn("Disconnected node not found in node map",i.name,o);return}let u=Mi.get(i.url),f=u?.get(i.database);if(!f){ct.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=d.shard,_=(l+1)%c.length;for(;l!==_;){let p=c[_],S=Lu.get(p);u=Mi.get(S.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==h){_=(_+1)%c.length;continue}let{worker:R,nodes:E}=g,T=!1;for(let O of f.nodes){if(E.some(v=>v.name===O.name)){ct.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}O.end_time<Date.now()||(E.push(O),T=!0)}if(f.nodes=[f.nodes[0]],!T){ct.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}ct.info(`Failing over ${i.database} from ${i.name} to ${p}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:E}):k_({database:i.database,nodes:E});return}ct.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){ct.error("Error failing over node",o)}},"disconnectedFromNode"),Zc=a(function(i){let o=Mi.get(i.url),c=o?.get(i.database);if(!c){ct.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];c.nodes=[l];let u=!1;for(let f of Mi.values()){let d=f.get(i.database);if(!d||d==c)continue;let{worker:h,nodes:_,connected:p}=d;if(_)if(p===!1&&_[0].shard===l.shard)u=!0,c.nodes.push(_[0]);else{let S=_.filter(g=>g.name!==l.name);S.length<_.length&&(d.nodes=S,h.postMessage({type:"subscribe-to-node",database:i.database,nodes:_}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,vi.onMessageByType)("disconnected-from-node",Mu),(0,vi.onMessageByType)("connected-to-node",Zc),(0,vi.onMessageByType)("request-cluster-status",XH)}function XH(e,t){let r=[];for(let[n,s]of Lu)try{let i=Mi.get(s.url);ct.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.filter(_=>!(_.end_time<Date.now())).map(_=>_.name)});let c=(0,uO.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ct.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Eo(e,t){let r=sr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new JH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){ct.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ct.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!QH.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,uO.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ct.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var vi,WE,ct,uO,QH,JH,Bne,Mi,Mu,Zc,Lu,YE,F_=be(()=>{Ue();vi=M(st());ps();WE=require("worker_threads");Xc();ct=M(X()),uO=require("lodash"),QH=M(ce());G();JH=require("crypto"),Bne=200,Mi=new Map,Lu=new Map,YE=new Map;a(dO,"startOnMainThread");a(XH,"requestClusterStatus");WE.parentPort&&(Mu=a(e=>{WE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Zc=a(e=>{WE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,vi.onMessageByType)("subscribe-to-node",e=>{k_(e)}),(0,vi.onMessageByType)("unsubscribe-from-node",e=>{zE(e)}));a(Eo,"ensureNode")});var Zs=P(Rk=>{"use strict";var ir=require("path"),{watch:Hne}=require("chokidar"),An=require("fs-extra"),vu=require("node-forge"),ik=require("net"),{generateKeyPair:_O,X509Certificate:go,createPrivateKey:ok}=require("crypto"),kne=require("util");_O=kne.promisify(_O);var yt=vu.pki,Js=require("joi"),{v4:ak}=require("uuid"),{validateBySchema:EO}=nt(),St=X(),Wn=ce(),ms=(G(),D($)),{CONFIG_PARAMS:tl}=ms,Xs=gA(),{ClientError:ga}=he(),jE=require("node:tls"),{relative:ck,join:Fne}=require("node:path"),{CERT_PREFERENCE_APP:jwe,CERTIFICATE_VALUES:ek}=Xs,Gne=lc(),hO=wt(),{table:qne,getDatabases:$ne,databases:fO}=(Ue(),D(at)),{getJWTRSAKeys:tk}=(yu(),D(I_));Object.assign(Rk,{generateKeys:TO,updateConfigCert:mk,createCsr:Qne,signCertificate:Jne,setCertTable:Uu,loadCertificates:_k,reviewSelfSignedCert:RO,createTLSSelector:gk,listCertificates:Tk,addCertificate:nse,removeCertificate:ise,createNatsCerts:ese,generateCertsKeys:Zne,getReplicationCert:q_,getReplicationCertAuth:jne,renewSelfSigned:tse,hostnamesFromCert:yO,getKey:ose});var{urlToNodeName:lk,getThisNodeUrl:Vne,getThisNodeName:JE,clearThisNodeName:Kne}=(ps(),D(Aa)),{readFileSync:Yne,statSync:uk}=require("node:fs"),Qwe=ce(),{getTicketKeys:Wne,onMessageFromWorkers:zne}=st(),Ea=X(),{isMainThread:dk}=require("worker_threads"),{TLSSocket:fk,createSecureContext:Jwe}=require("node:tls"),gO=3650,G_=["127.0.0.1","localhost","::1"],SO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];zne(async e=>{e.type===ms.ITC_EVENT_TYPES.RESTART&&(Wn.initSync(!0),await RO())});var xr;function Ta(){return xr||(xr=$ne().system.hdb_certificate,xr||(xr=qne({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),xr}a(Ta,"getCertTable");async function q_(){let e=gk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(JE());if(!r)return;let n=new go(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(q_,"getReplicationCert");async function jne(){Ta();let e=(await q_()).options.cert,r=new go(e).issuer.match(/CN=(.*)/)?.[1];return xr.get(r)}a(jne,"getReplicationCertAuth");var rk,Sa=new Map;function _k(){if(rk)return;rk=!0;let e=[{configKey:tl.TLS},{configKey:tl.OPERATIONSAPI_TLS}];Ta();let t=ir.dirname(hO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=hO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&ck(Fne(t,"keys"),o);c&&nk(o,l=>{Sa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&dk){let f;nk(u,d=>{if(ek.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=Ek(u),p=new go(_),S;try{S=Ak(p)}catch(T){logger.error("error extracting host name from certificate",T);return}if(S==null){logger.error("No host name found on certificate");return}if(p.checkIssued(new go(ek.cert)))return;let g=xr.primaryStore.get(S),R=uk(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=E){R<E&&St.info(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=xr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:R,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(_k,"loadCertificates");function nk(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&dk&&St.warn(`Reloading ${r}:`,i),n=c,t(Ek(i)))}catch(c){St.error(`Error loading ${r}:`,i,c)}},"loadFile");An.existsSync(e)?s(e,uk(e)):St.error(`${r} file not found:`,e),Hne(e,{persistent:!1}).on("change",s)}a(nk,"loadAndWatch");function pO(){let e=Vne();if(e==null){let t=G_[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return lk(e)}a(pO,"getHost");function QE(){let e=JE();if(e==null){let t=G_[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(QE,"getCommonName");async function Qne(){let e=await q_(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);St.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:QE()},...SO];St.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:hk()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),vu.pki.certificationRequestToPem(n)}a(Qne,"createCsr");function hk(){let e=G_.includes(QE())?G_:[...G_,QE()];return e.includes(pO())||e.push(pO()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>ik.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(hk,"certExtensions");async function Jne(e){let t={},r=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ta();for await(let f of xr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(Sa.has(f.private_key_name)){n=Sa.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await An.exists(ir.join(r,f.private_key_name))){n=An.readFile(ir.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await mO();s=f.ca,n=f.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);St.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return St.error(f),new Error("Error verifying CSR: "+f.message)}let c=vu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+gO),St.info("sign cert setting validity:",c.validity),St.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),St.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;St.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,vu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else St.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Jne,"signCertificate");async function Xne(e,t){await Uu({name:JE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Uu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Xne,"createCertificateTable");async function Uu(e){let t=new go(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Ta(),await xr.patch(e)}a(Uu,"setCertTable");async function TO(){let e=await _O("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(TO,"generateKeys");async function AO(e,t,r){let n=yt.createCertificate();if(!t){let o=await q_();t=yt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gO);let i=[{name:"commonName",value:QE()},...SO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(hk()),n.sign(e,vu.md.sha256.create()),yt.certificateToPem(n)}a(AO,"generateCertificates");async function mO(){let e=await Tk(),t;for(let r of e){if(!r.is_authority)continue;let n=await Sk(r.private_key_name);if(r.private_key_name&&n&&new go(r.certificate).checkPrivateKey(ok(n))){St.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;St.trace("No CA found with matching private key")}a(mO,"getCertAuthority");async function pk(e,t,r=!0){let n=yt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Wn.get(tl.REPLICATION_HOSTNAME)??lk(Wn.get(tl.REPLICATION_URL))??ak().split("-")[0]}`},...SO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,vu.md.sha256.create());let o=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await An.writeFile(c,yt.privateKeyToPem(e)),n}a(pk,"generateCertAuthority");async function Zne(){let{private_key:e,public_key:t}=await TO(),r=await pk(e,t),n=await AO(e,t,r);await Xne(n,r),mk()}a(Zne,"generateCertsKeys");async function ese(){let e=await AO(yt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await An.exists(r)||await An.writeFile(r,e);let n=ir.join(t,Xs.NATS_CA_PEM_NAME);await An.exists(n)||await An.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(ese,"createNatsCerts");async function tse(){Ta();for await(let e of xr.search([{attribute:"is_self_signed",value:!0}]))await xr.delete(e.name);await RO()}a(tse,"renewSelfSigned");async function RO(){Kne(),await _k(),Ta();let e=await mO();if(!e){St.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:yt.privateKeyFromPem(An.readFileSync(u)),keyPath:u}}catch(f){return St.warn(`Failed to parse private key from ${u}:`,f.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Wn.get(tl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let f=r(u.privateKey);if(s=f.key,i=f.keyPath,f.key)break}}else{let u=Wn.get(tl.TLS_PRIVATEKEY),f=r(u);s=f.key,i=f.keyPath}let o=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),c=ck(o,i);s||(St.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{private_key:s}=await TO(),An.existsSync(ir.join(o,Xs.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${ak().split("-")[0]}.pem`),await An.writeFile(ir.join(o,c),yt.privateKeyToPem(s)));let l=await pk(s,yt.setRsaPublicKey(s.n,s.e),!1);await Uu({name:l.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await q_()){let r=JE();St.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await mO();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await AO(yt.privateKeyFromPem(e.private_key),s,n);await Uu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(RO,"reviewSelfSignedCert");function mk(){let e=Gne(Object.keys(ms.CONFIG_PARAM_MAP),!0),t=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.PRIVATEKEY_PEM_NAME),n=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Xs.NATS_CA_PEM_NAME),i=ms.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),hO.updateConfigValue(void 0,void 0,o,!1,!0)}a(mk,"updateConfigCert");function Ek(e){return e.startsWith("-----BEGIN")?e:Yne(e,"utf8")}a(Ek,"readPEM");var sk=jE.createSecureContext;jE.createSecureContext=function(e){if(!e.cert||!e.key)return sk(e);let t={...e};delete t.key,delete t.cert;let r=sk(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var rse=fk.prototype._init;fk.prototype._init=function(e,t){rse.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var el=new Map;function gk(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),el.clear();let f=0;for await(let d of fO.system.hdb_certificate.search([])){let h=d.certificate,_=new go(h);d.is_authority&&(_.asString=h,el.set(_.subject,h))}for await(let d of fO.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let p=await Sk(d.private_key_name),S=d.certificate,g=new go(S);if(el.has(g.issuer)&&(S+=`
|
|
23
|
+
`+el.get(g.issuer)),!p||!S)throw new Error("Missing private key or certificate for secure server");let R={ciphers:d.ciphers,ticketKeys:Wne(),availableCAs:el,ca:t&&Array.from(el.values()),cert:S,key:p,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let E=jE.createSecureContext(R);E.name=d.name,E.options=R,E.quality=_,E.certificateAuthorities=Array.from(el),E.certStart=S.toString().slice(0,100);let T=d.hostnames??yO(g);Array.isArray(T)||(T=[T]);let O;for(let v of T)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===pO()&&(_+=2),ik.isIP(v)&&(O=!0);let F=r.get(v)?.quality??0;_>F&&r.set(v,E)}else Ea.error("No hostname found for certificate at",jE.certificate);Ea.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",T,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){Ea.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),fO.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Ea.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return Ea.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?Ea.debug("No certificate found to match",o,"using the default certificate"):Ea.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Ea.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(gk,"createTLSSelector");async function Sk(e){let t=Sa.get(e);return!t&&e?await An.readFile(ir.join(Wn.get(tl.ROOTPATH),ms.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(Sk,"getPrivateKeyByName");async function Tk(){Ta();let e=[];for await(let t of xr.search([]))e.push(t);return e}a(Tk,"listCertificates");async function nse(e){let t=EO(e,Js.object({name:Js.string().required(),certificate:Js.string().required(),is_authority:Js.boolean().required(),private_key:Js.string(),hosts:Js.array(),uses:Js.array()}));if(t)throw new ga(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new go(n),c=!1,l=!1,u;for(let[_,p]of Sa)!s&&!c&&o.checkPrivateKey(ok(p))&&(c=!0,u=_),s&&s===p&&(l=!0,u=_);if(!i&&!s&&!c)throw new ga("A suitable private key was not found for this certificate");let f;if(!r){try{f=Ak(o)}catch(_){St.error(_)}if(f==null)throw new ga("Error extracting certificate common name, please provide a name parameter")}let d=sse(r??f);s&&!c&&!l&&(await An.writeFile(ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME,d+".pem"),s),Sa.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),e.ciphers&&(h.ciphers=e.ciphers),await Uu(h),"Successfully added certificate: "+d}a(nse,"addCertificate");function sse(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(sse,"sanitizeName");async function ise(e){let t=EO(e,Js.object({name:Js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;Ta();let n=await xr.get(r);if(!n)throw new ga(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await xr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(St.info("Removing private key named",s),await An.remove(ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME,s)))}return await xr.delete(r),"Successfully removed "+r}a(ise,"removeCertificate");function Ak(e){let t=e.subject.match(/CN=(.*)/)?.[1];return t||yO(e)[0]}a(Ak,"getPrimaryHostName");function yO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=certObj.subject.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(yO,"hostnamesFromCert");async function ose(e){if(e.bypass_auth!==!0)throw new ga("Unauthorized","401");let t=EO(e,Js.object({name:Js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await tk()).privateKey;if(r===".jwtPublic")return(await tk()).publicKey;if(Sa.get(r))return Sa.get(e.name);throw new ga("Key not found")}a(ose,"getKey")});var Vk={};Be(Vk,{CONFIRMATION_STATUS_POSITION:()=>Gk,NodeReplicationConnection:()=>Bu,OPERATION_REQUEST:()=>wO,RECEIVED_TIME_POSITION:()=>CO,RECEIVED_VERSION_POSITION:()=>IO,RECEIVING_STATUS_POSITION:()=>PO,RECEIVING_STATUS_RECEIVING:()=>$k,RECEIVING_STATUS_WAITING:()=>qk,SENDING_TIME_POSITION:()=>$_,createWebSocket:()=>sg,database_subscriptions:()=>ya,replicateOverWS:()=>V_,table_update_listeners:()=>LO});async function sg(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=tt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!OO){let l=(0,Bk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),OO=u.secureContexts}if(i=OO.get(s),i&&ae.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,kk.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=Hk.createSecureContext({...i.options,ca:[...nl,...i.options.availableCAs.values()]})),new Uk.WebSocket(e,"harperdb-replication-v1",c)}function V_(e,t,r){let n=t.port||t.securePort,s=rl.pid%1e3+"-"+xk.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||ya,d,h,_=!1,p=t.subscription;p?.then&&p.then(A=>p=A);let S=t.tables||u&&Ze()[u];if(!r){ae.error?.("No authorization provided"),sn(1008,"Unauthorized");return}let g=new Map,R=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let T,O,v,F,q,j,te,se=5e3,z,ne=0,le=0,ie=0,Re=vk.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,pe=new Map,Ae=[],xt=0,dt;if(t.url){let A=a(()=>{q&&le===e._socket?.bytesRead&&ie===e._socket?.bytesWritten?e.terminate():(q=performance.now(),e.ping(),le=e._socket?.bytesRead,ie=e._socket?.bytesWritten)},"send_ping");v=setInterval(A,Lk).unref(),A()}else Cn();e._socket?.setMaxListeners(200);function Cn(){clearTimeout(F),le=e._socket?.bytesRead,ie=e._socket?.bytesWritten,F=setTimeout(()=>{le===e._socket?.bytesRead&&ie===e._socket?.bytesWritten&&(ae.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},Lk*2).unref()}a(Cn,"resetPingTimer");function nn(){return h||(h=KE(d,u,E)),h}a(nn,"getSharedStatus"),u&&Wo(u);let wr,kd,rc=[],KT=[],YT,Bt=[],Fd=[],Gd=[],WT=150,Ep=25,qd=0,De=0,$d=!1,Wi,Ir,Pn,nc;e.on("message",A=>{ne=performance.now();try{let N=A.dataView=new sl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let w=(0,et.decode)(A),[H,U,Q]=w;switch(H){case bk:{if(U){if(E){if(E!==U){ae.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${U}, disconnecting`),e.send((0,et.encode)([xu])),sn(1008,"Node name mismatch");return}}else if(E=U,t.connection?.tentativeNode){let Y=t.connection.tentativeNode;Y.name=E,t.connection.tentativeNode=null,Eo(E,Y)}if(t.connection&&(t.connection.nodeName=E),ae.debug?.(s,"received node name:",E,"db:",u),!u)try{Wo(u=w[2]),u==="system"&&(wr=pa(t,(Y,V)=>{Yo(V)&&Yd(V)}),e.on("close",()=>{wr?.remove()}))}catch(Y){ae.warn?.(s,"Error setting database",Y),e.send((0,et.encode)([xu])),sn(1008,Y.message);return}Ko()}break}case Pk:{ae.debug?.(s,"Received table definitions for",U.map(Y=>Y.table));for(let Y of U){let V=w[2];Y.database=V;let ue;Yo(V)&&(V==="system"?Ye[V]?.[Y.table]||(ue=I(Y,Ye[V]?.[Y.table])):ue=I(Y,Ye[V]?.[Y.table]),d||(d=ue?.auditStore),S||(S=Ze()?.[V]))}break}case xu:sn();break;case wO:try{let Y=r?.replicates||r?.subscribers||r?.name;server.operation(U,{user:r},!Y).then(V=>{Array.isArray(V)&&(V={results:V}),V.requestId=U.requestId,e.send((0,et.encode)([ZE,V]))},V=>{e.send((0,et.encode)([ZE,{requestId:U.requestId,error:V instanceof Error?V.toString():V}]))})}catch(Y){e.send((0,et.encode)([ZE,{requestId:U.requestId,error:Y instanceof Error?Y.toString():Y}]))}break;case ZE:let{resolve:J,reject:k}=g.get(U.requestId);U.error?k(new Error(U.error)):J(U),g.delete(U.requestId);break;case bO:let Ce=w[3];S||(u?ae.error?.(s,"No tables found for",u):ae.error?.(s,"Database name never received"));let de=S[Ce];de=I({table:Ce,database:u,attributes:U.attributes,schemaDefined:U.schemaDefined},de),rc[Q]={name:Ce,decoder:new et.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:U.typedStructs,structures:U.structures}),getEntry(Y){return de.primaryStore.getEntry(Y)},rootStore:de.primaryStore.rootStore};break;case Ok:nc=d?VH(U,d):new Map,YT=w[2],ae.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${YT}`);break;case Nk:let ye=Q;Gd[ye]=U;break;case Ck:nn()[Gk]=U,ae.trace?.(s,"received and broadcasting committed update",U),nn().buffer.notify();break;case Ik:T=U,p.send({type:"end_txn",localTime:T,remoteNodeIds:R});break;case eg:{let Y=w[1],{fileId:V,size:ue,finished:_e,error:me}=Y,Te=pe.get(V);ae.debug?.("Received blob",V,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",w[2].length,"finished",_e),Te||(Te=new NO.PassThrough,Te.expectedSize=ue,pe.set(V,Te)),Te.lastChunk=Date.now();let Pe=w[2];Dt(Pe.byteLength,"bytes-received",`${E}.${u}`,"replication","blob");try{_e?(me?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+me))):Te.end(Pe),Te.connectedToBlob&&pe.delete(V)):Te.write(Pe)}catch(Ve){ae.error?.(`Error receiving blob for ${Te.recordId} from ${E} and streaming to storage`,Ve),pe.delete(V)}break}case wk:{let Y=U,V;try{let ue=w[3],_e=KT[Q]||(KT[Q]=S[w[4]]);if(!_e)return ae.warn?.("Unknown table id trying to handle record request",Q);let me=_e.primaryStore.getBinaryFast(Symbol.for("structures")),Te=me?.length;if(Te>0&&Te!==De){De=Te;let Ve=(0,et.decode)(me);e.send((0,et.encode)([bO,{typedStructs:Ve.typed,structures:Ve.named},Q,_e.tableName]))}let Pe=_e.primaryStore.getBinaryFast(ue);if(Pe){let Ve=_e.primaryStore.decoder.decode(Pe,{valueAsBuffer:!0}),We=Ve.value;Ve[yc]&pn&&(We=Buffer.from(We),bf(()=>_e.primaryStore.decoder.decode(Pe),sc,_e.primaryStore.rootStore)),V=(0,et.encode)([XE,Y,{value:We,expiresAt:Ve.expiresAt,version:Ve.version,residencyId:Ve.residencyId,nodeId:Ve.nodeId,user:Ve.user}])}else V=(0,et.encode)([XE,Y])}catch(ue){V=(0,et.encode)([XE,Y,{error:ue.message}])}e.send(V);break}case XE:{let{resolve:Y,reject:V,tableId:ue,key:_e}=g.get(w[1]),me=w[2];if(me?.error)V(new Error(me.error));else if(me){let Te;dm(()=>{let Pe=rc[ue].decoder.decode(me.value);me.value=Pe,me.key=_e,Y(me)||Te&&setTimeout(()=>Te.forEach(cm),6e4).unref()},Pe=>{let Ve=Vd(Pe,_e);return Te||(Te=[]),Te.push(Ve),Ve})}else Y();g.delete(w[1]);break}case yk:{Pn=U;let Y,V,ue=!1;if(p){if(u!==p.databaseName&&!p.then){ae.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=f.get(u);if(ae.debug?.(s,"received subscription request for",u,"at",Pn),!p){let Ie;p=new Promise(Ht=>{ae.debug?.("Waiting for subscription to database "+u),Ie=Ht}),p.ready=Ie,ya.set(u,p)}if(r.name)V=sr().subscribe(r.name),V.then(async Ie=>{Y=Ie;for await(let Ht of Y){let Ot=Ht.value;if(!(Ot?.replicates===!0||Ot?.replicates?.receives||Ot?.subscriptions?.some(Rr=>(Rr.database||Rr.schema)===u&&Rr.publish!==!1))){ue=!0,e.send((0,et.encode)([xu])),sn(1008,`Unauthorized database subscription to ${u}`);return}}},Ie=>{ae.error?.(s,"Error subscribing to HDB nodes",Ie)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,et.encode)([xu])),sn(1008,`Unauthorized database subscription to ${u}`);return}if(Ir&&(ae.debug?.(s,"stopping previous subscription",u),Ir.emit("close")),Pn.length===0)return;let _e=Pn[0],me=a(Ie=>{if(Ie&&(_e.replicateByDefault?!_e.tables.includes(Ie.tableName):_e.tables.includes(Ie.tableName)))return{table:Ie}},"tableToTableEntry"),Te={txnTime:0},Pe,Ve,We=1/0,Ms,is=a((Ie,Ht)=>{if(Ie.type==="end_txn"){Te.txnTime&&(o[i]!==66&&ae.error?.("Invalid encoding of message"),K(9),K(ng),y(Ms=Ht),Sp()),i=c,Te.txnTime=0;return}let Ot=Ie.nodeId,Rr=Ie.tableId,At=Ve[Rr];if(!At&&(At=Ve[Rr]=me(p.tableById[Rr]),!At))return ae.debug?.("Not subscribed to table",Rr);let os=At.table,kt=os.primaryStore,vs=kt.encoder;(Ie.extendedType&Tm||!vs.typedStructs)&&(vs._mergeStructures(vs.getStructures()),vs.typedStructs&&(vs.lastTypedStructuresLength=vs.typedStructs.length));let Tp=Pe[Ot];if(!(Tp&&Tp.startTime<Ht&&(!Tp.endTime||Tp.endTime>Ht)))return rg&&ae.trace?.(s,"skipping replication update",Ie.recordId,"to:",E,"from:",Ot,"subscribed:",Pe),nP();rg&&ae.trace?.(s,"sending replication update",Ie.recordId,"to:",E,"from:",Ot,"subscribed:",Pe);let zT=Ie.version;Te.txnTime!==zT&&(Te.txnTime&&(rg&&ae.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&ae.error?.("Invalid encoding of message"),Sp()),Te.txnTime=zT,i=c,y(zT));let ac=Ie.residencyId,jT=Kd(ac,os),Ap;if(jT&&!jT.includes(E)){let Us=Kd(Ie.previousResidencyId,os);if(Us&&!Us.includes(E)&&(Ie.type==="put"||Ie.type==="patch")||os.getResidencyById)return nP();let Wd=Ie.recordId;ae.trace?.(s,"sending invalidation",Wd,E,"from",Ot);let XT=0;ac&&(XT|=Nc),Ie.previousResidencyId&&(XT|=wc);let ZT,Rp=null;for(let sP in os.indices){if(!Rp){if(ZT=Ie.getValue(kt,!0),!ZT)break;Rp={}}Rp[sP]=ZT[sP]}Ap=bc(Ie.version,Rr,Wd,null,Ot,Ie.user,Ie.type==="put"||Ie.type==="patch"?"invalidate":Ie.type,vs.encode(Rp),XT,ac,Ie.previousResidencyId,Ie.expiresAt)}function nP(){return ae.trace?.(s,"skipping audit record",Ie.recordId),j||(j=setTimeout(()=>{j=null,(Ms||0)+Dk/2<We&&(rg&&ae.trace?.(s,"sending skipped sequence update",We),e.send((0,et.encode)([Ik,We])))},Dk).unref()),new Promise(setImmediate)}a(nP,"skipAuditRecord");let QT=vs.typedStructs,JT=vs.structures;if((QT?.length!=At.typed_length||JT?.length!=At.structure_length)&&(At.typed_length=QT?.length,At.structure_length=JT.length,ae.debug?.(s,"send table struct",At.typed_length,At.structure_length),At.sentName||(At.sentName=!0),e.send((0,et.encode)([bO,{typedStructs:QT,structures:JT,attributes:os.attributes,schemaDefined:os.schemaDefined},Rr,At.table.tableName]))),ac&&!Fd[ac]&&(e.send((0,et.encode)([Nk,jT,ac])),Fd[ac]=!0),Ap)K(Ap.length),m(Ap);else{let Us=Ie.encoded;Ie.extendedType&pn&&bf(()=>Ie.getValue(kt),sc,kt.rootStore);let Wd=Us[0]===66?8:0;K(Us.length-Wd),m(Us,Wd),ae.trace?.("wrote record",Ie.recordId,"length:",Us.length)}return e._socket.writableNeedDrain?new Promise(Us=>{ae.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Us)}):xt>Ep?new Promise(Us=>{dt=Us}):new Promise(setImmediate)},"sendAuditRecord"),Sp=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ae.debug?.(s,"Sent message, size:",c-i),Dt(c-i,"bytes-sent",`${E}.${u}`,"replication","egress")):ae.debug?.(s,"skipping empty transaction")},"sendQueuedData");Ir=new DO.EventEmitter,Ir.once("close",()=>{ue=!0,Y?.end()});for(let{startTime:Ie}of Pn)Ie<We&&(We=Ie);(V||Promise.resolve()).then(async()=>{p=await p,d=p.auditStore,Ve=p.tableById.map(me),Pe=[];for(let{name:Ht,startTime:Ot,endTime:Rr}of Pn){let At=VE(Ht,d);ae.debug?.("subscription to",Ht,"using local id",At,"starting",Ot),Pe[At]={startTime:Ot,endTime:Rr}}Yd(u),wr||(wr=il(Ht=>{Ht.databaseName===u&&Yd(u)}),kd=K_(Ht=>{Ht===u&&(e.send((0,et.encode)([xu])),sn())}),e.on("close",()=>{wr?.remove(),kd?.remove()})),e.send((0,et.encode)([Ok,U_(p.auditStore),Pn.map(({name:Ht})=>Ht)]));let Ie=!0;do{isFinite(We)||(ae.warn?.("Invalid sequence id "+We),sn(1008,"Invalid sequence id"+We));let Ht;if(Ie&&!ue&&(Ie=!1,We===0)){let Ot=We,Rr=ig(d);for(let At in S){if(!me(At))continue;let os=S[At];ae.warn?.(`Fully copying ${At} table to ${E}`);for(let kt of os.primaryStore.getRange({snapshot:!1,versions:!0})){if(ue)return;if(kt.localTime>=We){ae.trace?.(s,"Copying record from",u,At,kt.key,kt.localTime),Ot=Math.max(kt.localTime,Ot),Ht=!0,nn()[$_]=1;let vs=bc(kt.version,os.tableId,kt.key,null,Rr,null,"put",bf(()=>os.primaryStore.encoder.encode(kt.value),sc),kt.metadataFlags&-256,kt.residencyId,null,kt.expiresAt);await is({recordId:kt.key,tableId:os.tableId,type:"put",getValue(){return kt.value},encoded:vs,version:kt.version,residencyId:kt.residencyId,nodeId:Rr,extendedType:kt.metadataFlags},kt.localTime)}}}Ht&&is({type:"end_txn"},We),nn()[$_]=0,We=Ot}for(let{key:Ot,value:Rr}of d.getRange({start:We||1,exclusiveStart:!0,snapshot:!1})){if(ue)return;let At=Ct(Rr);ae.debug?.("sending audit record",new Date(Ot)),nn()[$_]=Ot,We=Ot,await is(At,Ot),Ir.startTime=Ot,Ht=!0}Ht&&is({type:"end_txn"},We),nn()[$_]=0,await Kk(d)}while(!ue)}).catch(Ie=>{ae.error?.(s,"Error handling subscription to node",Ie),sn(1008,"Error handling subscription to node")});break}}return}N.position=8;let b=!0,C,x;do{nn();let w=N.readInt();if(w===9&&N.getUint8(N.position)==ng){N.position++,T=x=N.readFloat64(),h[IO]=T,h[CO]=Date.now(),h[PO]=qk,ae.trace?.("received remote sequence update",T,u);break}let H=N.position,U=Ct(A,H,H+w),Q=rc[U.tableId];Q||ae.error?.(`No table found with an id of ${U.tableId}`);let J;U.residencyId&&(J=Gd[U.residencyId],ae.trace?.(s,"received residency list",J,U.type,U.recordId));try{let k=U.recordId;dm(()=>{C={table:Q.name,id:k,type:U.type,nodeId:nc.get(U.nodeId),residencyList:J,timestamp:U.version,value:U.getValue(Q),user:U.user,beginTxn:b,expiresAt:U.expiresAt}},Ce=>Vd(Ce,k))}catch(k){throw k.message+="typed structures for current decoder"+JSON.stringify(Q.decoder.typedStructs),k}b=!1,ae.trace?.(s,"received replication message",U.type,"id",C.id,"version",new Date(U.version),"nodeId",C.nodeId),h[IO]=U.version,h[CO]=Date.now(),h[PO]=$k,p.send(C),N.position=H+w}while(N.position<A.byteLength);qd++,Dt(A.byteLength,"bytes-received",`${E}.${u}.${C?.table||"unknown_table"}`,"replication","ingest"),qd>WT&&!$d&&($d=!0,e.pause(),ae.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),p.send({type:"end_txn",localTime:T,remoteNodeIds:R,async onCommit(){if(C){let w=Date.now()-C.timestamp;Dt(w,"replication-latency",E+"."+u+"."+C.table,C.type,"ingest")}qd--,$d&&($d=!1,e.resume(),ae.debug?.(`Replication resuming ${E}`)),Ae.length>0&&await Promise.all(Ae),ae.trace?.("All blobs finished"),!O&&x&&(ae.trace?.(s,"queuing confirmation of a commit at",x),setTimeout(()=>{e.send((0,et.encode)([Ck,O])),ae.trace?.(s,"sent confirmation of a commit at",O),O=null},cse)),O=x,ae.debug?.("last sequence committed",new Date(x),u)}})}catch(N){ae.error?.(s,"Error handling incoming replication message",N)}}),e.on("ping",Cn),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-q,t.isSubscriptionConnection&&Zc({name:E,database:u,url:t.url,latency:t.connection.latency})),q=null}),e.on("close",(A,N)=>{clearInterval(v),clearTimeout(F),clearInterval(te),Ir&&Ir.emit("close"),Wi&&Wi.end();for(let[b,{reject:C}]of g)C(new Error(`Connection closed ${N?.toString()} ${A}`));ae.debug?.(s,"closed",A,N?.toString())});function sn(A,N){e.isFinished=!0,e.close(A,N),t.connection?.emit("finished")}a(sn,"close");let Cr=new Set;async function sc(A){let N=lm(A);if(Cr.has(N)){ae.debug?.("Blob already being sent",N);return}Cr.add(N);try{let b;xt++;for await(let C of A.stream())b&&(ae.debug?.("Sending blob chunk",N,"length",b.length),e.send((0,et.encode)([eg,{fileId:N,size:A.size},b]))),b=C,e._socket.writableNeedDrain&&(ae.debug?.("draining",N),await new Promise(x=>e._socket.once("drain",x)),ae.debug?.("drained",N)),Dt(C.length,"bytes-sent",`${E}.${u}`,"replication","blob");ae.debug?.("Sending final blob chunk",N,"length",b.length),e.send((0,et.encode)([eg,{fileId:N,size:A.size,finished:!0},b]))}catch(b){ae.debug?.("Error sending blob",b),e.send((0,et.encode)([eg,{fileId:N,finished:!0,error:b.toString()},Buffer.alloc(0)]))}finally{Cr.delete(N),xt--,xt<Ep&&dt?.()}}a(sc,"sendBlobs");function Vd(A,N){let b=lm(A),C=pe.get(b);ae.debug?.("Received transaction for record",N,"with blob",b,"has stream",!!C,"ended",!!C?.writableEnded),C?C.writableEnded&&pe.delete(b):(C=new NO.PassThrough,pe.set(b,C)),C.connectedToBlob=!0,C.lastChunk=Date.now(),C.recordId=N,A.size===void 0&&C.expectedSize&&(A.size=C.expectedSize);let x=C.blob??createBlob(C,A);C.blob=x;let w=x.save({primaryStore:p.auditStore});return w&&(w.blobId=b,Ae.push(w),w.finally(()=>{ae.debug?.(`Finished receiving blob stream ${b}`),Ae.splice(Ae.indexOf(w),1)})),x}a(Vd,"receiveBlobs");function Ko(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Ko)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;d||(d=p?.auditStore);try{for(let C of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let x of C.value.nodes||[])x.lastTxnTime>(A.get(x.id)??0)&&A.set(x.id,x.lastTxnTime)}catch(C){if(!C.message.includes("Can not re"))throw C}let N=t.connection?.nodeSubscriptions?.[0];R=[];let b=t.connection?.nodeSubscriptions?.map((C,x)=>{let w=[],{replicateByDefault:H}=C;if(C.subscriptions){for(let k of C.subscriptions)if(k.subscribe&&(k.schema||k.database)===u){let Ce=k.table;S?.[Ce]?.replicate!==!1&&w.push(Ce)}H=!1}else for(let k in S)(H?S[k].replicate===!1:S[k].replicate)&&w.push(k);let U=d&&VE(C.name,d),Q=p?.dbisDB?.get([Symbol.for("seq"),U])??1,J=Math.max(Q?.seqId??1,(typeof C.start_time=="string"?new Date(C.start_time).getTime():C.start_time)??1);if(ae.debug?.("Starting time recorded in db",C.name,U,u,Q?.seqId,"start time:",J,new Date(J)),N!==C){let k=d&&VE(N.name,d),Ce=p?.dbisDB?.get([Symbol.for("seq"),k])??1;for(let de of Ce?.nodes||[])de.name===C.name&&(J=de.seqId,ae.debug?.("Using sequence id from proxy node",N.name,J))}if(U===void 0?ae.warn("Starting subscription request from node",C,"but no node id found"):R.push(U),A.get(U)>J&&(J=A.get(U),ae.debug?.("Updating start time from more recent txn recorded",N.name,J)),J===1&&tg)try{new URL(tg).hostname===C.name&&E===C.name?(ae.warn?.(`Requesting full copy of database ${u} from ${tg}`),J=0):J=Date.now()-6e4}catch(k){ae.error?.("Error parsing leader URL",tg,k)}return ae.trace?.(s,"defining subscription request",C.name,u,new Date(J)),{name:C.name,replicateByDefault:H,tables:w,startTime:J,endTime:C.end_time}});if(b)if(ae.debug?.(s,"sending subscription request",b,p?.dbisDB?.path),clearTimeout(z),b.length>0)e.send((0,et.encode)([yk,b]));else{let C=a(()=>{let x=performance.now();z=setTimeout(()=>{ne<=x?sn(1008,"Connection has no subscriptions and is no longer used"):C()},se).unref()},"schedule_close");C()}}a(Ko,"sendSubscriptionRequestUpdate");function Kd(A,N){if(!A)return;let b=Bt[A];return b||(b=N.getResidencyRecord(A),Bt[A]=b),b}a(Kd,"getResidence");function Yo(A){return!(Ra&&Ra!="*"&&!Ra[A]&&!Ra.includes?.(A)&&!Ra.some?.(N=>N.name===A))}a(Yo,"checkDatabaseAccess");function Wo(A){if(p=p||f.get(A),!Yo(A))throw new Error(`Access to database "${A}" is not permitted`);p||ae.warn?.(`No database named "${A}" was declared and registered`),d=p?.auditStore,S||(S=Ze()?.[A]);let N=tt();if(N===E)throw N?new Error("Should not connect to self",N):new Error("Node name not defined");return gp(N,A),!0}a(Wo,"setDatabase");function gp(A,N){let b=Ze()?.[N],C=[];for(let x in b){let w=b[x];C.push({table:x,schemaDefined:w.schemaDefined,attributes:w.attributes.map(H=>({name:H.name,type:H.type,isPrimaryKey:H.isPrimaryKey}))})}ae.trace?.("Sending database info for node",A,"database name",N),e.send((0,et.encode)([bk,A,N,C]))}a(gp,"sendNodeDBName");function Yd(A){let N=Ze()?.[A],b=[];for(let C in N){if(Pn&&!Pn.some(w=>w.replicateByDefault?!w.tables.includes(C):w.tables.includes(C)))continue;let x=N[C];b.push({table:C,schemaDefined:x.schemaDefined,attributes:x.attributes.map(w=>({name:w.name,type:w.type,isPrimaryKey:w.isPrimaryKey}))})}e.send((0,et.encode)([Pk,b,A]))}a(Yd,"sendDBSchema"),te=setInterval(()=>{for(let[A,N]of pe)N.lastChunk+Re<Date.now()&&(ae.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${N.recordId??"unknown"} from ${E}`),pe.delete(A),N.end())},Re).unref();let ic=1,oc=[];return{end(){Wi&&Wi.end(),Ir&&Ir.emit("close")},getRecord(A){let N=ic++;return new Promise((b,C)=>{let x=[wk,N,A.table.tableId,A.id];oc[A.table.tableId]||(x.push(A.table.tableName),oc[A.table.tableId]=!0),e.send((0,et.encode)(x)),ne=performance.now(),g.set(N,{tableId:A.table.tableId,key:A.id,resolve(w){let{table:H,entry:U}=A;if(b(w),w)return H._recordRelocate(U,w)},reject:C})})},sendOperation(A){let N=ic++;return A.requestId=N,e.send((0,et.encode)([wO,A])),new Promise((b,C)=>{g.set(N,{resolve:b,reject:C})})}};function K(A){L(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function m(A,N=0,b=A.length){let C=b-N;L(C),A.copy(o,c,N,b),c+=C}function y(A){L(8),l.setFloat64(c,A),c+=8}function L(A){if(A+16>o.length-c){let N=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(N,0,i,c),c=c-i,i=0,o=N,l=new DataView(o.buffer,0,o.length)}}function I(A,N){let b=A.database??"data";if(b!=="data"&&!Ye[b]){ae.warn?.("Database not found",A.database);return}N||(N={});let C=N.schemaDefined,x=!1,w=A.schemaDefined,H=N.attributes||[];for(let U=0;U<A.attributes?.length;U++){let Q=A.attributes[U],J=H.find(k=>k.name===Q.name);(!J||J.type!==Q.type)&&(C?ae.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Q.name}: ${Q.type}' from '${E}' does not match local attribute ${J?"'"+J.name+": "+J.type+"'":"which does not exist"}`):(x=!0,w||(Q.indexed=!0),J?H[H.indexOf(J)]=Q:H.push(Q)))}return x?(ae.debug?.("(Re)creating",A),_t({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:H,...N})):N}}var vk,et,Uk,xk,ae,DO,Bk,Hk,rl,kk,NO,Fk,yk,bk,Ok,xu,Nk,bO,wk,XE,wO,ZE,Ik,Ck,Pk,eg,Gk,IO,CO,$_,PO,qk,$k,ase,tg,LO,ya,rg,Dk,cse,Lk,OO,Mk,Bu,MO=be(()=>{Ue();so();cO();vO();ps();vk=M(ce());G();ru();et=require("msgpackr"),Uk=require("ws"),xk=require("worker_threads"),ae=M(mi());F_();DO=require("events"),Bk=M(Zs()),Hk=M(require("node:tls"));Xc();rl=M(require("node:process")),kk=require("node:net");Ci();fs();NO=require("node:stream"),Fk=M(require("minimist")),yk=129,bk=140,Ok=141,xu=142,Nk=130,bO=132,wk=133,XE=134,wO=136,ZE=137,Ik=143,Ck=144,Pk=145,eg=146,Gk=0,IO=1,CO=2,$_=3,PO=4,qk=0,$k=1,ase=(0,Fk.default)(rl.argv),tg=ase.HDB_LEADER_URL??rl.env.HDB_LEADER_URL,LO=new Map,ya=new Map,rg=!0,Dk=300,cse=2,Lk=3e4;a(sg,"createWebSocket");Mk=500,Bu=class extends DO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Qs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=Mk;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await sg(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;ae.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${rl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ae[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=Mk,this.nodeSubscriptions&&Zc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=V_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ae.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ae.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ae.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(this.nodeSubscriptions&&Mu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();ae.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(V_,"replicateOverWS")});var Aa={};Be(Aa,{clearThisNodeName:()=>Ese,disableReplication:()=>fse,enabled_databases:()=>Ra,forEachReplicatedDatabase:()=>pa,getThisNodeId:()=>ig,getThisNodeName:()=>tt,getThisNodeUrl:()=>ma,hostnameToUrl:()=>ug,lastTimeInAuditStore:()=>x_,monitorNodeCAs:()=>Zk,replicateOperation:()=>Sse,replication_certificate_authorities:()=>nl,sendOperationToNode:()=>Y_,servers:()=>use,setReplicator:()=>tF,start:()=>dse,startOnMainThread:()=>dO,subscribeToNode:()=>k_,unsubscribeFromNode:()=>zE,urlToNodeName:()=>Qs});function dse(e){if(e.port||(e.port=Es.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Es.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!tt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of H_(e))t.set(Qs(s.url),s);_se(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ke.ws(async(s,i,o,c)=>{if(i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,o);await o,s._socket.unref(),V_(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&or.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ke.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!s.authorized&&s._nodeRequest.socket.authorizationError&&or.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let o=sr().primaryStore;if(s.authorized&&s.peerCertificate.subject){let c=s.peerCertificate.subject,l=c&&(o.get(c.CN)||t.get(c.CN));if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){or.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else or.warn(`No node found for certificate common name ${c.CN}, available nodes are ${Array.from(o.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=o.get(s.ip)||t.get(s.ip);c?s.user=c:or.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...o.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=a(()=>{let o=new Set(s.secureContexts.values());s.defaultContext&&o.add(s.defaultContext);for(let c of o)try{let l=Array.from(nl);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=lg.createSecureContext(u)}catch(l){or.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}Zk(()=>{for(let s of n)s()})}function Zk(e){let t=0;Du(r=>{r?.ca&&(nl.add(r.ca),nl.size!==t&&(t=nl.size,e?.()))})}function fse(e=!0){Xk=e}function _se(e){Xk||(Ze(),Ra=e.databases,pa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ya;for(let[s,i]of ag){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];tF(r,s,e),LO.get(s)?.forEach(i=>i(s))}}))}function tF(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class eF extends qr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ya,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(or.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new vn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){if(h===Ke.hostname)continue;let _=pse(h,eF.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Qk.ServerError("No connection to any other nodes are available",502);let d={requestId:lse++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;or.warn("Error in load from node",cg,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function hse(e,t,r,n,s){let i=ag.get(e);i||(i=new Map,ag.set(e,i));let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new Bu(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function pse(e,t,r){let n=Yk.get(e);n||(n=new Map,Yk.set(e,n));let s=n.get(r);if(s)return s;let i=sr().primaryStore.get(e);return i?.url&&(s=new Bu(i.url,t,r,e,i.authorization),n.set(e,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Y_(e,t,r){r||(r={}),r.serverName=e.name;let n=await sg(e.url,r),s=V_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{or.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function k_(e){try{Jk.isMainThread&&or.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ya.get(e.database);if(!t){let n;t=new Promise(s=>{or.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ya.set(e.database,t)}let r=hse(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>B_(n,e.database)),e.replicateByDefault)}catch(t){or.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function zE({name:e,url:t,database:r}){or.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(sr().primaryStore.getRange({})));let n=ag.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function mse(){if(UO!==void 0)return UO;let e=Es.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Es.default.get(B.TLS_CERTIFICATE);if(e)return UO=new zk.X509Certificate((0,jk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function tt(){return cg||(cg=Es.default.get("replication_hostname")??Qs(Es.default.get("replication_url"))??mse()??Wk("operationsapi_network_secureport")??Wk("operationsapi_network_port")??"127.0.0.1")}function Ese(){cg=void 0}function Wk(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function og(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function ig(e){return U_(e)?.[tt()]}function ma(){let e=Es.default.get("replication_url");return e||ug(tt())}function ug(e){let t=og("replication_port");if(t)return`ws://${e}:${t}`;if(t=og("replication_secureport"),t)return`wss://${e}:${t}`;if(t=og("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=og("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Qs(e){if(e)return new URL(e).hostname}function pa(e,t){for(let n of Object.getOwnPropertyNames(Ye))r(n);return K_(n=>{r(n)}),il((n,s)=>{r(n.databaseName)});function r(n){let s=Ye[n];or.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):gse(n)&&t(s,n,!1)}a(r,"forDatabase")}function gse(e){let t=Ye[e];for(let r in t)if(t[r].replicate)return!0}function x_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Sse(e){let t={message:""};if(e.replicated){e.replicated=!1,or.trace?.("Replicating operation",e.operation,"to nodes",Ke.nodes.map(n=>n.name));let r=await Promise.allSettled(Ke.nodes.map(n=>Y_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ke.nodes[s]?.name,i})}return t}var Es,or,zk,jk,lg,Qk,Jk,Xk,lse,use,nl,Ra,ag,Yk,UO,cg,ps=be(()=>{Ue();na();Kl();MO();Dr();Es=M(ce()),or=M(X()),zk=require("crypto"),jk=require("fs");F_();Xc();G();cO();lg=M(require("node:tls")),Qk=M(he()),Jk=require("worker_threads"),lse=1,use=[],nl=Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(lg.rootCertificates):new Set;a(dse,"start");a(Zk,"monitorNodeCAs");a(fse,"disableReplication");a(_se,"assignReplicationSource");a(tF,"setReplicator");ag=new Map;a(hse,"getSubscriptionConnection");Yk=new Map;a(pse,"getRetrievalConnectionByName");a(Y_,"sendOperationToNode");a(k_,"subscribeToNode");a(zE,"unsubscribeFromNode");a(mse,"getCommonNameFromCert");a(tt,"getThisNodeName");a(Ese,"clearThisNodeName");Object.defineProperty(Ke,"hostname",{get(){return tt()}});a(Wk,"getHostFromListeningPort");a(og,"getPortFromListeningPort");a(ig,"getThisNodeId");Ke.replication={getThisNodeId:ig,exportIdMapping:U_};a(ma,"getThisNodeUrl");a(ug,"hostnameToUrl");a(Qs,"urlToNodeName");a(pa,"forEachReplicatedDatabase");a(gse,"hasExplicitlyReplicatedTable");a(x_,"lastTimeInAuditStore");a(Sse,"replicateOperation")});var pg=P((yIe,oF)=>{"use strict";var Hu=_H(),{validateBySchema:W_}=nt(),{common_validators:ku,schema_regex:xO}=Ri(),ar=require("joi"),Tse=X(),Ase=require("uuid").v4,_g=_o(),Fu=(G(),D($)),Rse=require("util"),ba=Fn(),{handleHDBError:So,hdb_errors:yse,ClientError:z_}=he(),{HDB_ERROR_MSGS:dg,HTTP_STATUS_CODES:To}=yse,{SchemaEventMsg:hg}=Ks(),rF=Er(),{getDatabases:bse}=(Ue(),D(at)),{transformReq:Gu}=oe(),{replicateOperation:nF}=(ps(),D(Aa)),fg=ar.string().min(1).max(ku.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+ku.schema_format.message}),Ose=ar.string().min(1).max(ku.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+ku.schema_format.message}).required(),Nse=ar.string().min(1).max(ku.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+ku.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();oF.exports={createSchema:wse,createSchemaStructure:sF,createTable:Ise,createTableStructure:iF,createAttribute:Mse,dropSchema:Cse,dropTable:Pse,dropAttribute:Dse,getBackup:vse};async function wse(e){let t=await sF(e);return _g.signalSchemaChange(new hg(process.pid,e.operation,e.schema)),t}a(wse,"createSchema");async function sF(e){let t=W_(e,ar.object({database:fg,schema:fg}));if(t)throw new z_(t.message);if(Gu(e),!await Hu.checkSchemaExists(e.schema))throw So(new Error,dg.SCHEMA_EXISTS_ERR(e.schema),To.BAD_REQUEST,Fu.LOG_LEVELS.ERROR,dg.SCHEMA_EXISTS_ERR(e.schema),!0);return await ba.createSchema(e),`database '${e.schema}' successfully created`}a(sF,"createSchemaStructure");async function Ise(e){return Gu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await iF(e)}a(Ise,"createTable");async function iF(e){let t=W_(e,ar.object({database:fg,schema:fg,table:Ose,residence:ar.array().items(ar.string().min(1)).optional(),hash_attribute:Nse}));if(t)throw new z_(t.message);if(!await Hu.checkSchemaTableExists(e.schema,e.table))throw So(new Error,dg.TABLE_EXISTS_ERR(e.schema,e.table),To.BAD_REQUEST,Fu.LOG_LEVELS.ERROR,dg.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Ase(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ba.createTable(n,e);else throw So(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",To.BAD_REQUEST);else await ba.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(iF,"createTableStructure");async function Cse(e){let t=W_(e,ar.object({database:ar.string(),schema:ar.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new z_(t.message);Gu(e);let r=await Hu.checkSchemaExists(e.schema);if(r)throw So(new Error,r,To.NOT_FOUND,Fu.LOG_LEVELS.ERROR,r,!0);let n=await Hu.schema_describe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ba.dropSchema(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema)),await rF.purgeSchemaTableStreams(e.schema,s);let i=await nF(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Cse,"dropSchema");async function Pse(e){let t=W_(e,ar.object({database:ar.string(),schema:ar.string(),table:ar.string().required()}));if(t)throw new z_(t.message);Gu(e);let r=await Hu.checkSchemaTableExists(e.schema,e.table);if(r)throw So(new Error,r,To.NOT_FOUND,Fu.LOG_LEVELS.ERROR,r,!0);await ba.dropTable(e),await rF.purgeTableStream(e.schema,e.table);let n=await nF(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Pse,"dropTable");async function Dse(e){let t=W_(e,ar.object({database:ar.string(),schema:ar.string(),table:ar.string().required(),attribute:ar.string().required()}));if(t)throw new z_(t.message);Gu(e);let r=await Hu.checkSchemaTableExists(e.schema,e.table);if(r)throw So(new Error,r,To.NOT_FOUND,Fu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw So(new Error,"You cannot drop a hash attribute",To.BAD_REQUEST,void 0,void 0,!0);if(Fu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw So(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,To.BAD_REQUEST,void 0,void 0,!0);try{return await ba.dropAttribute(e),Lse(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Tse.error(`Got an error deleting attribute ${Rse.inspect(e)}.`),n}}a(Dse,"dropAttribute");function Lse(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(Lse,"dropAttributeFromGlobal");async function Mse(e){Gu(e);let t=bse()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw So(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,To.BAD_REQUEST,void 0,void 0,!0);return await ba.createAttribute(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Mse,"createAttribute");function vse(e){return ba.getBackup(e)}a(vse,"getBackup")});var cF=P((OIe,aF)=>{"use strict";var{OPERATIONS_ENUM:Use}=(G(),D($)),BO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Use.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};aF.exports=BO});var HO=P((IIe,_F)=>{"use strict";var xse=Fn(),wIe=cF(),mg=oe(),Eg=(G(),D($)),Bse=ce(),{handleHDBError:lF,hdb_errors:Hse}=he(),{HDB_ERROR_MSGS:uF,HTTP_STATUS_CODES:dF}=Hse,kse=Object.values(Eg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),fF="To use this operation audit log must be enabled in harperdb-config.yaml";_F.exports=Fse;async function Fse(e){if(mg.isEmpty(e.schema))throw new Error(uF.SCHEMA_REQUIRED_ERR);if(mg.isEmpty(e.table))throw new Error(uF.TABLE_REQUIRED_ERR);if(!Bse.get(Eg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lF(new Error,fF,dF.BAD_REQUEST,Eg.LOG_LEVELS.ERROR,fF,!0);let t=mg.checkSchemaTableExist(e.schema,e.table);if(t)throw lF(new Error,t,dF.NOT_FOUND,Eg.LOG_LEVELS.ERROR,t,!0);if(!mg.isEmpty(e.search_type)&&kse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await xse.readAuditLog(e)}a(Fse,"readAuditLog")});var pF=P((PIe,hF)=>{"use strict";var{OPERATIONS_ENUM:Gse}=(G(),D($)),kO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Gse.GET_BACKUP,this.schema=t,this.table=r}};hF.exports=kO});var gF=P((vIe,EF)=>{"use strict";var qse=Fn(),LIe=pF(),FO=oe(),$se=(G(),D($)),MIe=ce(),{handleHDBError:Vse,hdb_errors:Kse}=he(),{HDB_ERROR_MSGS:mF,HTTP_STATUS_CODES:Yse}=Kse;EF.exports=Wse;async function Wse(e){if(FO.isEmpty(e.schema))throw new Error(mF.SCHEMA_REQUIRED_ERR);if(FO.isEmpty(e.table))throw new Error(mF.TABLE_REQUIRED_ERR);let t=FO.checkSchemaTableExist(e.schema,e.table);if(t)throw Vse(new Error,t,Yse.NOT_FOUND,$se.LOG_LEVELS.ERROR,t,!0);return await qse.getBackup(read_audit_log_object)}a(Wse,"getBackup")});var RF=P((xIe,AF)=>{"use strict";var zse=ce(),Oa=require("joi"),jse=nt(),SF=require("moment"),Qse=require("fs-extra"),GO=require("path"),Jse=require("lodash"),j_=(G(),D($)),{LOG_LEVELS:ol}=(G(),D($)),Xse="YYYY-MM-DD hh:mm:ss",Zse=GO.resolve(__dirname,"../logs");AF.exports=function(e){return jse.validateBySchema(e,eie)};var eie=Oa.object({from:Oa.custom(TF),until:Oa.custom(TF),level:Oa.valid(ol.NOTIFY,ol.FATAL,ol.ERROR,ol.WARN,ol.INFO,ol.DEBUG,ol.TRACE),order:Oa.valid("asc","desc"),limit:Oa.number().min(1),start:Oa.number().min(0),log_name:Oa.custom(tie)});function TF(e,t){if(SF(e,SF.ISO_8601).format(Xse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(TF,"validateDatetime");function tie(e,t){if(Jse.invert(j_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=zse.get(j_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?j_.LOG_NAMES.HDB:e,i=s===j_.LOG_NAMES.INSTALL?GO.join(Zse,j_.LOG_NAMES.INSTALL):GO.join(n,s);return Qse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(tie,"validateReadLogPath")});var $O=P((HIe,bF)=>{"use strict";var gg=(G(),D($)),rie=X(),nie=ce(),sie=RF(),qO=require("path"),yF=require("fs-extra"),{once:iie}=require("events"),{handleHDBError:oie,hdb_errors:aie}=he(),{PACKAGE_ROOT:cie}=Et(),lie=qO.join(cie,"logs"),uie=1e3,die=200;bF.exports=fie;async function fie(e){let t=sie(e);if(t)throw oie(t,t.message,aie.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nie.get(gg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?gg.LOG_NAMES.HDB:e.log_name,s=n===gg.LOG_NAMES.INSTALL?qO.join(lie,gg.LOG_NAMES.INSTALL):qO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?uie:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,p=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(yF.statSync(s).size-(p+5)*die,0));let g=yF.createReadStream(s,{start:S});g.on("error",F=>{rie.error(F)});let R=0,E=[],T="",O;g.on("data",F=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=T+F;let j=0,te;for(;(te=q.exec(F))&&!g.destroyed;){O&&(O.message=F.slice(j,te.index),v(O));let[se,z,ne]=te,le=ne.split("] ["),ie=le[0],Re=le[1];le.splice(0,2),O={timestamp:z,thread:ie,level:Re,tags:le,message:""},j=te.index+se.length}T=F.slice(j)}),g.on("end",F=>{g.destroyed||O&&(O.message=T.trim(),v(O))}),g.resume();function v(F){let q,j,te;switch(!0){case(i&&c&&u):q=new Date(F.timestamp),j=new Date(l),te=new Date(f),F.level===o&&q>=j&&q<=te&&R<_?R++:F.level===o&&q>=j&&q<=te&&(Na(F,h,E),R++,R===p&&g.destroy());break;case(i&&c):q=new Date(F.timestamp),j=new Date(l),F.level===o&&q>=j&&R<_?R++:F.level===o&&q>=j&&(Na(F,h,E),R++,R===p&&g.destroy());break;case(i&&u):q=new Date(F.timestamp),te=new Date(f),F.level===o&&q<=te&&R<_?R++:F.level===o&&q<=te&&(Na(F,h,E),R++,R===p&&g.destroy());break;case(c&&u):q=new Date(F.timestamp),j=new Date(l),te=new Date(f),q>=j&&q<=te&&R<_?R++:q>=j&&q<=te&&(Na(F,h,E),R++,R===p&&g.destroy());break;case i:F.level===o&&R<_?R++:F.level===o&&(Na(F,h,E),R++,R===p&&g.destroy());break;case c:q=new Date(F.timestamp),j=new Date(l),q>=j&&R<_?R++:q>=j&&R>=_&&(Na(F,h,E),R++,R===p&&g.destroy());break;case u:q=new Date(F.timestamp),te=new Date(f),q<=te&&R<_?R++:q<=te&&R>=_&&(Na(F,h,E),R++,R===p&&g.destroy());break;default:R<_?R++:(Na(F,h,E),R++,R===p&&g.destroy())}}return a(v,"onLogMessage"),await iie(g,"close"),E}a(fie,"readLog");function Na(e,t,r){t==="desc"?_ie(e,r):t==="asc"?hie(e,r):r.push(e)}a(Na,"pushLineToResult");function _ie(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(_ie,"insertDescending");function hie(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(hie,"insertAscending")});var Sg=P((VIe,IF)=>{"use strict";var VO=require("joi"),{string:qu,boolean:OF,date:pie}=VO.types(),mie=nt(),{validateSchemaExists:FIe,validateTableExists:GIe,validateSchemaName:qIe}=Ri(),Eie=(G(),D($)),gie=Pt(),NF=ce();NF.initSync();var $Ie=qu.invalid(NF.get(Eie.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(gie.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),wF={operation:qu.valid("add_node","update_node","set_node_replication"),node_name:qu.optional(),subscriptions:VO.array().items({table:qu.optional(),schema:qu.optional(),database:qu.optional(),subscribe:OF.required(),publish:OF.required().custom(Tie),start_time:pie.iso()})};function Sie(e){return mie.validateBySchema(e,VO.object(wF))}a(Sie,"addUpdateNodeValidator");function Tie(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Tie,"checkForFalsy");IF.exports={addUpdateNodeValidator:Sie,validation_schema:wF}});var $u=P((YIe,CF)=>{"use strict";var KO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},YO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};CF.exports={Node:KO,NodeSubscription:YO}});var DF=P((zIe,PF)=>{"use strict";var Aie=(G(),D($)).OPERATIONS_ENUM,WO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Aie.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PF.exports=WO});var Q_=P((QIe,LF)=>{"use strict";var zO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},jO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};LF.exports={RemotePayloadObject:zO,RemotePayloadSubscription:jO}});var vF=P((XIe,MF)=>{"use strict";var QO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};MF.exports=QO});var xF=P((sCe,UF)=>{"use strict";var Rie=vF(),eCe=Ft(),tCe=ht(),yie=X(),{getSchemaPath:rCe,getTransactionAuditStorePath:nCe}=gt(),{getDatabases:bie}=(Ue(),D(at));UF.exports=Oie;async function Oie(e){let t=new Rie;try{let r=bie()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){yie.warn(`unable to stat table dbi due to ${r}`)}return t}a(Oie,"lmdbGetTableSize")});var HF=P((oCe,BF)=>{"use strict";var JO=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};BF.exports=JO});var Ku=P((fCe,qF)=>{"use strict";var Nie=require("fs-extra"),wie=require("path"),jr=require("systeminformation"),wa=X(),kF=Er(),cCe=Pt(),Vu=(G(),D($)),Iie=xF(),Cie=uo(),{getThreadInfo:FF}=st(),J_=ce();J_.initSync();var Pie=HF(),{openEnvironment:lCe}=ht(),{getSchemaPath:uCe}=gt(),{database:dCe,databases:XO}=(Ue(),D(at)),Tg;qF.exports={getHDBProcessInfo:rN,getNetworkInfo:sN,getDiskInfo:nN,getMemoryInfo:tN,getCPUInfo:eN,getTimeInfo:ZO,getSystemInformation:iN,systemInformation:Die,getTableSize:oN,getMetrics:aN};function ZO(){return jr.time()}a(ZO,"getTimeInfo");async function eN(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await jr.cpu();f.cpu_speed=await jr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:p,raw_currentload_system:S,raw_currentload_user:g,cpus:R,...E}=await jr.currentLoad();return E.cpus=[],R.forEach(T=>{let{raw_load:O,raw_load_idle:v,raw_load_irq:F,raw_load_nice:q,raw_load_system:j,raw_load_user:te,...se}=T;E.cpus.push(se)}),f.current_load=E,f}catch(e){return wa.error(`error in getCPUInfo: ${e}`),{}}}a(eN,"getCPUInfo");async function tN(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return wa.error(`error in getMemoryInfo: ${e}`),{}}}a(tN,"getMemoryInfo");async function rN(){let e={core:[],clustering:[]};try{let t=await jr.processes(),r;try{r=Number.parseInt(await Nie.readFile(wie.join(J_.get(Vu.CONFIG_PARAMS.ROOTPATH),Vu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Vu.NODE_ERROR_CODES.ENOENT)wa.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return wa.error(`error in getHDBProcessInfo: ${t}`),e}}a(rN,"getHDBProcessInfo");async function nN(){let e={};try{if(!J_.get(Vu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await jr.fsStats();return e.read_write=u,e.size=await jr.fsSize(),e}catch(t){return wa.error(`error in getDiskInfo: ${t}`),e}}a(nN,"getDiskInfo");async function sN(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return J_.get(Vu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await jr.networkInterfaceDefault(),e.latency=await jr.inetChecksite("google.com"),(await jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return wa.error(`error in getNetworkInfo: ${t}`),e}}a(sN,"getNetworkInfo");async function iN(){if(Tg!==void 0)return Tg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await jr.osInfo();e=c;let l=await jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Tg=e,Tg}catch(t){return wa.error(`error in getSystemInformation: ${t}`),e}}a(iN,"getSystemInformation");async function oN(){let e=[],t=await Cie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Iie(n));return e}a(oN,"getTableSize");async function aN(){let e={};for(let t in XO){let r=e[t]={},n=r.tables={};for(let s in XO[t])try{let i=XO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){wa.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(aN,"getMetrics");async function GF(){if(J_.get(Vu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await kF.getNATSReferences(),t=await kF.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(GF,"getNatsStreamInfo");async function Die(e){let t=new Pie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iN(),t.time=ZO(),t.cpu=await eN(),t.memory=await tN(),t.disk=await nN(),t.network=await sN(),t.harperdb_processes=await rN(),t.table_size=await oN(),t.metrics=await aN(),t.threads=await FF(),t.replication=await GF(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iN();break;case"time":t.time=ZO();break;case"cpu":t.cpu=await eN();break;case"memory":t.memory=await tN();break;case"disk":t.disk=await nN();break;case"network":t.network=await sN();break;case"harperdb_processes":t.harperdb_processes=await rN();break;case"table_size":t.table_size=await oN();break;case"database_metrics":case"metrics":t.metrics=await aN();break;case"threads":t.threads=await FF();break;case"replication":t.replication=await GF();break;default:break}return t}a(Die,"systemInformation")});var Ao=P((ECe,YF)=>{"use strict";var Lie=gn(),cN=oe(),Mie=require("util"),al=(G(),D($)),$F=ce();$F.initSync();var vie=Gb(),VF=Vr(),{Node:hCe,NodeSubscription:pCe}=$u(),Uie=_u(),xie=DF(),{RemotePayloadObject:Bie,RemotePayloadSubscription:Hie}=Q_(),{handleHDBError:kie,hdb_errors:Fie}=he(),{HTTP_STATUS_CODES:Gie,HDB_ERROR_MSGS:qie}=Fie,$ie=Ys(),Vie=Ku(),{packageJson:Kie}=Et(),{getDatabases:Yie}=(Ue(),D(at)),mCe=Mie.promisify(vie.authorize),Wie=VF.searchByHash,zie=VF.searchByValue;YF.exports={isEmpty:jie,getNodeRecord:Qie,upsertNodeRecord:Jie,buildNodePayloads:Xie,checkClusteringEnabled:Zie,getAllNodeRecords:eoe,getSystemInfo:toe,reverseSubscription:KF};function jie(e){return e==null}a(jie,"isEmpty");async function Qie(e){let t=new Uie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Wie(t)}a(Qie,"getNodeRecord");async function Jie(e){let t=new xie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Lie.upsert(t)}a(Jie,"upsertNodeRecord");function KF(e){if(cN.isEmpty(e.subscribe)||cN.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(KF,"reverseSubscription");function Xie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=cN.getTableHashAttribute(l,u),{subscribe:d,publish:h}=KF(c),_=Yie()[l]?.[u],p=new Hie(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(p)}return new Bie(r,t,s,n)}a(Xie,"buildNodePayloads");function Zie(){if(!$F.get(al.CONFIG_PARAMS.CLUSTERING_ENABLED))throw kie(new Error,qie.CLUSTERING_NOT_ENABLED,Gie.BAD_REQUEST,void 0,void 0,!0)}a(Zie,"checkClusteringEnabled");async function eoe(){let e=new $ie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await zie(e))}a(eoe,"getAllNodeRecords");async function toe(){let e=await Vie.getSystemInformation();return{hdb_version:Kie.version,node_version:e.node_version,platform:e.platform}}a(toe,"getSystemInfo")});var lN=P((SCe,eG)=>{"use strict";var Ag=Er(),WF=oe(),zF=Pt(),jF=(G(),D($)),Rg=X(),QF=pg(),roe=l_(),{RemotePayloadObject:noe}=Q_(),{handleHDBError:JF,hdb_errors:soe}=he(),{HTTP_STATUS_CODES:XF}=soe,{NodeSubscription:ZF}=$u();eG.exports=ioe;async function ioe(e,t){let r;try{r=await Ag.request(`${t}.${zF.REQUEST_SUFFIX}`,new noe(jF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Rg.trace("Response from remote describe all request:",r)}catch(o){Rg.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ag.requestErrorHandler(o,"add_node",t);throw JF(new Error,c,XF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===zF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw JF(new Error,o,XF.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===jF.SYSTEM_SCHEMA_NAME){await Ag.createLocalTableStream(l,c);let p=new ZF(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p);continue}let u=WF.doesSchemaExist(l),f=n[l]!==void 0,d=c?WF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(Rg.trace(`addNode creating schema: ${l}`),await QF.createSchema({operation:"create_schema",schema:l})),!d&&h){Rg.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new roe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await QF.createTable(p)}await Ag.createLocalTableStream(l,c);let _=new ZF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(ioe,"reviewSubscriptions")});var cl={};Be(cl,{addNodeBack:()=>uoe,removeNodeBack:()=>doe,setNode:()=>loe});async function loe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Qs(t)):t=ug(r);let n=(0,rG.validateBySchema)(e,coe);if(n)throw(0,Ro.handleHDBError)(n,n.message,aoe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Ro.ClientError("url or hostname is required for remove_node operation");let _=r,p=sr(),S=await p.get(_);if(!S)throw new Ro.ClientError(_+" does not exist");try{await Y_({url:S.url},{operation:Yt.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?tt():_},void 0)}catch(g){zn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new Ro.ClientError("url required for this operation");let s=ma();if(s==null)throw new Ro.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,gs.getReplicationCert)();let _=await(0,gs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,gs.createCsr)(),zn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,zn.info("Sending CA named",_.name,"to target node",t))}let l={operation:Yt.ADD_NODE_BACK,hostname:(0,Ca.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Ca.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(tG):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=tG(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await Y_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,zn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(zn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,gs.setCertTable)({name:ooe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,gs.setCertTable)({name:tt(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?d.shard=u.shard:e.shard!==void 0&&(d.shard=e.shard),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};(0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(_.shard=(0,Ca.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await Eo(tt(),_)}await Eo(u?u.nodeName:d.name??Qs(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function uoe(e){zn.trace("addNodeBack received request:",e);let t=await(0,gs.signCertificate)(e),r;e.csr?(r=t.signingCA,zn.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,zn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,gs.getReplicationCertAuth)();if(n.replicates){let i={url:ma(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Ca.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Eo(tt(),i)}return await Eo(e.hostname,n),t.nodeName=tt(),t.usingCA=s?.certificate,zn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function doe(e){zn.trace("removeNodeBack received request:",e),await sr().delete(e.name)}function tG(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var gs,rG,Ia,Ca,zn,Ro,ooe,aoe,coe,ll=be(()=>{gs=M(Zs()),rG=M(nt()),Ia=M(require("joi")),Ca=M(ce());G();F_();Xc();ps();zn=M(X()),Ro=M(he()),{pki:ooe}=require("node-forge"),{HTTP_STATUS_CODES:aoe}=Ro.hdb_errors,coe=Ia.default.object({hostname:Ia.default.string(),verify_tls:Ia.default.boolean(),replicates:Ia.default.boolean(),subscriptions:Ia.default.array(),revoked_certificates:Ia.default.array(),shard:Ia.default.number()});a(loe,"setNode");a(uoe,"addNodeBack");a(doe,"removeNodeBack");a(tG,"reverseSubscription")});var wg=P((ICe,sG)=>{"use strict";var{handleHDBError:yg,hdb_errors:foe}=he(),{HTTP_STATUS_CODES:bg}=foe,{addUpdateNodeValidator:_oe}=Sg(),Og=X(),Ng=(G(),D($)),nG=Pt(),hoe=oe(),X_=Er(),Z_=Ao(),uN=ce(),poe=lN(),{Node:moe,NodeSubscription:Eoe}=$u(),{broadcast:goe}=st(),{setNode:Soe}=(ll(),D(cl)),NCe=ce(),wCe=(G(),D($)),Toe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Aoe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Roe=uN.get(Ng.CONFIG_PARAMS.CLUSTERING_NODENAME);sG.exports=yoe;async function yoe(e,t=!1){if(Og.trace("addNode called with:",e),uN.get(Ng.CONFIG_PARAMS.REPLICATION_URL)||uN.get(Ng.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Soe(e);Z_.checkClusteringEnabled();let r=_oe(e);if(r)throw yg(r,r.message,bg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Z_.getNodeRecord(n);if(!hoe.isEmptyOrZeroLength(d))throw yg(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,bg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await poe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Toe,o;let c=Z_.buildNodePayloads(s,Roe,Ng.OPERATIONS_ENUM.ADD_NODE,await Z_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new Eoe(_.schema,_.table,_.publish,_.subscribe))}Og.trace("addNode sending remote payload:",c);let u;try{u=await X_.request(`${n}.${nG.REQUEST_SUFFIX}`,c)}catch(d){Og.error(`addNode received error from request: ${d}`);for(let _=0,p=s.length;_<p;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await X_.updateRemoteConsumer(S,n)}let h=X_.requestErrorHandler(d,"add_node",n);throw yg(new Error,h,bg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===nG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw yg(new Error,d,bg.INTERNAL_SERVER_ERROR,"error",d)}Og.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await X_.updateRemoteConsumer(_,n),_.subscribe===!0&&await X_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new moe(n,l,u.system_info);return await Z_.upsertNodeRecord(f),goe({type:"nats_update"}),i.length>0?o.message=Aoe:o.message=`Successfully added '${n}' to manifest`,o}a(yoe,"addNode")});var hN=P((DCe,oG)=>{"use strict";var{handleHDBError:dN,hdb_errors:boe}=he(),{HTTP_STATUS_CODES:fN}=boe,{addUpdateNodeValidator:Ooe}=Sg(),eh=X(),Ig=(G(),D($)),iG=Pt(),PCe=oe(),th=Er(),rh=Ao(),_N=ce(),{cloneDeep:Noe}=require("lodash"),woe=lN(),{Node:Ioe,NodeSubscription:Coe}=$u(),{broadcast:Poe}=st(),{setNode:Doe}=(ll(),D(cl)),Loe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Moe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",voe=_N.get(Ig.CONFIG_PARAMS.CLUSTERING_NODENAME);oG.exports=Uoe;async function Uoe(e){if(eh.trace("updateNode called with:",e),_N.get(Ig.CONFIG_PARAMS.REPLICATION_URL)??_N.get(Ig.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Doe(e);rh.checkClusteringEnabled();let t=Ooe(e);if(t)throw dN(t,t.message,fN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await rh.getNodeRecord(r);s.length>0&&(n=Noe(s));let{added:i,skipped:o}=await woe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Loe,c;let l=rh.buildNodePayloads(i,voe,Ig.OPERATIONS_ENUM.UPDATE_NODE,await rh.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];eh.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}eh.trace("updateNode sending remote payload:",l);let u;try{u=await th.request(`${r}.${iG.REQUEST_SUFFIX}`,l)}catch(f){eh.error(`updateNode received error from request: ${f}`);let d=th.requestErrorHandler(f,"update_node",r);throw dN(new Error,d,fN.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===iG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw dN(new Error,f,fN.INTERNAL_SERVER_ERROR,"error",f)}eh.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await th.updateRemoteConsumer(h,r),h.subscribe===!0?await th.updateConsumerIterator(h.schema,h.table,r,"start"):await th.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new Ioe(r,[],u.system_info)]),await xoe(n[0],i,u.system_info),o.length>0?c.message=Moe:c.message=`Successfully updated '${r}'`,c}a(Uoe,"updateNode");async function xoe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Coe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await rh.upsertNodeRecord(n),Poe({type:"nats_update"})}a(xoe,"updateNodeTable")});var dG=P((MCe,uG)=>{"use strict";var lG=require("joi"),{string:aG}=lG.types(),Boe=nt(),cG=(G(),D($)),Hoe=ce(),koe=Pt();uG.exports=Foe;function Foe(e){let t=aG.invalid(Hoe.get(cG.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(koe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=lG.object({operation:aG.valid(cG.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Boe.validateBySchema(e,r)}a(Foe,"removeNodeValidator")});var Cg=P((UCe,mG)=>{"use strict";var{handleHDBError:fG,hdb_errors:Goe}=he(),{HTTP_STATUS_CODES:_G}=Goe,qoe=dG(),nh=X(),hG=Ao(),$oe=oe(),Yu=(G(),D($)),pG=Pt(),pN=Er(),mN=ce(),{RemotePayloadObject:Voe}=Q_(),{NodeSubscription:Koe}=$u(),Yoe=c_(),Woe=Uc(),{broadcast:zoe}=st(),{setNode:joe}=(ll(),D(cl)),Qoe=mN.get(Yu.CONFIG_PARAMS.CLUSTERING_NODENAME);mG.exports=Joe;async function Joe(e){if(nh.trace("removeNode called with:",e),mN.get(Yu.CONFIG_PARAMS.REPLICATION_URL)??mN.get(Yu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return joe(e);hG.checkClusteringEnabled();let t=qoe(e);if(t)throw fG(t,t.message,_G.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await hG.getNodeRecord(r);if($oe.isEmptyOrZeroLength(n))throw fG(new Error,`Node '${r}' was not found.`,_G.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Voe(Yu.OPERATIONS_ENUM.REMOVE_NODE,Qoe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await pN.updateConsumerIterator(f.schema,f.table,r,"stop");try{await pN.updateRemoteConsumer(new Koe(f.schema,f.table,!1,!1),r)}catch(d){nh.error(d)}}try{i=await pN.request(`${r}.${pG.REQUEST_SUFFIX}`,s),nh.trace("Remove node reply from remote node:",r,i)}catch(l){nh.error("removeNode received error from request:",l),o=!0}let c=new Yoe(Yu.SYSTEM_SCHEMA_NAME,Yu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Woe.deleteRecord(c),zoe({type:"nats_update"}),i?.status===pG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(nh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Joe,"removeNode")});var SG=P((BCe,gG)=>{"use strict";var EG=require("joi"),{string:Xoe,array:Zoe}=EG.types(),eae=nt(),tae=Sg();gG.exports=rae;function rae(e){let t=EG.object({operation:Xoe.valid("configure_cluster").required(),connections:Zoe.items(tae.validation_schema).required()});return eae.validateBySchema(e,t)}a(rae,"configureClusterValidator")});var EN=P((kCe,bG)=>{"use strict";var TG=(G(),D($)),Pg=X(),nae=oe(),sae=ce(),iae=Cg(),oae=wg(),aae=Ao(),cae=SG(),{handleHDBError:AG,hdb_errors:lae}=he(),{HTTP_STATUS_CODES:RG}=lae,uae="Configure cluster complete.",dae="Failed to configure the cluster. Check the logs for more details.",fae="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";bG.exports=_ae;async function _ae(e){Pg.trace("configure cluster called with:",e);let t=cae(e);if(t)throw AG(t,t.message,RG.BAD_REQUEST,void 0,void 0,!0);let r=await aae.getAllNodeRecords(),n=[];if(sae.get(TG.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await yG(iae,{operation:TG.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}Pg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await yG(oae,d,d.node_name);s.push(h)}Pg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(Pg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(nae.isEmptyOrZeroLength(o))return{message:uae,connections:c};if(l)return{message:fae,failed_nodes:o,connections:c};throw AG(new Error,dae,RG.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(_ae,"configureCluster");async function yG(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(yG,"functionWrapper")});var IG=P((GCe,wG)=>{"use strict";var sh=require("joi"),hae=nt(),{validateSchemaExists:OG,validateTableExists:pae,validateSchemaName:NG}=Ri(),mae=sh.object({operation:sh.string().valid("purge_stream"),schema:sh.string().custom(OG).custom(NG).optional(),database:sh.string().custom(OG).custom(NG).optional(),table:sh.string().custom(pae).required()});function Eae(e){return hae.validateBySchema(e,mae)}a(Eae,"purgeStreamValidator");wG.exports=Eae});var gN=P(($Ce,CG)=>{"use strict";var{handleHDBError:gae,hdb_errors:Sae}=he(),{HTTP_STATUS_CODES:Tae}=Sae,Aae=IG(),Rae=Er(),yae=Ao();CG.exports=bae;async function bae(e){e.schema=e.schema??e.database;let t=Aae(e);if(t)throw gae(t,t.message,Tae.BAD_REQUEST,void 0,void 0,!0);yae.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Rae.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(bae,"purgeStream")});var AN=P((KCe,xG)=>{"use strict";var TN=Ao(),Oae=Er(),Lg=ce(),Wu=(G(),D($)),ul=Pt(),Nae=oe(),SN=X(),{RemotePayloadObject:wae}=Q_(),{ErrorCode:PG}=require("nats"),{parentPort:DG}=require("worker_threads"),{onMessageByType:Iae}=st(),{getThisNodeName:Cae}=(ps(),D(Aa)),{requestClusterStatus:Pae}=(F_(),D(ZH)),{getReplicationSharedStatus:Dae,getHDBNodeTable:Lae}=(Xc(),D(lO)),{CONFIRMATION_STATUS_POSITION:Mae,RECEIVED_VERSION_POSITION:vae,RECEIVED_TIME_POSITION:Uae,SENDING_TIME_POSITION:xae,RECEIVING_STATUS_POSITION:Bae,RECEIVING_STATUS_RECEIVING:Hae}=(MO(),D(Vk)),LG=Lg.get(Wu.CONFIG_PARAMS.CLUSTERING_ENABLED),MG=Lg.get(Wu.CONFIG_PARAMS.CLUSTERING_NODENAME);xG.exports={clusterStatus:kae,buildNodeStatus:UG};var vG;Iae("cluster-status",async e=>{vG(e)});async function kae(){if(Lg.get(Wu.CONFIG_PARAMS.REPLICATION_URL)||Lg.get(Wu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(DG){DG.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{vG=i});for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let d of Object.values(databases[l]||{}))if(u=d.auditStore,u)break;if(!u)continue;let f=Dae(u,l,o);c.lastCommitConfirmed=Dg(f[Mae]),c.lastReceivedRemoteTime=Dg(f[vae]),c.lastReceivedLocalTime=Dg(f[Uae]),c.sendingMessage=Dg(f[xae]),c.lastReceivedStatus=f[Bae]===Hae?"Receiving":"Waiting"}}}else n=Pae();n.node_name=Cae();let s=Lae().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:MG,is_enabled:LG,connections:[]};if(!LG)return e;let t=await TN.getAllNodeRecords();if(Nae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(UG(t[n],e.connections));return await Promise.allSettled(r),e}a(kae,"clusterStatus");function Dg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(Dg,"asDate");async function UG(e,t){let r=e.name,n=new wae(Wu.OPERATIONS_ENUM.CLUSTER_STATUS,MG,void 0,await TN.getSystemInfo()),s,i,o=ul.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Oae.request(ul.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ul.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ul.CLUSTER_STATUS_STATUSES.CLOSED,SN.error(`Error getting node status from ${r} `,s))}catch(l){SN.warn(`Error getting node status from ${r}`,l),l.code===PG.NoResponders?o=ul.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===PG.Timeout?o=ul.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ul.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Fae(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Wu.PRE_4_0_0_VERSION&&await TN.upsertNodeRecord(l)}catch(l){SN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(UG,"buildNodeStatus");function Fae(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Fae,"NodeStatusObject")});var yN=P((WCe,BG)=>{"use strict";var{handleHDBError:Gae,hdb_errors:qae}=he(),{HTTP_STATUS_CODES:$ae}=qae,Vae=Er(),Kae=Ao(),RN=oe(),Mg=require("joi"),Yae=nt(),Wae=2e3,zae=Mg.object({timeout:Mg.number().min(1),connected_nodes:Mg.boolean(),routes:Mg.boolean()});BG.exports=jae;async function jae(e){Kae.checkClusteringEnabled();let t=Yae.validateBySchema(e,zae);if(t)throw Gae(t,t.message,$ae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||RN.autoCastBoolean(n),o=s===void 0||RN.autoCastBoolean(s),c={nodes:[]},l=await Vae.getServerList(r??Wae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let p={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(p.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{p.connected_nodes.includes(S.name.slice(0,-4))||p.connected_nodes.push(S.name.slice(0,-4))})),o&&(p.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:RN.autoCast(S.split(":")[1])})):[]),c.nodes.push(p)}}return c}a(jae,"clusterNetwork")});var GG=P((jCe,FG)=>{"use strict";var bN=require("joi"),HG=nt(),{route_constraints:kG}=TA();FG.exports={setRoutesValidator:Qae,deleteRoutesValidator:Jae};function Qae(e){let t=bN.object({server:bN.valid("hub","leaf"),routes:kG.required()});return HG.validateBySchema(e,t)}a(Qae,"setRoutesValidator");function Jae(e){let t=bN.object({routes:kG.required()});return HG.validateBySchema(e,t)}a(Jae,"deleteRoutesValidator")});var vg=P((JCe,zG)=>{"use strict";var yo=wt(),ON=oe(),Ss=(G(),D($)),zu=ce(),qG=GG(),{handleHDBError:$G,hdb_errors:Xae}=he(),{HTTP_STATUS_CODES:VG}=Xae,KG="cluster routes successfully set",YG="cluster routes successfully deleted";zG.exports={setRoutes:ece,getRoutes:tce,deleteRoutes:rce};function Zae(e){let t=yo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=ON.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:KG,set:i,skipped:s}}a(Zae,"setRoutesNats");function ece(e){let t=qG.setRoutesValidator(e);if(t)throw $G(t,t.message,VG.BAD_REQUEST,void 0,void 0,!0);if(zu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return Zae(e);let r=[],n=[],s=zu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{WG(s,i)?n.push(i):(s.push(i),r.push(i))}),yo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:KG,set:r,skipped:n}}a(ece,"setRoutes");function WG(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(WG,"existsInArray");function tce(){if(zu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=yo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return zu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(tce,"getRoutes");function rce(e){let t=qG.deleteRoutesValidator(e);if(t)throw $G(t,t.message,VG.BAD_REQUEST,void 0,void 0,!0);if(zu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return nce(e);let r=[],n=[],s=zu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{WG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),yo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:YG,deleted:r,skipped:n}}a(rce,"deleteRoutes");function nce(e){let t=yo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let p=r[h];if(f.host===p.host&&f.port===p.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,p=n.length;_<p;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=ON.isEmptyOrZeroLength(r)?null:r,yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ON.isEmptyOrZeroLength(n)?null:n,yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:YG,deleted:s,skipped:i}}a(nce,"deleteRoutesNats")});var QG=P((ZCe,jG)=>{"use strict";var ih=require("alasql"),dl=require("recursive-iterator"),ei=X(),sce=oe(),oh=(G(),D($)),NN=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,oce(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>oh.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!oh.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][oh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=ice(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!oh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new ih.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function ice(e){return e.filter(t=>t[oh.PERMS_CRUD_ENUM.READ])}a(ice,"filterReadRestrictedAttrs");function oce(e,t,r,n,s){ace(e,t,r,n,s)}a(oce,"interpretAST");function ah(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(ah,"addSchemaTableToMap");function ace(e,t,r,n,s){if(!e){ei.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ih.yy.Insert?dce(e,t,r):e instanceof ih.yy.Select?cce(e,t,r,n,s):e instanceof ih.yy.Update?lce(e,t,r):e instanceof ih.yy.Delete?uce(e,t,r):ei.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(ace,"getRecordAttributesAST");function cce(e,t,r,n,s){if(!e){ei.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(sce.isEmptyOrZeroLength(i)){ei.error("No schema specified");return}e.from.forEach(c=>{ah(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ah(c.table,t,r,n,s)});let o=new dl(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{ei.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new dl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new dl(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new dl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{ei.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(cce,"getSelectAttributes");function lce(e,t,r){if(!e){ei.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new dl(e.columns),s=e.table.databaseid;ah(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.table.tableid,s,i.columnid,t,r)}a(lce,"getUpdateAttributes");function uce(e,t,r){if(!e){ei.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new dl(e.where),s=e.table.databaseid;ah(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.table.tableid,s,i.columnid,t,r)}a(uce,"getDeleteAttributes");function dce(e,t,r){if(!e){ei.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new dl(e.columns),s=e.into.databaseid;ah(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.into.tableid,s,i.columnid,t,r)}a(dce,"getInsertAttributes");function wN(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(wN,"pushAttribute");jG.exports=NN});var XG=P((tPe,JG)=>{"use strict";var Ug=(G(),D($)),xg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Ug.RAM_ALLOCATION_ENUM.DEFAULT,n=Ug.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},IN=class extends xg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Ug.RAM_ALLOCATION_ENUM.DEFAULT,n=Ug.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};JG.exports={BaseLicense:xg,ExtendedLicense:IN}});var Ju=P((nPe,sq)=>{"use strict";var Qu=require("fs-extra"),Bg=(Fm(),D(km)),eq=require("crypto"),fce=require("moment"),_ce=require("uuid").v4,Qr=X(),PN=require("path"),hce=oe(),fl=(G(),D($)),{totalmem:ZG}=require("os"),pce=XG().ExtendedLicense,ju="invalid license key format",mce="061183",Ece="mofi25",gce="aes-256-cbc",Sce=16,Tce=32,tq=ce(),{resolvePath:rq}=wt();tq.initSync();var CN;sq.exports={validateLicense:nq,generateFingerPrint:Rce,licenseSearch:MN,getLicense:Oce,checkMemoryLimit:Nce};function DN(){return PN.join(tq.getHdbBasePath(),fl.LICENSE_KEY_DIR_NAME,fl.LICENSE_FILE_NAME)}a(DN,"getLicenseDirPath");function Ace(){let e=DN();return rq(PN.join(e,fl.LICENSE_FILE_NAME))}a(Ace,"getLicenseFilePath");function LN(){let e=DN();return rq(PN.join(e,fl.REG_KEY_FILE_NAME))}a(LN,"getFingerPrintFilePath");async function Rce(){let e=LN();try{return await Qu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await yce();throw Qr.error(`Error writing fingerprint file to ${e}`),Qr.error(t),new Error("There was an error generating the fingerprint")}}a(Rce,"generateFingerPrint");async function yce(){let e=_ce(),t=Bg.hash(e,Bg.HASH_FUNCTION.MD5),r=LN();try{await Qu.mkdirp(DN()),await Qu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Qr.error(`Error writing fingerprint file to ${r}`),Qr.error(n),new Error("There was an error generating the fingerprint")}return t}a(yce,"writeFingerprint");function nq(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:fl.RAM_ALLOCATION_ENUM.DEFAULT,version:fl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Qr.error("empty license key passed to validate."),r;let n=LN(),s=!1;try{s=Qu.statSync(n)}catch(i){Qr.error(i)}if(s){let i;try{i=Qu.readFileSync(n,"utf8")}catch{Qr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Ece),c=o[1];c=Buffer.concat([Buffer.from(c)],Sce);let l=Buffer.concat([Buffer.from(i)],Tce),u=eq.createDecipheriv(gce,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=bce(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ju),Qr.error(ju),new Error(ju)}let d;if(isNaN(f))try{d=JSON.parse(f),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ju),Qr.error(ju),new Error(ju)}else r.exp_date=f;r.exp_date<fce().valueOf()&&(r.valid_date=!1),Bg.validate(o[1],`${mce}${i}${t}`,Bg.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Qr.error("Invalid licence"),r}a(nq,"validateLicense");function bce(e,t){try{let r=eq.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Qr.warn("Check old license failed")}}a(bce,"checkOldLicense");function MN(){let e=new pce,t=[];try{t=Qu.readFileSync(Ace(),"utf-8").split(`\r
|
|
24
|
+
`)}catch(r){r.code==="ENOENT"?Qr.debug("no license file found"):Qr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(hce.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nq(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Qr.error("There was an error parsing the license string."),Qr.error(s),e.ram_allocation=fl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return CN=e,e}a(MN,"licenseSearch");async function Oce(){return CN||await MN(),CN}a(Oce,"getLicense");function Nce(){let e=MN().ram_allocation,t=process.constrainedMemory?.()||ZG();if(t=Math.round(Math.min(t,ZG())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(Nce,"checkMemoryLimit")});var xN=P((iPe,cq)=>{var Hg=Ju(),iq=require("chalk"),jn=X(),oq=require("prompt"),{promisify:wce}=require("util"),vN=(G(),D($)),Ice=require("fs-extra"),Cce=require("path"),Pce=oe(),{packageJson:Dce}=Et(),aq=ce();aq.initSync();var Lce=require("moment"),Mce=wce(oq.get),vce=Cce.join(aq.getHdbBasePath(),vN.LICENSE_KEY_DIR_NAME,vN.LICENSE_FILE_NAME,vN.LICENSE_FILE_NAME);cq.exports={getFingerprint:xce,setLicense:Uce,parseLicense:UN,register:Bce,getRegistrationInfo:kce};async function Uce(e){if(e&&e.key&&e.company){try{jn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await UN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw jn.error(r),jn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Uce,"setLicense");async function xce(){let e={};try{e=await Hg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw jn.error(r),jn.error(t),new Error(r)}return e}a(xce,"getFingerprint");async function UN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");jn.info("Validating license input...");let r=Hg.validateLicense(e,t);if(jn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(jn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(jn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{jn.info("writing license to disk"),await Ice.writeFile(vce,JSON.stringify({license_key:e,company:t}))}catch(n){throw jn.error("Failed to write License"),n}return"Registration successful."}a(UN,"parseLicense");async function Bce(){let e=await Hce();return UN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Bce,"register");async function Hce(){let e=await Hg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:iq.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:iq.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{oq.start()}catch(n){jn.error(n)}let r;try{r=await Mce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Hce,"promptForRegistration");async function kce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Hg.getLicense()}catch(r){throw jn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Pce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Dce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Lce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(kce,"getRegistrationInfo")});var uq=P((aPe,lq)=>{"use strict";var Fce=Pt(),BN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,p){this.port=t,o===null&&(o=void 0),this.server_name=r+Fce.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:p}},this.system_account="SYS"}};lq.exports=BN});var _q=P((lPe,fq)=>{"use strict";var dq=Pt(),HN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+dq.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+dq.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};fq.exports=HN});var pq=P((dPe,hq)=>{"use strict";var kN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};hq.exports=kN});var Eq=P((_Pe,mq)=>{"use strict";var Gce=Pt(),FN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Gce.SERVER_SUFFIX.ADMIN,this.password=r}};mq.exports=FN});var qg=P((pPe,Tq)=>{"use strict";var _l=require("path"),hl=require("fs-extra"),qce=uq(),$ce=_q(),Vce=pq(),Kce=Eq(),GN=Gn(),Zu=oe(),Rn=wt(),Fg=(G(),D($)),ch=Pt(),{CONFIG_PARAMS:Qt}=Fg,ed=X(),lh=ce(),gq=lo(),qN=Er(),Yce=Zs(),Xu="clustering",Wce=1e4,Sq=50;Tq.exports={generateNatsConfig:jce,removeNatsConfig:Qce,getHubConfigPath:zce};function zce(){let e=lh.get(Qt.ROOTPATH);return _l.join(e,Xu,ch.NATS_CONFIG_FILES.HUB_SERVER)}a(zce,"getHubConfigPath");async function jce(e=!1,t=void 0){let r=lh.get(Qt.ROOTPATH);hl.ensureDirSync(_l.join(r,"clustering","leaf")),lh.initSync();let n=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_CERT_AUTH),s=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_PRIVATEKEY),i=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_CERTIFICATE);!await hl.exists(i)&&!await hl.exists(!n)&&await Yce.createNatsCerts();let o=_l.join(r,Xu,ch.PID_FILES.HUB),c=_l.join(r,Xu,ch.PID_FILES.LEAF),l=Rn.getConfigFromFile(Qt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=_l.join(r,Xu,ch.NATS_CONFIG_FILES.HUB_SERVER),f=_l.join(r,Xu,ch.NATS_CONFIG_FILES.LEAF_SERVER),d=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_INSECURE),h=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_VERIFY),_=Rn.getConfigFromFile(Qt.CLUSTERING_NODENAME),p=Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await qN.checkNATSServerInstalled()||Gg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await GN.listUsers(),g=Rn.getConfigFromFile(Qt.CLUSTERING_USER),R=await GN.getClusterUser();(Zu.isEmpty(R)||R.active!==!0)&&Gg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await kg(Qt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await kg(Qt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await kg(Qt.CLUSTERING_HUBSERVER_NETWORK_PORT),await kg(Qt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],T=[];for(let[se,z]of S.entries())z.role?.role===Fg.ROLE_TYPES_ENUM.CLUSTER_USER&&z.active&&(E.push(new Kce(z.username,gq.decrypt(z.hash))),T.push(new Vce(z.username,gq.decrypt(z.hash))));let O=[],{hub_routes:v}=Rn.getClusteringRoutes();if(!Zu.isEmptyOrZeroLength(v))for(let se of v)O.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${se.host}:${se.port}`);let F=new qce(Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,p,Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),O,E,T);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Zu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Fg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hl.writeJson(u,F),ed.trace(`Hub server config written to ${u}`));let q=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,j=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,te=new $ce(Rn.getConfigFromFile(Qt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[q],[j],E,T,i,s,n,d);n==null&&delete te.tls.ca_file,(t===void 0||t===Fg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hl.writeJson(f,te),ed.trace(`Leaf server config written to ${f}`))}a(jce,"generateNatsConfig");async function kg(e){let t=lh.get(e);return Zu.isEmpty(t)&&Gg(`port undefined for '${e}'`),await Zu.isPortTaken(t)&&Gg(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(kg,"isPortAvailable");function Gg(e){let t=`Error generating clustering config: ${e}`;ed.error(t),console.error(t),process.exit(1)}a(Gg,"generateNatsConfigError");async function Qce(e){let{port:t,config_file:r}=qN.getServerConfig(e),{username:n,decrypt_hash:s}=await GN.getClusterUser(),i=0,o=2e3;for(;i<Sq;){try{let f=await qN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){ed.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=Sq)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&ed.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Zu.async_set_timeout(u)}let c="0".repeat(Wce),l=_l.join(lh.get(Qt.ROOTPATH),Xu,r);await hl.writeFile(l,c),await hl.remove(l),ed.notify(e,"started.")}a(Qce,"removeNatsConfig")});var KN={};Be(KN,{compactOnStart:()=>Jce,copyDb:()=>Nq});async function Jce(){Pa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,$N.get)(B.ROOTPATH),t=new Map,r=Ze();(0,VN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,$g.join)(e,"backup",n+".mdb"),o=(0,$g.join)(e,cc,n+"-copy.mdb"),c=0;try{c=await Aq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Pa.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Nq(n,o),console.log("Backing up",n,"to",i),await(0,pl.move)(s,i,{overwrite:!0})}try{td()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,pl.move)(i,s,{overwrite:!0}),await(0,pl.remove)((0,$g.join)(e,cc,`${n}-copy.mdb-lock`));try{td()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Pa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,VN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,pl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw td(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await Aq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
25
25
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
26
|
-
Database backup has not been removed and can be found here: ${s}`;
|
|
27
|
-
${r.stack}`;throw QN.error(n),Dq(new Error)}}}a(ale,"getRolePermissions");function cle(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[yn.SYSTEM_SCHEMA_NAME]=n[yn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=lle(t[i]);return}r[i]=Uq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=ule(c,l);r[i].describe||Bq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=jN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=jN()})}),r}a(cle,"translateRolePermissions");function lle(e){let t=Uq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jN(!0,!0,!0,!0,!0)}),t}a(lle,"createStructureUserPermissions");function ule(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return yn.TIME_STAMP_NAMES.includes(d)&&(h=Mq(d,f[mh])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Lq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=kq(f),s.attribute_permissions.push(f),c||dle(f,l)}else if(u!==o){let f;yn.TIME_STAMP_NAMES.includes(u)?f=Mq(u):f=Lq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=vq(s),s}else return e.describe=vq(e),e}a(ule,"getTableAttrPerms");function vq(e){return Bq.filter(t=>e[t]).length>0}a(vq,"getSchemaTableDescribePerm");function kq(e){return Hq.filter(t=>e[t]).length>0}a(kq,"getAttributeDescribePerm");function dle(e,t){Hq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(dle,"checkForHashPerms")});var ph={};xe(ph,{authentication:()=>zq,bypassAuth:()=>Sle,login:()=>Ale,logout:()=>Rle,start:()=>Tle});function Sle(){Wq=!0}async function zq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?mle?hle:[]:_le?fle:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let m=Jr.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new Eo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",m],["Access-Control-Allow-Origin",i]]);return zg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),zg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(zg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",m=s?.split(/;\s+/)||[];for(let S of m)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await qq.get(l);break}e.session=u||(u={})}let f=a((_,m,S)=>{let g=new od.AuthAuditLog(_,m,Wo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),m===Us.SUCCESS?ZN.notify(g):ZN.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&ZN.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await Ke.getUser(_,null,e),f(_,Us.SUCCESS,"mTLS")):(0,od.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=pl.get(n),!d){let _=n.indexOf(" "),m=n.slice(0,_),S=n.slice(_+1),g,y;try{switch(m){case"Basic":let E=atob(S),T=E.indexOf(":");g=E.slice(0,T),y=E.slice(T+1),d=g||y?await Ke.getUser(g,y,e):null;break;case"Bearer":try{d=await kb(S)}catch(N){if(N.message==="invalid token")try{return await LE(S),c({status:-1})}catch{throw N}}break}}catch(E){return Ele&&(pl.get(S)||(pl.set(S,S),f(g,Us.FAILURE,m))),c({status:401,body:ia({error:E.message},e)})}pl.set(n,d),ple&&f(d.username,Us.SUCCESS,m)}e.user=d}else u?.user?e.user=await Ke.getUser(u.user,null,e):(Wq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Vq.getSuperUser)());zg&&(e.session.update=function(_){let m=Jr.get(B.AUTHENTICATION_COOKIE_EXPIRES);if(!l){l=(0,Kq.v4)();let S=Jr.get(B.AUTHENTICATION_COOKIE_DOMAINS),g=m?new Date(Date.now()+(0,ew.convertToMS)(m)).toUTCString():gle,y=S?.find(N=>r.host?.endsWith(N)),T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${g}; ${y?"Domain="+y+"; ":""}HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):h?.headers?.set&&h.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,qq.put(_,{expiresAt:m?Date.now()+(0,ew.convertToMS)(m):void 0})},e.login=async function(_,m){let S=e.user=await Ke.authenticateUser(_,m,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&us.loginPath?(h.status=302,h.headers.set("Location",us.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new Eo);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Tle({server:e,port:t,securePort:r}){e.http(zq,t||r?{port:t,securePort:r}:{port:"all"}),$q||($q=!0,setInterval(()=>{pl=new Map},Jr.get(B.AUTHENTICATION_CACHETTL)).unref(),Yq.user.addListener(()=>{pl=new Map}))}async function Ale(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 Rle(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Vq,Kq,Jr,od,Yq,ew,ZN,fle,_le,hle,mle,qq,zg,Wq,ple,Ele,gle,pl,$q,Qg=ye(()=>{Vq=M(qn());Pr();Zl();Ou();Ue();Kq=require("uuid"),Jr=M(ce());k();od=M(X()),Yq=M(Xf());R_();ew=M(oe());to();ZN=(0,od.loggerWithTag)("auth-event");Jr.initSync();fle=Jr.get(B.HTTP_CORSACCESSLIST),_le=Jr.get(B.HTTP_CORS),hle=Jr.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),mle=Jr.get(B.OPERATIONSAPI_NETWORK_CORS),qq=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),zg=Jr.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,Wq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Jr.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ple=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ele=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,gle="Tue, 01 Oct 8307 19:33:20 GMT",pl=new Map;Ke.onInvalidatedUser(()=>{pl=new Map});a(Sle,"bypassAuth");a(zq,"authentication");a(Tle,"start");a(Ale,"login");a(Rle,"logout")});var t$=C((PPe,e$)=>{"use strict";var Ne=require("joi"),Qq=require("fs-extra"),jq=require("path"),Jn=rt(),Jq=ce(),Xq=(k(),P($)),Zq=X(),{hdb_errors:yle}=pe(),{HDB_ERROR_MSGS:Xr}=yle,Oo=/^[a-zA-Z0-9-_]+$/,ble=/^[a-zA-Z0-9-_]+$/;e$.exports={getDropCustomFunctionValidator:Nle,setCustomFunctionValidator:wle,addComponentValidator:Dle,dropCustomFunctionProjectValidator:Lle,packageComponentValidator:Mle,deployComponentValidator:vle,setComponentFileValidator:Ile,getComponentFileValidator:Ple,dropComponentFileValidator:Cle,addSSHKeyValidator:Ule,updateSSHKeyValidator:xle,deleteSSHKeyValidator:Ble,setSSHKnownHostsValidator:Hle};function jg(e,t,r){try{let n=Jq.get(Xq.CONFIG_PARAMS.COMPONENTSROOT),s=jq.join(n,t);return Qq.existsSync(s)?e?t:r.message(Xr.PROJECT_EXISTS):e?r.message(Xr.NO_PROJECT):t}catch(n){return Zq.error(n),r.message(Xr.VALIDATION_ERR)}}a(jg,"checkProjectExists");function Eh(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Eh,"checkFilePath");function Ole(e,t,r,n){try{let s=Jq.get(Xq.CONFIG_PARAMS.COMPONENTSROOT),i=jq.join(s,e,t,r+".js");return Qq.existsSync(i)?r:n.message(Xr.NO_FILE)}catch(s){return Zq.error(s),n.message(Xr.VALIDATION_ERR)}}a(Ole,"checkFileExists");function Nle(e){let t=Ne.object({project:Ne.string().pattern(Oo).custom(jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Oo).custom(Ole.bind(null,e.project,e.type)).custom(Eh).required().messages({"string.pattern.base":Xr.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(Nle,"getDropCustomFunctionValidator");function wle(e){let t=Ne.object({project:Ne.string().pattern(Oo).custom(jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Eh).required(),function_content:Ne.string().required()});return Jn.validateBySchema(e,t)}a(wle,"setCustomFunctionValidator");function Ile(e){let t=Ne.object({project:Ne.string().pattern(Oo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(Eh).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(Ile,"setComponentFileValidator");function Cle(e){let t=Ne.object({project:Ne.string().pattern(Oo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(Eh).optional()});return Jn.validateBySchema(e,t)}a(Cle,"dropComponentFileValidator");function Ple(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Eh).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(Ple,"getComponentFileValidator");function Dle(e){let t=Ne.object({project:Ne.string().pattern(Oo).custom(jg.bind(null,!1)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Dle,"addComponentValidator");function Lle(e){let t=Ne.object({project:Ne.string().pattern(Oo).custom(jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Lle,"dropCustomFunctionProjectValidator");function Mle(e){let t=Ne.object({project:Ne.string().pattern(Oo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Jn.validateBySchema(e,t)}a(Mle,"packageComponentValidator");function vle(e){let t=Ne.object({project:Ne.string().pattern(Oo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Jn.validateBySchema(e,t)}a(vle,"deployComponentValidator");function Ule(e){let t=Ne.object({name:Ne.string().pattern(ble).required().messages({"string.pattern.base":Xr.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Jn.validateBySchema(e,t)}a(Ule,"addSSHKeyValidator");function xle(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Jn.validateBySchema(e,t)}a(xle,"updateSSHKeyValidator");function Ble(e){let t=Ne.object({name:Ne.string().required()});return Jn.validateBySchema(e,t)}a(Ble,"deleteSSHKeyValidator");function Hle(e){let t=Ne.object({known_hosts:Ne.string().required()});return Jn.validateBySchema(e,t)}a(Hle,"setSSHKnownHostsValidator")});var Th=C((LPe,o$)=>{"use strict";var Jg=require("joi"),Pa=require("path"),ad=require("fs-extra"),{exec:kle,spawn:Fle}=require("child_process"),Gle=require("util"),qle=Gle.promisify(kle),cd=(k(),P($)),{PACKAGE_ROOT:$le}=pt(),{handleHDBError:gh,hdb_errors:Vle}=pe(),{HTTP_STATUS_CODES:Sh}=Vle,El=ce(),Kle=rt(),Da=X(),{once:Yle}=require("events");El.initSync();var tw=El.get(cd.CONFIG_PARAMS.COMPONENTSROOT),r$="npm install --force --omit=dev --json",Wle=`${r$} --dry-run`,zle=El.get(cd.CONFIG_PARAMS.ROOTPATH),Xg=Pa.join(zle,"ssh");o$.exports={installModules:Xle,auditModules:Zle,installAllRootModules:Qle,uninstallRootModule:jle,linkHarperdb:Jle,runCommand:ld};async function Qle(e=!1,t=El.get(cd.CONFIG_PARAMS.ROOTPATH)){await Zg();let r=!1,n=process.env;ad.pathExistsSync(Xg)&&ad.readdirSync(Xg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Pa.join(Xg,"config")+" -o UserKnownHostsFile="+Pa.join(Xg,"known_hosts"),...process.env},r=!0)});try{let s=El.get(cd.CONFIG_PARAMS.ROOTPATH),i=Pa.join(s,"node_modules","harperdb");ad.lstatSync(i).isSymbolicLink()&&ad.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Da.error("Error removing symlink:",s)}await ld(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}a(Qle,"installAllRootModules");async function jle(e){await ld(`npm uninstall ${e}`,El.get(cd.CONFIG_PARAMS.ROOTPATH))}a(jle,"uninstallRootModule");async function Jle(){await Zg(),await ld(`npm link ${$le}`,El.get(cd.CONFIG_PARAMS.ROOTPATH))}a(Jle,"linkHarperdb");async function ld(e,t=void 0,r=process.env){Da.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Fle(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();Da.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();Da.error({tagName:"npm_run_command:stderr"},l),i+=l});let[o]=await Yle(n,"close");if(o!==0)throw new Error(`Command \`${e}\` exited with code ${o}.${i===""?"":` Error: ${i}`}`);return s||void 0}a(ld,"runCommand");async function Xle(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Da.warn(t,e.projects);let r=i$(e);if(r)throw gh(r,r.message,Sh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?Wle:r$;await Zg(),await s$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=Pa.join(tw,u),d,h=null;try{let{stdout:_,stderr:m}=await qle(i,{cwd:f});d=_?_.replace(`
|
|
28
|
-
`,""):null,h=
|
|
29
|
-
`,""):null}catch(_){_.stderr?o[u].npm_error=
|
|
30
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(n$,"parseNPMStdErr");async function Zle(e){Da.info(`starting auditModules for request: ${e}`);let t=i$(e);if(t)throw gh(t,t.message,Sh.BAD_REQUEST);let{projects:r}=e;await Zg(),await s$(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Pa.join(tw,o);n[o]={npm_output:null,npm_error:null};try{let l=await ld("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=n$(l.stderr)}}return Da.info(`finished auditModules with response ${n}`),n}a(Zle,"auditModules");async function Zg(){return await ld("npm -v"),!0}a(Zg,"checkNPMInstalled");async function s$(e){if(!Array.isArray(e)||e.length===0)throw gh(new Error,"projects argument must be an array with at least 1 element",Sh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Pa.join(tw,i.toString());if(!await ad.pathExists(o)){t.push(i);continue}let l=Pa.join(o,"package.json");await ad.pathExists(l)||r.push(i)}if(t.length>0)throw gh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Sh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw gh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Sh.BAD_REQUEST,void 0,void 0,!0)}a(s$,"checkProjectPaths");function i$(e){let t=Jg.object({projects:Jg.array().min(1).items(Jg.string()).required(),dry_run:Jg.boolean().default(!1)});return Kle.validateBySchema(e,t)}a(i$,"modulesValidator")});var nw=C((vPe,f$)=>{"use strict";var As=require("fs-extra"),Rh=require("path"),Ah=X(),a$=oe(),{PACKAGE_ROOT:eue}=pt(),rw=(k(),P($)),d$=ce(),tue=Nt();f$.exports=rue;async function rue(){let e=nue(),t=d$.get(rw.CONFIG_PARAMS.ROOTPATH),r=Rh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+eue}},s=Rh.join(t,"node_modules");As.ensureDirSync(s);let i,o=!0,c=!1;try{i=As.readJsonSync(r)}catch(l){if(a$.isEmptyOrZeroLength(e))return;if(l.code!==rw.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!a$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=l$(u);n.dependencies[l]=f+u}if(!o){Ah.notify("Installing components"),await u$(r,n,null),await c$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=l$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(As.statSync(new URL(u+"/package.json")).mtimeMs>As.statSync(r).mtimeMs){c=!0;break}}catch(h){Ah.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Ah.notify("Removing component",l),c=!0);c&&(Ah.notify("Updating components."),await u$(r,n,i),await c$(t,e))}a(rue,"installComponents");function c$(e,t){return Promise.all(t.map(({name:r})=>{let n=Rh.join(e,"node_modules",r),s=Rh.join(e,"components",r);if(As.existsSync(n)&&As.lstatSync(n).isDirectory())return As.move(n,s,{overwrite:!0}).then(()=>{As.symlink(s,n)})}))}a(c$,"moveModuleToComponents");function nue(){let e=tue.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(nue,"getComponentsConfig");function l$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Rh.extname(e)||As.existsSync(e)?"file:":"github:"}a(l$,"getPkgPrefix");async function u$(e,t,r){Ah.trace("npm installing components package.json",t),As.writeFileSync(e,JSON.stringify(t,null," "));try{await Th().installAllRootModules(d$.get(rw.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?As.writeFileSync(e,JSON.stringify(r,null," ")):As.unlinkSync(e),n}}a(u$,"installPackages")});var p$={};xe(p$,{packageDirectory:()=>sue});function sue(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];h$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,_$.join)("cache","webpack")):void 0}).pipe((0,m$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var _$,h$,m$,E$=ye(()=>{_$=require("path"),h$=M(require("tar-fs")),m$=require("node:zlib");a(sue,"packageDirectory")});var ow=C(A$=>{"use strict";var be=require("fs-extra"),sw=require("fast-glob"),we=require("path"),iue=require("tar-fs"),oue=require("gunzip-maybe"),iw=require("normalize-path"),bn=t$(),kt=X(),ct=(k(),P($)),Qt=ce(),eS=Nt(),aue=oe(),{PACKAGE_ROOT:cue}=pt(),{handleHDBError:Ft,hdb_errors:lue}=pe(),{basename:uue}=require("path"),due=nw(),S$=ce(),{Readable:fue}=require("stream"),{isMainThread:_ue}=require("worker_threads"),{HDB_ERROR_MSGS:gl,HTTP_STATUS_CODES:Gt}=lue,T$=nt(),{replicateOperation:ti}=(ms(),P(Ta)),{packageDirectory:hue}=(E$(),P(p$)),g$=Th(),mue=we.join(cue,"application-template"),pue=Qt.get(ct.CONFIG_PARAMS.ROOTPATH),La=we.join(pue,"ssh"),No=we.join(La,"known_hosts");function Eue(){kt.trace("getting custom api status");let e={};try{e={port:Qt.get(ct.CONFIG_PARAMS.HTTP_PORT),directory:Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ft(new Error,gl.FUNCTION_STATUS,Gt.INTERNAL_SERVER_ERROR,kt.ERR,t)}return e}a(Eue,"customFunctionsStatus");function gue(){kt.trace("getting custom api endpoints");let e={},t=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT);try{sw.sync(iw(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:sw.sync(iw(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:sw.sync(iw(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ft(new Error,gl.GET_FUNCTIONS,Gt.INTERNAL_SERVER_ERROR,kt.ERR,r)}return e}a(gue,"getCustomFunctions");function Sue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);kt.trace("getting custom api endpoint file content");let r=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=we.join(r,n,s,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ft(new Error,gl.GET_FUNCTION,Gt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}a(Sue,"getCustomFunction");async function Tue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.setCustomFunctionValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);kt.trace("setting custom function file content");let r=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{be.outputFileSync(we.join(r,n,s,i+".js"),o);let c=await ti(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Ft(new Error,gl.SET_FUNCTION,Gt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}a(Tue,"setCustomFunction");async function Aue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);kt.trace("dropping custom function file");let r=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{be.unlinkSync(we.join(r,n,s,i+".js"));let o=await ti(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Ft(new Error,gl.DROP_FUNCTION,Gt.INTERNAL_SERVER_ERROR,kt.ERR,o)}}a(Aue,"dropCustomFunction");async function Rue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.addComponentValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);kt.trace("adding component");let r=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=we.join(r,n);be.mkdirSync(s,{recursive:!0}),be.copySync(mue,s);let i=await ti(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Ft(new Error,gl.ADD_FUNCTION,Gt.INTERNAL_SERVER_ERROR,kt.ERR,s)}}a(Rue,"addComponent");async function yue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.dropCustomFunctionProjectValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);kt.trace("dropping custom function project");let r=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Qt.get(ct.CONFIG_PARAMS.APPS);if(!aue.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return eS.updateConfigValue(ct.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=we.join(r,n);be.rmSync(i,{recursive:!0});let o=await ti(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Ft(new Error,gl.DROP_FUNCTION_PROJECT,Gt.INTERNAL_SERVER_ERROR,kt.ERR,i)}}a(yue,"dropCustomFunctionProject");async function bue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.packageComponentValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let r=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;kt.trace("packaging component",n);let s;try{s=await be.realpath(we.join(r,n))}catch(o){if(o.code!==ct.NODE_ERROR_CODES.ENOENT)throw o;try{s=await be.realpath(we.join(Qt.get(ct.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ct.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await hue(s,e)).toString("base64");return{project:n,payload:i}}a(bue,"packageComponent");async function Oue(e){e.project?e.project=we.parse(e.project).name:e.package&&(e.project=Nue(e.package));let t=bn.deployComponentValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let r=Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(kt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=we.join(r,n),i="file:"+c,await be.emptyDir(c);let S=fue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,T)=>{S.pipe(oue()).pipe(iue.extract(c,{finish:E})).on("error",T)});let g=await be.readdir(c);g.length===1&&g[0]==="package"&&(await be.copy(we.join(c,"package"),c),await be.remove(we.join(c,"package")));let y=we.join(c,"node_modules");o?await g$.runCommand(o,c):be.existsSync(y)||await g$.installAllRootModules(!1,c)}else{await eS.addConfig(n,{package:i}),await due();let S=S$.get(ct.CONFIG_PARAMS.ROOTPATH);c=we.join(S,"node_modules",n)}if(_ue)return;let l=new Map;l.isWorker=!0;let u=(bh(),P(yh)),f;u.setErrorReporter(S=>f=S);let d=uue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;kt.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let m=await ti(e);if(e.restart===!0)T$.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await aw().executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=g.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}a(Oue,"deployComponent");function Nue(e){if(e.startsWith("git+ssh://"))return we.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return we.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(be.readFileSync(we.join(e,"package.json"),"utf8"));return we.basename(t)}catch{}return we.basename(e)}a(Nue,"getProjectNameFromPackage");async function wue(){let e=a(async(s,i)=>{try{let o=await be.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=we.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await be.stat(u),d={name:we.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return kt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),{name:Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT).split(we.sep).slice(-1).pop(),entries:[]}),n=(bh(),P(yh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(wue,"getComponents");async function Iue(e){let t=bn.getComponentFileValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let n=eS.getConfigObj()[e.project]||e.project==="harperdb"?we.join(S$.get(ct.CONFIG_PARAMS.ROOTPATH),"node_modules"):Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await be.stat(we.join(n,e.project,e.file));return{message:await be.readFile(we.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ct.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${we.join(e.project,e.file)}'`):i}}a(Iue,"getComponentFile");async function Cue(e){let t=bn.setComponentFileValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=we.join(Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await be.ensureFile(n),await be.outputFile(n,e.payload,r)):await be.ensureDir(n);let s=await ti(e);return s.message="Successfully set component: "+e.file,s}a(Cue,"setComponentFile");async function Pue(e){let t=bn.dropComponentFileValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?we.join(r,n):r,i=we.join(Qt.get(ct.CONFIG_PARAMS.COMPONENTSROOT),s),o=we.join(Qt.get(ct.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await be.pathExists(o)&&await be.unlink(o),await be.pathExists(i)&&await be.remove(i);let c=we.join(Qt.get(ct.CONFIG_PARAMS.ROOTPATH),"package.json");if(await be.pathExists(c)){let u=JSON.parse(await be.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await be.writeFile(c,JSON.stringify(u,null,2),"utf8")}eS.deleteConfigFromFile([r]);let l=await ti(e);return e.restart===!0?(T$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Pue,"dropComponent");async function Due(e){let t=bn.addSSHKeyValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;kt.trace("adding ssh key",r);let c=we.join(La,r+".key"),l=we.join(La,"config");if(await be.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await be.outputFile(c,n),await be.chmod(c,"0600");let u=`#${r}
|
|
26
|
+
Database backup has not been removed and can be found here: ${s}`;Pa.error(l),console.error(l)}(0,$N.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,pl.remove)(s))}}async function Aq(e){let t=await(0,Oq.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Nq(e,t){console.log("copyDb start");let r=Ze()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,Rq.open)(new yq.default(t)),c=o.openDB(Vg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let p=_.is_hash_attribute||_.isPrimaryKey,S,g;if(p&&(S=_.compression,g=Kg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(p||_.indexed))continue;let R=new bq.default(!p,p);R.encoding="binary",R.compression=S;let E=n.openDB(h,R);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",R.compression=g;let T=o.openDB(h,R);T.encoder=null,console.log("copying",h,"from",e,"to",t),await d(E,T,p,f)}if(i){let h=n.openDB(Vg.AUDIT_STORE_NAME,uh);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,p,S){let g=0,R=0,E=1e7,T=null;for(;E-- >0;)try{for(let O of h.getKeys({start:T,transaction:S}))try{T=O;let{value:v,version:F}=h.getEntry(O,{transaction:S});l=_.put(O,v,p?F:void 0),g++,S.openTimer&&(S.openTimer=0),R+=(O?.length||10)+v.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(v){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,v)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof T=="string"){if(T==="z")return console.error("Reached end of dbi",T,"for",e,"to",t);T=T.slice(0,-2)+"z"}else if(typeof T=="number")T++;else return console.error("Unknown key type",T,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var Rq,$g,pl,$N,yq,bq,Vg,Oq,VN,Pa,YN=be(()=>{Ue();Rq=require("lmdb"),$g=require("path"),pl=require("fs-extra"),$N=M(ce()),yq=M(xf()),bq=M(Uf()),Vg=M(Ft());G();so();Oq=M(uo()),VN=M(wt()),Pa=M(X());a(Jce,"compactOnStart");a(Aq,"getTotalDBRecordCount");a(Nq,"copyDb")});var nd=P((bPe,Mq)=>{"use strict";var Xce=require("minimist"),{isMainThread:zN,parentPort:fh,threadId:APe}=require("worker_threads"),it=(G(),D($)),Ui=X(),jN=oe(),Wg=qg(),Yg=Er(),RPe=Pt(),Pq=wt(),ti=sd(),wq=Ku(),{compactOnStart:Zce}=(YN(),D(KN)),ele=lc(),{restartWorkers:zg,onMessageByType:tle}=st(),{handleHDBError:rle,hdb_errors:nle}=he(),{HTTP_STATUS_CODES:sle}=nle,_h=ce(),{sendOperationToNode:Iq,getThisNodeName:ile,monitorNodeCAs:ole}=(ps(),D(Aa)),{getHDBNodeTable:yPe}=(Xc(),D(lO));_h.initSync();var dh=`Restarting HarperDB. This may take up to ${it.RESTART_TIMEOUT_MS/1e3} seconds.`,ale="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Cq="Clustering is not enabled so cannot be restarted",cle="Invalid service",rd,Ts;Mq.exports={restart:Dq,restartService:QN};zN&&tle(it.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await QN({service:e.workerType}):Dq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Dq(e){Ts=Object.keys(e).length===0,rd=await ti.isServiceRegistered(it.PROCESS_DESCRIPTORS.HDB);let t=Xce(process.argv);if(t.service){await QN(t);return}if(Ts&&!rd){console.error(ale);return}if(Ts&&console.log(dh),rd){ti.enterPM2Mode(),Ui.notify(dh);let r=ele(Object.keys(it.CONFIG_PARAM_MAP),!0);return jN.isEmptyOrZeroLength(Object.keys(r))||Pq.updateConfigValue(void 0,void 0,r,!0,!0),lle(),dh}return zN?(Ui.notify(dh),_h.get(it.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Zce(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{zg()},50)):fh.postMessage({type:it.ITC_EVENT_TYPES.RESTART}),dh}a(Dq,"restart");async function QN(e){let{service:t}=e;if(it.HDB_PROCESS_SERVICES[t]===void 0)throw rle(new Error,cle,sle.BAD_REQUEST,void 0,void 0,!0);if(ti.expectedRestartOfChildren(),rd=await ti.isServiceRegistered(it.PROCESS_DESCRIPTORS.HDB),!zN){e.replicated&&ole(),fh.postMessage({type:it.ITC_EVENT_TYPES.RESTART,workerType:t}),fh.ref(),await new Promise(s=>{fh.on("message",i=>{i.type==="restart-complete"&&(s(),fh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===ile())continue;let i;try{({job_id:i}=await Iq(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await Iq(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case it.HDB_PROCESS_SERVICES.clustering:if(!_h.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Cq;break}Ts&&console.log("Restarting clustering"),Ui.notify("Restarting clustering"),await Lq();break;case it.HDB_PROCESS_SERVICES.clustering_config:case it.HDB_PROCESS_SERVICES["clustering config"]:if(!_h.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Cq;break}Ts&&console.log("Restarting clustering_config"),Ui.notify("Restarting clustering_config"),await ti.reloadClustering();break;case"custom_functions":case"custom functions":case it.HDB_PROCESS_SERVICES.harperdb:case it.HDB_PROCESS_SERVICES.http_workers:case it.HDB_PROCESS_SERVICES.http:if(Ts&&!rd){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Ts&&console.log("Restarting http_workers"),Ui.notify("Restarting http_workers"),Ts?await ti.restart(it.PROCESS_DESCRIPTORS.HDB):await zg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ui.error(r),Ts&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(QN,"restartService");async function lle(){await Lq(),await ti.restart(it.PROCESS_DESCRIPTORS.HDB),await jN.async_set_timeout(2e3),_h.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await WN(),Ts&&(await Yg.closeConnection(),process.exit(0))}a(lle,"restartPM2Mode");async function Lq(){if(!Pq.getConfigFromFile(it.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await wq.getHDBProcessInfo()).clustering.length===0)Ui.trace("Clustering not running, restart will start clustering services"),await Wg.generateNatsConfig(!0),await ti.startClusteringProcesses(),await ti.startClusteringThreads(),await WN(),Ts&&await Yg.closeConnection();else{await Wg.generateNatsConfig(!0),rd?(Ui.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ti.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await wq.getHDBProcessInfo()).clustering.forEach(s=>{Ui.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await jN.async_set_timeout(3e3),await WN(),await Yg.updateLocalStreams(),Ts&&await Yg.closeConnection(),Ui.trace("Restart clustering restarting ingest and reply service threads");let t=zg(it.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=zg(it.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Lq,"restartClustering");async function WN(){await Wg.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Wg.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(WN,"removeNatsConfig")});var Vq=P((wPe,$q)=>{"use strict";var NPe=require("lodash"),yn=(G(),D($)),{handleHDBError:vq,hdb_errors:ule}=he(),{HDB_ERROR_MSGS:dle,HTTP_STATUS_CODES:fle}=ule,JN=X();$q.exports={getRolePermissions:hle};var ml=Object.create(null),_le=a(e=>({key:e,perms:{}}),"perms_template_obj"),Hq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),kq=a((e=!1,t=!1,r=!1,n=!1)=>({[yn.PERMS_CRUD_ENUM.READ]:e,[yn.PERMS_CRUD_ENUM.INSERT]:t,[yn.PERMS_CRUD_ENUM.UPDATE]:r,[yn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),XN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...kq(t,r,n,s)}),"table_perms_template"),Uq=a((e,t=kq())=>({attribute_name:e,describe:qq(t),[hh]:t[hh],[ZN]:t[ZN],[ew]:t[ew]}),"attr_perms_template"),xq=a((e,t=!1)=>({attribute_name:e,describe:t,[hh]:t}),"timestamp_attr_perms_template"),{READ:hh,INSERT:ZN,UPDATE:ew}=yn.PERMS_CRUD_ENUM,Fq=Object.values(yn.PERMS_CRUD_ENUM),Gq=[hh,ZN,ew];function hle(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[yn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(ml[t]&&ml[t].key===n)return ml[t].perms;let s=ple(e,r);return ml[t]?ml[t].key=n:ml[t]=_le(n),ml[t].perms=s,s}catch(r){if(!e[yn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[yn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<yn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw JN.error(n),JN.debug(r),vq(new Error,dle.OUTDATED_PERMS_TRANSLATION_ERROR,fle.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
27
|
+
${r.stack}`;throw JN.error(n),vq(new Error)}}}a(hle,"getRolePermissions");function ple(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[yn.SYSTEM_SCHEMA_NAME]=n[yn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=mle(t[i]);return}r[i]=Hq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=Ele(c,l);r[i].describe||Fq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=XN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=XN()})}),r}a(ple,"translateRolePermissions");function mle(e){let t=Hq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=XN(!0,!0,!0,!0,!0)}),t}a(mle,"createStructureUserPermissions");function Ele(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return yn.TIME_STAMP_NAMES.includes(d)&&(h=xq(d,f[hh])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Uq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=qq(f),s.attribute_permissions.push(f),c||gle(f,l)}else if(u!==o){let f;yn.TIME_STAMP_NAMES.includes(u)?f=xq(u):f=Uq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Bq(s),s}else return e.describe=Bq(e),e}a(Ele,"getTableAttrPerms");function Bq(e){return Fq.filter(t=>e[t]).length>0}a(Bq,"getSchemaTableDescribePerm");function qq(e){return Gq.filter(t=>e[t]).length>0}a(qq,"getAttributeDescribePerm");function gle(e,t){Gq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(gle,"checkForHashPerms")});var ph={};Be(ph,{authentication:()=>Jq,bypassAuth:()=>Nle,login:()=>Ile,logout:()=>Cle,start:()=>wle});function Nle(){Qq=!0}async function Jq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Rle?Ale:[]:Tle?Sle:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let p=Jr.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new mo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return jg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),jg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(jg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let S of p)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await Kq.get(l);break}e.session=u||(u={})}let f=a((_,p,S)=>{let g=new id.AuthAuditLog(_,p,zo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===xs.SUCCESS?tw.notify(g):tw.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&tw.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await Ke.getUser(_,null,e),f(_,xs.SUCCESS,"mTLS")):(0,id.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=El.get(n),!d){let _=n.indexOf(" "),p=n.slice(0,_),S=n.slice(_+1),g,R;try{switch(p){case"Basic":let E=atob(S),T=E.indexOf(":");g=E.slice(0,T),R=E.slice(T+1),d=g||R?await Ke.getUser(g,R,e):null;break;case"Bearer":try{d=await Fb(S)}catch(O){if(O.message==="invalid token")try{return await LE(S),c({status:-1})}catch{throw O}}break}}catch(E){return ble&&(El.get(S)||(El.set(S,S),f(g,xs.FAILURE,p))),c({status:401,body:oa({error:E.message},e)})}El.set(n,d),yle&&f(d.username,xs.SUCCESS,p)}e.user=d}else u?.user?e.user=await Ke.getUser(u.user,null,e):(Qq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Wq.getSuperUser)());jg&&(e.session.update=function(_){let p=Jr.get(B.AUTHENTICATION_COOKIE_EXPIRES);if(!l){l=(0,zq.v4)();let S=Jr.get(B.AUTHENTICATION_COOKIE_DOMAINS),g=p?new Date(Date.now()+(0,rw.convertToMS)(p)).toUTCString():Ole,R=S?.find(O=>r.host?.endsWith(O)),T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${g}; ${R?"Domain="+R+"; ":""}HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):h?.headers?.set&&h.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,Kq.put(_,{expiresAt:p?Date.now()+(0,rw.convertToMS)(p):void 0})},e.login=async function(_,p){let S=e.user=await Ke.authenticateUser(_,p,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&us.loginPath?(h.status=302,h.headers.set("Location",us.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new mo);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function wle({server:e,port:t,securePort:r}){e.http(Jq,t||r?{port:t,securePort:r}:{port:"all"}),Yq||(Yq=!0,setInterval(()=>{El=new Map},Jr.get(B.AUTHENTICATION_CACHETTL)).unref(),jq.user.addListener(()=>{El=new Map}))}async function Ile(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password??""),"Login successful"}async function Cle(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Wq,zq,Jr,id,jq,rw,tw,Sle,Tle,Ale,Rle,Kq,jg,Qq,yle,ble,Ole,El,Yq,Qg=be(()=>{Wq=M(Gn());Dr();Jl();yu();Ue();zq=require("uuid"),Jr=M(ce());G();id=M(X()),jq=M(Zf());y_();rw=M(oe());eo();tw=(0,id.loggerWithTag)("auth-event");Jr.initSync();Sle=Jr.get(B.HTTP_CORSACCESSLIST),Tle=Jr.get(B.HTTP_CORS),Ale=Jr.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Rle=Jr.get(B.OPERATIONSAPI_NETWORK_CORS),Kq=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),jg=Jr.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,Qq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Jr.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,yle=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,ble=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ole="Tue, 01 Oct 8307 19:33:20 GMT",El=new Map;Ke.onInvalidatedUser(()=>{El=new Map});a(Nle,"bypassAuth");a(Jq,"authentication");a(wle,"start");a(Ile,"login");a(Cle,"logout")});var s$=P((BPe,n$)=>{"use strict";var Ne=require("joi"),Xq=require("fs-extra"),Zq=require("path"),Qn=nt(),e$=ce(),t$=(G(),D($)),r$=X(),{hdb_errors:Ple}=he(),{HDB_ERROR_MSGS:Xr}=Ple,bo=/^[a-zA-Z0-9-_]+$/,Dle=/^[a-zA-Z0-9-_]+$/;n$.exports={getDropCustomFunctionValidator:Mle,setCustomFunctionValidator:vle,addComponentValidator:Hle,dropCustomFunctionProjectValidator:kle,packageComponentValidator:Fle,deployComponentValidator:Gle,setComponentFileValidator:Ule,getComponentFileValidator:Ble,dropComponentFileValidator:xle,addSSHKeyValidator:qle,updateSSHKeyValidator:$le,deleteSSHKeyValidator:Vle,setSSHKnownHostsValidator:Kle};function Jg(e,t,r){try{let n=e$.get(t$.CONFIG_PARAMS.COMPONENTSROOT),s=Zq.join(n,t);return Xq.existsSync(s)?e?t:r.message(Xr.PROJECT_EXISTS):e?r.message(Xr.NO_PROJECT):t}catch(n){return r$.error(n),r.message(Xr.VALIDATION_ERR)}}a(Jg,"checkProjectExists");function mh(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(mh,"checkFilePath");function Lle(e,t,r,n){try{let s=e$.get(t$.CONFIG_PARAMS.COMPONENTSROOT),i=Zq.join(s,e,t,r+".js");return Xq.existsSync(i)?r:n.message(Xr.NO_FILE)}catch(s){return r$.error(s),n.message(Xr.VALIDATION_ERR)}}a(Lle,"checkFileExists");function Mle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(bo).custom(Lle.bind(null,e.project,e.type)).custom(mh).required().messages({"string.pattern.base":Xr.BAD_FILE_NAME})});return Qn.validateBySchema(e,t)}a(Mle,"getDropCustomFunctionValidator");function vle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(mh).required(),function_content:Ne.string().required()});return Qn.validateBySchema(e,t)}a(vle,"setCustomFunctionValidator");function Ule(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(mh).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Ule,"setComponentFileValidator");function xle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(mh).optional()});return Qn.validateBySchema(e,t)}a(xle,"dropComponentFileValidator");function Ble(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(mh).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Ble,"getComponentFileValidator");function Hle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!1)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(Hle,"addComponentValidator");function kle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(kle,"dropCustomFunctionProjectValidator");function Fle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Qn.validateBySchema(e,t)}a(Fle,"packageComponentValidator");function Gle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Qn.validateBySchema(e,t)}a(Gle,"deployComponentValidator");function qle(e){let t=Ne.object({name:Ne.string().pattern(Dle).required().messages({"string.pattern.base":Xr.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Qn.validateBySchema(e,t)}a(qle,"addSSHKeyValidator");function $le(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Qn.validateBySchema(e,t)}a($le,"updateSSHKeyValidator");function Vle(e){let t=Ne.object({name:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Vle,"deleteSSHKeyValidator");function Kle(e){let t=Ne.object({known_hosts:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Kle,"setSSHKnownHostsValidator")});var Sh=P((kPe,l$)=>{"use strict";var Xg=require("joi"),Da=require("path"),od=require("fs-extra"),{exec:Yle,spawn:Wle}=require("child_process"),zle=require("util"),jle=zle.promisify(Yle),ad=(G(),D($)),{PACKAGE_ROOT:Qle}=Et(),{handleHDBError:Eh,hdb_errors:Jle}=he(),{HTTP_STATUS_CODES:gh}=Jle,gl=ce(),Xle=nt(),La=X(),{once:Zle}=require("events");gl.initSync();var nw=gl.get(ad.CONFIG_PARAMS.COMPONENTSROOT),i$="npm install --force --omit=dev --json",eue=`${i$} --dry-run`,tue=gl.get(ad.CONFIG_PARAMS.ROOTPATH),Zg=Da.join(tue,"ssh");l$.exports={installModules:iue,auditModules:oue,installAllRootModules:rue,uninstallRootModule:nue,linkHarperdb:sue,runCommand:cd};async function rue(e=!1,t=gl.get(ad.CONFIG_PARAMS.ROOTPATH)){await eS();let r=!1,n=process.env;od.pathExistsSync(Zg)&&od.readdirSync(Zg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Da.join(Zg,"config")+" -o UserKnownHostsFile="+Da.join(Zg,"known_hosts"),...process.env},r=!0)});try{let s=gl.get(ad.CONFIG_PARAMS.ROOTPATH),i=Da.join(s,"node_modules","harperdb");od.lstatSync(i).isSymbolicLink()&&od.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&La.error("Error removing symlink:",s)}await cd(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}a(rue,"installAllRootModules");async function nue(e){await cd(`npm uninstall ${e}`,gl.get(ad.CONFIG_PARAMS.ROOTPATH))}a(nue,"uninstallRootModule");async function sue(){await eS(),await cd(`npm link ${Qle}`,gl.get(ad.CONFIG_PARAMS.ROOTPATH))}a(sue,"linkHarperdb");async function cd(e,t=void 0,r=process.env){La.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Wle(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();La.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();La.error({tagName:"npm_run_command:stderr"},l),i+=l});let[o]=await Zle(n,"close");if(o!==0)throw new Error(`Command \`${e}\` exited with code ${o}.${i===""?"":` Error: ${i}`}`);return s||void 0}a(cd,"runCommand");async function iue(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";La.warn(t,e.projects);let r=c$(e);if(r)throw Eh(r,r.message,gh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?eue:i$;await eS(),await a$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=Da.join(nw,u),d,h=null;try{let{stdout:_,stderr:p}=await jle(i,{cwd:f});d=_?_.replace(`
|
|
28
|
+
`,""):null,h=p?p.replace(`
|
|
29
|
+
`,""):null}catch(_){_.stderr?o[u].npm_error=o$(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return La.info(`finished installModules with response ${o}`),o.warning=t,o}a(iue,"installModules");function o$(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
30
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(o$,"parseNPMStdErr");async function oue(e){La.info(`starting auditModules for request: ${e}`);let t=c$(e);if(t)throw Eh(t,t.message,gh.BAD_REQUEST);let{projects:r}=e;await eS(),await a$(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Da.join(nw,o);n[o]={npm_output:null,npm_error:null};try{let l=await cd("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=o$(l.stderr)}}return La.info(`finished auditModules with response ${n}`),n}a(oue,"auditModules");async function eS(){return await cd("npm -v"),!0}a(eS,"checkNPMInstalled");async function a$(e){if(!Array.isArray(e)||e.length===0)throw Eh(new Error,"projects argument must be an array with at least 1 element",gh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Da.join(nw,i.toString());if(!await od.pathExists(o)){t.push(i);continue}let l=Da.join(o,"package.json");await od.pathExists(l)||r.push(i)}if(t.length>0)throw Eh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,gh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Eh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,gh.BAD_REQUEST,void 0,void 0,!0)}a(a$,"checkProjectPaths");function c$(e){let t=Xg.object({projects:Xg.array().min(1).items(Xg.string()).required(),dry_run:Xg.boolean().default(!1)});return Xle.validateBySchema(e,t)}a(c$,"modulesValidator")});var iw=P((GPe,p$)=>{"use strict";var As=require("fs-extra"),Ah=require("path"),Th=X(),u$=oe(),{PACKAGE_ROOT:aue}=Et(),sw=(G(),D($)),h$=ce(),cue=wt();p$.exports=lue;async function lue(){let e=uue(),t=h$.get(sw.CONFIG_PARAMS.ROOTPATH),r=Ah.join(t,"package.json"),n={dependencies:{harperdb:"file:"+aue}},s=Ah.join(t,"node_modules");As.ensureDirSync(s);let i,o=!0,c=!1;try{i=As.readJsonSync(r)}catch(l){if(u$.isEmptyOrZeroLength(e))return;if(l.code!==sw.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!u$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=f$(u);n.dependencies[l]=f+u}if(!o){Th.notify("Installing components"),await _$(r,n,null),await d$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=f$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(As.statSync(new URL(u+"/package.json")).mtimeMs>As.statSync(r).mtimeMs){c=!0;break}}catch(h){Th.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Th.notify("Removing component",l),c=!0);c&&(Th.notify("Updating components."),await _$(r,n,i),await d$(t,e))}a(lue,"installComponents");function d$(e,t){return Promise.all(t.map(({name:r})=>{let n=Ah.join(e,"node_modules",r),s=Ah.join(e,"components",r);if(As.existsSync(n)&&As.lstatSync(n).isDirectory())return As.move(n,s,{overwrite:!0}).then(()=>{As.symlink(s,n)})}))}a(d$,"moveModuleToComponents");function uue(){let e=cue.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(uue,"getComponentsConfig");function f$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Ah.extname(e)||As.existsSync(e)?"file:":"github:"}a(f$,"getPkgPrefix");async function _$(e,t,r){Th.trace("npm installing components package.json",t),As.writeFileSync(e,JSON.stringify(t,null," "));try{await Sh().installAllRootModules(h$.get(sw.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?As.writeFileSync(e,JSON.stringify(r,null," ")):As.unlinkSync(e),n}}a(_$,"installPackages")});var S$={};Be(S$,{packageDirectory:()=>due});function due(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];E$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,m$.join)("cache","webpack")):void 0}).pipe((0,g$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var m$,E$,g$,T$=be(()=>{m$=require("path"),E$=M(require("tar-fs")),g$=require("node:zlib");a(due,"packageDirectory")});var cw=P(b$=>{"use strict";var Oe=require("fs-extra"),ow=require("fast-glob"),we=require("path"),fue=require("tar-fs"),_ue=require("gunzip-maybe"),aw=require("normalize-path"),bn=s$(),Gt=X(),lt=(G(),D($)),Jt=ce(),tS=wt(),hue=oe(),{PACKAGE_ROOT:pue}=Et(),{handleHDBError:qt,hdb_errors:mue}=he(),{basename:Eue}=require("path"),gue=iw(),R$=ce(),{Readable:Sue}=require("stream"),{isMainThread:Tue}=require("worker_threads"),{HDB_ERROR_MSGS:Sl,HTTP_STATUS_CODES:$t}=mue,y$=st(),{replicateOperation:ri}=(ps(),D(Aa)),{packageDirectory:Aue}=(T$(),D(S$)),A$=Sh(),Rue=we.join(pue,"application-template"),yue=Jt.get(lt.CONFIG_PARAMS.ROOTPATH),Ma=we.join(yue,"ssh"),Oo=we.join(Ma,"known_hosts");function bue(){Gt.trace("getting custom api status");let e={};try{e={port:Jt.get(lt.CONFIG_PARAMS.HTTP_PORT),directory:Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw qt(new Error,Sl.FUNCTION_STATUS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(bue,"customFunctionsStatus");function Oue(){Gt.trace("getting custom api endpoints");let e={},t=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT);try{ow.sync(aw(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:ow.sync(aw(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ow.sync(aw(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw qt(new Error,Sl.GET_FUNCTIONS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(Oue,"getCustomFunctions");function Nue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("getting custom api endpoint file content");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=we.join(r,n,s,i+".js");try{return Oe.readFileSync(o,{encoding:"utf8"})}catch(c){throw qt(new Error,Sl.GET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(Nue,"getCustomFunction");async function wue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.setCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("setting custom function file content");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Oe.outputFileSync(we.join(r,n,s,i+".js"),o);let c=await ri(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw qt(new Error,Sl.SET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(wue,"setCustomFunction");async function Iue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function file");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Oe.unlinkSync(we.join(r,n,s,i+".js"));let o=await ri(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw qt(new Error,Sl.DROP_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(Iue,"dropCustomFunction");async function Cue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.addComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("adding component");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=we.join(r,n);Oe.mkdirSync(s,{recursive:!0}),Oe.copySync(Rue,s);let i=await ri(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw qt(new Error,Sl.ADD_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(Cue,"addComponent");async function Pue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.dropCustomFunctionProjectValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function project");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Jt.get(lt.CONFIG_PARAMS.APPS);if(!hue.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return tS.updateConfigValue(lt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=we.join(r,n);Oe.rmSync(i,{recursive:!0});let o=await ri(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw qt(new Error,Sl.DROP_FUNCTION_PROJECT,$t.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(Pue,"dropCustomFunctionProject");async function Due(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.packageComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Oe.realpath(we.join(r,n))}catch(o){if(o.code!==lt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Oe.realpath(we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===lt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Aue(s,e)).toString("base64");return{project:n,payload:i}}a(Due,"packageComponent");async function Lue(e){e.project?e.project=we.parse(e.project).name:e.package&&(e.project=Mue(e.package));let t=bn.deployComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Gt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=we.join(r,n),i="file:"+c,await Oe.emptyDir(c);let S=Sue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,T)=>{S.pipe(_ue()).pipe(fue.extract(c,{finish:E})).on("error",T)});let g=await Oe.readdir(c);g.length===1&&g[0]==="package"&&(await Oe.copy(we.join(c,"package"),c),await Oe.remove(we.join(c,"package")));let R=we.join(c,"node_modules");o?await A$.runCommand(o,c):Oe.existsSync(R)||await A$.installAllRootModules(!1,c)}else{await tS.addConfig(n,{package:i}),await gue();let S=R$.get(lt.CONFIG_PARAMS.ROOTPATH);c=we.join(S,"node_modules",n)}if(Tue)return;let l=new Map;l.isWorker=!0;let u=(yh(),D(Rh)),f;u.setErrorReporter(S=>f=S);let d=Eue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;Gt.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let p=await ri(e);if(e.restart===!0)y$.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await lw().executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}a(Lue,"deployComponent");function Mue(e){if(e.startsWith("git+ssh://"))return we.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return we.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Oe.readFileSync(we.join(e,"package.json"),"utf8"));return we.basename(t)}catch{}return we.basename(e)}a(Mue,"getProjectNameFromPackage");async function vue(){let e=a(async(s,i)=>{try{let o=await Oe.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=we.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Oe.stat(u),d={name:we.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return Gt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{name:Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT).split(we.sep).slice(-1).pop(),entries:[]}),n=(yh(),D(Rh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(vue,"getComponents");async function Uue(e){let t=bn.getComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let n=tS.getConfigObj()[e.project]||e.project==="harperdb"?we.join(R$.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules"):Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Oe.stat(we.join(n,e.project,e.file));return{message:await Oe.readFile(we.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===lt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${we.join(e.project,e.file)}'`):i}}a(Uue,"getComponentFile");async function xue(e){let t=bn.setComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=we.join(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Oe.ensureFile(n),await Oe.outputFile(n,e.payload,r)):await Oe.ensureDir(n);let s=await ri(e);return s.message="Successfully set component: "+e.file,s}a(xue,"setComponentFile");async function Bue(e){let t=bn.dropComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?we.join(r,n):r,i=we.join(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),s),o=we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Oe.pathExists(o)&&await Oe.unlink(o),await Oe.pathExists(i)&&await Oe.remove(i);let c=we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Oe.pathExists(c)){let u=JSON.parse(await Oe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Oe.writeFile(c,JSON.stringify(u,null,2),"utf8")}tS.deleteConfigFromFile([r]);let l=await ri(e);return e.restart===!0?(y$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Bue,"dropComponent");async function Hue(e){let t=bn.addSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Gt.trace("adding ssh key",r);let c=we.join(Ma,r+".key"),l=we.join(Ma,"config");if(await Oe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Oe.outputFile(c,n),await Oe.chmod(c,"0600");let u=`#${r}
|
|
31
31
|
Host ${s}
|
|
32
32
|
HostName ${i}
|
|
33
33
|
User git
|
|
34
34
|
IdentityFile ${c}
|
|
35
|
-
IdentitiesOnly yes`;await
|
|
36
|
-
`+u):await
|
|
37
|
-
`)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await be.appendFile(No,o);let d=await ti(e);return d.message=`Added ssh key: ${r}${f}`,d}a(Due,"addSSHKey");async function Lue(e){let t=bn.updateSSHKeyValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let{name:r,key:n}=e;kt.trace("updating ssh key",r);let s=we.join(La,r+".key");if(!await be.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await be.outputFile(s,n);let i=await ti(e);return i.message=`Updated ssh key: ${r}`,i}a(Lue,"updateSSHKey");async function Mue(e){let t=bn.deleteSSHKeyValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let{name:r}=e;kt.trace("deleting ssh key",r);let n=we.join(La,r+".key"),s=we.join(La,"config");if(!await be.pathExists(n))throw new Error("Key does not exist");let i=await be.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await be.outputFile(s,i),be.removeSync(n);let c=await ti(e);return c.message=`Deleted ssh key: ${r}`,c}a(Mue,"deleteSSHKey");async function vue(e){let t=[];return await be.pathExists(La)&&(await be.readdir(La)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(vue,"listSSHKeys");async function Uue(e){let t=bn.setSSHKnownHostsValidator(e);if(t)throw Ft(t,t.message,Gt.BAD_REQUEST);let{known_hosts:r}=e;await be.outputFile(No,r);let n=await ti(e);return n.message="Known hosts successfully set",n}a(Uue,"setSSHKnownHosts");async function xue(e){return await be.pathExists(No)?{known_hosts:await be.readFile(No,"utf8")}:{known_hosts:null}}a(xue,"getSSHKnownHosts");Object.assign(A$,{customFunctionsStatus:Eue,getCustomFunctions:gue,getCustomFunction:Sue,setCustomFunction:Tue,dropCustomFunction:Aue,addComponent:Rue,dropCustomFunctionProject:yue,packageComponent:bue,deployComponent:Oue,getComponents:wue,getComponentFile:Iue,setComponentFile:Cue,dropComponent:Pue,addSSHKey:Due,updateSSHKey:Lue,deleteSSHKey:Mue,listSSHKeys:vue,setSSHKnownHosts:Uue,getSSHKnownHosts:xue})});var cw=C((kPe,y$)=>{"use strict";var Rs=require("joi"),R$=rt();y$.exports={readTransactionLogValidator:Bue,deleteTransactionLogsBeforeValidator:Hue};function Bue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return R$.validateBySchema(e,t)}a(Bue,"readTransactionLogValidator");function Hue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return R$.validateBySchema(e,t)}a(Hue,"deleteTransactionLogsBeforeValidator")});var nS=C((GPe,C$)=>{"use strict";var lw=(k(),P($)),Oh=pr(),b$=oe(),O$=ce(),N$=uo(),w$=X(),{handleHDBError:tS,hdb_errors:kue}=pe(),{HTTP_STATUS_CODES:rS}=kue,{readTransactionLogValidator:Fue,deleteTransactionLogsBeforeValidator:Gue}=cw(),I$=Gn(),que="Logs successfully deleted from transaction log.",$ue="All logs successfully deleted from transaction log.";C$.exports={readTransactionLog:Vue,deleteTransactionLogsBefore:Yue};async function Vue(e){let t=Fue(e);if(t)throw tS(t,t.message,rS.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=b$.checkSchemaTableExist(e.database,e.table);if(r)throw tS(new Error,r,rS.NOT_FOUND,void 0,void 0,!0);return O$.get(lw.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Kue(e):(w$.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)),I$.readAuditLog(e))}a(Vue,"readTransactionLog");async function*Kue(e){let t=N$.createNatsTableStreamName(e.database,e.table),r=await Oh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===lw.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Kue,"readTransactionLogNats");async function Yue(e){let t=Gue(e);if(t)throw tS(t,t.message,rS.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!O$.get(lw.CONFIG_PARAMS.CLUSTERING_ENABLED))return w$.info("Delete transaction logs called for Plexus"),I$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=b$.checkSchemaTableExist(r,n);if(i)throw tS(new Error,i,rS.NOT_FOUND,void 0,void 0,!0);let o=N$.createNatsTableStreamName(r,n),{jsm:c}=await Oh.getNATSReferences(),l=await Oh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=que,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=$ue):d=(await Oh.viewStream(o,parseInt(s),1))[0].nats_sequence,await Oh.purgeTableStream(r,n,{seq:d}),f}a(Yue,"deleteTransactionLogsBefore")});var D$=C(($Pe,P$)=>{"use strict";var uw=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};P$.exports=uw});var M$=C((KPe,L$)=>{"use strict";var dw=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};L$.exports=dw});var _w=C((WPe,U$)=>{"use strict";var v$=D$(),Wue=M$(),{HDB_ERROR_MSGS:zue}=Ln(),fw=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=zue.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 v$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Wue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new v$(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};U$.exports=fw});var aS=C((JPe,X$)=>{"use strict";var hw=gn(),sS=Vr(),ys=hg(),Ih=fo(),mw=vc(),Que=xO(),jue=mF(),Ch=qn(),iS=h_(),Er=X(),Jue=GO(),Xue=Ng(),Zue=fN(),ede=Ig(),tde=mN(),rde=pN(),nde=SN(),sde=AN(),pw=Mg(),wo=oe(),ide=WG(),Ew=vN(),H$=sd(),Zr=(k(),P($)),k$=Gq(),ode=Yu(),F$=(Ou(),P(w_)),G$=(Qg(),P(ph)),q$=Nt(),ar=ow(),ade=require("alasql"),$$=nS(),V$=Th(),ud=Xs(),K$=(cl(),P(al)),Y$=_w(),{handleHDBError:On,hdb_errors:W$}=pe(),{addNodeBack:QPe,removeNodeBack:jPe}=(cl(),P(al)),{HDB_ERROR_MSGS:xr,HTTP_STATUS_CODES:Nh}=W$,Z=new Map,z$="delete",Ma="insert",Io="read",Sl="update",wh="describe",x$=Ih.describeSchema.name,B$=Ih.describeTable.name,Q$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},cde={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},lde="catchup",ude="handleGetJob",dde="handleGetJobsByStartDate",oS={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},fde=[ys.createTable.name,ys.createAttribute.name,ys.dropTable.name,ys.dropAttribute.name],j$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(hw.insert.name,new re(!1,[Ma]));Z.set(hw.update.name,new re(!1,[Sl]));Z.set(hw.upsert.name,new re(!1,[Ma,Sl]));Z.set(sS.searchByConditions.name,new re(!1,[Io]));Z.set(sS.searchByHash.name,new re(!1,[Io]));Z.set(sS.searchByValue.name,new re(!1,[Io]));Z.set(sS.search.name,new re(!1,[Io]));Z.set(ys.createSchema.name,new re(!0,[]));Z.set(ys.createTable.name,new re(!0,[]));Z.set(ys.createAttribute.name,new re(!1,[Ma]));Z.set(ys.dropSchema.name,new re(!0,[]));Z.set(ys.dropTable.name,new re(!0,[]));Z.set(ys.dropAttribute.name,new re(!0,[]));Z.set(Ih.describeSchema.name,new re(!1,[Io]));Z.set(Ih.describeTable.name,new re(!1,[Io]));Z.set(mw.deleteRecord.name,new re(!1,[z$]));Z.set(Ch.addUser.name,new re(!0,[]));Z.set(Ch.alterUser.name,new re(!0,[]));Z.set(Ch.dropUser.name,new re(!0,[]));Z.set(Ch.listUsersExternal.name,new re(!0,[]));Z.set(iS.listRoles.name,new re(!0,[]));Z.set(iS.addRole.name,new re(!0,[]));Z.set(iS.alterRole.name,new re(!0,[]));Z.set(iS.dropRole.name,new re(!0,[]));Z.set(Jue.name,new re(!0,[]));Z.set(Xue.name,new re(!0,[]));Z.set(Zue.name,new re(!0,[]));Z.set(ede.name,new re(!0,[]));Z.set(tde.name,new re(!0,[]));Z.set(rde.name,new re(!0,[]));Z.set(pw.setRoutes.name,new re(!0,[]));Z.set(pw.getRoutes.name,new re(!0,[]));Z.set(pw.deleteRoutes.name,new re(!0,[]));Z.set(q$.setConfiguration.name,new re(!0,[]));Z.set(nde.clusterStatus.name,new re(!0,[]));Z.set(sde.name,new re(!0,[]));Z.set(Ew.getFingerprint.name,new re(!0,[]));Z.set(Ew.setLicense.name,new re(!0,[]));Z.set(mw.deleteFilesBefore.name,new re(!0,[]));Z.set(mw.deleteAuditLogsBefore.name,new re(!0,[]));Z.set(H$.restart.name,new re(!0,[]));Z.set(H$.restartService.name,new re(!0,[]));Z.set(Que.name,new re(!0,[]));Z.set(jue.name,new re(!0,[Io]));Z.set(ode.systemInformation.name,new re(!0,[]));Z.set(q$.getConfiguration.name,new re(!0,[]));Z.set($$.readTransactionLog.name,new re(!0,[]));Z.set($$.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(V$.installModules.name,new re(!0,[]));Z.set(V$.auditModules.name,new re(!0,[]));Z.set(ud.createCsr.name,new re(!0,[]));Z.set(ud.signCertificate.name,new re(!0,[]));Z.set(ud.listCertificates.name,new re(!0,[]));Z.set(ud.addCertificate.name,new re(!0,[]));Z.set(ud.removeCertificate.name,new re(!0,[]));Z.set(ud.getKey.name,new re(!0,[]));Z.set(K$.addNodeBack.name,new re(!0,[]));Z.set(K$.removeNodeBack.name,new re(!0,[]));Z.set(F$.createTokens.name,new re(!1,[]));Z.set(F$.refreshOperationToken.name,new re(!1,[]));Z.set(G$.login.name,new re(!1,[]));Z.set(G$.logout.name,new re(!1,[]));Z.set(ar.customFunctionsStatus.name,new re(!0,[]));Z.set(ar.getCustomFunctions.name,new re(!0,[]));Z.set(ar.getComponents.name,new re(!0,[]));Z.set(ar.getComponentFile.name,new re(!0,[]));Z.set(ar.setComponentFile.name,new re(!0,[]));Z.set(ar.dropComponent.name,new re(!0,[]));Z.set(ar.getCustomFunction.name,new re(!0,[]));Z.set(ar.setCustomFunction.name,new re(!0,[]));Z.set(ar.dropCustomFunction.name,new re(!0,[]));Z.set(ar.addComponent.name,new re(!0,[]));Z.set(ar.dropCustomFunctionProject.name,new re(!0,[]));Z.set(ar.packageComponent.name,new re(!0,[]));Z.set(ar.deployComponent.name,new re(!0,[]));Z.set(ar.addSSHKey.name,new re(!0,[]));Z.set(ar.updateSSHKey.name,new re(!0,[]));Z.set(ar.deleteSSHKey.name,new re(!0,[]));Z.set(ar.listSSHKeys.name,new re(!0,[]));Z.set(ar.setSSHKnownHosts.name,new re(!0,[]));Z.set(ar.getSSHKnownHosts.name,new re(!0,[]));Z.set(Ew.getRegistrationInfo.name,new re(!1,[]));Z.set(Ch.userInfo.name,new re(!1,[]));Z.set(Ih.describeAll.name,new re(!1,[]));Z.set(ude,new re(!1,[]));Z.set(dde,new re(!0,[]));Z.set(lde,new re(!0,[]));Z.set(oS.CSV_DATA_LOAD,new re(!1,[Ma,Sl]));Z.set(oS.CSV_URL_LOAD,new re(!1,[Ma,Sl]));Z.set(oS.CSV_FILE_LOAD,new re(!1,[Ma,Sl]));Z.set(oS.IMPORT_FROM_S3,new re(!1,[Ma,Sl]));Z.set(j$.EXPORT_TO_S3,new re(!0,[]));Z.set(j$.EXPORT_LOCAL,new re(!0,[]));Z.set(Zr.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[z$]));Z.set(Zr.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Io]));Z.set(Zr.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Ma]));Z.set(Zr.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[Sl]));X$.exports={verifyPerms:hde,verifyPermsAst:_de,verifyBulkLoadAttributePerms:pde};function _de(e,t,r){if(wo.isEmptyOrZeroLength(e))throw Er.info("verify_perms_ast has an empty user parameter"),On(new Error);if(wo.isEmptyOrZeroLength(t))throw Er.info("verify_perms_ast has an empty user parameter"),On(new Error);if(wo.isEmptyOrZeroLength(r))throw Er.info("verify_perms_ast has a null operation parameter"),On(new Error);try{let n=new Y$,s=new ide(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Er.info("No schemas defined in verifyPermsAst(), will not continue."),On(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&Q$[r])throw On(new Error,xr.DROP_SYSTEM,Nh.FORBIDDEN);if(c&&!l)return null;let u=k$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof ade.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=J$(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let m=s.getAttributesBySchemaTableName(h,d[_]),S=Sw(t.role.permission,h,d[_]);gw(m,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw On(n)}}a(_de,"verifyPermsAst");function hde(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Er.info("null required parameter in verifyPerms"),On(new Error,xr.DEFAULT_INVALID_REQUEST,Nh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new Y$;if(wo.isEmptyOrZeroLength(e.hdb_user?.role)||wo.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Er.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(xr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(Zr.SYSTEM_SCHEMA_NAME)||s===Zr.SYSTEM_SCHEMA_NAME;if(l&&f&&cde[e.operation]&&(i===Zr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&Q$[r])throw On(new Error,xr.DROP_SYSTEM,Nh.FORBIDDEN);if(l&&!f||u===!0&&(r===ys.createSchema.name||r===ys.dropSchema.name))return null;if(fde.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=k$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===x$||r===B$)&&!d.super_user){if(s===Zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(xr.SCHEMA_PERM_ERROR(s));if(r===x$&&(!d[s]||!d[s][wh]))return c.handleInvalidItem(xr.SCHEMA_NOT_FOUND(s));if(r===B$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][wh]))return c.handleInvalidItem(xr.TABLE_NOT_FOUND(s,i))}let h=J$(e.hdb_user,r,o,c,n);if(h)return h;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Zr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[Zr.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(y=>y.attribute),e.get_attributes=S)}let _=mde(e),m=Sw(e.hdb_user?.role?.permission,s,i);return gw(_,m,r,i,s,c,n),c.getPermsResponse()}a(hde,"verifyPerms");function J$(e,t,r,n,s){if(wo.arrayHasEmptyValues([e,t,r]))throw Er.info("hasPermissions has an invalid parameter"),On(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Er.info(`operation ${t} not found.`),On(new Error,xr.OP_NOT_FOUND(t),Nh.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Er.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(xr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][wh]===!1){n.addInvalidItem(xr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(xr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[wh]===!1)n.addInvalidItem(xr.TABLE_NOT_FOUND(l,f));else try{let h=[],_=Z.get(t).perms;!wo.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let m=0;m<_.length;m++){let S=_[m],g=d[S];(g==null||g===!1)&&(Er.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=xr.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw Er.error(_),Er.error(h),On(W$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(J$,"hasPermissions");function gw(e,t,r,n,s,i,o){if(!e||!t)throw Er.info("no attributes specified in checkAttributePerms."),On(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Er.info(`no permissions found for ${r} in checkAttributePerms().`),On(new Error);if(wo.isEmptyOrZeroLength(t))return Er.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[wh]===!1){i.addInvalidItem(xr.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==Io)throw On(new Error,xr.SYSTEM_TIMESTAMP_PERMS_ERR,Nh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(xr.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(gw,"checkAttributePerms");function mde(e){let t=new Set;try{if(e.action)return t;if(e.operation===Zr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Er.info(r)}return t}a(mde,"getRecordAttributes");function Sw(e,t,r){let n=new Map;if(wo.isEmpty(e))return Er.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{Er.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(Sw,"getAttributePermissions");function pde(e,t,r,n,s,i,o){let c=new Set(i),l=Sw(e,n,s);gw(c,l,t,s,n,o,r)}a(pde,"verifyBulkLoadAttributePerms")});var lS=C((ZPe,nV)=>{"use strict";nV.exports={evaluateSQL:Cde,processAST:rV,convertSQLToAST:tV,checkASTPermissions:eV};var Ede=gn(),Z$=require("util"),gde=Z$.callbackify(Ede.insert),Sde=Vr().search,Tde=sH().update,Ade=Z$.callbackify(Tde),Rde=oH().convertDelete,va=require("alasql"),yde=aS(),cS=X(),bde=Lp(),Ode=oe(),Ph=(k(),P($)),{hdb_errors:Nde,handleHDBError:Tw}=pe(),{HTTP_STATUS_CODES:Aw}=Nde;bde(va);var wde=403,Ide="There was a problem performing this insert. Please check the logs and try again.",Rw=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Cde(e,t){let r=e.parsed_sql_object;if(!r){r=tV(e.sql);let n,s=r.ast.statements[0];if(s instanceof va.yy.Insert?n=s.into.databaseid:s instanceof va.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof va.yy.Update||s instanceof va.yy.Delete?n=s.table.databaseid:cS.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof va.yy.Select)&&Ode.isEmptyOrZeroLength(n))return t("No schema specified",null)}rV(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Cde,"evaluateSQL");function eV(e,t){let r;try{r=yde.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(eV,"checkASTPermissions");function tV(e){let t=new Rw;if(!e)throw Tw(new Error,"The 'sql' parameter is missing from the request body",Aw.BAD_REQUEST);try{let r=e.trim(),n=va.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
38
|
-
`);throw n[1]?Tw(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Aw.BAD_REQUEST):Tw(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Aw.BAD_REQUEST)}return t}a(tV,"convertSQLToAST");function rV(e,t,r){try{let n=Pde;if(!e.bypass_auth&&!t.permissions_checked){let i=eV(e,t);if(i&&i.length>0)return r(wde,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ph.VALID_SQL_OPS_ENUM.SELECT:n=Sde,s=t.ast.statements[0];break;case Ph.VALID_SQL_OPS_ENUM.INSERT:n=Dde;break;case Ph.VALID_SQL_OPS_ENUM.UPDATE:n=Ade;break;case Ph.VALID_SQL_OPS_ENUM.DELETE:n=Rde;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(rV,"processAST");function Pde(e,t){cS.info(e),t("unknown sql statement")}a(Pde,"nullFunction");function Dde({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Lde(i,e.values)}catch(o){return r(o)}gde(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){cS.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Dde,"convertInsert");function Lde(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]]=va.compile(`SELECT ${s.toString()} AS [${Ph.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw cS.error(r),new Error(Ide)}}a(Lde,"createDataObjects")});var Iw=C((nDe,aV)=>{var _S=require("clone"),hS=rt(),Mde=oe(),dS=(k(),P($)),tDe=X(),yw=require("fs"),Ow=require("joi"),{string:fS}=Ow.types(),{hdb_errors:vde,handleHDBError:uS}=pe(),{HDB_ERROR_MSGS:rDe,HTTP_STATUS_CODES:bw}=vde,{common_validators:dd}=Ri(),sV=" is required",Ude=["insert","update","upsert"],Nw={database:{presence:!1,format:dd.schema_format,length:dd.schema_length},schema:{presence:!1,format:dd.schema_format,length:dd.schema_length},table:{presence:!0,format:dd.schema_format,length:dd.schema_length},action:{inclusion:{within:Ude,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},xde={schema:fS.required(),table:fS.required(),action:fS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Bde,AWS_SECRET:Hde,AWS_BUCKET:kde,AWS_FILE_KEY:Fde,REGION:Gde}=dS.S3_BUCKET_AUTH_KEYS,qde={s3:{presence:!0},[`s3.${Bde}`]:{presence:!0,type:"String"},[`s3.${Hde}`]:{presence:!0,type:"String"},[`s3.${kde}`]:{presence:!0,type:"String"},[`s3.${Fde}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Gde}`]:{presence:!0,type:"String"}},iV=_S(Nw);iV.data.presence={message:sV};var oV=_S(Nw);oV.file_path.presence={message:sV};var $de=Object.assign(_S(Nw),qde),ww=_S(xde);ww.csv_url=fS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ww.passthrough_headers=Ow.object();function Vde(e){let t=hS.validateObject(e,iV);return mS(e,t)}a(Vde,"dataObject");function Kde(e){let t=hS.validateBySchema(e,Ow.object(ww));return mS(e,t)}a(Kde,"urlObject");function Yde(e){let t=hS.validateObject(e,oV);return mS(e,t)}a(Yde,"fileObject");function Wde(e){let t=hS.validateObject(e,$de);return mS(e,t)}a(Wde,"s3FileObject");function mS(e,t){if(!t){let r=Mde.checkGlobalSchemaTable(e.schema,e.table);if(r)return uS(new Error,r,bw.BAD_REQUEST);if(e.operation===dS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{yw.accessSync(e.file_path,yw.constants.R_OK|yw.constants.F_OK)}catch(n){return n.code===dS.NODE_ERROR_CODES.ENOENT?uS(n,`No such file or directory ${n.path}`,bw.BAD_REQUEST):n.code===dS.NODE_ERROR_CODES.EACCES?uS(n,`Permission denied ${n.path}`,bw.BAD_REQUEST):uS(n)}}return t}a(mS,"postValidateChecks");aV.exports={dataObject:Vde,urlObject:Kde,fileObject:Yde,s3FileObject:Wde}});var Cw=C((iDe,cV)=>{"use strict";var Dh=X(),pS=(k(),P($));async function zde(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===pS.OPERATIONS_ENUM.INSERT||t.operation===pS.OPERATIONS_ENUM.UPDATE||t.operation===pS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===pS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Dh.info(i.message),i):i.http_resp_msg?(Dh.error(`Error calling operation: ${e.name}`),Dh.error(i.http_resp_msg),i):(Dh.error(`Error calling operation: ${e.name}`),Dh.error(i),i)}}a(zde,"callOperationFunctionAsAwait");cV.exports={callOperationFunctionAsAwait:zde}});var Pw=C((aDe,uV)=>{"use strict";var{S3:Qde,GetObjectCommand:jde}=require("@aws-sdk/client-s3");uV.exports={getFileStreamFromS3:Jde,getS3AuthObj:lV};async function Jde(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await lV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new jde(r))).Body}a(Jde,"getFileStreamFromS3");function lV(e,t,r){return new Qde({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(lV,"getS3AuthObj")});var fV=C((lDe,dV)=>{"use strict";var Dw=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},Lw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};dV.exports={BulkLoadFileObject:Dw,BulkLoadDataObject:Lw}});var hV=C((dDe,_V)=>{"use strict";var Mw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};_V.exports=Mw});var kw=C((EDe,DV)=>{"use strict";var ES=gn(),SS=Iw(),Xde=require("needle"),ri=(k(),P($)),_De=Ct(),fd=oe(),{handleHDBError:qt,hdb_errors:yV}=pe(),{HTTP_STATUS_CODES:Br,HDB_ERROR_MSGS:gr,CHECK_LOGS_WRAPPER:Al}=yV,_d=X(),vw=require("papaparse");fd.promisifyPapaParse();var ni=require("fs-extra"),Zde=require("path"),{chain:mV}=require("stream-chain"),pV=require("stream-json/streamers/StreamArray"),EV=require("stream-json/utils/Batch"),gV=require("stream-chain/utils/comp"),{finished:SV}=require("stream"),efe=ce(),bV=Cw(),tfe=Pw(),{BulkLoadFileObject:xw,BulkLoadDataObject:rfe}=fV(),Bw=_w(),{verifyBulkLoadAttributePerms:OV}=aS(),hDe=hV(),mDe=pr(),pDe=uo(),{databases:nfe}=(Ue(),P(ot)),{coerceType:sfe}=(Ef(),P(Fw)),TV="No records parsed from csv file.",Tl=`${efe.get("HDB_ROOT")}/tmp`,{schema_regex:ife}=Ri(),AV=1024*1024*2,RV=5e3,ofe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};DV.exports={csvDataLoad:afe,csvURLLoad:cfe,csvFileLoad:lfe,importFromS3:ufe};async function afe(e,t){let r=SS.dataObject(e);if(r)throw qt(r,r.message,Br.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=IV(e.schema,e.table),i=vw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Uw.bind(null,s),dynamicTyping:!1}),o=new Bw;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&OV(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw qt(new Error,c,Br.BAD_REQUEST,void 0,void 0,!0);let l=new rfe(e.action,e.schema,e.table,i.data);return n=await bV.callOperationFunctionAsAwait(CV,l,null),n.message===TV?TV:PV(n.records,n.number_written)}catch(s){throw Rl(s)}}a(afe,"csvDataLoad");async function cfe(e){let t=SS.urlObject(e);if(t)throw qt(t,t.message,Br.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Tl}/${r}`;try{await dfe(e,r)}catch(s){throw _d.error(gr.DOWNLOAD_FILE_ERR(r)+" - "+s),qt(s,Al(gr.DOWNLOAD_FILE_ERR(r)))}try{let s=new xw(this.job_operation_function.name,e.action,e.schema,e.table,n,ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await Hw(s);return await gS(n),i}catch(s){throw await gS(n),Rl(s)}}a(cfe,"csvURLLoad");async function lfe(e){let t=SS.fileObject(e);if(t)throw qt(t,t.message,Br.BAD_REQUEST,void 0,void 0,!0);let r=new xw(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await Hw(r)}catch(n){throw Rl(n)}}a(lfe,"csvFileLoad");async function ufe(e){let t=SS.s3FileObject(e);if(t)throw qt(t,t.message,Br.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Zde.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Tl}/${s}`;let i=new xw(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await ffe(s,e);let o=await Hw(i);return await gS(r),o}catch(n){throw await gS(r),Rl(n)}}a(ufe,"importFromS3");async function dfe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Xde("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 qt(n,s,n.statusCode,ri.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}hfe(r,e.csv_url),await _fe(t,r.raw)}a(dfe,"downloadCSVFile");async function ffe(e,t){try{let r=`${Tl}/${e}`;await ni.mkdirp(Tl),await ni.writeFile(`${Tl}/${e}`,"",{flag:"a+"});let n=await ni.createWriteStream(r),s=await tfe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){_d.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw _d.error(gr.S3_DOWNLOAD_ERR+" - "+r),qt(r,Al(gr.S3_DOWNLOAD_ERR))}}a(ffe,"downloadFileFromS3");async function _fe(e,t){try{await ni.mkdirp(Tl),await ni.writeFile(`${Tl}/${e}`,t)}catch(r){throw _d.error(gr.WRITE_TEMP_FILE_ERR),qt(r,Al(gr.DEFAULT_BULK_LOAD_ERR))}}a(_fe,"writeFileToTempFolder");async function gS(e){if(e)try{await ni.access(e),await ni.unlink(e)}catch{_d.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(gS,"deleteTempFile");function hfe(e,t){if(e.statusCode!==yV.HTTP_STATUS_CODES.OK)throw qt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Br.BAD_REQUEST);if(!ofe[e.headers["content-type"]])throw qt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Br.BAD_REQUEST);if(!e.raw)throw qt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Br.BAD_REQUEST)}a(hfe,"validateURLResponse");async function Hw(e){try{let t;switch(e.file_type){case ri.VALID_S3_FILE_TYPES.CSV:t=await mfe(e);break;case ri.VALID_S3_FILE_TYPES.JSON:t=await pfe(e);break;default:throw qt(new Error,gr.DEFAULT_BULK_LOAD_ERR,Br.BAD_REQUEST,ri.LOG_LEVELS.ERROR,gr.INVALID_FILE_EXT_ERR(e))}return PV(t.records,t.number_written)}catch(t){throw Rl(t)}}a(Hw,"fileLoad");async function NV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await ES.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&OV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=qt(c);r(l)}}a(NV,"validateChunk");async function wV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;fd.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!fd.isEmpty(c)&&!fd.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await bV.callOperationFunctionAsAwait(CV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=qt(c,Al(gr.INSERT_CSV_ERR),Br.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.INSERT_CSV_ERR+" - "+c);r(l)}}a(wV,"insertChunk");async function mfe(e){let t={records:0,number_written:0},r=IV(e.schema,e.table);try{let n=new Bw,s=ni.createReadStream(e.file_path,{highWaterMark:AV});s.setEncoding("utf8"),await vw.parsePromise(s,NV.bind(null,e,n),Uw.bind(null,r));let i=n.getPermsResponse();if(i)throw qt(new Error,i,Br.BAD_REQUEST);return s=ni.createReadStream(e.file_path,{highWaterMark:AV}),s.setEncoding("utf8"),await vw.parsePromise(s,wV.bind(null,e,t),Uw.bind(null,r)),s.destroy(),t}catch(n){throw qt(n,Al(gr.PAPA_PARSE_ERR),Br.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.PAPA_PARSE_ERR+n)}}a(mfe,"callPapaParse");function IV(e,t){let r=nfe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>sfe(i,s));return n}a(IV,"createTransformMap");function Uw(e,t,r){let n=e.get(r);return n?n(t):fd.autoCast(t)}a(Uw,"typeFunction");async function pfe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Bw,s=mV([ni.createReadStream(e.file_path,{encoding:"utf-8"}),pV.withParser(),c=>c.value,new EV({batchSize:RV}),gV(async c=>{await NV(e,n,r,c)})]);await new Promise((c,l)=>{SV(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw qt(new Error,i,Br.BAD_REQUEST);let o=mV([ni.createReadStream(e.file_path,{encoding:"utf-8"}),pV.withParser(),c=>c.value,new EV({batchSize:RV}),gV(async c=>{await wV(e,t,r,c)})]);return await new Promise((c,l)=>{SV(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw qt(n,Al(gr.INSERT_JSON_ERR),Br.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.INSERT_JSON_ERR+n)}}a(pfe,"insertJson");async function CV(e){let t={};try{e.data&&e.data.length>0&&Efe(e.data[0])?t=await gfe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",_d.info(t.message))}catch(r){throw Rl(r)}return t}a(CV,"callBulkFileLoad");function Efe(e){let t=Object.keys(e);for(let r of t)if(!ife.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Efe,"validateColumnNames");async function gfe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=ES.insert;break;case"update":i=ES.update;break;case"upsert":i=ES.upsert;break;default:throw qt(new Error,gr.INVALID_ACTION_PARAM_ERR(n),Br.BAD_REQUEST,ri.LOG_LEVELS.ERROR,gr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=fd.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Rl(o)}}a(gfe,"bulkFileLoad");function PV(e,t){return`successfully loaded ${t} of ${e} records`}a(PV,"buildResponseMsg");function Rl(e){return qt(e,Al(gr.DEFAULT_BULK_LOAD_ERR),Br.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Rl,"buildTopLevelErrMsg")});var $w=C((SDe,kV)=>{"use strict";var qw=Vr(),Sfe=Pw(),{AsyncParser:Tfe}=require("json2csv"),TS=require("stream"),Xn=oe(),Gw=require("fs-extra"),Afe=require("path"),bs=X(),{promisify:vV}=require("util"),Lh=oe(),{handleHDBError:cr,hdb_errors:Rfe}=pe(),{HDB_ERROR_MSGS:Nn,HTTP_STATUS_CODES:lr}=Rfe,{streamAsJSON:yfe}=($A(),P(fL)),{Upload:bfe}=require("@aws-sdk/lib-storage"),{toCsvStream:Ofe}=(to(),P(PL)),LV=["search_by_value","search_by_hash","sql","search_by_conditions"],MV=["json","csv"],UV="json",xV="csv",Nfe="Successfully exported JSON locally.",wfe="Successfully exported CSV locally.",Ife=1e3,Cfe=qw.searchByHash,Pfe=qw.searchByValue,Dfe=vV(TS.finished);kV.exports={export_to_s3:Ufe,export_local:Lfe};async function Lfe(e){bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=BV(e);if(!Xn.isEmpty(t))throw bs.error(t),cr(new Error,t,lr.BAD_REQUEST,void 0,void 0,!0);if(Xn.isEmpty(e.path))throw bs.error(Nn.MISSING_VALUE("path")),cr(new Error,Nn.MISSING_VALUE("path"),lr.BAD_REQUEST,void 0,void 0,!0);let r=(Xn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Afe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Xn.buildFolderPath(e.path,r);await Mfe(e.path);let s=await HV(e);return await vfe(n,e.format,s)}a(Lfe,"export_local");async function Mfe(e){if(bs.trace("in confirmPath"),Xn.isEmptyOrZeroLength(e))throw cr(new Error,`Invalid path: ${e}`,lr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Gw.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,bs.error(n),cr(new Error,n,lr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw bs.error(r),cr(new Error,r,lr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Mfe,"confirmPath");async function vfe(e,t,r){if(bs.trace("in saveToLocal"),Lh.isEmptyOrZeroLength(e))throw cr(new Error,Nn.INVALID_VALUE("file_path"),lr.BAD_REQUEST,void 0,void 0,!0);if(Lh.isEmptyOrZeroLength(t))throw cr(new Error,Nn.INVALID_VALUE("Source format"),lr.BAD_REQUEST,void 0,void 0,!0);if(Lh.isEmpty(r))throw cr(new Error,Nn.NOT_FOUND("Data"),lr.BAD_REQUEST,void 0,void 0,!0);if(t===UV){let n=Gw.createWriteStream(e);return yfe(r).pipe(n),await Dfe(n),{message:Nfe,path:e}}else if(t===xV){let n=Gw.createWriteStream(e),s=TS.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new Tfe(i,c).fromInput(s).toOutput(n).promise(!1),{message:wfe,path:e}}throw cr(new Error,Nn.INVALID_VALUE("format"),lr.BAD_REQUEST)}a(vfe,"saveToLocal");async function Ufe(e){if(!e.s3||Object.keys(e.s3).length===0)throw cr(new Error,Nn.MISSING_VALUE("S3 object"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw cr(new Error,Nn.MISSING_VALUE("aws_access_key_id"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw cr(new Error,Nn.MISSING_VALUE("aws_secret_access_key"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.bucket))throw cr(new Error,Nn.MISSING_VALUE("bucket"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.key))throw cr(new Error,Nn.MISSING_VALUE("key"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.region))throw cr(new Error,Nn.MISSING_VALUE("region"),lr.BAD_REQUEST);let t=BV(e);if(!Xn.isEmpty(t))throw cr(new Error,t,lr.BAD_REQUEST);bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await HV(e)}catch(l){throw bs.error(l),l}let n,s=await Sfe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new TS.PassThrough;if(e.format===xV){i=e.s3.key+".csv";let l=Ofe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===UV){i=e.s3.key+".json";let l=new TS.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%Ife===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw cr(new Error,Nn.INVALID_VALUE("format"),lr.BAD_REQUEST);return new bfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Ufe,"export_to_s3");function BV(e){if(bs.trace("in exportCoreValidation"),Xn.isEmpty(e.format))return"format missing";if(MV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${MV.join(", ")}`;let t=e.search_operation.operation;if(Xn.isEmpty(t))return"search_operation.operation missing";if(LV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${LV.join(", ")}`}a(BV,"exportCoreValidation");async function HV(e){bs.trace("in getRecords");let t,r;if(Lh.isEmpty(e.search_operation)||Lh.isEmptyOrZeroLength(e.search_operation.operation))throw cr(new Error,Nn.INVALID_VALUE("Search operation"),lr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Pfe;break;case"search_by_hash":t=Cfe;break;case"search_by_conditions":t=qw.searchByConditions;break;case"sql":{let n=lS();t=vV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,bs.error(r),cr(new Error,r,lr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(HV,"getRecords")});var GV=C((ADe,FV)=>{"use strict";var Vw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};FV.exports=Vw});var VV=C((yDe,$V)=>{"use strict";var xfe=(k(),P($)),qV=require("moment"),Bfe=require("uuid").v4,Kw=class{static{a(this,"JobObject")}constructor(){this.id=Bfe(),this.type=void 0,this.start_datetime=qV().valueOf(),this.created_datetime=qV().valueOf(),this.end_datetime=void 0,this.status=xfe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};$V.exports=Kw});var Yw=C((ODe,XV)=>{"use strict";var Hfe=require("uuid").v4,QV=gn(),jV=Vr(),kfe=Ks(),Ffe=mu(),Gfe=GV(),yt=(k(),P($)),qfe=VV(),$fe=NE(),si=X(),Vfe=uf(),hd=oe(),{promisify:Kfe}=require("util"),yl=require("moment"),Yfe=lS(),AS=Iw(),KV=zR(),{deleteTransactionLogsBeforeValidator:Wfe}=cw(),{handleHDBError:YV,hdb_errors:zfe,ClientError:Qfe}=pe(),{HTTP_STATUS_CODES:WV}=zfe,zV=jV.searchByValue,jfe=jV.searchByHash,Jfe=QV.insert,Xfe=Kfe(Yfe.evaluateSQL),Zfe=QV.update;XV.exports={addJob:r_e,updateJob:s_e,handleGetJob:e_e,handleGetJobsByStartDate:t_e,getJobById:JV};async function e_e(e){if(e.id===void 0)throw new Qfe("'id' is required");let t=await JV(e.id);return hd.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(e_e,"handleGetJob");async function t_e(e){try{let t=await n_e(e);if(si.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=yl(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=yl(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 si.error(r),new Error(r)}}a(t_e,"handleGetJobsByStartDate");async function r_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||hd.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return si.info(f),t.error=f,t}if(!yt.JOB_TYPE_ENUM[e.operation])return si.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case yt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=AS.fileObject(e);break;case yt.OPERATIONS_ENUM.CSV_URL_LOAD:n=AS.urlObject(e);break;case yt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=AS.dataObject(e);break;case yt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=AS.s3FileObject(e);break;case yt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case yt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=KV(e,"date");break;case yt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=KV(e,"timestamp");break;case yt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Wfe(e);break;case yt.OPERATIONS_ENUM.RESTART_SERVICE:if(yt.HDB_PROCESS_SERVICES[e.service]===void 0)throw YV(new Error,"Invalid service",WV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw YV(n,n.message,WV.BAD_REQUEST,void 0,void 0,!0);let s=new qfe;s.type=e.operation===yt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?yt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new kfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await zV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return si.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Hfe();try{o=await zV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return si.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return si.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Vfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await Jfe(l)}catch(f){return si.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,si.trace(f)}return t}a(r_e,"addJob");async function n_e(e){let t=yl(e.from_date,yl.ISO_8601),r=yl(e.to_date,yl.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 Gfe(n,e.hdb_user);try{return await Xfe(s)}catch(i){throw si.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(n_e,"getJobsInDateRange");async function JV(e){if(hd.isEmptyOrZeroLength(e))return hd.errorizeMessage("Invalid job ID specified.");let t=new Ffe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await jfe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return si.error(n),hd.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(JV,"getJobById");async function s_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(hd.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===yt.JOB_STATUS_ENUM.COMPLETE||e.status===yt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=yl().valueOf());let t=new $fe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Zfe(t),r}a(s_e,"updateJob")});var o1=C((wDe,i1)=>{"use strict";var ZV=oe(),Sr=(k(),P($)),i_e=require("moment"),RS=kw(),Mh=X(),e1=Yw(),t1=$w(),r1=vc(),n1=nt(),o_e=nS(),a_e=sd(),{parentPort:c_e,isMainThread:s1}=require("worker_threads"),{onMessageByType:l_e}=nt(),Ww=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function u_e(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(ZV.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(ZV.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Sr.JOB_TYPE_ENUM.csv_file_load:await xi(e,RS.csvFileLoad);break;case Sr.JOB_TYPE_ENUM.csv_url_load:await xi(e,RS.csvURLLoad);break;case Sr.JOB_TYPE_ENUM.csv_data_load:await xi(e,RS.csvDataLoad);break;case Sr.JOB_TYPE_ENUM.import_from_s3:await xi(e,RS.importFromS3);break;case Sr.JOB_TYPE_ENUM.empty_trash:break;case Sr.JOB_TYPE_ENUM.export_local:await xi(e,t1.export_local);break;case Sr.JOB_TYPE_ENUM.export_to_s3:await xi(e,t1.export_to_s3);break;case Sr.JOB_TYPE_ENUM.delete_files_before:case Sr.JOB_TYPE_ENUM.delete_records_before:await xi(e,r1.deleteFilesBefore);break;case Sr.JOB_TYPE_ENUM.delete_audit_logs_before:await xi(e,r1.deleteAuditLogsBefore);break;case Sr.JOB_TYPE_ENUM.delete_transaction_logs_before:await xi(e,o_e.deleteTransactionLogsBefore);break;case Sr.JOB_TYPE_ENUM.restart_service:return await xi(e,a_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(u_e,"parseMessage");async function xi(e,t){try{e.job.status=Sr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=i_e().valueOf(),await e1.updateJob(e.job),await d_e(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Mh.error(`There was an error running ${t.name} job with id ${e.job.id}`),Mh.error(n),e.job.message=n,e.job.status=Sr.JOB_STATUS_ENUM.ERROR;try{await e1.updateJob(e.job)}catch(s){throw Mh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(xi,"runJob");async function d_e(e){Mh.trace("launching job thread:",e),s1?n1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Sr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):c_e.postMessage({type:Sr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(d_e,"launchJobThread");s1&&l_e(Sr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{n1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Sr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Mh.error(r)}});i1.exports={parseMessage:u_e,RunnerMessage:Ww}});var c1=C((CDe,a1)=>{"use strict";var zw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a1.exports=zw});var aw=C((LDe,eI)=>{"use strict";var wS=Vr(),Jw=lS(),yS=kw(),Co=hg(),bS=fo(),Uh=vc(),f_e=xO(),vh=qn(),OS=h_(),Pt=ow(),NS=X(),__e=GO(),h_e=Ng(),l1=fN(),m_e=Ig(),p_e=mN(),E_e=pN(),g_e=SN(),S_e=AN(),Qw=Mg(),u1=$w(),T_e=aS(),Xw=Yw(),K=(k(),P($)),{hdb_errors:Bh,handleHDBError:xh}=pe(),{HTTP_STATUS_CODES:d1}=Bh,jw=vN(),f1=sd(),R1=require("util"),pd=gn(),A_e=qs(),R_e=Yu(),_1=o1(),h1=(Ou(),P(w_)),m1=(Qg(),P(ph)),p1=Nt(),E1=nS(),g1=Th(),{setServerUtilities:y_e}=(Ef(),P(Fw)),{CONTEXT:DDe}=(ra(),P(UA)),{_assignPackageExport:b_e}=ui(),{transformReq:O_e}=oe(),{server:N_e}=(Pr(),P(Vl)),en=NS.loggerWithTag("operation"),md=Xs(),S1=(cl(),P(al)),w_e=Cw(),T1=wS.searchByHash,I_e=wS.searchByValue,C_e=R1.promisify(wS.search),P_e=R1.promisify(Jw.evaluateSQL),D_e={[K.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[K.OPERATIONS_ENUM.CREATE_TABLE]:!0,[K.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[K.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[K.OPERATIONS_ENUM.DROP_TABLE]:!0,[K.OPERATIONS_ENUM.DROP_SCHEMA]:!0},ee=c1();async function y1(e,t){try{if(e.body.operation!=="read_log"&&(NS.log_level===K.LOG_LEVELS.INFO||NS.log_level===K.LOG_LEVELS.DEBUG||NS.log_level===K.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;en.info(c)}}catch(n){en.error(n)}let r=await w_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return D_e[e.body.operation]&&A_e.setSchemaDataToGlobal(n=>{n&&en.error(n)}),r}a(y1,"processLocalTransaction");var A1=M_e();eI.exports={chooseOperation:b1,getOperationFunction:O1,operation:Zw,processLocalTransaction:y1,executeJob:Os};y_e(eI.exports);N_e.operation=Zw;function b1(e){let t;try{t=O1(e)}catch(s){throw en.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Jw.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Jw.checkASTPermissions(e,i);if(o)throw en.error(`${d1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),xh(new Error,o,Bh.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==K.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==K.OPERATIONS_ENUM.LOGIN&&e.operation!==K.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=T_e.verifyPerms(i,s);if(o)throw en.error(`${d1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),xh(new Error,o,Bh.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw xh(s,"There was an error when trying to choose an operation path")}return r}a(b1,"chooseOperation");function O1(e){if(en.trace(`getOperationFunction with operation: ${e.operation}`),A1.has(e.operation))return A1.get(e.operation);throw xh(new Error,Bh.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Bh.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(O1,"getOperationFunction");b_e("operation",Zw);function Zw(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=b1(e);return y1({body:e},n)}a(Zw,"operation");async function L_e(e){en.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[K.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case K.OPERATIONS_ENUM.INSERT:o=await pd.insert(i);break;case K.OPERATIONS_ENUM.UPDATE:o=await pd.update(i);break;case K.OPERATIONS_ENUM.UPSERT:o=await pd.upsert(i);break;case K.OPERATIONS_ENUM.DELETE:o=await Uh.deleteRecord(i);break;default:en.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){en.info("Invalid operation in transaction"),en.error(o)}}a(L_e,"catchup");async function Os(e){O_e(e);let t,r;try{r=await Xw.addJob(e),t=r.createdJob,en.info("addJob result",r);let n=new _1.RunnerMessage(t,e);return{message:await _1.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw en.error(s),xh(n,s)}}a(Os,"executeJob");function M_e(){let e=new Map;return e.set(K.OPERATIONS_ENUM.INSERT,new ee(pd.insert)),e.set(K.OPERATIONS_ENUM.UPDATE,new ee(pd.update)),e.set(K.OPERATIONS_ENUM.UPSERT,new ee(pd.upsert)),e.set(K.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new ee(wS.searchByConditions)),e.set(K.OPERATIONS_ENUM.SEARCH_BY_HASH,new ee(T1)),e.set(K.OPERATIONS_ENUM.SEARCH_BY_ID,new ee(T1)),e.set(K.OPERATIONS_ENUM.SEARCH_BY_VALUE,new ee(I_e)),e.set(K.OPERATIONS_ENUM.SEARCH,new ee(C_e)),e.set(K.OPERATIONS_ENUM.SQL,new ee(P_e)),e.set(K.OPERATIONS_ENUM.CSV_DATA_LOAD,new ee(Os,yS.csvDataLoad)),e.set(K.OPERATIONS_ENUM.CSV_FILE_LOAD,new ee(Os,yS.csvFileLoad)),e.set(K.OPERATIONS_ENUM.CSV_URL_LOAD,new ee(Os,yS.csvURLLoad)),e.set(K.OPERATIONS_ENUM.IMPORT_FROM_S3,new ee(Os,yS.importFromS3)),e.set(K.OPERATIONS_ENUM.CREATE_SCHEMA,new ee(Co.createSchema)),e.set(K.OPERATIONS_ENUM.CREATE_DATABASE,new ee(Co.createSchema)),e.set(K.OPERATIONS_ENUM.CREATE_TABLE,new ee(Co.createTable)),e.set(K.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new ee(Co.createAttribute)),e.set(K.OPERATIONS_ENUM.DROP_SCHEMA,new ee(Co.dropSchema)),e.set(K.OPERATIONS_ENUM.DROP_DATABASE,new ee(Co.dropSchema)),e.set(K.OPERATIONS_ENUM.DROP_TABLE,new ee(Co.dropTable)),e.set(K.OPERATIONS_ENUM.DROP_ATTRIBUTE,new ee(Co.dropAttribute)),e.set(K.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new ee(bS.describeSchema)),e.set(K.OPERATIONS_ENUM.DESCRIBE_DATABASE,new ee(bS.describeSchema)),e.set(K.OPERATIONS_ENUM.DESCRIBE_TABLE,new ee(bS.describeTable)),e.set(K.OPERATIONS_ENUM.DESCRIBE_ALL,new ee(bS.describeAll)),e.set(K.OPERATIONS_ENUM.DELETE,new ee(Uh.deleteRecord)),e.set(K.OPERATIONS_ENUM.ADD_USER,new ee(vh.addUser)),e.set(K.OPERATIONS_ENUM.ALTER_USER,new ee(vh.alterUser)),e.set(K.OPERATIONS_ENUM.DROP_USER,new ee(vh.dropUser)),e.set(K.OPERATIONS_ENUM.LIST_USERS,new ee(vh.listUsersExternal)),e.set(K.OPERATIONS_ENUM.LIST_ROLES,new ee(OS.listRoles)),e.set(K.OPERATIONS_ENUM.ADD_ROLE,new ee(OS.addRole)),e.set(K.OPERATIONS_ENUM.ALTER_ROLE,new ee(OS.alterRole)),e.set(K.OPERATIONS_ENUM.DROP_ROLE,new ee(OS.dropRole)),e.set(K.OPERATIONS_ENUM.USER_INFO,new ee(vh.userInfo)),e.set(K.OPERATIONS_ENUM.READ_LOG,new ee(__e)),e.set(K.OPERATIONS_ENUM.ADD_NODE,new ee(h_e)),e.set(K.OPERATIONS_ENUM.UPDATE_NODE,new ee(l1)),e.set(K.OPERATIONS_ENUM.SET_NODE_REPLICATION,new ee(l1)),e.set(K.OPERATIONS_ENUM.REMOVE_NODE,new ee(m_e)),e.set(K.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new ee(p_e)),e.set(K.OPERATIONS_ENUM.PURGE_STREAM,new ee(E_e)),e.set(K.OPERATIONS_ENUM.SET_CONFIGURATION,new ee(p1.setConfiguration)),e.set(K.OPERATIONS_ENUM.CLUSTER_STATUS,new ee(g_e.clusterStatus)),e.set(K.OPERATIONS_ENUM.CLUSTER_NETWORK,new ee(S_e)),e.set(K.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new ee(Qw.setRoutes)),e.set(K.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new ee(Qw.getRoutes)),e.set(K.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new ee(Qw.deleteRoutes)),e.set(K.OPERATIONS_ENUM.EXPORT_TO_S3,new ee(Os,u1.export_to_s3)),e.set(K.OPERATIONS_ENUM.CREATE_CSR,new ee(md.createCsr)),e.set(K.OPERATIONS_ENUM.SIGN_CERTIFICATE,new ee(md.signCertificate)),e.set(K.OPERATIONS_ENUM.LIST_CERTIFICATES,new ee(md.listCertificates)),e.set(K.OPERATIONS_ENUM.ADD_CERTIFICATES,new ee(md.addCertificate)),e.set(K.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new ee(md.removeCertificate)),e.set(K.OPERATIONS_ENUM.GET_KEY,new ee(md.getKey)),e.set(K.OPERATIONS_ENUM.ADD_NODE_BACK,new ee(S1.addNodeBack)),e.set(K.OPERATIONS_ENUM.REMOVE_NODE_BACK,new ee(S1.removeNodeBack)),e.set(K.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new ee(Os,Uh.deleteFilesBefore)),e.set(K.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new ee(Os,Uh.deleteFilesBefore)),e.set(K.OPERATIONS_ENUM.EXPORT_LOCAL,new ee(Os,u1.export_local)),e.set(K.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new ee(Xw.handleGetJobsByStartDate)),e.set(K.OPERATIONS_ENUM.GET_JOB,new ee(Xw.handleGetJob)),e.set(K.OPERATIONS_ENUM.GET_FINGERPRINT,new ee(jw.getFingerprint)),e.set(K.OPERATIONS_ENUM.SET_LICENSE,new ee(jw.setLicense)),e.set(K.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new ee(jw.getRegistrationInfo)),e.set(K.OPERATIONS_ENUM.RESTART,new ee(f1.restart)),e.set(K.OPERATIONS_ENUM.RESTART_SERVICE,new ee(Os,f1.restartService)),e.set(K.OPERATIONS_ENUM.CATCHUP,new ee(L_e)),e.set(K.OPERATIONS_ENUM.SYSTEM_INFORMATION,new ee(R_e.systemInformation)),e.set(K.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new ee(Os,Uh.deleteAuditLogsBefore)),e.set(K.OPERATIONS_ENUM.READ_AUDIT_LOG,new ee(f_e)),e.set(K.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new ee(h1.createTokens)),e.set(K.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new ee(h1.refreshOperationToken)),e.set(K.OPERATIONS_ENUM.LOGIN,new ee(m1.login)),e.set(K.OPERATIONS_ENUM.LOGOUT,new ee(m1.logout)),e.set(K.OPERATIONS_ENUM.GET_CONFIGURATION,new ee(p1.getConfiguration)),e.set(K.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new ee(Pt.customFunctionsStatus)),e.set(K.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new ee(Pt.getCustomFunctions)),e.set(K.OPERATIONS_ENUM.GET_COMPONENT_FILE,new ee(Pt.getComponentFile)),e.set(K.OPERATIONS_ENUM.GET_COMPONENTS,new ee(Pt.getComponents)),e.set(K.OPERATIONS_ENUM.SET_COMPONENT_FILE,new ee(Pt.setComponentFile)),e.set(K.OPERATIONS_ENUM.DROP_COMPONENT,new ee(Pt.dropComponent)),e.set(K.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new ee(Pt.getCustomFunction)),e.set(K.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new ee(Pt.setCustomFunction)),e.set(K.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new ee(Pt.dropCustomFunction)),e.set(K.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new ee(Pt.addComponent)),e.set(K.OPERATIONS_ENUM.ADD_COMPONENT,new ee(Pt.addComponent)),e.set(K.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new ee(Pt.dropCustomFunctionProject)),e.set(K.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new ee(Pt.packageComponent)),e.set(K.OPERATIONS_ENUM.PACKAGE_COMPONENT,new ee(Pt.packageComponent)),e.set(K.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new ee(Pt.deployComponent)),e.set(K.OPERATIONS_ENUM.DEPLOY_COMPONENT,new ee(Pt.deployComponent)),e.set(K.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new ee(E1.readTransactionLog)),e.set(K.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new ee(Os,E1.deleteTransactionLogsBefore)),e.set(K.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new ee(g1.installModules)),e.set(K.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new ee(g1.auditModules)),e.set(K.OPERATIONS_ENUM.GET_BACKUP,new ee(Co.getBackup)),e.set(K.OPERATIONS_ENUM.ADD_SSH_KEY,new ee(Pt.addSSHKey)),e.set(K.OPERATIONS_ENUM.UPDATE_SSH_KEY,new ee(Pt.updateSSHKey)),e.set(K.OPERATIONS_ENUM.DELETE_SSH_KEY,new ee(Pt.deleteSSHKey)),e.set(K.OPERATIONS_ENUM.LIST_SSH_KEYS,new ee(Pt.listSSHKeys)),e.set(K.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new ee(Pt.setSSHKnownHosts)),e.set(K.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new ee(Pt.getSSHKnownHosts)),e}a(M_e,"initializeOperationFunctionMap")});var PS=C((vDe,I1)=>{"use strict";var IS=(k(),P($)),v_e=oe(),Hh=X(),{handleHDBError:tI,hdb_errors:CS}=pe(),{isMainThread:U_e}=require("worker_threads"),{Readable:x_e}=require("stream"),N1=require("os"),B_e=require("util"),H_e=Fb(),k_e=B_e.promisify(H_e.authorize),w1=aw(),{createGzip:F_e,constants:G_e}=require("zlib"),q_e=[IS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,IS.OPERATIONS_ENUM.LOGIN,IS.OPERATIONS_ENUM.LOGOUT];function $_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${N1.EOL}Stack: ${e.stack} ${N1.EOL}Terminating ${U_e?"HDB":"thread"}.`;console.error(t),Hh.fatal(t),process.exit(1)}a($_e,"handleServerUncaughtException");function V_e(e,t,r){if(Hh[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:CS.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(V_e,"serverErrorHandler");function K_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=tI(new Error,"Invalid JSON.",CS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(v_e.isEmpty(e.body.operation)){let n=tI(new Error,"Request body must include an 'operation' property.",CS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(K_e,"reqBodyValidationHandler");function Y_e(e,t,r){let n;!q_e.includes(e.body.operation)||e.body.operation===IS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?k_e(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Hh.warn(i),Hh.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(tI(i,o,CS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Y_e,"authHandler");async function W_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=w1.chooseOperation(e.body);let s=await w1.processLocalTransaction(e,n);if(s instanceof x_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(F_e({level:G_e.Z_BEST_SPEED})))}return s}catch(s){throw Hh.error(s),s}}a(W_e,"handlePostRequest");I1.exports={authHandler:Y_e,handlePostRequest:W_e,handleServerUncaughtException:$_e,serverErrorHandler:V_e,reqBodyValidationHandler:K_e}});var L1=C((xDe,D1)=>{"use strict";var z_e=require("fastify-plugin"),{handlePostRequest:C1,authHandler:Q_e,reqBodyValidationHandler:j_e}=PS();async function J_e(e){e.decorate("hdbCore",{preValidation:[j_e,Q_e],request:a(t=>P1(C1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>P1(C1(t,r,!0)),"requestWithoutAuthentication")})}a(J_e,"hdbCore");async function P1(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(P1,"convertAsyncIterators");D1.exports=z_e(J_e)});var v1=C((kDe,M1)=>{"use strict";var HDe=require("fs"),DS=ce();DS.initSync();var{CONFIG_PARAMS:rI}=(k(),P($)),X_e=1024*1024*1024;function Z_e(e){let t=DS.get(rI.HTTP_TIMEOUT),r=DS.get(rI.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:X_e,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:DS.get(rI.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(Z_e,"getServerOptions");M1.exports=Z_e});var B1=C((GDe,x1)=>{"use strict";var nI=ce();nI.initSync();var{CONFIG_PARAMS:U1}=(k(),P($));function ehe(){let e=nI.get(U1.HTTP_CORSACCESSLIST),t=nI.get(U1.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(ehe,"getCORSOptions");x1.exports=ehe});var F1=C(($De,k1)=>{"use strict";var H1=ce();H1.initSync();var the=(k(),P($));function rhe(){return H1.get(the.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(rhe,"getHeaderTimeoutConfig");k1.exports=rhe});var iI={};xe(iI,{customFunctionsServer:()=>ihe,ready:()=>eK,start:()=>she});function she(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Po||(Po=Z1(t),Ke.http((await Po).server));let o=await Po,c=(0,sI.dirname)(s),l=(0,sI.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!G1.has(c)){G1.add(c);try{o.register(ahe(c,l))}catch(u){if(u.message==="Root plugin has already booted")ht.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:eK}}async function ihe(){try{ht.info("In Custom Functions Fastify server"+process.cwd()),ht.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ht.debug(`Custom Functions server process ${process.pid} starting up.`),await ohe();let e=W1.get(B.HTTP_SECUREPORT)>0,t;try{t=Po=await Z1(e)}catch(r){throw ht.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw ht.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){ht.error(`Custom Functions ${process.pid} Error: ${e}`),ht.error(e),process.exit(1)}}async function ohe(){try{ht.info("Custom Functions starting configuration."),await z1.setUsersWithRolesCache(),ht.info("Custom Functions completed configuration.")}catch(e){ht.error(e)}}function ahe(e,t){return async function(r){try{ht.info("Custom Functions starting buildRoutes"),ht.trace("Loading fastify routes folder "+e),(0,q1.existsSync)(e)&&r.register(Y1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:ht.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?ht.error(s.message):s&&ht.error(s),o()})}catch(n){ht.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Z1(e){ht.info("Custom Functions starting buildServer.");let t=(0,Q1.default)(e),r=(0,$1.default)(t);r.server.headersTimeout=(0,J1.default)(),r.setErrorHandler(X1.serverErrorHandler);let n=(0,j1.default)();return n&&r.register(V1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(K1.default),await r.register(nhe),await r.after(),Nf(r),ht.info("Custom Functions completed buildServer."),r}function eK(){if(Po)return Po.then?Po.then(e=>e.ready()):Po.ready()}var sI,q1,$1,V1,K1,Y1,W1,ht,nhe,z1,Q1,j1,J1,X1,Po,G1,tK=ye(()=>{sI=require("path"),q1=require("fs"),$1=M(require("fastify")),V1=M(require("@fastify/cors")),K1=M(Ub()),Y1=M(require("@fastify/autoload")),W1=M(ce());k();ht=M(X()),nhe=M(L1()),z1=M(qn()),Q1=M(v1()),j1=M(B1()),J1=M(F1()),X1=M(PS());to();Pr();G1=new Set;a(she,"start");a(ihe,"customFunctionsServer");a(ohe,"setUp");a(ahe,"buildRouteFolder");a(Z1,"buildServer");a(eK,"ready")});var oI={};xe(oI,{start:()=>che});function che(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,oK.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){nK||(nK=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=rK.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,sK.default)(s,(0,iK.realpathSync)(o))}}return i(s)},{runFirst:!0})),rK.set(r,n)}}}var sK,iK,oK,rK,nK,aK=ye(()=>{sK=M(require("send")),iK=require("fs"),oK=M(require("serve-static")),rK=new Map;a(che,"start")});var aI={};xe(aI,{start:()=>lhe});function lhe({override:e}){return{handleFile:a((t,r,n)=>{LS.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,cK.parse)(t))){if(process.env[s]!==void 0)if(LS.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)LS.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var cK,LS,lK=ye(()=>{cK=require("dotenv"),LS=M(X());a(lhe,"start")});var lI=C((JDe,uK)=>{"use strict";var kh=ce();kh.initSync();var Ed=require("fs-extra"),cI=require("path"),gd=(k(),P($)),uhe=require("crypto"),dhe=require("uuid").v4;uK.exports=fhe;function fhe(){if(kh.getHdbBasePath()!==void 0){let e=cI.join(kh.getHdbBasePath(),gd.LICENSE_KEY_DIR_NAME,gd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=cI.join(kh.getHdbBasePath(),gd.LICENSE_KEY_DIR_NAME,gd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=cI.join(kh.getHdbBasePath(),gd.LICENSE_KEY_DIR_NAME,gd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Ed.accessSync(r),Ed.accessSync(e),Ed.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=dhe(),i=uhe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Ed.writeFileSync(r,s),Ed.writeFileSync(e,i.privateKey),Ed.writeFileSync(t,i.publicKey)}else throw n}}}a(fhe,"checkJWTTokenExist")});var fK=C((ZDe,dK)=>{"use strict";var uI=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};dK.exports={HdbInfoInsertObject:uI}});var mK=C((tLe,hK)=>{"use strict";var _K=(k(),P($)),dI=class{static{a(this,"UpgradeObject")}constructor(t,r){this[_K.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[_K.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};hK.exports={UpgradeObject:dI}});var MS=C((nLe,EK)=>{"use strict";var Ns=require("prompt"),Sd=require("chalk"),pK=X(),ii=require("os"),fI=cc(),_I=["yes","y"];async function _he(e){let t=`${ii.EOL}`+Sd.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ii.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ii.EOL}${ii.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ii.EOL}`;Ns.override=fI(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Sd.magenta(`${ii.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return pK.error("There was an error when prompting user about an upgrade."),pK.error(s),!1}return _I.includes(n.CONFIRM_UPGRADE)}a(_he,"forceUpdatePrompt");async function hhe(e){let t=`${ii.EOL}`+Sd.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.${ii.EOL}`);Ns.override=fI(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Sd.magenta(`${ii.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return _I.includes(n.CONFIRM_DOWNGRADE)}a(hhe,"forceDowngradePrompt");async function mhe(){let e=`${ii.EOL}`+Sd.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=fI(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:Sd.magenta(`${ii.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return _I.includes(r.GENERATE_CERTS)}a(mhe,"upgradeCertsPrompt");EK.exports={forceUpdatePrompt:_he,forceDowngradePrompt:hhe,upgradeCertsPrompt:mhe}});var mI=C((iLe,gK)=>{"use strict";var hI=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};gK.exports=hI});var TK=C((dLe,SK)=>{"use strict";var phe=oe(),Ehe=Nt(),aLe=X(),cLe=require("path"),lLe=require("fs"),uLe=(k(),P($));SK.exports={getOldPropsValue:ghe};function ghe(e,t,r=!1){let n=t.getRaw(e);return phe.isNotEmptyAndHasValue(n)?n:r?Ehe.getDefaultConfig(e):""}a(ghe,"getOldPropsValue")});var bK=C((_Le,yK)=>{"use strict";var Ua=require("path"),xa=require("fs-extra"),She=require("properties-reader"),The=mI(),ur=X(),{getOldPropsValue:mt}=TK(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:bl}=(k(),P($)),Ol=Nt(),vS=ce(),AK=oe(),Bi=(k(),P($)),pI=new The("3.1.0"),RK=[];function Ahe(){let e=She(vS.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ur.info(t);let r=` ;Settings for the HarperDB process.
|
|
35
|
+
IdentitiesOnly yes`;await Oe.pathExists(l)?await Oe.appendFile(l,`
|
|
36
|
+
`+u):await Oe.outputFile(l,u);let f="";if(await Oe.pathExists(Oo)||(await Oe.writeFile(Oo,""),await Oe.chmod(Oo,"0600")),i=="github.com"&&!(await Oe.readFile(Oo,"utf8")).includes("github.com"))try{let S=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of S)Oe.appendFile(Oo,"github.com "+g+`
|
|
37
|
+
`)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Oe.appendFile(Oo,o);let d=await ri(e);return d.message=`Added ssh key: ${r}${f}`,d}a(Hue,"addSSHKey");async function kue(e){let t=bn.updateSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n}=e;Gt.trace("updating ssh key",r);let s=we.join(Ma,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await ri(e);return i.message=`Updated ssh key: ${r}`,i}a(kue,"updateSSHKey");async function Fue(e){let t=bn.deleteSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r}=e;Gt.trace("deleting ssh key",r);let n=we.join(Ma,r+".key"),s=we.join(Ma,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await ri(e);return c.message=`Deleted ssh key: ${r}`,c}a(Fue,"deleteSSHKey");async function Gue(e){let t=[];return await Oe.pathExists(Ma)&&(await Oe.readdir(Ma)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Gue,"listSSHKeys");async function que(e){let t=bn.setSSHKnownHostsValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(Oo,r);let n=await ri(e);return n.message="Known hosts successfully set",n}a(que,"setSSHKnownHosts");async function $ue(e){return await Oe.pathExists(Oo)?{known_hosts:await Oe.readFile(Oo,"utf8")}:{known_hosts:null}}a($ue,"getSSHKnownHosts");Object.assign(b$,{customFunctionsStatus:bue,getCustomFunctions:Oue,getCustomFunction:Nue,setCustomFunction:wue,dropCustomFunction:Iue,addComponent:Cue,dropCustomFunctionProject:Pue,packageComponent:Due,deployComponent:Lue,getComponents:vue,getComponentFile:Uue,setComponentFile:xue,dropComponent:Bue,addSSHKey:Hue,updateSSHKey:kue,deleteSSHKey:Fue,listSSHKeys:Gue,setSSHKnownHosts:que,getSSHKnownHosts:$ue})});var uw=P((YPe,N$)=>{"use strict";var Rs=require("joi"),O$=nt();N$.exports={readTransactionLogValidator:Vue,deleteTransactionLogsBeforeValidator:Kue};function Vue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return O$.validateBySchema(e,t)}a(Vue,"readTransactionLogValidator");function Kue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return O$.validateBySchema(e,t)}a(Kue,"deleteTransactionLogsBeforeValidator")});var sS=P((zPe,L$)=>{"use strict";var dw=(G(),D($)),bh=Er(),w$=oe(),I$=ce(),C$=lo(),P$=X(),{handleHDBError:rS,hdb_errors:Yue}=he(),{HTTP_STATUS_CODES:nS}=Yue,{readTransactionLogValidator:Wue,deleteTransactionLogsBeforeValidator:zue}=uw(),D$=Fn(),jue="Logs successfully deleted from transaction log.",Que="All logs successfully deleted from transaction log.";L$.exports={readTransactionLog:Jue,deleteTransactionLogsBefore:Zue};async function Jue(e){let t=Wue(e);if(t)throw rS(t,t.message,nS.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=w$.checkSchemaTableExist(e.database,e.table);if(r)throw rS(new Error,r,nS.NOT_FOUND,void 0,void 0,!0);return I$.get(dw.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Xue(e):(P$.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),D$.readAuditLog(e))}a(Jue,"readTransactionLog");async function*Xue(e){let t=C$.createNatsTableStreamName(e.database,e.table),r=await bh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===dw.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Xue,"readTransactionLogNats");async function Zue(e){let t=zue(e);if(t)throw rS(t,t.message,nS.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!I$.get(dw.CONFIG_PARAMS.CLUSTERING_ENABLED))return P$.info("Delete transaction logs called for Plexus"),D$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=w$.checkSchemaTableExist(r,n);if(i)throw rS(new Error,i,nS.NOT_FOUND,void 0,void 0,!0);let o=C$.createNatsTableStreamName(r,n),{jsm:c}=await bh.getNATSReferences(),l=await bh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=jue,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Que):d=(await bh.viewStream(o,parseInt(s),1))[0].nats_sequence,await bh.purgeTableStream(r,n,{seq:d}),f}a(Zue,"deleteTransactionLogsBefore")});var v$=P((QPe,M$)=>{"use strict";var fw=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};M$.exports=fw});var x$=P((XPe,U$)=>{"use strict";var _w=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};U$.exports=_w});var pw=P((eDe,H$)=>{"use strict";var B$=v$(),ede=x$(),{HDB_ERROR_MSGS:tde}=Dn(),hw=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=tde.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new B$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new ede(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new B$(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};H$.exports=hw});var cS=P((sDe,tV)=>{"use strict";var mw=gn(),iS=Vr(),ys=pg(),wh=uo(),Ew=Uc(),rde=HO(),nde=gF(),Ih=Gn(),oS=p_(),gr=X(),sde=$O(),ide=wg(),ode=hN(),ade=Cg(),cde=EN(),lde=gN(),ude=AN(),dde=yN(),gw=vg(),No=oe(),fde=QG(),Sw=xN(),G$=nd(),Zr=(G(),D($)),q$=Vq(),_de=Ku(),$$=(yu(),D(I_)),V$=(Qg(),D(ph)),K$=wt(),cr=cw(),hde=require("alasql"),Y$=sS(),W$=Sh(),ld=Zs(),z$=(ll(),D(cl)),j$=pw(),{handleHDBError:On,hdb_errors:Q$}=he(),{addNodeBack:rDe,removeNodeBack:nDe}=(ll(),D(cl)),{HDB_ERROR_MSGS:Br,HTTP_STATUS_CODES:Oh}=Q$,Z=new Map,J$="delete",va="insert",wo="read",Tl="update",Nh="describe",k$=wh.describeSchema.name,F$=wh.describeTable.name,X$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},pde={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},mde="catchup",Ede="handleGetJob",gde="handleGetJobsByStartDate",aS={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Sde=[ys.createTable.name,ys.createAttribute.name,ys.dropTable.name,ys.dropAttribute.name],Z$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(mw.insert.name,new re(!1,[va]));Z.set(mw.update.name,new re(!1,[Tl]));Z.set(mw.upsert.name,new re(!1,[va,Tl]));Z.set(iS.searchByConditions.name,new re(!1,[wo]));Z.set(iS.searchByHash.name,new re(!1,[wo]));Z.set(iS.searchByValue.name,new re(!1,[wo]));Z.set(iS.search.name,new re(!1,[wo]));Z.set(ys.createSchema.name,new re(!0,[]));Z.set(ys.createTable.name,new re(!0,[]));Z.set(ys.createAttribute.name,new re(!1,[va]));Z.set(ys.dropSchema.name,new re(!0,[]));Z.set(ys.dropTable.name,new re(!0,[]));Z.set(ys.dropAttribute.name,new re(!0,[]));Z.set(wh.describeSchema.name,new re(!1,[wo]));Z.set(wh.describeTable.name,new re(!1,[wo]));Z.set(Ew.deleteRecord.name,new re(!1,[J$]));Z.set(Ih.addUser.name,new re(!0,[]));Z.set(Ih.alterUser.name,new re(!0,[]));Z.set(Ih.dropUser.name,new re(!0,[]));Z.set(Ih.listUsersExternal.name,new re(!0,[]));Z.set(oS.listRoles.name,new re(!0,[]));Z.set(oS.addRole.name,new re(!0,[]));Z.set(oS.alterRole.name,new re(!0,[]));Z.set(oS.dropRole.name,new re(!0,[]));Z.set(sde.name,new re(!0,[]));Z.set(ide.name,new re(!0,[]));Z.set(ode.name,new re(!0,[]));Z.set(ade.name,new re(!0,[]));Z.set(cde.name,new re(!0,[]));Z.set(lde.name,new re(!0,[]));Z.set(gw.setRoutes.name,new re(!0,[]));Z.set(gw.getRoutes.name,new re(!0,[]));Z.set(gw.deleteRoutes.name,new re(!0,[]));Z.set(K$.setConfiguration.name,new re(!0,[]));Z.set(ude.clusterStatus.name,new re(!0,[]));Z.set(dde.name,new re(!0,[]));Z.set(Sw.getFingerprint.name,new re(!0,[]));Z.set(Sw.setLicense.name,new re(!0,[]));Z.set(Ew.deleteFilesBefore.name,new re(!0,[]));Z.set(Ew.deleteAuditLogsBefore.name,new re(!0,[]));Z.set(G$.restart.name,new re(!0,[]));Z.set(G$.restartService.name,new re(!0,[]));Z.set(rde.name,new re(!0,[]));Z.set(nde.name,new re(!0,[wo]));Z.set(_de.systemInformation.name,new re(!0,[]));Z.set(K$.getConfiguration.name,new re(!0,[]));Z.set(Y$.readTransactionLog.name,new re(!0,[]));Z.set(Y$.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(W$.installModules.name,new re(!0,[]));Z.set(W$.auditModules.name,new re(!0,[]));Z.set(ld.createCsr.name,new re(!0,[]));Z.set(ld.signCertificate.name,new re(!0,[]));Z.set(ld.listCertificates.name,new re(!0,[]));Z.set(ld.addCertificate.name,new re(!0,[]));Z.set(ld.removeCertificate.name,new re(!0,[]));Z.set(ld.getKey.name,new re(!0,[]));Z.set(z$.addNodeBack.name,new re(!0,[]));Z.set(z$.removeNodeBack.name,new re(!0,[]));Z.set($$.createTokens.name,new re(!1,[]));Z.set($$.refreshOperationToken.name,new re(!1,[]));Z.set(V$.login.name,new re(!1,[]));Z.set(V$.logout.name,new re(!1,[]));Z.set(cr.customFunctionsStatus.name,new re(!0,[]));Z.set(cr.getCustomFunctions.name,new re(!0,[]));Z.set(cr.getComponents.name,new re(!0,[]));Z.set(cr.getComponentFile.name,new re(!0,[]));Z.set(cr.setComponentFile.name,new re(!0,[]));Z.set(cr.dropComponent.name,new re(!0,[]));Z.set(cr.getCustomFunction.name,new re(!0,[]));Z.set(cr.setCustomFunction.name,new re(!0,[]));Z.set(cr.dropCustomFunction.name,new re(!0,[]));Z.set(cr.addComponent.name,new re(!0,[]));Z.set(cr.dropCustomFunctionProject.name,new re(!0,[]));Z.set(cr.packageComponent.name,new re(!0,[]));Z.set(cr.deployComponent.name,new re(!0,[]));Z.set(cr.addSSHKey.name,new re(!0,[]));Z.set(cr.updateSSHKey.name,new re(!0,[]));Z.set(cr.deleteSSHKey.name,new re(!0,[]));Z.set(cr.listSSHKeys.name,new re(!0,[]));Z.set(cr.setSSHKnownHosts.name,new re(!0,[]));Z.set(cr.getSSHKnownHosts.name,new re(!0,[]));Z.set(Sw.getRegistrationInfo.name,new re(!1,[]));Z.set(Ih.userInfo.name,new re(!1,[]));Z.set(wh.describeAll.name,new re(!1,[]));Z.set(Ede,new re(!1,[]));Z.set(gde,new re(!0,[]));Z.set(mde,new re(!0,[]));Z.set(aS.CSV_DATA_LOAD,new re(!1,[va,Tl]));Z.set(aS.CSV_URL_LOAD,new re(!1,[va,Tl]));Z.set(aS.CSV_FILE_LOAD,new re(!1,[va,Tl]));Z.set(aS.IMPORT_FROM_S3,new re(!1,[va,Tl]));Z.set(Z$.EXPORT_TO_S3,new re(!0,[]));Z.set(Z$.EXPORT_LOCAL,new re(!0,[]));Z.set(Zr.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[J$]));Z.set(Zr.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[wo]));Z.set(Zr.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[va]));Z.set(Zr.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[Tl]));tV.exports={verifyPerms:Ade,verifyPermsAst:Tde,verifyBulkLoadAttributePerms:yde};function Tde(e,t,r){if(No.isEmptyOrZeroLength(e))throw gr.info("verify_perms_ast has an empty user parameter"),On(new Error);if(No.isEmptyOrZeroLength(t))throw gr.info("verify_perms_ast has an empty user parameter"),On(new Error);if(No.isEmptyOrZeroLength(r))throw gr.info("verify_perms_ast has a null operation parameter"),On(new Error);try{let n=new j$,s=new fde(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw gr.info("No schemas defined in verifyPermsAst(), will not continue."),On(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&X$[r])throw On(new Error,Br.DROP_SYSTEM,Oh.FORBIDDEN);if(c&&!l)return null;let u=q$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof hde.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=eV(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let p=s.getAttributesBySchemaTableName(h,d[_]),S=Aw(t.role.permission,h,d[_]);Tw(p,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw On(n)}}a(Tde,"verifyPermsAst");function Ade(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw gr.info("null required parameter in verifyPerms"),On(new Error,Br.DEFAULT_INVALID_REQUEST,Oh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new j$;if(No.isEmptyOrZeroLength(e.hdb_user?.role)||No.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return gr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Br.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(Zr.SYSTEM_SCHEMA_NAME)||s===Zr.SYSTEM_SCHEMA_NAME;if(l&&f&&pde[e.operation]&&(i===Zr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&X$[r])throw On(new Error,Br.DROP_SYSTEM,Oh.FORBIDDEN);if(l&&!f||u===!0&&(r===ys.createSchema.name||r===ys.dropSchema.name))return null;if(Sde.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=q$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===k$||r===F$)&&!d.super_user){if(s===Zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Br.SCHEMA_PERM_ERROR(s));if(r===k$&&(!d[s]||!d[s][Nh]))return c.handleInvalidItem(Br.SCHEMA_NOT_FOUND(s));if(r===F$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Nh]))return c.handleInvalidItem(Br.TABLE_NOT_FOUND(s,i))}let h=eV(e.hdb_user,r,o,c,n);if(h)return h;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Zr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[Zr.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=S)}let _=Rde(e),p=Aw(e.hdb_user?.role?.permission,s,i);return Tw(_,p,r,i,s,c,n),c.getPermsResponse()}a(Ade,"verifyPerms");function eV(e,t,r,n,s){if(No.arrayHasEmptyValues([e,t,r]))throw gr.info("hasPermissions has an invalid parameter"),On(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw gr.info(`operation ${t} not found.`),On(new Error,Br.OP_NOT_FOUND(t),Oh.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return gr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Br.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][Nh]===!1){n.addInvalidItem(Br.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Br.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[Nh]===!1)n.addInvalidItem(Br.TABLE_NOT_FOUND(l,f));else try{let h=[],_=Z.get(t).perms;!No.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let p=0;p<_.length;p++){let S=_[p],g=d[S];(g==null||g===!1)&&(gr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Br.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw gr.error(_),gr.error(h),On(Q$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(eV,"hasPermissions");function Tw(e,t,r,n,s,i,o){if(!e||!t)throw gr.info("no attributes specified in checkAttributePerms."),On(new Error);let c=Z.get(r).perms;if(!c||c==="")throw gr.info(`no permissions found for ${r} in checkAttributePerms().`),On(new Error);if(No.isEmptyOrZeroLength(t))return gr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[Nh]===!1){i.addInvalidItem(Br.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==wo)throw On(new Error,Br.SYSTEM_TIMESTAMP_PERMS_ERR,Oh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Br.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(Tw,"checkAttributePerms");function Rde(e){let t=new Set;try{if(e.action)return t;if(e.operation===Zr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){gr.info(r)}return t}a(Rde,"getRecordAttributes");function Aw(e,t,r){let n=new Map;if(No.isEmpty(e))return gr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{gr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(Aw,"getAttributePermissions");function yde(e,t,r,n,s,i,o){let c=new Set(i),l=Aw(e,n,s);Tw(c,l,t,s,n,o,r)}a(yde,"verifyBulkLoadAttributePerms")});var uS=P((oDe,oV)=>{"use strict";oV.exports={evaluateSQL:xde,processAST:iV,convertSQLToAST:sV,checkASTPermissions:nV};var bde=gn(),rV=require("util"),Ode=rV.callbackify(bde.insert),Nde=Vr().search,wde=oH().update,Ide=rV.callbackify(wde),Cde=cH().convertDelete,Ua=require("alasql"),Pde=cS(),lS=X(),Dde=Lm(),Lde=oe(),Ch=(G(),D($)),{hdb_errors:Mde,handleHDBError:Rw}=he(),{HTTP_STATUS_CODES:yw}=Mde;Dde(Ua);var vde=403,Ude="There was a problem performing this insert. Please check the logs and try again.",bw=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function xde(e,t){let r=e.parsed_sql_object;if(!r){r=sV(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ua.yy.Insert?n=s.into.databaseid:s instanceof Ua.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ua.yy.Update||s instanceof Ua.yy.Delete?n=s.table.databaseid:lS.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ua.yy.Select)&&Lde.isEmptyOrZeroLength(n))return t("No schema specified",null)}iV(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(xde,"evaluateSQL");function nV(e,t){let r;try{r=Pde.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(nV,"checkASTPermissions");function sV(e){let t=new bw;if(!e)throw Rw(new Error,"The 'sql' parameter is missing from the request body",yw.BAD_REQUEST);try{let r=e.trim(),n=Ua.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
38
|
+
`);throw n[1]?Rw(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,yw.BAD_REQUEST):Rw(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",yw.BAD_REQUEST)}return t}a(sV,"convertSQLToAST");function iV(e,t,r){try{let n=Bde;if(!e.bypass_auth&&!t.permissions_checked){let i=nV(e,t);if(i&&i.length>0)return r(vde,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ch.VALID_SQL_OPS_ENUM.SELECT:n=Nde,s=t.ast.statements[0];break;case Ch.VALID_SQL_OPS_ENUM.INSERT:n=Hde;break;case Ch.VALID_SQL_OPS_ENUM.UPDATE:n=Ide;break;case Ch.VALID_SQL_OPS_ENUM.DELETE:n=Cde;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(iV,"processAST");function Bde(e,t){lS.info(e),t("unknown sql statement")}a(Bde,"nullFunction");function Hde({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=kde(i,e.values)}catch(o){return r(o)}Ode(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){lS.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Hde,"convertInsert");function kde(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Ua.compile(`SELECT ${s.toString()} AS [${Ch.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw lS.error(r),new Error(Ude)}}a(kde,"createDataObjects")});var Pw=P((uDe,uV)=>{var hS=require("clone"),pS=nt(),Fde=oe(),fS=(G(),D($)),cDe=X(),Ow=require("fs"),ww=require("joi"),{string:_S}=ww.types(),{hdb_errors:Gde,handleHDBError:dS}=he(),{HDB_ERROR_MSGS:lDe,HTTP_STATUS_CODES:Nw}=Gde,{common_validators:ud}=Ri(),aV=" is required",qde=["insert","update","upsert"],Iw={database:{presence:!1,format:ud.schema_format,length:ud.schema_length},schema:{presence:!1,format:ud.schema_format,length:ud.schema_length},table:{presence:!0,format:ud.schema_format,length:ud.schema_length},action:{inclusion:{within:qde,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},$de={schema:_S.required(),table:_S.required(),action:_S.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Vde,AWS_SECRET:Kde,AWS_BUCKET:Yde,AWS_FILE_KEY:Wde,REGION:zde}=fS.S3_BUCKET_AUTH_KEYS,jde={s3:{presence:!0},[`s3.${Vde}`]:{presence:!0,type:"String"},[`s3.${Kde}`]:{presence:!0,type:"String"},[`s3.${Yde}`]:{presence:!0,type:"String"},[`s3.${Wde}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${zde}`]:{presence:!0,type:"String"}},cV=hS(Iw);cV.data.presence={message:aV};var lV=hS(Iw);lV.file_path.presence={message:aV};var Qde=Object.assign(hS(Iw),jde),Cw=hS($de);Cw.csv_url=_S.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Cw.passthrough_headers=ww.object();function Jde(e){let t=pS.validateObject(e,cV);return mS(e,t)}a(Jde,"dataObject");function Xde(e){let t=pS.validateBySchema(e,ww.object(Cw));return mS(e,t)}a(Xde,"urlObject");function Zde(e){let t=pS.validateObject(e,lV);return mS(e,t)}a(Zde,"fileObject");function efe(e){let t=pS.validateObject(e,Qde);return mS(e,t)}a(efe,"s3FileObject");function mS(e,t){if(!t){let r=Fde.checkGlobalSchemaTable(e.schema,e.table);if(r)return dS(new Error,r,Nw.BAD_REQUEST);if(e.operation===fS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Ow.accessSync(e.file_path,Ow.constants.R_OK|Ow.constants.F_OK)}catch(n){return n.code===fS.NODE_ERROR_CODES.ENOENT?dS(n,`No such file or directory ${n.path}`,Nw.BAD_REQUEST):n.code===fS.NODE_ERROR_CODES.EACCES?dS(n,`Permission denied ${n.path}`,Nw.BAD_REQUEST):dS(n)}}return t}a(mS,"postValidateChecks");uV.exports={dataObject:Jde,urlObject:Xde,fileObject:Zde,s3FileObject:efe}});var Dw=P((fDe,dV)=>{"use strict";var Ph=X(),ES=(G(),D($));async function tfe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===ES.OPERATIONS_ENUM.INSERT||t.operation===ES.OPERATIONS_ENUM.UPDATE||t.operation===ES.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ES.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ph.info(i.message),i):i.http_resp_msg?(Ph.error(`Error calling operation: ${e.name}`),Ph.error(i.http_resp_msg),i):(Ph.error(`Error calling operation: ${e.name}`),Ph.error(i),i)}}a(tfe,"callOperationFunctionAsAwait");dV.exports={callOperationFunctionAsAwait:tfe}});var Lw=P((hDe,_V)=>{"use strict";var{S3:rfe,GetObjectCommand:nfe}=require("@aws-sdk/client-s3");_V.exports={getFileStreamFromS3:sfe,getS3AuthObj:fV};async function sfe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await fV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new nfe(r))).Body}a(sfe,"getFileStreamFromS3");function fV(e,t,r){return new rfe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(fV,"getS3AuthObj")});var pV=P((mDe,hV)=>{"use strict";var Mw=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},vw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};hV.exports={BulkLoadFileObject:Mw,BulkLoadDataObject:vw}});var EV=P((gDe,mV)=>{"use strict";var Uw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};mV.exports=Uw});var Gw=P((bDe,vV)=>{"use strict";var gS=gn(),TS=Pw(),ife=require("needle"),ni=(G(),D($)),TDe=Pt(),dd=oe(),{handleHDBError:Vt,hdb_errors:NV}=he(),{HTTP_STATUS_CODES:Hr,HDB_ERROR_MSGS:Sr,CHECK_LOGS_WRAPPER:Rl}=NV,fd=X(),xw=require("papaparse");dd.promisifyPapaParse();var si=require("fs-extra"),ofe=require("path"),{chain:gV}=require("stream-chain"),SV=require("stream-json/streamers/StreamArray"),TV=require("stream-json/utils/Batch"),AV=require("stream-chain/utils/comp"),{finished:RV}=require("stream"),afe=ce(),wV=Dw(),cfe=Lw(),{BulkLoadFileObject:Hw,BulkLoadDataObject:lfe}=pV(),kw=pw(),{verifyBulkLoadAttributePerms:IV}=cS(),ADe=EV(),RDe=Er(),yDe=lo(),{databases:ufe}=(Ue(),D(at)),{coerceType:dfe}=(gf(),D(qw)),yV="No records parsed from csv file.",Al=`${afe.get("HDB_ROOT")}/tmp`,{schema_regex:ffe}=Ri(),bV=1024*1024*2,OV=5e3,_fe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};vV.exports={csvDataLoad:hfe,csvURLLoad:pfe,csvFileLoad:mfe,importFromS3:Efe};async function hfe(e,t){let r=TS.dataObject(e);if(r)throw Vt(r,r.message,Hr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=DV(e.schema,e.table),i=xw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Bw.bind(null,s),dynamicTyping:!1}),o=new kw;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&IV(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Vt(new Error,c,Hr.BAD_REQUEST,void 0,void 0,!0);let l=new lfe(e.action,e.schema,e.table,i.data);return n=await wV.callOperationFunctionAsAwait(LV,l,null),n.message===yV?yV:MV(n.records,n.number_written)}catch(s){throw yl(s)}}a(hfe,"csvDataLoad");async function pfe(e){let t=TS.urlObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Al}/${r}`;try{await gfe(e,r)}catch(s){throw fd.error(Sr.DOWNLOAD_FILE_ERR(r)+" - "+s),Vt(s,Rl(Sr.DOWNLOAD_FILE_ERR(r)))}try{let s=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,n,ni.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await Fw(s);return await SS(n),i}catch(s){throw await SS(n),yl(s)}}a(pfe,"csvURLLoad");async function mfe(e){let t=TS.fileObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ni.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await Fw(r)}catch(n){throw yl(n)}}a(mfe,"csvFileLoad");async function Efe(e){let t=TS.s3FileObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=ofe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Al}/${s}`;let i=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Sfe(s,e);let o=await Fw(i);return await SS(r),o}catch(n){throw await SS(r),yl(n)}}a(Efe,"importFromS3");async function gfe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ife("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Vt(n,s,n.statusCode,ni.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Afe(r,e.csv_url),await Tfe(t,r.raw)}a(gfe,"downloadCSVFile");async function Sfe(e,t){try{let r=`${Al}/${e}`;await si.mkdirp(Al),await si.writeFile(`${Al}/${e}`,"",{flag:"a+"});let n=await si.createWriteStream(r),s=await cfe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){fd.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw fd.error(Sr.S3_DOWNLOAD_ERR+" - "+r),Vt(r,Rl(Sr.S3_DOWNLOAD_ERR))}}a(Sfe,"downloadFileFromS3");async function Tfe(e,t){try{await si.mkdirp(Al),await si.writeFile(`${Al}/${e}`,t)}catch(r){throw fd.error(Sr.WRITE_TEMP_FILE_ERR),Vt(r,Rl(Sr.DEFAULT_BULK_LOAD_ERR))}}a(Tfe,"writeFileToTempFolder");async function SS(e){if(e)try{await si.access(e),await si.unlink(e)}catch{fd.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(SS,"deleteTempFile");function Afe(e,t){if(e.statusCode!==NV.HTTP_STATUS_CODES.OK)throw Vt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Hr.BAD_REQUEST);if(!_fe[e.headers["content-type"]])throw Vt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Hr.BAD_REQUEST);if(!e.raw)throw Vt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Hr.BAD_REQUEST)}a(Afe,"validateURLResponse");async function Fw(e){try{let t;switch(e.file_type){case ni.VALID_S3_FILE_TYPES.CSV:t=await Rfe(e);break;case ni.VALID_S3_FILE_TYPES.JSON:t=await yfe(e);break;default:throw Vt(new Error,Sr.DEFAULT_BULK_LOAD_ERR,Hr.BAD_REQUEST,ni.LOG_LEVELS.ERROR,Sr.INVALID_FILE_EXT_ERR(e))}return MV(t.records,t.number_written)}catch(t){throw yl(t)}}a(Fw,"fileLoad");async function CV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await gS.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&IV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Vt(c);r(l)}}a(CV,"validateChunk");async function PV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;dd.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!dd.isEmpty(c)&&!dd.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await wV.callOperationFunctionAsAwait(LV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Vt(c,Rl(Sr.INSERT_CSV_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.INSERT_CSV_ERR+" - "+c);r(l)}}a(PV,"insertChunk");async function Rfe(e){let t={records:0,number_written:0},r=DV(e.schema,e.table);try{let n=new kw,s=si.createReadStream(e.file_path,{highWaterMark:bV});s.setEncoding("utf8"),await xw.parsePromise(s,CV.bind(null,e,n),Bw.bind(null,r));let i=n.getPermsResponse();if(i)throw Vt(new Error,i,Hr.BAD_REQUEST);return s=si.createReadStream(e.file_path,{highWaterMark:bV}),s.setEncoding("utf8"),await xw.parsePromise(s,PV.bind(null,e,t),Bw.bind(null,r)),s.destroy(),t}catch(n){throw Vt(n,Rl(Sr.PAPA_PARSE_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.PAPA_PARSE_ERR+n)}}a(Rfe,"callPapaParse");function DV(e,t){let r=ufe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>dfe(i,s));return n}a(DV,"createTransformMap");function Bw(e,t,r){let n=e.get(r);return n?n(t):dd.autoCast(t)}a(Bw,"typeFunction");async function yfe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new kw,s=gV([si.createReadStream(e.file_path,{encoding:"utf-8"}),SV.withParser(),c=>c.value,new TV({batchSize:OV}),AV(async c=>{await CV(e,n,r,c)})]);await new Promise((c,l)=>{RV(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Vt(new Error,i,Hr.BAD_REQUEST);let o=gV([si.createReadStream(e.file_path,{encoding:"utf-8"}),SV.withParser(),c=>c.value,new TV({batchSize:OV}),AV(async c=>{await PV(e,t,r,c)})]);return await new Promise((c,l)=>{RV(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Vt(n,Rl(Sr.INSERT_JSON_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.INSERT_JSON_ERR+n)}}a(yfe,"insertJson");async function LV(e){let t={};try{e.data&&e.data.length>0&&bfe(e.data[0])?t=await Ofe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",fd.info(t.message))}catch(r){throw yl(r)}return t}a(LV,"callBulkFileLoad");function bfe(e){let t=Object.keys(e);for(let r of t)if(!ffe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(bfe,"validateColumnNames");async function Ofe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=gS.insert;break;case"update":i=gS.update;break;case"upsert":i=gS.upsert;break;default:throw Vt(new Error,Sr.INVALID_ACTION_PARAM_ERR(n),Hr.BAD_REQUEST,ni.LOG_LEVELS.ERROR,Sr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=dd.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw yl(o)}}a(Ofe,"bulkFileLoad");function MV(e,t){return`successfully loaded ${t} of ${e} records`}a(MV,"buildResponseMsg");function yl(e){return Vt(e,Rl(Sr.DEFAULT_BULK_LOAD_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(yl,"buildTopLevelErrMsg")});var Kw=P((NDe,qV)=>{"use strict";var Vw=Vr(),Nfe=Lw(),{AsyncParser:wfe}=require("json2csv"),AS=require("stream"),Jn=oe(),$w=require("fs-extra"),Ife=require("path"),bs=X(),{promisify:BV}=require("util"),Dh=oe(),{handleHDBError:lr,hdb_errors:Cfe}=he(),{HDB_ERROR_MSGS:Nn,HTTP_STATUS_CODES:ur}=Cfe,{streamAsJSON:Pfe}=(VA(),D(hL)),{Upload:Dfe}=require("@aws-sdk/lib-storage"),{toCsvStream:Lfe}=(eo(),D(LL)),UV=["search_by_value","search_by_hash","sql","search_by_conditions"],xV=["json","csv"],HV="json",kV="csv",Mfe="Successfully exported JSON locally.",vfe="Successfully exported CSV locally.",Ufe=1e3,xfe=Vw.searchByHash,Bfe=Vw.searchByValue,Hfe=BV(AS.finished);qV.exports={export_to_s3:qfe,export_local:kfe};async function kfe(e){bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=FV(e);if(!Jn.isEmpty(t))throw bs.error(t),lr(new Error,t,ur.BAD_REQUEST,void 0,void 0,!0);if(Jn.isEmpty(e.path))throw bs.error(Nn.MISSING_VALUE("path")),lr(new Error,Nn.MISSING_VALUE("path"),ur.BAD_REQUEST,void 0,void 0,!0);let r=(Jn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Ife.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Jn.buildFolderPath(e.path,r);await Ffe(e.path);let s=await GV(e);return await Gfe(n,e.format,s)}a(kfe,"export_local");async function Ffe(e){if(bs.trace("in confirmPath"),Jn.isEmptyOrZeroLength(e))throw lr(new Error,`Invalid path: ${e}`,ur.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await $w.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,bs.error(n),lr(new Error,n,ur.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw bs.error(r),lr(new Error,r,ur.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Ffe,"confirmPath");async function Gfe(e,t,r){if(bs.trace("in saveToLocal"),Dh.isEmptyOrZeroLength(e))throw lr(new Error,Nn.INVALID_VALUE("file_path"),ur.BAD_REQUEST,void 0,void 0,!0);if(Dh.isEmptyOrZeroLength(t))throw lr(new Error,Nn.INVALID_VALUE("Source format"),ur.BAD_REQUEST,void 0,void 0,!0);if(Dh.isEmpty(r))throw lr(new Error,Nn.NOT_FOUND("Data"),ur.BAD_REQUEST,void 0,void 0,!0);if(t===HV){let n=$w.createWriteStream(e);return Pfe(r).pipe(n),await Hfe(n),{message:Mfe,path:e}}else if(t===kV){let n=$w.createWriteStream(e),s=AS.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new wfe(i,c).fromInput(s).toOutput(n).promise(!1),{message:vfe,path:e}}throw lr(new Error,Nn.INVALID_VALUE("format"),ur.BAD_REQUEST)}a(Gfe,"saveToLocal");async function qfe(e){if(!e.s3||Object.keys(e.s3).length===0)throw lr(new Error,Nn.MISSING_VALUE("S3 object"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw lr(new Error,Nn.MISSING_VALUE("aws_access_key_id"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw lr(new Error,Nn.MISSING_VALUE("aws_secret_access_key"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.bucket))throw lr(new Error,Nn.MISSING_VALUE("bucket"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.key))throw lr(new Error,Nn.MISSING_VALUE("key"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.region))throw lr(new Error,Nn.MISSING_VALUE("region"),ur.BAD_REQUEST);let t=FV(e);if(!Jn.isEmpty(t))throw lr(new Error,t,ur.BAD_REQUEST);bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await GV(e)}catch(l){throw bs.error(l),l}let n,s=await Nfe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new AS.PassThrough;if(e.format===kV){i=e.s3.key+".csv";let l=Lfe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===HV){i=e.s3.key+".json";let l=new AS.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%Ufe===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw lr(new Error,Nn.INVALID_VALUE("format"),ur.BAD_REQUEST);return new Dfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(qfe,"export_to_s3");function FV(e){if(bs.trace("in exportCoreValidation"),Jn.isEmpty(e.format))return"format missing";if(xV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${xV.join(", ")}`;let t=e.search_operation.operation;if(Jn.isEmpty(t))return"search_operation.operation missing";if(UV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${UV.join(", ")}`}a(FV,"exportCoreValidation");async function GV(e){bs.trace("in getRecords");let t,r;if(Dh.isEmpty(e.search_operation)||Dh.isEmptyOrZeroLength(e.search_operation.operation))throw lr(new Error,Nn.INVALID_VALUE("Search operation"),ur.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Bfe;break;case"search_by_hash":t=xfe;break;case"search_by_conditions":t=Vw.searchByConditions;break;case"sql":{let n=uS();t=BV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,bs.error(r),lr(new Error,r,ur.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(GV,"getRecords")});var VV=P((IDe,$V)=>{"use strict";var Yw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};$V.exports=Yw});var WV=P((PDe,YV)=>{"use strict";var $fe=(G(),D($)),KV=require("moment"),Vfe=require("uuid").v4,Ww=class{static{a(this,"JobObject")}constructor(){this.id=Vfe(),this.type=void 0,this.start_datetime=KV().valueOf(),this.created_datetime=KV().valueOf(),this.end_datetime=void 0,this.status=$fe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};YV.exports=Ww});var zw=P((LDe,t1)=>{"use strict";var Kfe=require("uuid").v4,XV=gn(),ZV=Vr(),Yfe=Ys(),Wfe=_u(),zfe=VV(),bt=(G(),D($)),jfe=WV(),Qfe=NE(),ii=X(),Jfe=df(),_d=oe(),{promisify:Xfe}=require("util"),bl=require("moment"),Zfe=uS(),RS=Pw(),zV=jR(),{deleteTransactionLogsBeforeValidator:e_e}=uw(),{handleHDBError:jV,hdb_errors:t_e,ClientError:r_e}=he(),{HTTP_STATUS_CODES:QV}=t_e,JV=ZV.searchByValue,n_e=ZV.searchByHash,s_e=XV.insert,i_e=Xfe(Zfe.evaluateSQL),o_e=XV.update;t1.exports={addJob:l_e,updateJob:d_e,handleGetJob:a_e,handleGetJobsByStartDate:c_e,getJobById:e1};async function a_e(e){if(e.id===void 0)throw new r_e("'id' is required");let t=await e1(e.id);return _d.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(a_e,"handleGetJob");async function c_e(e){try{let t=await u_e(e);if(ii.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=bl(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bl(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw ii.error(r),new Error(r)}}a(c_e,"handleGetJobsByStartDate");async function l_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_d.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return ii.info(f),t.error=f,t}if(!bt.JOB_TYPE_ENUM[e.operation])return ii.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case bt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=RS.fileObject(e);break;case bt.OPERATIONS_ENUM.CSV_URL_LOAD:n=RS.urlObject(e);break;case bt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=RS.dataObject(e);break;case bt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=RS.s3FileObject(e);break;case bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=zV(e,"date");break;case bt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=zV(e,"timestamp");break;case bt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=e_e(e);break;case bt.OPERATIONS_ENUM.RESTART_SERVICE:if(bt.HDB_PROCESS_SERVICES[e.service]===void 0)throw jV(new Error,"Invalid service",QV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw jV(n,n.message,QV.BAD_REQUEST,void 0,void 0,!0);let s=new jfe;s.type=e.operation===bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Yfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await JV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return ii.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Kfe();try{o=await JV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return ii.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ii.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Jfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await s_e(l)}catch(f){return ii.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,ii.trace(f)}return t}a(l_e,"addJob");async function u_e(e){let t=bl(e.from_date,bl.ISO_8601),r=bl(e.to_date,bl.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new zfe(n,e.hdb_user);try{return await i_e(s)}catch(i){throw ii.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(u_e,"getJobsInDateRange");async function e1(e){if(_d.isEmptyOrZeroLength(e))return _d.errorizeMessage("Invalid job ID specified.");let t=new Wfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await n_e(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ii.error(n),_d.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(e1,"getJobById");async function d_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_d.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===bt.JOB_STATUS_ENUM.COMPLETE||e.status===bt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=bl().valueOf());let t=new Qfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await o_e(t),r}a(d_e,"updateJob")});var l1=P((vDe,c1)=>{"use strict";var r1=oe(),Tr=(G(),D($)),f_e=require("moment"),yS=Gw(),Lh=X(),n1=zw(),s1=Kw(),i1=Uc(),o1=st(),__e=sS(),h_e=nd(),{parentPort:p_e,isMainThread:a1}=require("worker_threads"),{onMessageByType:m_e}=st(),jw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function E_e(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(r1.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(r1.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Tr.JOB_TYPE_ENUM.csv_file_load:await xi(e,yS.csvFileLoad);break;case Tr.JOB_TYPE_ENUM.csv_url_load:await xi(e,yS.csvURLLoad);break;case Tr.JOB_TYPE_ENUM.csv_data_load:await xi(e,yS.csvDataLoad);break;case Tr.JOB_TYPE_ENUM.import_from_s3:await xi(e,yS.importFromS3);break;case Tr.JOB_TYPE_ENUM.empty_trash:break;case Tr.JOB_TYPE_ENUM.export_local:await xi(e,s1.export_local);break;case Tr.JOB_TYPE_ENUM.export_to_s3:await xi(e,s1.export_to_s3);break;case Tr.JOB_TYPE_ENUM.delete_files_before:case Tr.JOB_TYPE_ENUM.delete_records_before:await xi(e,i1.deleteFilesBefore);break;case Tr.JOB_TYPE_ENUM.delete_audit_logs_before:await xi(e,i1.deleteAuditLogsBefore);break;case Tr.JOB_TYPE_ENUM.delete_transaction_logs_before:await xi(e,__e.deleteTransactionLogsBefore);break;case Tr.JOB_TYPE_ENUM.restart_service:return await xi(e,h_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(E_e,"parseMessage");async function xi(e,t){try{e.job.status=Tr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=f_e().valueOf(),await n1.updateJob(e.job),await g_e(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Lh.error(`There was an error running ${t.name} job with id ${e.job.id}`),Lh.error(n),e.job.message=n,e.job.status=Tr.JOB_STATUS_ENUM.ERROR;try{await n1.updateJob(e.job)}catch(s){throw Lh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(xi,"runJob");async function g_e(e){Lh.trace("launching job thread:",e),a1?o1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Tr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):p_e.postMessage({type:Tr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(g_e,"launchJobThread");a1&&m_e(Tr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{o1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Tr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Lh.error(r)}});c1.exports={parseMessage:E_e,RunnerMessage:jw}});var d1=P((xDe,u1)=>{"use strict";var Qw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};u1.exports=Qw});var lw=P((kDe,rI)=>{"use strict";var IS=Vr(),Zw=uS(),bS=Gw(),Io=pg(),OS=uo(),vh=Uc(),S_e=HO(),Mh=Gn(),NS=p_(),Lt=cw(),wS=X(),T_e=$O(),A_e=wg(),f1=hN(),R_e=Cg(),y_e=EN(),b_e=gN(),O_e=AN(),N_e=yN(),Jw=vg(),_1=Kw(),w_e=cS(),eI=zw(),W=(G(),D($)),{hdb_errors:xh,handleHDBError:Uh}=he(),{HTTP_STATUS_CODES:h1}=xh,Xw=xN(),p1=nd(),O1=require("util"),pd=gn(),I_e=$s(),C_e=Ku(),m1=l1(),E1=(yu(),D(I_)),g1=(Qg(),D(ph)),S1=wt(),T1=sS(),A1=Sh(),{setServerUtilities:P_e}=(gf(),D(qw)),{CONTEXT:HDe}=(na(),D(xA)),{_assignPackageExport:D_e}=ui(),{transformReq:L_e}=oe(),{server:M_e}=(Dr(),D(ql)),en=wS.loggerWithTag("operation"),hd=Zs(),R1=(ll(),D(cl)),v_e=Dw(),y1=IS.searchByHash,U_e=IS.searchByValue,x_e=O1.promisify(IS.search),B_e=O1.promisify(Zw.evaluateSQL),H_e={[W.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[W.OPERATIONS_ENUM.CREATE_TABLE]:!0,[W.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[W.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[W.OPERATIONS_ENUM.DROP_TABLE]:!0,[W.OPERATIONS_ENUM.DROP_SCHEMA]:!0},ee=d1();async function N1(e,t){try{if(e.body.operation!=="read_log"&&(wS.log_level===W.LOG_LEVELS.INFO||wS.log_level===W.LOG_LEVELS.DEBUG||wS.log_level===W.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;en.info(c)}}catch(n){en.error(n)}let r=await v_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return H_e[e.body.operation]&&I_e.setSchemaDataToGlobal(n=>{n&&en.error(n)}),r}a(N1,"processLocalTransaction");var b1=F_e();rI.exports={chooseOperation:w1,getOperationFunction:I1,operation:tI,processLocalTransaction:N1,executeJob:Os};P_e(rI.exports);M_e.operation=tI;function w1(e){let t;try{t=I1(e)}catch(s){throw en.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Zw.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Zw.checkASTPermissions(e,i);if(o)throw en.error(`${h1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Uh(new Error,o,xh.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==W.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==W.OPERATIONS_ENUM.LOGIN&&e.operation!==W.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=w_e.verifyPerms(i,s);if(o)throw en.error(`${h1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Uh(new Error,o,xh.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Uh(s,"There was an error when trying to choose an operation path")}return r}a(w1,"chooseOperation");function I1(e){if(en.trace(`getOperationFunction with operation: ${e.operation}`),b1.has(e.operation))return b1.get(e.operation);throw Uh(new Error,xh.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),xh.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(I1,"getOperationFunction");D_e("operation",tI);function tI(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=w1(e);return N1({body:e},n)}a(tI,"operation");async function k_e(e){en.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[W.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case W.OPERATIONS_ENUM.INSERT:o=await pd.insert(i);break;case W.OPERATIONS_ENUM.UPDATE:o=await pd.update(i);break;case W.OPERATIONS_ENUM.UPSERT:o=await pd.upsert(i);break;case W.OPERATIONS_ENUM.DELETE:o=await vh.deleteRecord(i);break;default:en.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){en.info("Invalid operation in transaction"),en.error(o)}}a(k_e,"catchup");async function Os(e){L_e(e);let t,r;try{r=await eI.addJob(e),t=r.createdJob,en.info("addJob result",r);let n=new m1.RunnerMessage(t,e);return{message:await m1.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw en.error(s),Uh(n,s)}}a(Os,"executeJob");function F_e(){let e=new Map;return e.set(W.OPERATIONS_ENUM.INSERT,new ee(pd.insert)),e.set(W.OPERATIONS_ENUM.UPDATE,new ee(pd.update)),e.set(W.OPERATIONS_ENUM.UPSERT,new ee(pd.upsert)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new ee(IS.searchByConditions)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_HASH,new ee(y1)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_ID,new ee(y1)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_VALUE,new ee(U_e)),e.set(W.OPERATIONS_ENUM.SEARCH,new ee(x_e)),e.set(W.OPERATIONS_ENUM.SQL,new ee(B_e)),e.set(W.OPERATIONS_ENUM.CSV_DATA_LOAD,new ee(Os,bS.csvDataLoad)),e.set(W.OPERATIONS_ENUM.CSV_FILE_LOAD,new ee(Os,bS.csvFileLoad)),e.set(W.OPERATIONS_ENUM.CSV_URL_LOAD,new ee(Os,bS.csvURLLoad)),e.set(W.OPERATIONS_ENUM.IMPORT_FROM_S3,new ee(Os,bS.importFromS3)),e.set(W.OPERATIONS_ENUM.CREATE_SCHEMA,new ee(Io.createSchema)),e.set(W.OPERATIONS_ENUM.CREATE_DATABASE,new ee(Io.createSchema)),e.set(W.OPERATIONS_ENUM.CREATE_TABLE,new ee(Io.createTable)),e.set(W.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new ee(Io.createAttribute)),e.set(W.OPERATIONS_ENUM.DROP_SCHEMA,new ee(Io.dropSchema)),e.set(W.OPERATIONS_ENUM.DROP_DATABASE,new ee(Io.dropSchema)),e.set(W.OPERATIONS_ENUM.DROP_TABLE,new ee(Io.dropTable)),e.set(W.OPERATIONS_ENUM.DROP_ATTRIBUTE,new ee(Io.dropAttribute)),e.set(W.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new ee(OS.describeSchema)),e.set(W.OPERATIONS_ENUM.DESCRIBE_DATABASE,new ee(OS.describeSchema)),e.set(W.OPERATIONS_ENUM.DESCRIBE_TABLE,new ee(OS.describeTable)),e.set(W.OPERATIONS_ENUM.DESCRIBE_ALL,new ee(OS.describeAll)),e.set(W.OPERATIONS_ENUM.DELETE,new ee(vh.deleteRecord)),e.set(W.OPERATIONS_ENUM.ADD_USER,new ee(Mh.addUser)),e.set(W.OPERATIONS_ENUM.ALTER_USER,new ee(Mh.alterUser)),e.set(W.OPERATIONS_ENUM.DROP_USER,new ee(Mh.dropUser)),e.set(W.OPERATIONS_ENUM.LIST_USERS,new ee(Mh.listUsersExternal)),e.set(W.OPERATIONS_ENUM.LIST_ROLES,new ee(NS.listRoles)),e.set(W.OPERATIONS_ENUM.ADD_ROLE,new ee(NS.addRole)),e.set(W.OPERATIONS_ENUM.ALTER_ROLE,new ee(NS.alterRole)),e.set(W.OPERATIONS_ENUM.DROP_ROLE,new ee(NS.dropRole)),e.set(W.OPERATIONS_ENUM.USER_INFO,new ee(Mh.userInfo)),e.set(W.OPERATIONS_ENUM.READ_LOG,new ee(T_e)),e.set(W.OPERATIONS_ENUM.ADD_NODE,new ee(A_e)),e.set(W.OPERATIONS_ENUM.UPDATE_NODE,new ee(f1)),e.set(W.OPERATIONS_ENUM.SET_NODE_REPLICATION,new ee(f1)),e.set(W.OPERATIONS_ENUM.REMOVE_NODE,new ee(R_e)),e.set(W.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new ee(y_e)),e.set(W.OPERATIONS_ENUM.PURGE_STREAM,new ee(b_e)),e.set(W.OPERATIONS_ENUM.SET_CONFIGURATION,new ee(S1.setConfiguration)),e.set(W.OPERATIONS_ENUM.CLUSTER_STATUS,new ee(O_e.clusterStatus)),e.set(W.OPERATIONS_ENUM.CLUSTER_NETWORK,new ee(N_e)),e.set(W.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new ee(Jw.setRoutes)),e.set(W.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new ee(Jw.getRoutes)),e.set(W.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new ee(Jw.deleteRoutes)),e.set(W.OPERATIONS_ENUM.EXPORT_TO_S3,new ee(Os,_1.export_to_s3)),e.set(W.OPERATIONS_ENUM.CREATE_CSR,new ee(hd.createCsr)),e.set(W.OPERATIONS_ENUM.SIGN_CERTIFICATE,new ee(hd.signCertificate)),e.set(W.OPERATIONS_ENUM.LIST_CERTIFICATES,new ee(hd.listCertificates)),e.set(W.OPERATIONS_ENUM.ADD_CERTIFICATES,new ee(hd.addCertificate)),e.set(W.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new ee(hd.removeCertificate)),e.set(W.OPERATIONS_ENUM.GET_KEY,new ee(hd.getKey)),e.set(W.OPERATIONS_ENUM.ADD_NODE_BACK,new ee(R1.addNodeBack)),e.set(W.OPERATIONS_ENUM.REMOVE_NODE_BACK,new ee(R1.removeNodeBack)),e.set(W.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new ee(Os,vh.deleteFilesBefore)),e.set(W.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new ee(Os,vh.deleteFilesBefore)),e.set(W.OPERATIONS_ENUM.EXPORT_LOCAL,new ee(Os,_1.export_local)),e.set(W.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new ee(eI.handleGetJobsByStartDate)),e.set(W.OPERATIONS_ENUM.GET_JOB,new ee(eI.handleGetJob)),e.set(W.OPERATIONS_ENUM.GET_FINGERPRINT,new ee(Xw.getFingerprint)),e.set(W.OPERATIONS_ENUM.SET_LICENSE,new ee(Xw.setLicense)),e.set(W.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new ee(Xw.getRegistrationInfo)),e.set(W.OPERATIONS_ENUM.RESTART,new ee(p1.restart)),e.set(W.OPERATIONS_ENUM.RESTART_SERVICE,new ee(Os,p1.restartService)),e.set(W.OPERATIONS_ENUM.CATCHUP,new ee(k_e)),e.set(W.OPERATIONS_ENUM.SYSTEM_INFORMATION,new ee(C_e.systemInformation)),e.set(W.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new ee(Os,vh.deleteAuditLogsBefore)),e.set(W.OPERATIONS_ENUM.READ_AUDIT_LOG,new ee(S_e)),e.set(W.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new ee(E1.createTokens)),e.set(W.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new ee(E1.refreshOperationToken)),e.set(W.OPERATIONS_ENUM.LOGIN,new ee(g1.login)),e.set(W.OPERATIONS_ENUM.LOGOUT,new ee(g1.logout)),e.set(W.OPERATIONS_ENUM.GET_CONFIGURATION,new ee(S1.getConfiguration)),e.set(W.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new ee(Lt.customFunctionsStatus)),e.set(W.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new ee(Lt.getCustomFunctions)),e.set(W.OPERATIONS_ENUM.GET_COMPONENT_FILE,new ee(Lt.getComponentFile)),e.set(W.OPERATIONS_ENUM.GET_COMPONENTS,new ee(Lt.getComponents)),e.set(W.OPERATIONS_ENUM.SET_COMPONENT_FILE,new ee(Lt.setComponentFile)),e.set(W.OPERATIONS_ENUM.DROP_COMPONENT,new ee(Lt.dropComponent)),e.set(W.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new ee(Lt.getCustomFunction)),e.set(W.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new ee(Lt.setCustomFunction)),e.set(W.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new ee(Lt.dropCustomFunction)),e.set(W.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new ee(Lt.addComponent)),e.set(W.OPERATIONS_ENUM.ADD_COMPONENT,new ee(Lt.addComponent)),e.set(W.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new ee(Lt.dropCustomFunctionProject)),e.set(W.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new ee(Lt.packageComponent)),e.set(W.OPERATIONS_ENUM.PACKAGE_COMPONENT,new ee(Lt.packageComponent)),e.set(W.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new ee(Lt.deployComponent)),e.set(W.OPERATIONS_ENUM.DEPLOY_COMPONENT,new ee(Lt.deployComponent)),e.set(W.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new ee(T1.readTransactionLog)),e.set(W.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new ee(Os,T1.deleteTransactionLogsBefore)),e.set(W.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new ee(A1.installModules)),e.set(W.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new ee(A1.auditModules)),e.set(W.OPERATIONS_ENUM.GET_BACKUP,new ee(Io.getBackup)),e.set(W.OPERATIONS_ENUM.ADD_SSH_KEY,new ee(Lt.addSSHKey)),e.set(W.OPERATIONS_ENUM.UPDATE_SSH_KEY,new ee(Lt.updateSSHKey)),e.set(W.OPERATIONS_ENUM.DELETE_SSH_KEY,new ee(Lt.deleteSSHKey)),e.set(W.OPERATIONS_ENUM.LIST_SSH_KEYS,new ee(Lt.listSSHKeys)),e.set(W.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new ee(Lt.setSSHKnownHosts)),e.set(W.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new ee(Lt.getSSHKnownHosts)),e}a(F_e,"initializeOperationFunctionMap")});var DS=P((GDe,D1)=>{"use strict";var CS=(G(),D($)),G_e=oe(),Bh=X(),{handleHDBError:nI,hdb_errors:PS}=he(),{isMainThread:q_e}=require("worker_threads"),{Readable:$_e}=require("stream"),C1=require("os"),V_e=require("util"),K_e=Gb(),Y_e=V_e.promisify(K_e.authorize),P1=lw(),{createGzip:W_e,constants:z_e}=require("zlib"),j_e=[CS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,CS.OPERATIONS_ENUM.LOGIN,CS.OPERATIONS_ENUM.LOGOUT];function Q_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${C1.EOL}Stack: ${e.stack} ${C1.EOL}Terminating ${q_e?"HDB":"thread"}.`;console.error(t),Bh.fatal(t),process.exit(1)}a(Q_e,"handleServerUncaughtException");function J_e(e,t,r){if(Bh[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:PS.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(J_e,"serverErrorHandler");function X_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=nI(new Error,"Invalid JSON.",PS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(G_e.isEmpty(e.body.operation)){let n=nI(new Error,"Request body must include an 'operation' property.",PS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(X_e,"reqBodyValidationHandler");function Z_e(e,t,r){let n;!j_e.includes(e.body.operation)||e.body.operation===CS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?Y_e(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Bh.warn(i),Bh.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(nI(i,o,PS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Z_e,"authHandler");async function ehe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=P1.chooseOperation(e.body);let s=await P1.processLocalTransaction(e,n);if(s instanceof $_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(W_e({level:z_e.Z_BEST_SPEED})))}return s}catch(s){throw Bh.error(s),s}}a(ehe,"handlePostRequest");D1.exports={authHandler:Z_e,handlePostRequest:ehe,handleServerUncaughtException:Q_e,serverErrorHandler:J_e,reqBodyValidationHandler:X_e}});var U1=P(($De,v1)=>{"use strict";var the=require("fastify-plugin"),{handlePostRequest:L1,authHandler:rhe,reqBodyValidationHandler:nhe}=DS();async function she(e){e.decorate("hdbCore",{preValidation:[nhe,rhe],request:a(t=>M1(L1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>M1(L1(t,r,!0)),"requestWithoutAuthentication")})}a(she,"hdbCore");async function M1(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(M1,"convertAsyncIterators");v1.exports=the(she)});var B1=P((YDe,x1)=>{"use strict";var KDe=require("fs"),LS=ce();LS.initSync();var{CONFIG_PARAMS:sI}=(G(),D($)),ihe=1024*1024*1024;function ohe(e){let t=LS.get(sI.HTTP_TIMEOUT),r=LS.get(sI.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:ihe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:LS.get(sI.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(ohe,"getServerOptions");x1.exports=ohe});var F1=P((zDe,k1)=>{"use strict";var iI=ce();iI.initSync();var{CONFIG_PARAMS:H1}=(G(),D($));function ahe(){let e=iI.get(H1.HTTP_CORSACCESSLIST),t=iI.get(H1.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(ahe,"getCORSOptions");k1.exports=ahe});var $1=P((QDe,q1)=>{"use strict";var G1=ce();G1.initSync();var che=(G(),D($));function lhe(){return G1.get(che.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(lhe,"getHeaderTimeoutConfig");q1.exports=lhe});var aI={};Be(aI,{customFunctionsServer:()=>fhe,ready:()=>nK,start:()=>dhe});function dhe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Co||(Co=rK(t),Ke.http((await Co).server));let o=await Co,c=(0,oI.dirname)(s),l=(0,oI.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!V1.has(c)){V1.add(c);try{o.register(hhe(c,l))}catch(u){if(u.message==="Root plugin has already booted")pt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:nK}}async function fhe(){try{pt.info("In Custom Functions Fastify server"+process.cwd()),pt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),pt.debug(`Custom Functions server process ${process.pid} starting up.`),await _he();let e=Q1.get(B.HTTP_SECUREPORT)>0,t;try{t=Co=await rK(e)}catch(r){throw pt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw pt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){pt.error(`Custom Functions ${process.pid} Error: ${e}`),pt.error(e),process.exit(1)}}async function _he(){try{pt.info("Custom Functions starting configuration."),await J1.setUsersWithRolesCache(),pt.info("Custom Functions completed configuration.")}catch(e){pt.error(e)}}function hhe(e,t){return async function(r){try{pt.info("Custom Functions starting buildRoutes"),pt.trace("Loading fastify routes folder "+e),(0,K1.existsSync)(e)&&r.register(j1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:pt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?pt.error(s.message):s&&pt.error(s),o()})}catch(n){pt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function rK(e){pt.info("Custom Functions starting buildServer.");let t=(0,X1.default)(e),r=(0,Y1.default)(t);r.server.headersTimeout=(0,eK.default)(),r.setErrorHandler(tK.serverErrorHandler);let n=(0,Z1.default)();return n&&r.register(W1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(z1.default),await r.register(uhe),await r.after(),wf(r),pt.info("Custom Functions completed buildServer."),r}function nK(){if(Co)return Co.then?Co.then(e=>e.ready()):Co.ready()}var oI,K1,Y1,W1,z1,j1,Q1,pt,uhe,J1,X1,Z1,eK,tK,Co,V1,sK=be(()=>{oI=require("path"),K1=require("fs"),Y1=M(require("fastify")),W1=M(require("@fastify/cors")),z1=M(xb()),j1=M(require("@fastify/autoload")),Q1=M(ce());G();pt=M(X()),uhe=M(U1()),J1=M(Gn()),X1=M(B1()),Z1=M(F1()),eK=M($1()),tK=M(DS());eo();Dr();V1=new Set;a(dhe,"start");a(fhe,"customFunctionsServer");a(_he,"setUp");a(hhe,"buildRouteFolder");a(rK,"buildServer");a(nK,"ready")});var cI={};Be(cI,{start:()=>phe});function phe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,lK.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){oK||(oK=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=iK.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,aK.default)(s,(0,cK.realpathSync)(o))}}return i(s)},{runFirst:!0})),iK.set(r,n)}}}var aK,cK,lK,iK,oK,uK=be(()=>{aK=M(require("send")),cK=require("fs"),lK=M(require("serve-static")),iK=new Map;a(phe,"start")});var lI={};Be(lI,{start:()=>mhe});function mhe({override:e}){return{handleFile:a((t,r,n)=>{MS.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,dK.parse)(t))){if(process.env[s]!==void 0)if(MS.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)MS.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var dK,MS,fK=be(()=>{dK=require("dotenv"),MS=M(X());a(mhe,"start")});var dI=P((sLe,_K)=>{"use strict";var Hh=ce();Hh.initSync();var md=require("fs-extra"),uI=require("path"),Ed=(G(),D($)),Ehe=require("crypto"),ghe=require("uuid").v4;_K.exports=She;function She(){if(Hh.getHdbBasePath()!==void 0){let e=uI.join(Hh.getHdbBasePath(),Ed.LICENSE_KEY_DIR_NAME,Ed.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=uI.join(Hh.getHdbBasePath(),Ed.LICENSE_KEY_DIR_NAME,Ed.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=uI.join(Hh.getHdbBasePath(),Ed.LICENSE_KEY_DIR_NAME,Ed.JWT_ENUM.JWT_PASSPHRASE_NAME);try{md.accessSync(r),md.accessSync(e),md.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=ghe(),i=Ehe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});md.writeFileSync(r,s),md.writeFileSync(e,i.privateKey),md.writeFileSync(t,i.publicKey)}else throw n}}}a(She,"checkJWTTokenExist")});var pK=P((oLe,hK)=>{"use strict";var fI=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};hK.exports={HdbInfoInsertObject:fI}});var gK=P((cLe,EK)=>{"use strict";var mK=(G(),D($)),_I=class{static{a(this,"UpgradeObject")}constructor(t,r){this[mK.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[mK.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};EK.exports={UpgradeObject:_I}});var vS=P((uLe,TK)=>{"use strict";var Ns=require("prompt"),gd=require("chalk"),SK=X(),oi=require("os"),hI=lc(),pI=["yes","y"];async function The(e){let t=`${oi.EOL}`+gd.bold.green("Your current HarperDB version requires that we complete an update process.")+`${oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}${oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${oi.EOL}`;Ns.override=hI(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:gd.magenta(`${oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return SK.error("There was an error when prompting user about an upgrade."),SK.error(s),!1}return pI.includes(n.CONFIRM_UPGRADE)}a(The,"forceUpdatePrompt");async function Ahe(e){let t=`${oi.EOL}`+gd.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}`);Ns.override=hI(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:gd.magenta(`${oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return pI.includes(n.CONFIRM_DOWNGRADE)}a(Ahe,"forceDowngradePrompt");async function Rhe(){let e=`${oi.EOL}`+gd.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=hI(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:gd.magenta(`${oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return pI.includes(r.GENERATE_CERTS)}a(Rhe,"upgradeCertsPrompt");TK.exports={forceUpdatePrompt:The,forceDowngradePrompt:Ahe,upgradeCertsPrompt:Rhe}});var EI=P((fLe,AK)=>{"use strict";var mI=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};AK.exports=mI});var yK=P((gLe,RK)=>{"use strict";var yhe=oe(),bhe=wt(),hLe=X(),pLe=require("path"),mLe=require("fs"),ELe=(G(),D($));RK.exports={getOldPropsValue:Ohe};function Ohe(e,t,r=!1){let n=t.getRaw(e);return yhe.isNotEmptyAndHasValue(n)?n:r?bhe.getDefaultConfig(e):""}a(Ohe,"getOldPropsValue")});var wK=P((TLe,NK)=>{"use strict";var xa=require("path"),Ba=require("fs-extra"),Nhe=require("properties-reader"),whe=EI(),dr=X(),{getOldPropsValue:mt}=yK(),{HDB_SETTINGS_NAMES:ge,CONFIG_PARAMS:Ol}=(G(),D($)),Nl=wt(),US=ce(),bK=oe(),Bi=(G(),D($)),gI=new whe("3.1.0"),OK=[];function Ihe(){let e=Nhe(US.get(ge.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),dr.info(t);let r=` ;Settings for the HarperDB process.
|
|
39
39
|
|
|
40
40
|
;The directory selected during install where the database files reside.
|
|
41
|
-
${
|
|
41
|
+
${ge.HDB_ROOT_KEY} = ${mt(ge.HDB_ROOT_KEY,e)}
|
|
42
42
|
;The port the HarperDB REST interface will listen on.
|
|
43
|
-
${
|
|
43
|
+
${ge.SERVER_PORT_KEY} = ${mt(ge.SERVER_PORT_KEY,e)}
|
|
44
44
|
;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
|
|
45
|
-
${
|
|
45
|
+
${ge.HTTP_SECURE_ENABLED_KEY} = ${mt(ge.HTTP_SECURE_ENABLED_KEY,e)}
|
|
46
46
|
;The path to the SSL certificate used when running with HTTPS enabled.
|
|
47
|
-
${
|
|
47
|
+
${ge.CERT_KEY} = ${mt(ge.CERT_KEY,e)}
|
|
48
48
|
;The path to the SSL private key used when running with HTTPS enabled.
|
|
49
|
-
${
|
|
49
|
+
${ge.PRIVATE_KEY_KEY} = ${mt(ge.PRIVATE_KEY_KEY,e)}
|
|
50
50
|
;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
|
|
51
|
-
${
|
|
51
|
+
${ge.CORS_ENABLED_KEY} = ${mt(ge.CORS_ENABLED_KEY,e)}
|
|
52
52
|
;Allows for setting allowable domains with CORS. Comma separated list.
|
|
53
|
-
${
|
|
53
|
+
${ge.CORS_WHITELIST_KEY} = ${mt(ge.CORS_WHITELIST_KEY,e)}
|
|
54
54
|
;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
|
|
55
|
-
${
|
|
55
|
+
${ge.SERVER_TIMEOUT_KEY} = ${mt(ge.SERVER_TIMEOUT_KEY,e,!0)}
|
|
56
56
|
;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
|
|
57
|
-
${
|
|
57
|
+
${ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${mt(ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
|
|
58
58
|
;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
|
|
59
|
-
${
|
|
59
|
+
${ge.SERVER_HEADERS_TIMEOUT_KEY} = ${mt(ge.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
|
|
60
60
|
;Define whether to log to file or not.
|
|
61
|
-
${
|
|
61
|
+
${ge.LOG_TO_FILE} = ${Nl.getDefaultConfig(Ol.LOGGING_FILE)}
|
|
62
62
|
;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
|
|
63
|
-
${
|
|
63
|
+
${ge.LOG_TO_STDSTREAMS} = ${Nl.getDefaultConfig(Ol.LOGGING_STDSTREAMS)}
|
|
64
64
|
;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
|
|
65
|
-
${
|
|
65
|
+
${ge.LOG_LEVEL_KEY} = ${mt(ge.LOG_LEVEL_KEY,e)}
|
|
66
66
|
;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
|
|
67
|
-
${
|
|
67
|
+
${ge.LOG_PATH_KEY} = ${mt(ge.LOG_PATH_KEY,e)}
|
|
68
68
|
;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
|
|
69
|
-
${
|
|
69
|
+
${ge.LOG_DAILY_ROTATE_KEY} = ${mt(ge.LOG_DAILY_ROTATE_KEY,e)}
|
|
70
70
|
;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
|
|
71
71
|
;daily log files which may consume a large amount of storage depending on your log settings.
|
|
72
|
-
${
|
|
72
|
+
${ge.LOG_MAX_DAILY_FILES_KEY} = ${mt(ge.LOG_MAX_DAILY_FILES_KEY,e)}
|
|
73
73
|
;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
|
|
74
|
-
${
|
|
74
|
+
${ge.PROPS_ENV_KEY} = ${mt(ge.PROPS_ENV_KEY,e)}
|
|
75
75
|
;This allows self signed certificates to be used in clustering. This is a security risk
|
|
76
76
|
;as clustering will not validate the cert, so should only be used internally.
|
|
77
77
|
;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
|
|
78
|
-
${
|
|
78
|
+
${ge.ALLOW_SELF_SIGNED_SSL_CERTS} = ${mt(ge.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
|
|
79
79
|
;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
|
|
80
|
-
${
|
|
80
|
+
${ge.MAX_HDB_PROCESSES} = ${mt(ge.MAX_HDB_PROCESSES,e)}
|
|
81
81
|
;Set to true to enable clustering. Requires a valid enterprise license.
|
|
82
|
-
${
|
|
82
|
+
${ge.CLUSTERING_ENABLED_KEY} = ${mt(ge.CLUSTERING_ENABLED_KEY,e,!0)}
|
|
83
83
|
;The port that will be used for HarperDB clustering.
|
|
84
|
-
${
|
|
84
|
+
${ge.CLUSTERING_PORT_KEY} = ${mt(ge.CLUSTERING_PORT_KEY,e)}
|
|
85
85
|
;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
|
|
86
|
-
${
|
|
86
|
+
${ge.CLUSTERING_NODE_NAME_KEY} = ${mt(ge.CLUSTERING_NODE_NAME_KEY,e)}
|
|
87
87
|
;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
|
|
88
|
-
${
|
|
88
|
+
${ge.CLUSTERING_USER_KEY} = ${mt(ge.CLUSTERING_USER_KEY,e)}
|
|
89
89
|
;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
|
|
90
|
-
${
|
|
90
|
+
${ge.DISABLE_TRANSACTION_LOG_KEY} = ${mt(ge.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
|
|
91
91
|
;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
92
|
-
${
|
|
92
|
+
${ge.OPERATION_TOKEN_TIMEOUT_KEY} = ${mt(ge.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
93
93
|
;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
94
|
-
${
|
|
94
|
+
${ge.REFRESH_TOKEN_TIMEOUT_KEY} = ${mt(ge.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
95
95
|
;The port the IPC server will run on.
|
|
96
|
-
${
|
|
96
|
+
${ge.IPC_SERVER_PORT} = ${Nl.getDefaultConfig(Ol.IPC_NETWORK_PORT)}
|
|
97
97
|
;Run HDB in the foreground.
|
|
98
|
-
${
|
|
98
|
+
${ge.RUN_IN_FOREGROUND} = ${Nl.getDefaultConfig(Ol.OPERATIONSAPI_FOREGROUND)}
|
|
99
99
|
;Set to true to enable custom API endpoints. Requires a valid enterprise license.
|
|
100
|
-
${
|
|
100
|
+
${ge.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Nl.getDefaultConfig(Ol.CUSTOMFUNCTIONS_ENABLED)}
|
|
101
101
|
;The port used to access the custom functions server.
|
|
102
|
-
${
|
|
102
|
+
${ge.CUSTOM_FUNCTIONS_PORT_KEY} = ${Nl.getDefaultConfig(Ol.HTTP_PORT)}
|
|
103
103
|
;The path to the folder containing HarperDB custom function files.
|
|
104
|
-
${
|
|
104
|
+
${ge.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${xa.join(mt(ge.HDB_ROOT_KEY,e),"custom_functions")}
|
|
105
105
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
106
|
-
${
|
|
107
|
-
`,n=
|
|
106
|
+
${ge.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Nl.getDefaultConfig(Ol.HTTP_THREADS)}
|
|
107
|
+
`,n=US.get("settings_path"),s=xa.dirname(n),i=xa.join(s,"3_1_0_upgrade_settings.bak");try{dr.info(`Backing up old settings file to: ${i}`),Ba.copySync(n,i)}catch(c){throw dr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{dr.info("New settings file values for 3.1.0 upgrade:",r),dr.info(`Creating new/upgraded settings file at '${n}'`),Ba.writeFileSync(n,r),dr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),dr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),dr.error(c),Ba.copySync(i,n),c}US.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),dr.info(o),o}a(Ihe,"updateSettingsFile_3_1_0");function Che(){let e=xa.join(bK.getHomeDir(),Bi.HDB_HOME_DIR_NAME,Bi.LICENSE_KEY_DIR_NAME,Bi.LICENSE_FILE_NAME),t=xa.join(bK.getHomeDir(),Bi.HDB_HOME_DIR_NAME,Bi.LICENSE_KEY_DIR_NAME,Bi.REG_KEY_FILE_NAME),r=xa.join(US.getHdbBasePath(),Bi.LICENSE_KEY_DIR_NAME,Bi.LICENSE_FILE_NAME),n=xa.join(r,Bi.LICENSE_FILE_NAME),s=xa.join(r,Bi.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),dr.info(i);let o="Creating .license directory";console.log(o),dr.info(o),Ba.mkdirpSync(r);try{Ba.accessSync(e);try{let c="Moving licence file";console.log(c),dr.info(c),Ba.moveSync(e,n);let l="License file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving license file failed";console.error(l),dr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),dr.warn(l)}try{Ba.accessSync(t);try{let c="Moving registration file";console.log(c),dr.info(c),Ba.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving registration file failed";console.error(l),dr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),dr.warn(l)}}a(Che,"moveLicenseFiles");gI.sync_functions.push(Ihe);gI.sync_functions.push(Che);OK.push(gI);NK.exports=OK});var LK=P((RLe,DK)=>{"use strict";var Xn=ht(),{insertRecords:Phe}=Cc(),Dhe=ln(),Ha=Ft(),Lhe=oe(),Po=X(),Mhe=oe(),Hi=require("fs-extra"),Do=require("path"),vhe=require("cli-progress"),kh=require("assert"),Uhe=require("pino"),xhe=ce();DK.exports=Bhe;var xS,IK,BS,SI,tn,Fh=!1;async function Bhe(e=!0){return xS=xhe.getHdbBasePath(),IK=Do.join(xS,"schema"),BS=Do.join(xS,"4_0_0_upgrade_tmp"),SI=Do.join(xS,"transactions"),console.info("Reindexing upgrade started for schemas"),Po.notify("Reindexing upgrade started for schemas"),await CK(IK,!1,e),await Hi.pathExists(SI)&&(console.info(`
|
|
108
108
|
|
|
109
|
-
Reindexing upgrade started for transaction logs`),
|
|
110
|
-
install_user = ${l}`;try{Ha.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{gI.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{Ha.removeSync(r),console.log(f),Nl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(jhe,"updateSettingsFile_4_0_0");Vh.async_functions.push(jhe);Vh.async_functions.push(zhe);Vh.async_functions.push(Yhe);Vh.async_functions.push(Qhe);LK.push(Vh);MK.exports=LK});var SI=C((TLe,HK)=>{"use strict";var wl=oe(),Jhe=(k(),P($)),UK=X(),{DATA_VERSION:Xhe,UPGRADE_VERSION:Zhe}=Jhe.UPGRADE_JSON_FIELD_NAMES_ENUM,xK=bK(),kS=vK(),Il=new Map;xK&&xK.forEach(e=>{Il.set(e.version,e)});kS&&kS.forEach(e=>{Il.set(e.version,e)});kS&&kS.forEach(e=>{Il.set(e.version,e)});function eme(){return[...Il.keys()].sort(wl.compareVersions)}a(eme,"getSortedVersions");function BK(e){let t=e[Xhe],r=e[Zhe];return wl.isEmptyOrZeroLength(t)||wl.isEmptyOrZeroLength(r)?(UK.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),UK.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."),[]):[...Il.keys()].sort(wl.compareVersions).filter(function(n){return wl.compareVersions(n,t)>0&&wl.compareVersions(n,r)<=0})}a(BK,"getVersionsForUpgrade");function tme(e){return BK(e).length>0}a(tme,"hasUpgradesRequired");function rme(e){return wl.isEmptyOrZeroLength(e)?null:Il.has(e)?Il.get(e):null}a(rme,"getDirectiveByVersion");HK.exports={getSortedVersions:eme,getDirectiveByVersion:rme,getVersionsForUpgrade:BK,hasUpgradesRequired:tme}});var GS=C((RLe,$K)=>{"use strict";var nme=require("util"),TI=require("chalk"),sme=require("os"),FK=gn(),ime=Vr(),es=(k(),P($)),GK=fK(),RI=ZR(),{UpgradeObject:kK}=mK(),{forceDowngradePrompt:ome}=MS(),{packageJson:ame}=pt(),FS=X(),Td=oe(),yI=qs(),cme=(Ue(),P(ot)),lme=SI(),ume=nme.promisify(yI.setSchemaDataToGlobal),dme=ime.searchByValue,fme="info_id",_me="2.9.9",hme="3.0.0";async function mme(e){let t=new GK.HdbInfoInsertObject(1,e,e),r=new RI.InsertObject(es.OPERATIONS_ENUM.INSERT,es.SYSTEM_SCHEMA_NAME,es.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,es.INFO_TABLE_HASH_ATTRIBUTE,[t]);return yI.setSchemaDataToGlobal(),FK.insert(r)}a(mme,"insertHdbInstallInfo");async function AI(e){let t,r=await qK(),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 GK.HdbInfoInsertObject(i,e,e);let o=new RI.InsertObject(es.OPERATIONS_ENUM.INSERT,es.SYSTEM_SCHEMA_NAME,es.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,es.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await ume(),FK.insert(o)}a(AI,"insertHdbUpgradeInfo");async function qK(){let e=new RI.NoSQLSeachObject(es.SYSTEM_SCHEMA_NAME,es.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,fme,es.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await dme(e))}catch(r){console.error(r)}return t}a(qK,"getAllHdbInfoRecords");async function pme(){let e=await qK();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(pme,"getLatestHdbInfoRecord");async function Eme(){FS.info("Checking if HDB software has been updated");try{let e=ame.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await pme(),r;if(Td.isEmpty(t))r=_me;else if(r=t.data_version_num,Td.compareVersions(r.toString(),e.toString())>0){if(!Td.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(TI.yellow(`This instance's data was last run on version ${r}`)),console.error(TI.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.${sme.EOL}${es.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Td.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(TI.yellow(`This instance's data was last run on version ${r}`)),await ome(new kK(r,e))?await AI(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(yI.setSchemaDataToGlobal(),gme(r),e.toString()===r.toString())return;let n=new kK(r,e);if(lme.hasUpgradesRequired(n))return n;Td.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await AI(n.upgrade_version),FS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw FS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),FS.fatal(e),e}}a(Eme,"getVersionUpdateInfo");function gme(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 ${es.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in cme.databases.system))throw console.log(t),new Error(t);if(!Td.isEmpty(e)&&e<hme)throw console.log(t),new Error(t)}a(gme,"checkIfInstallIsSupported");$K.exports={insertHdbInstallInfo:mme,insertHdbUpgradeInfo:AI,getVersionUpdateInfo:Eme}});var WK=C((bLe,YK)=>{"use strict";var qS=require("joi"),{boolean:Sme,string:bI,number:Tme}=qS.types(),VK=require("fs-extra"),Kh=(k(),P($)),KK=require("path"),Ame=rt();YK.exports=Rme;function Rme(e){let t=bI.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=qS.object({[Kh.INSTALL_PROMPTS.ROOTPATH]:qS.custom(yme),[Kh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:qS.alternatives([Tme.min(0),bI]).allow("null",null),[Kh.INSTALL_PROMPTS.TC_AGREEMENT]:bI.valid("yes","YES","Yes"),[Kh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Kh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Sme});return Ame.validateBySchema(e,r)}a(Rme,"installValidator");function yme(e,t){if(VK.existsSync(KK.join(e,"system/hdb_user/data.mdb"))||VK.existsSync(KK.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(yme,"validateRootAvailable")});var QK=C((NLe,zK)=>{"use strict";var{mkdirpSync:bme,copySync:Ome}=require("fs-extra"),ka=require("path"),Yh=(k(),P($)),{PACKAGE_ROOT:Nme}=pt(),NI=X(),wme=Gn(),OI=ao(),Ime=Et();zK.exports=Cme;async function Cme(e){NI.trace("Mounting HarperDB"),Cl(e),Cl(ka.join(e,"backup")),Cl(ka.join(e,"keys")),Cl(ka.join(e,"keys",Yh.LICENSE_FILE_NAME)),Cl(ka.join(e,"log")),Cl(ka.join(e,"database")),Cl(ka.join(e,"components")),Ome(ka.resolve(Nme,"./utility/install/README.md"),ka.join(e,"README.md")),await Pme()}a(Cme,"mountHdb");async function Pme(){let e=c_(),t=Object.keys(OI);for(let r=0;r<t.length;r++){let n=t[r],s=OI[n].hash_attribute;try{Ime.initSystemSchemaPaths(Yh.SYSTEM_SCHEMA_NAME,n);let i=new e(Yh.SYSTEM_SCHEMA_NAME,n,s);i.attributes=OI[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await wme.createTable(n,i)}catch(i){throw NI.error(`issue creating environment for ${Yh.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Pme,"createLMDBTables");function Cl(e){bme(e,{mode:Yh.HDB_FILE_PERMISSIONS}),NI.info(`Directory ${e} created`)}a(Cl,"makeDirectory")});var lY=C((PLe,cY)=>{"use strict";var II=require("os"),eY=require("inquirer"),Is=require("fs-extra"),Dme=require("properties-reader"),Dl=require("chalk"),Fi=require("path"),Lme=require("human-readable-ids").hri,Mme=require("ora"),vme=require("yaml"),dr=X(),Fa=ce(),Wh=oe(),VS=cc(),tY=GS(),{packageJson:rY}=pt(),_e=(k(),P($)),{CONFIG_PARAM_MAP:ILe,CONFIG_PARAMS:Dt}=_e,Ume=WK(),xme=QK(),CI=Nt(),Bme=qn(),Hme=h_(),kme=lI(),Fme=qs(),Gme=require("util").promisify,qme=Gme(Fme.setSchemaDataToGlobal),jK=Xs(),Pl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),kr=a(e=>Dl.magenta.bold(e),"HDB_PROMPT_MSG"),$me="https://harperdb.io/legal/end-user-license-agreement",Ga=II.EOL,Mo="",Vme="yes",JK="Starting HarperDB install...",XK="HarperDB installation was successful.",ZK="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Kme="An out of date version of HarperDB is already installed.",wI="It appears that HarperDB is already installed. Exiting install...",Yme="Aborting install",CLe=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])$/),Wme=new RegExp(/^[^\s.,*>]+$/),zme=II.homedir(),Qme=Fi.join(zme,_e.HDB_ROOT_DIR_NAME),jme="HDB_ADMIN",Jme="CLUSTER_USER",Xme="dev",Zme="localhost",$S={[Dt.HTTP_CORS]:!0,[Dt.HTTP_CORSACCESSLIST]:["*"],[Dt.HTTP_PORT]:9926,[Dt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Dt.THREADS_COUNT]:1,[Dt.THREADS_DEBUG]:!0,[Dt.LOGGING_STDSTREAMS]:!0,[Dt.LOGGING_LEVEL]:"info",[Dt.OPERATIONSAPI_NETWORK_PORT]:9925,[Dt.LOCALSTUDIO_ENABLED]:!0},Hr={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:"},qa=VS([_e.INSTALL_PROMPTS.HDB_CONFIG]),ki,nY=!1,PI=!1,sY=!1;cY.exports={install:iY,updateConfigEnv:upe,setIgnoreExisting:dpe};iY.createSuperUser=aY;async function iY(){console.log(kr(Ga+JK+Ga)),dr.notify(JK);let e;qa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&(e=epe());let t=rpe();Object.assign(t,e),t[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&t[_e.INSTALL_PROMPTS.ROOTPATH]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(sY=!0,t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Ume(t);if(r)throw r.message;await npe(),await spe(t);let n=await tpe(t);ki=n[_e.INSTALL_PROMPTS.ROOTPATH],qa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&Fi.dirname(qa[_e.INSTALL_PROMPTS.HDB_CONFIG])===ki&&(nY=!0),!PI&&!qa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&await Is.pathExists(Fi.join(ki,_e.HDB_CONFIG_FILE))&&(console.error(wI),process.exit());let s=Mme({prefixText:kr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Wh.isEmpty(ki))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Fa.setHdbBasePath(ki),await xme(ki),await ipe(),await ope(n),dr.initLogSettings(!0),await aY(n),await cpe(n),await jK.updateConfigCert(),await jK.generateCertsKeys(),await lpe(),kme(),s.stop(),console.log(kr(Ga+XK+Ga)),dr.notify(XK)}a(iY,"install");function epe(){let e=vme.parseDocument(Is.readFileSync(qa[_e.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=CI.flattenConfig(e.toJSON());return t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(epe,"getConfigFromFile");async function tpe(e){dr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Pl,when:vo(e[_e.INSTALL_PROMPTS.ROOTPATH],Hr.DESTINATION),name:_e.INSTALL_PROMPTS.ROOTPATH,prefix:Mo,default:Qme,validate:a(async s=>ws(s)?ws(s):await Is.pathExists(Fi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:kr(Hr.DESTINATION)},{type:"input",transformer:Pl,when:vo(e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Hr.HDB_USERNAME),name:_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Mo,default:jme,validate:a(s=>ws(s)?ws(s):(t=s,!0),"validate"),message:kr(Hr.HDB_USERNAME)},{type:"password",when:vo(e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Hr.HDB_PASS),name:_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Mo,validate:a(s=>ws(s)?ws(s):!0,"validate"),message:kr(Hr.HDB_PASS)},{type:"input",transformer:Pl,when:vo(e[_e.INSTALL_PROMPTS.DEFAULTS_MODE],Hr.DEFAULTS_MODE),name:_e.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Mo,default:Xme,validate:a(s=>ws(s)?ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:kr(Hr.DEFAULTS_MODE)}];if(sY||r.push({type:"input",name:_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Pl,when:vo(e[_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Hr.REPLICATION_HOSTNAME),prefix:Mo,default:Zme,message:kr(Hr.REPLICATION_HOSTNAME)}),Wh.autoCastBoolean(e[_e.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Pl,when:vo(e[_e.INSTALL_PROMPTS.CLUSTERING_NODENAME],Hr.NODE_NAME),name:_e.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Mo,default:Lme.random(),validate:a(i=>Wme.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:kr(Hr.NODE_NAME)},{type:"input",transformer:Pl,when:vo(e[_e.INSTALL_PROMPTS.CLUSTERING_USER],Hr.CLUSTER_USERNAME),name:_e.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Mo,default:Jme,validate:a(i=>ws(i)?ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:kr(Hr.CLUSTER_USERNAME)},{type:"password",when:vo(e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Hr.CLUSTER_PASS),name:_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Mo,validate:a(i=>ws(i)?ws(i):!0,"validate"),message:kr(Hr.CLUSTER_PASS)}];r.push(...s)}let n=await eY.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(tpe,"installPrompts");function vo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${kr(t)} ${Dl.gray("[hidden]")}`),dr.trace(`${kr(t)} [hidden]`)):(console.log(`${kr(t)} ${e}`),dr.trace(`${kr(t)} ${e}`)),!1):!0}a(vo,"displayCmdEnvVar");function ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ws,"checkForEmptyValue");function rpe(){let e=Object.keys(_e.INSTALL_PROMPTS),t=VS(e),r=VS(Object.keys(_e.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=_e.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(rpe,"checkForPromptOverride");async function npe(){dr.trace("Checking for existing install.");let e=Wh.getPropsFilePath(),t=await Is.pathExists(e),r;if(t){dr.trace(`Install found an existing boot prop file at:${e}`);let n=Dme(e),s=CI.getConfigValue(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Is.pathExists(s)}if(!t&&Wh.noBootFile()&&(r=!0),r&&!PI){if(dr.trace(`Install found existing HDB config at:${e}`),await tY.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${rY.version}. Exiting install...`;console.log(Ga+Dl.magenta.bold(Kme)),console.log(Dl.magenta.bold(s)),dr.error(s)}else console.log(Ga+Dl.magenta.bold(wI)),dr.error(wI);process.exit(0)}}a(npe,"checkForExistingInstall");async function spe(e){dr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${$me}${Ga}and can be viewed by typing or copying and pasting the URL into your web browser.${Ga}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Mo,transformer:Pl,when:vo(e[_e.INSTALL_PROMPTS.TC_AGREEMENT],t),name:_e.INSTALL_PROMPTS.TC_AGREEMENT,message:kr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Dl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await eY.prompt([r]);n[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&n[_e.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Vme&&(console.log(Dl.yellow(ZK)),dr.error(ZK),process.exit(0))}a(spe,"termsAgreement");async function ipe(){let e=Fi.join(ki,_e.HDB_CONFIG_FILE),t;try{t=II.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
111
|
-
install_user = ${t}`,n=Wh.getHomeDir(),s=Fi.join(n,_e.HDB_HOME_DIR_NAME),i=Fi.join(s,_e.LICENSE_KEY_DIR_NAME);try{Is.mkdirpSync(s,{mode:_e.HDB_FILE_PERMISSIONS}),Is.mkdirpSync(i,{mode:_e.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${_e.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Fi.join(s,_e.BOOT_PROPS_FILE_NAME);try{await Is.writeFile(o,r)}catch(c){throw dr.error(`There was an error creating the boot file at path: ${o}`),c}Fa.setProperty(_e.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Fa.setProperty(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Fa.setProperty(Fa.BOOT_PROPS_FILE_PATH,o)}}a(ipe,"createBootPropertiesFile");async function ope(e){dr.trace("Creating HarperDB config file");let t=VS(Object.keys(_e.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[_e.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in $S){if(r===Dt.HTTP_PORT&&t[Dt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??$S[r],t[Dt.HTTP_SECUREPORT]=null;continue}else if(r===Dt.HTTP_PORT)continue;if(r===Dt.OPERATIONSAPI_NETWORK_PORT&&t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??$S[r],t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Dt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=$S[r])}}else t[Dt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Dt.HTTP_PORT.toLowerCase()]&&(t[Dt.HTTP_SECUREPORT]=null);try{qa[_e.INSTALL_PROMPTS.HDB_CONFIG]||CI.createConfigFile(t),Fa.initSync()}catch(r){ape(r)}}a(ope,"createConfigFile");function ape(e){dr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Yme);let t=Fi.resolve(Fa.get(Fa.BOOT_PROPS_FILE_PATH),"../");t&&Is.removeSync(t),ki&&(nY?Is.readdirSync(ki,{withFileTypes:!0}).forEach(n=>{let s=Fi.join(n.path,n.name);s!==qa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&Is.removeSync(s)}):Is.removeSync(ki)),process.exit(1)}a(ape,"rollbackInstall");async function oY(e,t){dr.trace("Creating admin user"),await qme();let r;try{r=await Hme.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 Bme.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(oY,"createAdminUser");async function aY(e){dr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await oY(t,r),delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(aY,"createSuperUser");async function cpe(e){dr.trace("Creating Cluster user.");let t;e[_e.INSTALL_PROMPTS.CLUSTERING_USER]&&e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[_e.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await oY({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[_e.INSTALL_PROMPTS.CLUSTERING_USER],delete e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(cpe,"createClusterUser");async function lpe(){let e=rY.version;if(e)await tY.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(lpe,"insertHdbVersionInfo");function upe(e){qa[_e.INSTALL_PROMPTS.HDB_CONFIG]=e}a(upe,"updateConfigEnv");function dpe(e){PI=e}a(dpe,"setIgnoreExisting")});var fY=C((LLe,dY)=>{"use strict";var DI=oe(),ts=X(),uY=SI();dY.exports={processDirectives:fpe};async function fpe(e){console.log("Starting upgrade process...");let t=uY.getVersionsForUpgrade(e),r=mpe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ts.notify(c),console.log(c);let l=[],u=[];try{l=_pe(o.sync_functions)}catch(f){throw ts.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await hpe(o.async_functions)}catch(f){throw ts.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(fpe,"processDirectives");function _pe(e){if(DI.isEmptyOrZeroLength(e))return ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ts.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ts.info(`Running function ${r.name}`),!(r instanceof Function)){ts.info("Variable being processed is not a function");continue}let n=r();ts.info(n),t.push(n)}return t}a(_pe,"runSyncFunctions");async function hpe(e){if(DI.isEmptyOrZeroLength(e))return ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ts.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ts.info(`Running function ${s.name}`),!(s instanceof Function)){ts.info("Variable being processed is not a function");continue}let i=await s();ts.info(i),t.push(i)}return t}a(hpe,"runAsyncFunctions");function mpe(e){if(DI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=uY.getDirectiveByVersion(r);n&&t.push(n)}return t}a(mpe,"getUpgradeDirectivesToInstall")});var SY=C((vLe,gY)=>{"use strict";var KS=ce();KS.initSync();var pY=require("chalk"),_Y=require("fs-extra"),xo=X(),Uo=(k(),P($)),ppe=fY(),LI=oe(),EY=GS(),Epe=MS(),hY=hA(),gpe=qs(),{packageJson:mY}=pt(),Spe=require("util").promisify,Tpe=Spe(gpe.setSchemaDataToGlobal),MI,{UPGRADE_VERSION:vI}=Uo.UPGRADE_JSON_FIELD_NAMES_ENUM;gY.exports={upgrade:Ape};async function Ape(e){await Tpe(),MI===void 0&&(MI=id()),_Y.existsSync(KS.get(KS.BOOT_PROPS_FILE_PATH))||(zh("The hdb_boot_properties file was not found. Please install HDB.",Uo.LOG_LEVELS.ERROR),process.exit(1)),_Y.existsSync(KS.get(Uo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(zh("The hdb settings file was not found. Please make sure HDB is installed.",Uo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await EY.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),zh(`This version of HarperDB is ${mY.version}`,Uo.LOG_LEVELS.INFO);let r=t[vI]??mY.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Uo.HDB_SUPPORT_ADDRESS}`),xo.notify("Missing new version field from upgrade info object"),process.exit(1)),await Rpe();let n,s=0;try{n=await Epe.forceUpdatePrompt(t)}catch(i){xo.error("There was an error when prompting user about upgrade."),xo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),xo.info(`Starting upgrade to version ${r}`),await ype(t),zh(`HarperDB was successfully upgraded to version ${t[vI]}`,Uo.LOG_LEVELS.INFO)}a(Ape,"upgrade");async function Rpe(){let e=!1,t=await hY.findPs(Uo.HDB_PROC_NAME);if(LI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await hY.findPs("hdb_express");LI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await MI.list();LI.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(pY.red(r)),xo.error(r),process.exit(1)}}a(Rpe,"checkIfRunning");async function ype(e){try{await ppe.processDirectives(e)}catch(t){throw zh("There was an error during the data upgrade. Please check the logs.",Uo.LOG_LEVELS.ERROR),t}try{await EY.insertHdbUpgradeInfo(e[vI])}catch(t){xo.error("Error updating the 'hdb_info' system table."),xo.error(t)}}a(ype,"runUpgrade");function zh(e,t=void 0){t||(t=xo.info),xo[t](e),console.log(pY.magenta(e))}a(zh,"printToLogAndConsole")});var bY={};xe(bY,{onStorageReclamation:()=>Qh,runReclamationHandlers:()=>HI,setAvailableSpaceRatioGetter:()=>Ope});function Qh(e,t,r){(r||(0,WS.getWorkerIndex)()===(0,WS.getWorkerCount)()-1)&&(YS.has(e)||YS.set(e,[]),YS.get(e).push({priority:0,handler:t}),BI||(BI=setTimeout(HI,AY).unref()))}async function HI(){for(let[e,t]of YS)try{let r=await yY(e),n=bpe/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(xI.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){xI.default.error?.("Error running storage reclamation handlers",r)}BI=setTimeout(HI,AY).unref()}function Ope(e){yY=e??RY}var UI,WS,xI,zS,TY,YS,bpe,AY,BI,RY,yY,QS=ye(()=>{UI=require("node:fs/promises"),WS=M(nt()),xI=M(pi());k();zS=M(ce()),TY=M(oe());zS.default.initSync();YS=new Map,bpe=zS.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,AY=(0,TY.convertToMS)(zS.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Qh,"onStorageReclamation");RY=a(async e=>{if(UI.statfs){let t=await(0,UI.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"),yY=RY;a(HI,"runReclamationHandlers");a(Ope,"setAvailableSpaceRatioGetter")});var CY=C((HLe,IY)=>{"use strict";var{promises:Ad,createReadStream:Npe,createWriteStream:wpe}=require("fs"),{createGzip:Ipe}=require("zlib"),{promisify:Cpe}=require("util"),{pipeline:Ppe}=require("stream"),Dpe=Cpe(Ppe),FI=require("path"),Va=ce();Va.initSync();var $a=X(),{CONFIG_PARAMS:Rd,ITC_EVENT_TYPES:Lpe}=(k(),P($)),{onMessageFromWorkers:Mpe}=nt(),{convertToMS:vpe}=oe(),{onStorageReclamation:Upe}=(QS(),P(bY)),xpe=6e4,Bpe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Hpe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",kI,NY;IY.exports=wY;Mpe(e=>{e.type===Lpe.RESTART&&(Va.initSync(!0),clearInterval(NY),Va.get(Rd.LOGGING_ROTATION_ENABLED)&&wY())});async function wY(){try{let e=$a.getLogFilePath(),t=Va.get(Rd.LOGGING_ROTATION_MAXSIZE),r=Va.get(Rd.LOGGING_ROTATION_INTERVAL),n=Va.get(Rd.LOGGING_ROTATION_RETENTION),s=0;if(Upe(e,l=>{s=l},!0),!t&&!r){$a.error(Bpe);return}let i=Va.get(Rd.LOGGING_ROTATION_PATH);if(!i){$a.error(Hpe);return}let o;if(t){let l=t.slice(-1),u=t.slice(0,-1);l==="G"?o=u*1e9:l==="M"?o=u*1e6:o=u*1e3}let c;if(r){let l=r.slice(-1),u=r.slice(0,-1);l==="D"?c=u*1440:l==="H"?c=u*60:c=u}kI=Date.now()/6e4,$a.trace("Log rotate enabled, maxSize:",t,"interval:",r),NY=setInterval(async()=>{if(o){let l;l=await Ad.stat(e),l.size>=o&&await OY(e,i)}if(c&&Date.now()/6e4-kI>=c&&(await OY(e,i),kI=Date.now()/6e4),n||s){let l=vpe(n??"1M")/(1+s);s=0;let u=await Ad.readdir(i);for(let f of u)try{let d=await Ad.stat(FI.join(i,f));Date.now()-d.mtimeMs>l&&await Ad.unlink(FI.join(i,f))}catch(d){$a.error("Error trying to remove log",f,d)}}},xpe).unref()}catch(e){$a.error(e)}}a(wY,"logRotator");async function OY(e,t){let r=Va.get(Rd.LOGGING_ROTATION_COMPRESS),n=FI.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);await Ad.rename(e,n),r&&(e=n,n+=".gz",await Dpe(Npe(e),Ipe(),wpe(n)),await Ad.unlink(e)),$a.closeLogFile(),$a.notify(`hdb.log rotated, old log moved to ${n}`)}a(OY,"moveLogFile")});var BY=C(xY=>{"use strict";var Te=ce();Te.initSync();sd();var $t=(k(),P($)),{CONFIG_PARAMS:Pe}=$t,rs=X(),Bo=require("fs-extra"),Ho=require("path"),kpe=lI(),{install:Fpe}=lY(),GI=require("chalk"),{packageJson:Gpe,PACKAGE_ROOT:qpe}=pt(),ko=oe(),qI=Nt(),DY=cc(),PY=Gg(),$pe=SY(),Vpe=CY(),{compactOnStart:Kpe}=(VN(),P($N)),Ype=require("minimist"),Wpe=Xs(),{startHTTPThreads:zpe}=($I(),P(HY)),Qpe=GS(),{isMainThread:jpe}=require("worker_threads"),FLe=ao(),GLe=fo(),qLe=Gy(),$Le=c_(),jS=(k(),P($)),Gi,yd,LY=!1,Jpe="Upgrade complete. Starting HarperDB.",Xpe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Zpe="HarperDB not found, starting install process.",eEe="There was an error during install, check install_log.log for more details. Exiting.",tEe="HarperDB successfully started.";function rEe(){if(!LY){let e=a(()=>{Bo.removeSync(Ho.join(Te.get($t.CONFIG_PARAMS.ROOTPATH),$t.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(rEe,"addExitListeners");async function MY(e=!1,t=!1){if(console.log(GI.magenta("Starting HarperDB...")),rs.suppressLogging?.(()=>{console.log(GI.magenta(""+Bo.readFileSync(Ho.join(qpe,"utility/install/ascii_logo.txt"))))}),await UY()===!1){console.log(Zpe);try{await Fpe()}catch(l){console.error(eEe,l),rs.error(l),process.exit(1)}}if(!e){let l=DY(Object.keys($t.CONFIG_PARAM_MAP),!0);!ko.isEmpty(l)&&!ko.isEmptyOrZeroLength(Object.keys(l))&&qI.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=yd?.service==="clustering";yd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Ho.join(Te.get($t.CONFIG_PARAMS.ROOTPATH),$t.HDB_PID_FILE),i=aEe(s);i&&i!==1&&cEe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Gi===void 0&&(Gi=id()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Te.get($t.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await PY.generateNatsConfig(),await Gi.startClusteringProcesses(!0),process.exit()),rEe(),await Bo.writeFile(Ho.join(Te.get(jS.CONFIG_PARAMS.ROOTPATH),jS.HDB_PID_FILE),`${process.pid}`),rs.info("HarperDB PID",process.pid);let o;try{let l=await Qpe.getVersionUpdateInfo();l!==void 0&&(o=l[$t.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await $pe.upgrade(l),console.log(Jpe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),rs.error(l)):(console.error(Xpe,l),rs.error(l)),process.exit(1)}kpe(),iEe(),await Wpe.reviewSelfSignedCert(),ko.autoCastBoolean(Te.get($t.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&jpe&&await PY.generateNatsConfig(t)}a(MY,"initialize");async function nEe(e=!1){try{yd=Ype(process.argv),yd.ROOTPATH&&qI.updateConfigObject("settings_path",Ho.join(yd.ROOTPATH,$t.HDB_CONFIG_FILE)),await MY(e,!0),Te.get($t.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Kpe();let t=process.env.IS_SCRIPTED_SERVICE&&!yd.service;ko.autoCastBoolean(Te.get($t.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Gi.startClusteringProcesses(),await Gi.startClusteringThreads()),await zpe(process.env.DEV_MODE?1:Te.get(jS.CONFIG_PARAMS.THREADS_COUNT)??Te.get(jS.CONFIG_PARAMS.THREADS)),Te.get($t.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Vpe(),t||vY()}catch(t){console.error(t),rs.error(t),process.exit(1)}}a(nEe,"main");function vY(){rs.suppressLogging(()=>{console.log(GI.magenta(`HarperDB ${Gpe.version} successfully started`))}),rs.notify(tEe)}a(vY,"started");async function sEe(e=!0){LY=!e;try{Gi===void 0&&(Gi=id()),Gi.enterPM2Mode(),await MY(),ko.autoCastBoolean(Te.get($t.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Gi.startClusteringProcesses(),await Gi.startService($t.PROCESS_DESCRIPTORS.HDB),vY(),e&&process.exit(0)}catch(t){console.error(t),rs.error(t),process.exit(1)}}a(sEe,"launch");function iEe(){let e=Ho.join(Te.get($t.CONFIG_PARAMS.ROOTPATH),$t.LICENSE_KEY_DIR_NAME,$t.LICENSE_FILE_NAME),t=Ho.join(e,$t.LICENSE_FILE_NAME),r=Ho.join(e,$t.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=DY(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ko.isEmpty(n)||ko.isEmpty(s))return;Bo.mkdirpSync(e),Bo.writeFileSync(r,n),Bo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),rs.error(s)}}a(iEe,"writeLicenseFromVars");Object.assign(xY,{launch:sEe,main:nEe,isHdbInstalled:UY,startupLog:oEe});async function UY(){try{await Bo.stat(ko.getPropsFilePath()),await Bo.stat(Te.get($t.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ko.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw rs.error(`Error checking for HDB install - ${e}`),e}return!0}a(UY,"isHdbInstalled");function oEe(e){let r=a(_=>_.padEnd(20),"pad"),n=`
|
|
112
|
-
`;
|
|
113
|
-
`),
|
|
114
|
-
`),n+=`${r("Worker Threads:")}${
|
|
115
|
-
`,n+=`${r("Root Path:")}${
|
|
116
|
-
`,
|
|
109
|
+
Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade started for transaction logs"),await CK(SI,!0,e)),Po.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Fh?", but errors occurred":"")}a(Bhe,"reindexUpgrade");async function CK(e,t,r){let n=await Hi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Do.join(e,o.toString());if(o===".DS_Store")continue;let l=await Hi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Hi.statSync(Do.join(c,d)).isDirectory())try{await Hhe(o,d,t),tn.info(`Reindexing started for ${o}.${d}`),Po.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Fhe(o,d,c,t,r),tn.info(`Reindexing completed for ${o}.${d}`),Po.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Fh=!0,h.schema_path=c,h.table_name=d,Po.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Po.error(h),tn.error(h),console.error(h)}}}if(!Fh)try{await Hi.rm(BS,{recursive:!0})}catch{}}a(CK,"processTables");async function Hhe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Do.join(BS,s);await Hi.ensureDir(BS),await Hi.writeFile(i,""),tn=Uhe({level:"debug",formatters:{bindings(){}}},i)}a(Hhe,"initPinoLogger");var khe=20;async function Fhe(e,t,r,n,s){let i;try{i=await Xn.openEnvironment(r,t,n)}catch(E){if(E.message==="MDB_INVALID: File is not an LMDB file"){Po.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),tn.error(E);return}throw E}let o=$he(i.dbis),c=Xn.openDBI(i,o),l=Object.keys(i.dbis),u=Xn.statDBI(i,o);tn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new vhe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await Xn.createEnvironment(r,t,!1);Xn.createDBI(d,o,!1,!0);let h=[];try{for(let E of c.getRange({start:!1}))E.value={...E.value},h.push(E),n||e==="system"&&(t==="hdb_schema"&&(E.key=E.key.toString(),E.value.name=E.value.name.toString()),t==="hdb_table"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.name=E.value.name.toString()),t==="hdb_attribute"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.table=E.value.table.toString(),E.value.attribute=E.value.attribute.toString())),h.length>khe&&await _();await _()}catch(E){throw Fh=!0,tn.error(E),E}async function _(){let E,T=h.map(({value:v})=>v);n?E=await Promise.all(T.map(v=>Ghe(d,v))):E=await Phe(d,o,l.filter(v=>v!=="__blob__"),T,!1);for(let v=0,F=h.length;v<F;v++){let{key:q,value:j}=h[v];tn.info(`Record hash value: ${q} hash: ${o}`);let te;n?te=E[v]:te=E.written_hashes.indexOf(q)>-1,kh(te,!0),qhe(d,o,j[o],n),tn.info(`Insert success, written hashes: ${E.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Po.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),tn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let p=Xn.statDBI(i,o),S=Xn.statDBI(d,o);if(tn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${S.entryCount}`),kh.deepStrictEqual(p.entryCount,S.entryCount),await Xn.closeEnvironment(i),await Xn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let E=Do.join(r,t),T=Do.join(E,"data.mdb"),O=Do.join(E,"lock.mdb");await Hi.unlink(T),await Hi.unlink(O),await Hi.rmdir(E),tn.info(`Deleted old environment files from schema folder: ${T}, ${O}`)}let g=await Xn.openEnvironment(r,t),R=Xn.statDBI(g,o);tn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(R)}`),kh.deepStrictEqual(R.entryCount,S.entryCount),await Xn.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(Fhe,"processTable");async function Ghe(e,t){Xn.initializeDBIs(e,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ha.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Mhe.isEmpty(t.user_name)||e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Ghe,"insertTransaction");function qhe(e,t,r,n){let i=e.dbis[t].get(r);kh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!Lhe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];PK(e,c,d,r)}else PK(e,c,l,r)}a(qhe,"validateIndices");function PK(e,t,r,n){try{let s=!1,i=Dhe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||tn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),kh.deepStrictEqual(s,!0)}catch(s){Fh=!0,tn.error(s),console.error(s)}}a(PK,"validateIndex");function $he(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a($he,"getHashDBI")});var BK=P((OLe,xK)=>{"use strict";var HS=require("path"),ka=require("fs-extra"),Vhe=EI(),wl=X(),MK=wt(),TI=ce(),ai=(G(),D($)),kS=oe(),Khe=require("properties-reader"),Yhe=Ys(),Whe=NE(),zhe=Vr(),bLe=require("util"),jhe=zhe.searchByValue,Qhe=gn(),Jhe=vg(),Xhe=Pt(),Zhe=LK(),vK=Zs(),epe=vS(),$h=new Vhe("4.0.0"),UK=[],Gh,qh;async function tpe(){try{if(await epe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Gh){let t=kS.changeExtension(Gh,".bak");await ka.move(Gh,t)}if(qh){let t=kS.changeExtension(qh,".bak");await ka.move(qh,t)}await vK.generateKeys()}else console.log("Using existing certificates."),vK.updateConfigCert(Gh,qh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(tpe,"generateNewKeys");async function rpe(){console.log("Updating HarperDB nodes."),wl.info("Updating HarperDB nodes.");let e=[];try{let t=new Yhe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await jhe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Xhe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ai.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(kS.isEmptyOrZeroLength(n))return;let s=new Whe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Qhe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Jhe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(rpe,"updateNodes");async function npe(){let e=TI.get(ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(HS.join("config","settings.js"))){wl.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),wl.info(t);let r=HS.dirname(e),n=TI.get(ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=HS.join(n,"backup","4_0_0_upgrade_settings.bak"),i=HS.join(n,ai.HDB_CONFIG_FILE);try{wl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),ka.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{wl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),wl.info("Updating env variables with new settings values");let d=MK.initOldConfig(e);Gh=d[ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],qh=d[ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],MK.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=kS.getPropsFilePath();ka.accessSync(o,ka.constants.F_OK|ka.constants.R_OK);let l=Khe(o).get(ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
110
|
+
install_user = ${l}`;try{ka.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{TI.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{ka.removeSync(r),console.log(f),wl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(npe,"updateSettingsFile_4_0_0");$h.async_functions.push(npe);$h.async_functions.push(tpe);$h.async_functions.push(Zhe);$h.async_functions.push(rpe);UK.push($h);xK.exports=UK});var AI=P((wLe,GK)=>{"use strict";var Il=oe(),spe=(G(),D($)),HK=X(),{DATA_VERSION:ipe,UPGRADE_VERSION:ope}=spe.UPGRADE_JSON_FIELD_NAMES_ENUM,kK=wK(),FS=BK(),Cl=new Map;kK&&kK.forEach(e=>{Cl.set(e.version,e)});FS&&FS.forEach(e=>{Cl.set(e.version,e)});FS&&FS.forEach(e=>{Cl.set(e.version,e)});function ape(){return[...Cl.keys()].sort(Il.compareVersions)}a(ape,"getSortedVersions");function FK(e){let t=e[ipe],r=e[ope];return Il.isEmptyOrZeroLength(t)||Il.isEmptyOrZeroLength(r)?(HK.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),HK.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Cl.keys()].sort(Il.compareVersions).filter(function(n){return Il.compareVersions(n,t)>0&&Il.compareVersions(n,r)<=0})}a(FK,"getVersionsForUpgrade");function cpe(e){return FK(e).length>0}a(cpe,"hasUpgradesRequired");function lpe(e){return Il.isEmptyOrZeroLength(e)?null:Cl.has(e)?Cl.get(e):null}a(lpe,"getDirectiveByVersion");GK.exports={getSortedVersions:ape,getDirectiveByVersion:lpe,getVersionsForUpgrade:FK,hasUpgradesRequired:cpe}});var qS=P((CLe,YK)=>{"use strict";var upe=require("util"),RI=require("chalk"),dpe=require("os"),$K=gn(),fpe=Vr(),Zn=(G(),D($)),VK=pK(),bI=ey(),{UpgradeObject:qK}=gK(),{forceDowngradePrompt:_pe}=vS(),{packageJson:hpe}=Et(),GS=X(),Sd=oe(),OI=$s(),ppe=(Ue(),D(at)),mpe=AI(),Epe=upe.promisify(OI.setSchemaDataToGlobal),gpe=fpe.searchByValue,Spe="info_id",Tpe="2.9.9",Ape="3.0.0";async function Rpe(e){let t=new VK.HdbInfoInsertObject(1,e,e),r=new bI.InsertObject(Zn.OPERATIONS_ENUM.INSERT,Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Zn.INFO_TABLE_HASH_ATTRIBUTE,[t]);return OI.setSchemaDataToGlobal(),$K.insert(r)}a(Rpe,"insertHdbInstallInfo");async function yI(e){let t,r=await KK(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new VK.HdbInfoInsertObject(i,e,e);let o=new bI.InsertObject(Zn.OPERATIONS_ENUM.INSERT,Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Zn.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await Epe(),$K.insert(o)}a(yI,"insertHdbUpgradeInfo");async function KK(){let e=new bI.NoSQLSeachObject(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Spe,Zn.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await gpe(e))}catch(r){console.error(r)}return t}a(KK,"getAllHdbInfoRecords");async function ype(){let e=await KK();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(ype,"getLatestHdbInfoRecord");async function bpe(){GS.info("Checking if HDB software has been updated");try{let e=hpe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await ype(),r;if(Sd.isEmpty(t))r=Tpe;else if(r=t.data_version_num,Sd.compareVersions(r.toString(),e.toString())>0){if(!Sd.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(RI.yellow(`This instance's data was last run on version ${r}`)),console.error(RI.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${dpe.EOL}${Zn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Sd.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(RI.yellow(`This instance's data was last run on version ${r}`)),await _pe(new qK(r,e))?await yI(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(OI.setSchemaDataToGlobal(),Ope(r),e.toString()===r.toString())return;let n=new qK(r,e);if(mpe.hasUpgradesRequired(n))return n;Sd.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await yI(n.upgrade_version),GS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw GS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),GS.fatal(e),e}}a(bpe,"getVersionUpdateInfo");function Ope(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Zn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in ppe.databases.system))throw console.log(t),new Error(t);if(!Sd.isEmpty(e)&&e<Ape)throw console.log(t),new Error(t)}a(Ope,"checkIfInstallIsSupported");YK.exports={insertHdbInstallInfo:Rpe,insertHdbUpgradeInfo:yI,getVersionUpdateInfo:bpe}});var QK=P((DLe,jK)=>{"use strict";var $S=require("joi"),{boolean:Npe,string:NI,number:wpe}=$S.types(),WK=require("fs-extra"),Vh=(G(),D($)),zK=require("path"),Ipe=nt();jK.exports=Cpe;function Cpe(e){let t=NI.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=$S.object({[Vh.INSTALL_PROMPTS.ROOTPATH]:$S.custom(Ppe),[Vh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:$S.alternatives([wpe.min(0),NI]).allow("null",null),[Vh.INSTALL_PROMPTS.TC_AGREEMENT]:NI.valid("yes","YES","Yes"),[Vh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Vh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Npe});return Ipe.validateBySchema(e,r)}a(Cpe,"installValidator");function Ppe(e,t){if(WK.existsSync(zK.join(e,"system/hdb_user/data.mdb"))||WK.existsSync(zK.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Ppe,"validateRootAvailable")});var XK=P((MLe,JK)=>{"use strict";var{mkdirpSync:Dpe,copySync:Lpe}=require("fs-extra"),Fa=require("path"),Kh=(G(),D($)),{PACKAGE_ROOT:Mpe}=Et(),II=X(),vpe=Fn(),wI=oo(),Upe=gt();JK.exports=xpe;async function xpe(e){II.trace("Mounting HarperDB"),Pl(e),Pl(Fa.join(e,"backup")),Pl(Fa.join(e,"keys")),Pl(Fa.join(e,"keys",Kh.LICENSE_FILE_NAME)),Pl(Fa.join(e,"log")),Pl(Fa.join(e,"database")),Pl(Fa.join(e,"components")),Lpe(Fa.resolve(Mpe,"./utility/install/README.md"),Fa.join(e,"README.md")),await Bpe()}a(xpe,"mountHdb");async function Bpe(){let e=l_(),t=Object.keys(wI);for(let r=0;r<t.length;r++){let n=t[r],s=wI[n].hash_attribute;try{Upe.initSystemSchemaPaths(Kh.SYSTEM_SCHEMA_NAME,n);let i=new e(Kh.SYSTEM_SCHEMA_NAME,n,s);i.attributes=wI[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await vpe.createTable(n,i)}catch(i){throw II.error(`issue creating environment for ${Kh.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Bpe,"createLMDBTables");function Pl(e){Dpe(e,{mode:Kh.HDB_FILE_PERMISSIONS}),II.info(`Directory ${e} created`)}a(Pl,"makeDirectory")});var fY=P((BLe,dY)=>{"use strict";var PI=require("os"),nY=require("inquirer"),Is=require("fs-extra"),Hpe=require("properties-reader"),Ll=require("chalk"),Fi=require("path"),kpe=require("human-readable-ids").hri,Fpe=require("ora"),Gpe=require("yaml"),fr=X(),Ga=ce(),Yh=oe(),KS=lc(),sY=qS(),{packageJson:iY}=Et(),fe=(G(),D($)),{CONFIG_PARAM_MAP:ULe,CONFIG_PARAMS:Mt}=fe,qpe=QK(),$pe=XK(),DI=wt(),Vpe=Gn(),Kpe=p_(),Ype=dI(),Wpe=$s(),zpe=require("util").promisify,jpe=zpe(Wpe.setSchemaDataToGlobal),ZK=Zs(),Dl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Fr=a(e=>Ll.magenta.bold(e),"HDB_PROMPT_MSG"),Qpe="https://harperdb.io/legal/end-user-license-agreement",qa=PI.EOL,Lo="",Jpe="yes",eY="Starting HarperDB install...",tY="HarperDB installation was successful.",rY="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Xpe="An out of date version of HarperDB is already installed.",CI="It appears that HarperDB is already installed. Exiting install...",Zpe="Aborting install",xLe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),eme=new RegExp(/^[^\s.,*>]+$/),tme=PI.homedir(),rme=Fi.join(tme,fe.HDB_ROOT_DIR_NAME),nme="HDB_ADMIN",sme="CLUSTER_USER",ime="dev",ome="localhost",VS={[Mt.HTTP_CORS]:!0,[Mt.HTTP_CORSACCESSLIST]:["*"],[Mt.HTTP_PORT]:9926,[Mt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Mt.THREADS_COUNT]:1,[Mt.THREADS_DEBUG]:!0,[Mt.LOGGING_STDSTREAMS]:!0,[Mt.LOGGING_LEVEL]:"info",[Mt.OPERATIONSAPI_NETWORK_PORT]:9925,[Mt.LOCALSTUDIO_ENABLED]:!0},kr={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},$a=KS([fe.INSTALL_PROMPTS.HDB_CONFIG]),ki,oY=!1,LI=!1,aY=!1;dY.exports={install:cY,updateConfigEnv:Eme,setIgnoreExisting:gme};cY.createSuperUser=uY;async function cY(){console.log(Fr(qa+eY+qa)),fr.notify(eY);let e;$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=ame());let t=lme();Object.assign(t,e),t[fe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[fe.INSTALL_PROMPTS.ROOTPATH]&&t[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[fe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(aY=!0,t[fe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=qpe(t);if(r)throw r.message;await ume(),await dme(t);let n=await cme(t);ki=n[fe.INSTALL_PROMPTS.ROOTPATH],$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&Fi.dirname($a[fe.INSTALL_PROMPTS.HDB_CONFIG])===ki&&(oY=!0),!LI&&!$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&await Is.pathExists(Fi.join(ki,fe.HDB_CONFIG_FILE))&&(console.error(CI),process.exit());let s=Fpe({prefixText:Fr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Yh.isEmpty(ki))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ga.setHdbBasePath(ki),await $pe(ki),await fme(),await _me(n),fr.initLogSettings(!0),await uY(n),await pme(n),await ZK.updateConfigCert(),await ZK.generateCertsKeys(),await mme(),Ype(),s.stop(),console.log(Fr(qa+tY+qa)),fr.notify(tY)}a(cY,"install");function ame(){let e=Gpe.parseDocument(Is.readFileSync($a[fe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=DI.flattenConfig(e.toJSON());return t[fe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[fe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(ame,"getConfigFromFile");async function cme(e){fr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.ROOTPATH],kr.DESTINATION),name:fe.INSTALL_PROMPTS.ROOTPATH,prefix:Lo,default:rme,validate:a(async s=>ws(s)?ws(s):await Is.pathExists(Fi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Fr(kr.DESTINATION)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],kr.HDB_USERNAME),name:fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lo,default:nme,validate:a(s=>ws(s)?ws(s):(t=s,!0),"validate"),message:Fr(kr.HDB_USERNAME)},{type:"password",when:Mo(e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],kr.HDB_PASS),name:fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lo,validate:a(s=>ws(s)?ws(s):!0,"validate"),message:Fr(kr.HDB_PASS)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.DEFAULTS_MODE],kr.DEFAULTS_MODE),name:fe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Lo,default:ime,validate:a(s=>ws(s)?ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Fr(kr.DEFAULTS_MODE)}];if(aY||r.push({type:"input",name:fe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],kr.REPLICATION_HOSTNAME),prefix:Lo,default:ome,message:Fr(kr.REPLICATION_HOSTNAME)}),Yh.autoCastBoolean(e[fe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_NODENAME],kr.NODE_NAME),name:fe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lo,default:kpe.random(),validate:a(i=>eme.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Fr(kr.NODE_NAME)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_USER],kr.CLUSTER_USERNAME),name:fe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lo,default:sme,validate:a(i=>ws(i)?ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Fr(kr.CLUSTER_USERNAME)},{type:"password",when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],kr.CLUSTER_PASS),name:fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lo,validate:a(i=>ws(i)?ws(i):!0,"validate"),message:Fr(kr.CLUSTER_PASS)}];r.push(...s)}let n=await nY.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(cme,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Fr(t)} ${Ll.gray("[hidden]")}`),fr.trace(`${Fr(t)} [hidden]`)):(console.log(`${Fr(t)} ${e}`),fr.trace(`${Fr(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ws,"checkForEmptyValue");function lme(){let e=Object.keys(fe.INSTALL_PROMPTS),t=KS(e),r=KS(Object.keys(fe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=fe.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(lme,"checkForPromptOverride");async function ume(){fr.trace("Checking for existing install.");let e=Yh.getPropsFilePath(),t=await Is.pathExists(e),r;if(t){fr.trace(`Install found an existing boot prop file at:${e}`);let n=Hpe(e),s=DI.getConfigValue(fe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(fe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Is.pathExists(s)}if(!t&&Yh.noBootFile()&&(r=!0),r&&!LI){if(fr.trace(`Install found existing HDB config at:${e}`),await sY.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${iY.version}. Exiting install...`;console.log(qa+Ll.magenta.bold(Xpe)),console.log(Ll.magenta.bold(s)),fr.error(s)}else console.log(qa+Ll.magenta.bold(CI)),fr.error(CI);process.exit(0)}}a(ume,"checkForExistingInstall");async function dme(e){fr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Qpe}${qa}and can be viewed by typing or copying and pasting the URL into your web browser.${qa}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Lo,transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:fe.INSTALL_PROMPTS.TC_AGREEMENT,message:Fr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Ll.yellow("Please enter 'yes' or 'no'"),"validate")},n=await nY.prompt([r]);n[fe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[fe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Jpe&&(console.log(Ll.yellow(rY)),fr.error(rY),process.exit(0))}a(dme,"termsAgreement");async function fme(){let e=Fi.join(ki,fe.HDB_CONFIG_FILE),t;try{t=PI.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
111
|
+
install_user = ${t}`,n=Yh.getHomeDir(),s=Fi.join(n,fe.HDB_HOME_DIR_NAME),i=Fi.join(s,fe.LICENSE_KEY_DIR_NAME);try{Is.mkdirpSync(s,{mode:fe.HDB_FILE_PERMISSIONS}),Is.mkdirpSync(i,{mode:fe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${fe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Fi.join(s,fe.BOOT_PROPS_FILE_NAME);try{await Is.writeFile(o,r)}catch(c){throw fr.error(`There was an error creating the boot file at path: ${o}`),c}Ga.setProperty(fe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ga.setProperty(fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ga.setProperty(Ga.BOOT_PROPS_FILE_PATH,o)}}a(fme,"createBootPropertiesFile");async function _me(e){fr.trace("Creating HarperDB config file");let t=KS(Object.keys(fe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[fe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in VS){if(r===Mt.HTTP_PORT&&t[Mt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??VS[r],t[Mt.HTTP_SECUREPORT]=null;continue}else if(r===Mt.HTTP_PORT)continue;if(r===Mt.OPERATIONSAPI_NETWORK_PORT&&t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??VS[r],t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Mt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=VS[r])}}else t[Mt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Mt.HTTP_PORT.toLowerCase()]&&(t[Mt.HTTP_SECUREPORT]=null);try{$a[fe.INSTALL_PROMPTS.HDB_CONFIG]||DI.createConfigFile(t),Ga.initSync()}catch(r){hme(r)}}a(_me,"createConfigFile");function hme(e){fr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Zpe);let t=Fi.resolve(Ga.get(Ga.BOOT_PROPS_FILE_PATH),"../");t&&Is.removeSync(t),ki&&(oY?Is.readdirSync(ki,{withFileTypes:!0}).forEach(n=>{let s=Fi.join(n.path,n.name);s!==$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&Is.removeSync(s)}):Is.removeSync(ki)),process.exit(1)}a(hme,"rollbackInstall");async function lY(e,t){fr.trace("Creating admin user"),await jpe();let r;try{r=await Kpe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Vpe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(lY,"createAdminUser");async function uY(e){fr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await lY(t,r),delete e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(uY,"createSuperUser");async function pme(e){fr.trace("Creating Cluster user.");let t;e[fe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[fe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await lY({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[fe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(pme,"createClusterUser");async function mme(){let e=iY.version;if(e)await sY.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(mme,"insertHdbVersionInfo");function Eme(e){$a[fe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Eme,"updateConfigEnv");function gme(e){LI=e}a(gme,"setIgnoreExisting")});var pY=P((kLe,hY)=>{"use strict";var MI=oe(),es=X(),_Y=AI();hY.exports={processDirectives:Sme};async function Sme(e){console.log("Starting upgrade process...");let t=_Y.getVersionsForUpgrade(e),r=Rme(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;es.notify(c),console.log(c);let l=[],u=[];try{l=Tme(o.sync_functions)}catch(f){throw es.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await Ame(o.async_functions)}catch(f){throw es.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(Sme,"processDirectives");function Tme(e){if(MI.isEmptyOrZeroLength(e))return es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(es.info(`Running function ${r.name}`),!(r instanceof Function)){es.info("Variable being processed is not a function");continue}let n=r();es.info(n),t.push(n)}return t}a(Tme,"runSyncFunctions");async function Ame(e){if(MI.isEmptyOrZeroLength(e))return es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(es.info(`Running function ${s.name}`),!(s instanceof Function)){es.info("Variable being processed is not a function");continue}let i=await s();es.info(i),t.push(i)}return t}a(Ame,"runAsyncFunctions");function Rme(e){if(MI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=_Y.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Rme,"getUpgradeDirectivesToInstall")});var RY=P((GLe,AY)=>{"use strict";var YS=ce();YS.initSync();var SY=require("chalk"),mY=require("fs-extra"),Uo=X(),vo=(G(),D($)),yme=pY(),vI=oe(),TY=qS(),bme=vS(),EY=pA(),Ome=$s(),{packageJson:gY}=Et(),Nme=require("util").promisify,wme=Nme(Ome.setSchemaDataToGlobal),UI,{UPGRADE_VERSION:xI}=vo.UPGRADE_JSON_FIELD_NAMES_ENUM;AY.exports={upgrade:Ime};async function Ime(e){await wme(),UI===void 0&&(UI=sd()),mY.existsSync(YS.get(YS.BOOT_PROPS_FILE_PATH))||(Wh("The hdb_boot_properties file was not found. Please install HDB.",vo.LOG_LEVELS.ERROR),process.exit(1)),mY.existsSync(YS.get(vo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Wh("The hdb settings file was not found. Please make sure HDB is installed.",vo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await TY.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Wh(`This version of HarperDB is ${gY.version}`,vo.LOG_LEVELS.INFO);let r=t[xI]??gY.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vo.HDB_SUPPORT_ADDRESS}`),Uo.notify("Missing new version field from upgrade info object"),process.exit(1)),await Cme();let n,s=0;try{n=await bme.forceUpdatePrompt(t)}catch(i){Uo.error("There was an error when prompting user about upgrade."),Uo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Uo.info(`Starting upgrade to version ${r}`),await Pme(t),Wh(`HarperDB was successfully upgraded to version ${t[xI]}`,vo.LOG_LEVELS.INFO)}a(Ime,"upgrade");async function Cme(){let e=!1,t=await EY.findPs(vo.HDB_PROC_NAME);if(vI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await EY.findPs("hdb_express");vI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await UI.list();vI.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(SY.red(r)),Uo.error(r),process.exit(1)}}a(Cme,"checkIfRunning");async function Pme(e){try{await yme.processDirectives(e)}catch(t){throw Wh("There was an error during the data upgrade. Please check the logs.",vo.LOG_LEVELS.ERROR),t}try{await TY.insertHdbUpgradeInfo(e[xI])}catch(t){Uo.error("Error updating the 'hdb_info' system table."),Uo.error(t)}}a(Pme,"runUpgrade");function Wh(e,t=void 0){t||(t=Uo.info),Uo[t](e),console.log(SY.magenta(e))}a(Wh,"printToLogAndConsole")});var wY={};Be(wY,{onStorageReclamation:()=>zh,runReclamationHandlers:()=>FI,setAvailableSpaceRatioGetter:()=>Lme});function zh(e,t,r){(r||(0,zS.getWorkerIndex)()===(0,zS.getWorkerCount)()-1)&&(WS.has(e)||WS.set(e,[]),WS.get(e).push({priority:0,handler:t}),kI||(kI=setTimeout(FI,bY).unref()))}async function FI(){for(let[e,t]of WS)try{let r=await NY(e),n=Dme/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(HI.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){HI.default.error?.("Error running storage reclamation handlers",r)}kI=setTimeout(FI,bY).unref()}function Lme(e){NY=e??OY}var BI,zS,HI,jS,yY,WS,Dme,bY,kI,OY,NY,QS=be(()=>{BI=require("node:fs/promises"),zS=M(st()),HI=M(mi());G();jS=M(ce()),yY=M(oe());jS.default.initSync();WS=new Map,Dme=jS.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,bY=(0,yY.convertToMS)(jS.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;a(zh,"onStorageReclamation");OY=a(async e=>{if(BI.statfs){let t=await(0,BI.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),NY=OY;a(FI,"runReclamationHandlers");a(Lme,"setAvailableSpaceRatioGetter")});var LY=P((KLe,DY)=>{"use strict";var{promises:Td,createReadStream:Mme,createWriteStream:vme}=require("fs"),{createGzip:Ume}=require("zlib"),{promisify:xme}=require("util"),{pipeline:Bme}=require("stream"),Hme=xme(Bme),qI=require("path"),Ka=ce();Ka.initSync();var Va=X(),{CONFIG_PARAMS:Ad,ITC_EVENT_TYPES:kme}=(G(),D($)),{onMessageFromWorkers:Fme}=st(),{convertToMS:Gme}=oe(),{onStorageReclamation:qme}=(QS(),D(wY)),$me=6e4,Vme="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Kme="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",GI,CY;DY.exports=PY;Fme(e=>{e.type===kme.RESTART&&(Ka.initSync(!0),clearInterval(CY),Ka.get(Ad.LOGGING_ROTATION_ENABLED)&&PY())});async function PY(){try{let e=Va.getLogFilePath(),t=Ka.get(Ad.LOGGING_ROTATION_MAXSIZE),r=Ka.get(Ad.LOGGING_ROTATION_INTERVAL),n=Ka.get(Ad.LOGGING_ROTATION_RETENTION),s=0;if(qme(e,l=>{s=l},!0),!t&&!r){Va.error(Vme);return}let i=Ka.get(Ad.LOGGING_ROTATION_PATH);if(!i){Va.error(Kme);return}let o;if(t){let l=t.slice(-1),u=t.slice(0,-1);l==="G"?o=u*1e9:l==="M"?o=u*1e6:o=u*1e3}let c;if(r){let l=r.slice(-1),u=r.slice(0,-1);l==="D"?c=u*1440:l==="H"?c=u*60:c=u}GI=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),CY=setInterval(async()=>{if(o){let l;l=await Td.stat(e),l.size>=o&&await IY(e,i)}if(c&&Date.now()/6e4-GI>=c&&(await IY(e,i),GI=Date.now()/6e4),n||s){let l=Gme(n??"1M")/(1+s);s=0;let u=await Td.readdir(i);for(let f of u)try{let d=await Td.stat(qI.join(i,f));Date.now()-d.mtimeMs>l&&await Td.unlink(qI.join(i,f))}catch(d){Va.error("Error trying to remove log",f,d)}}},$me).unref()}catch(e){Va.error(e)}}a(PY,"logRotator");async function IY(e,t){let r=Ka.get(Ad.LOGGING_ROTATION_COMPRESS),n=qI.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);await Td.rename(e,n),r&&(e=n,n+=".gz",await Hme(Mme(e),Ume(),vme(n)),await Td.unlink(e)),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(IY,"moveLogFile")});var FY=P(kY=>{"use strict";var Se=ce();Se.initSync();nd();var Kt=(G(),D($)),{CONFIG_PARAMS:Le}=Kt,ts=X(),xo=require("fs-extra"),Bo=require("path"),Yme=dI(),{install:Wme}=fY(),$I=require("chalk"),{packageJson:zme,PACKAGE_ROOT:jme}=Et(),Ho=oe(),VI=wt(),vY=lc(),MY=qg(),Qme=RY(),Jme=LY(),{compactOnStart:Xme}=(YN(),D(KN)),Zme=require("minimist"),eEe=Zs(),{startHTTPThreads:tEe}=(KI(),D(GY)),rEe=qS(),{isMainThread:nEe}=require("worker_threads"),WLe=oo(),zLe=uo(),jLe=qy(),QLe=l_(),JS=(G(),D($)),Gi,Rd,UY=!1,sEe="Upgrade complete. Starting HarperDB.",iEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",oEe="HarperDB not found, starting install process.",aEe="There was an error during install, check install_log.log for more details. Exiting.",cEe="HarperDB successfully started.";function lEe(){if(!UY){let e=a(()=>{xo.removeSync(Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(lEe,"addExitListeners");async function xY(e=!1,t=!1){if(console.log($I.magenta("Starting HarperDB...")),ts.suppressLogging?.(()=>{console.log($I.magenta(""+xo.readFileSync(Bo.join(jme,"utility/install/ascii_logo.txt"))))}),await HY()===!1){console.log(oEe);try{await Wme()}catch(l){console.error(aEe,l),ts.error(l),process.exit(1)}}if(!e){let l=vY(Object.keys(Kt.CONFIG_PARAM_MAP),!0);!Ho.isEmpty(l)&&!Ho.isEmptyOrZeroLength(Object.keys(l))&&VI.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Rd?.service==="clustering";Rd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE),i=hEe(s);i&&i!==1&&pEe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Gi===void 0&&(Gi=sd()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await MY.generateNatsConfig(),await Gi.startClusteringProcesses(!0),process.exit()),lEe(),await xo.writeFile(Bo.join(Se.get(JS.CONFIG_PARAMS.ROOTPATH),JS.HDB_PID_FILE),`${process.pid}`),ts.info("HarperDB PID",process.pid);let o;try{let l=await rEe.getVersionUpdateInfo();l!==void 0&&(o=l[Kt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Qme.upgrade(l),console.log(sEe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),ts.error(l)):(console.error(iEe,l),ts.error(l)),process.exit(1)}Yme(),fEe(),await eEe.reviewSelfSignedCert(),Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&nEe&&await MY.generateNatsConfig(t)}a(xY,"initialize");async function uEe(e=!1){try{Rd=Zme(process.argv),Rd.ROOTPATH&&VI.updateConfigObject("settings_path",Bo.join(Rd.ROOTPATH,Kt.HDB_CONFIG_FILE)),await xY(e,!0),Se.get(Kt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xme();let t=process.env.IS_SCRIPTED_SERVICE&&!Rd.service;Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Gi.startClusteringProcesses(),await Gi.startClusteringThreads()),await tEe(process.env.DEV_MODE?1:Se.get(JS.CONFIG_PARAMS.THREADS_COUNT)??Se.get(JS.CONFIG_PARAMS.THREADS)),Se.get(Kt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Jme(),t||BY()}catch(t){console.error(t),ts.error(t),process.exit(1)}}a(uEe,"main");function BY(){ts.suppressLogging(()=>{console.log($I.magenta(`HarperDB ${zme.version} successfully started`))}),ts.notify(cEe)}a(BY,"started");async function dEe(e=!0){UY=!e;try{Gi===void 0&&(Gi=sd()),Gi.enterPM2Mode(),await xY(),Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Gi.startClusteringProcesses(),await Gi.startService(Kt.PROCESS_DESCRIPTORS.HDB),BY(),e&&process.exit(0)}catch(t){console.error(t),ts.error(t),process.exit(1)}}a(dEe,"launch");function fEe(){let e=Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.LICENSE_KEY_DIR_NAME,Kt.LICENSE_FILE_NAME),t=Bo.join(e,Kt.LICENSE_FILE_NAME),r=Bo.join(e,Kt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=vY(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ho.isEmpty(n)||Ho.isEmpty(s))return;xo.mkdirpSync(e),xo.writeFileSync(r,n),xo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ts.error(s)}}a(fEe,"writeLicenseFromVars");Object.assign(kY,{launch:dEe,main:uEe,isHdbInstalled:HY,startupLog:_Ee});async function HY(){try{await xo.stat(Ho.getPropsFilePath()),await xo.stat(Se.get(Kt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ho.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ts.error(`Error checking for HDB install - ${e}`),e}return!0}a(HY,"isHdbInstalled");function _Ee(e){let r=a(_=>_.padEnd(20),"pad"),n=`
|
|
112
|
+
`;Se.get(Le.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Se.get(Le.REPLICATION_HOSTNAME)}
|
|
113
|
+
`),Se.get(Le.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Se.get(Le.REPLICATION_URL)}
|
|
114
|
+
`),n+=`${r("Worker Threads:")}${Se.get(Le.THREADS_COUNT)}
|
|
115
|
+
`,n+=`${r("Root Path:")}${Se.get(Le.ROOTPATH)}
|
|
116
|
+
`,Se.get(Le.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=Se.get(Le.THREADS_DEBUG_PORT)?`, TCP: ${Se.get(Le.THREADS_DEBUG_PORT)}
|
|
117
117
|
`:`
|
|
118
|
-
`);let s=
|
|
119
|
-
`,n+=r("Default:"),n+=
|
|
120
|
-
`,n+=r("Operations API:"),n+=
|
|
121
|
-
`,n+=r("MQTT:"),n+=
|
|
118
|
+
`);let s=Bo.join(Se.get(Le.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Se.get(Le.LOGGING_LEVEL)}, location: ${s+(Se.get(Le.LOGGING_STDSTREAMS)?", stdout/err":"")}
|
|
119
|
+
`,n+=r("Default:"),n+=Se.get(Le.HTTP_PORT)?`HTTP (and WS): ${Se.get(Le.HTTP_PORT)}, `:"",n+=Se.get(Le.HTTP_SECUREPORT)?`HTTPS (and WS): ${Se.get(Le.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${Se.get(Le.HTTP_CORS)?`enabled for ${Se.get(Le.HTTP_CORSACCESSLIST)}`:"disabled"}
|
|
120
|
+
`,n+=r("Operations API:"),n+=Se.get(Le.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${Se.get(Le.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=Se.get(Le.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${Se.get(Le.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${Se.get(Le.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${Se.get(Le.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${Se.get(Le.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
|
|
121
|
+
`,n+=r("MQTT:"),n+=Se.get(Le.MQTT_NETWORK_PORT)?`TCP: ${Se.get(Le.MQTT_NETWORK_PORT)}, `:"",n+=Se.get(Le.MQTT_NETWORK_SECUREPORT)?`TLS: ${Se.get(Le.MQTT_NETWORK_SECUREPORT)}`:"",n+=Se.get(Le.MQTT_WEBSOCKET)&&Se.get(Le.HTTP_PORT)?`, WS: ${Se.get(Le.HTTP_PORT)}`:"",n+=Se.get(Le.MQTT_WEBSOCKET)&&Se.get(Le.HTTP_SECUREPORT)?`, WSS: ${Se.get(Le.HTTP_SECUREPORT)}
|
|
122
122
|
`:`
|
|
123
|
-
`;let i=
|
|
124
|
-
`;let l=[],u=
|
|
125
|
-
`);let h=
|
|
123
|
+
`;let i=Se.get(Le.REPLICATION_PORT)??Se.get(Le.OPERATIONSAPI_NETWORK_PORT),o=Se.get(Le.REPLICATION_SECUREPORT)??Se.get(Le.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
|
|
124
|
+
`;let l=[],u=VI.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,p]of e)for(let S of p){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
|
|
125
|
+
`);let h=Se.get(Le.HTTP_PORT)?`HTTP: ${Se.get(Le.HTTP_PORT)}, `:"";h+=Se.get(Le.HTTP_SECUREPORT)?`HTTPS: ${Se.get(Le.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
|
|
126
126
|
`:n+=`${r(_+": ")}${h}
|
|
127
|
-
`;console.log(n),
|
|
127
|
+
`;console.log(n),Se.get(Le.LOGGING_STDSTREAMS)&&ts.logsAtLevel("info")&&ts.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(_Ee,"startupLog");function hEe(e){try{return Number.parseInt(xo.readFileSync(e,"utf8"),10)}catch{return null}}a(hEe,"readPidFile");function pEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(pEe,"isProcessRunning")});var tC=P(ko=>{"use strict";HA();var{isMainThread:YI,parentPort:Xh,threadId:ZS,workerData:mEe}=require("node:worker_threads"),{Socket:EEe,createServer:gEe}=require("node:net"),{createServer:SEe,IncomingMessage:TEe}=require("node:http"),{createServer:AEe}=require("node:https"),{createSecureServer:REe}=require("node:http2"),{Blob:yEe}=(fs(),D(fm)),{unlinkSync:jY,existsSync:bEe}=require("fs"),wn=X(),ot=ce(),Xt=(G(),D($)),{server:Zh}=(Dr(),D(ql)),{WebSocketServer:OEe}=require("ws"),{createServer:NEe}=require("node:tls"),{getTicketKeys:wEe,restartNumber:IEe,getWorkerIndex:yd}=st(),{Headers:WI,appendHeader:CEe}=(y_(),D(CB)),{recordAction:jh,recordActionBinary:qY}=(Ci(),D(R_)),{Request:QY,createReuseportFd:Jh}=(RE(),D(BB)),{checkMemoryLimit:PEe}=Ju(),{createTLSSelector:JY}=Zs(),{resolvePath:XY}=wt(),{startupLog:DEe}=FY(),{Readable:$Y}=require("node:stream"),LEe=ui(),ZY=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG);if(ZY){let e;if(YI)e=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wn.info("Could not close debugger",t)}});else{let t=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&yd()>=0&&(e=t+yd())}if(e){let t=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&YI)try{require("inspector").open(9229)}catch(e){IEe<=1&&wn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:ZLe,CONFIG_PARAMS:MEe}=Xt;ot.initSync();var vEe=ot.get(MEe.HTTP_SESSIONAFFINITY),qi={},zI=new Map;ko.registerServer=XI;ko.httpServer=eC;ko.deliverSocket=JI;ko.startServers=eW;ko.listenOnPorts=tW;ko.globals=LEe;ko.when_components_loaded=null;Zh.http=eC;Zh.request=xEe;Zh.socket=BEe;Zh.ws=HEe;Zh.upgrade=sW;var Qh={},XS={},eT={},jI=[];function eW(){return ko.when_components_loaded=sT().loadRootComponents(!0).then(()=>{Xh?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)JI(n,r,s);else if(t.requestId)UEe(t);else if(t.type===Xt.ITC_EVENT_TYPES.SHUTDOWN){wn.trace("received shutdown request",ZS);for(let i in qi){let o=qi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?wn.info(`Closing ${_.length} idle connections`):h&&wn.warn(`Forcefully closing ${_.length} active connections`);for(let p=0,S=_.length;p<S;p++){let g=_[p].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
|
|
128
128
|
Connection: close\r
|
|
129
129
|
\r
|
|
130
|
-
`))}},25).unref()}o.close?.(()=>{if(
|
|
131
|
-
`)}a(KY,"defaultNotFound")});var HY={};xe(HY,{startHTTPThreads:()=>MEe,startSocketServer:()=>sC,updateWorkerIdleness:()=>uW});async function MEe(e=2,t){try{if(t)rC(0,1,!0);else{let{loadRootComponents:r}=nT();if(e===0)return(0,Cs.setMainIsWorker)(!0),await ZI().startServers(),Promise.resolve([]);await r()}lW();for(let r=0;r<e;r++)rC(r,e);return Promise.all(cW)}finally{(0,Cs.threadsHaveStarted)()}}function lW(){let e=(0,iW.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),tC=setInterval(()=>{oT.notify(e)},LEe).unref())}function rC(e,t=1,r){if(eC++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:cA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===iA.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});cW.push(s),await s,Od.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=iT.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Od.indexOf(n);o>-1&&Od.splice(o,1)}if(a(i,"removeWorker"),Nd){let o=Nd;Nd=[];for(let c of o)aW[c.localPort](null,c)}}}),r){let n=setInterval(()=>{nC?nC=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),eC=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function sC(e=0,t){if(typeof e=="string")try{(0,aT.existsSync)(e)&&(0,aT.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=vEe:r=UEe(t):r=iC;let n=(0,wd.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=aW[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),nC=!0,r(i,(o,c)=>{if(!o){if(rW){let u=i._socket||new wd.Socket({handle:i,writable:!0,readable:!0});rW.deliverSocket(u,e,c),u.resume()}else eC>0?(Nd.length===0&&setTimeout(()=>{Nd.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,Nd.push(i)):(console.log("start up a dynamic thread to handle request"),rC(0));rr(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new wd.Socket({handle:i,writable:!0,readable:!0});HEe(u,o,e)}rr(!0,"socket-routed")})},oT.info(`HarperDB ${oW.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 iC(e,t){let r,n=0;for(let s of Od){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=sT)return sT=i,t(r);n=i}sT=0,t(r)}function vEe(e,t){let r={};e.getpeername(r);let n=r.address,s=Id.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);iC(e,o=>{Id.set(n,{worker:o,lastUsed:i}),t(o)})}function UEe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new wd.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Id.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);iC(n,d=>{Id.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function uW(){sT=0;for(let e of Od)e.expectedIdle=e.recentELU.idle+xEe,e.requests=1;Od.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function HEe(e,t,r){let n=BEe++;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(),iT.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")),iT.delete(n)),s.event=="destroy"&&(e.destroy(),iT.delete(n))})}var Cs,wd,oT,aT,sW,iW,oW,Od,Nd,aW,rW,eC,cW,tC,LEe,nC,sT,nW,Id,xEe,iT,BEe,$I=ye(()=>{Cs=M(nt()),wd=require("net");k();oT=M(X()),aT=require("fs");Ci();sW=require("worker_threads"),iW=M(Xu()),oW=M(pt()),Od=[],Nd=[],aW=[],eC=0,cW=[];sW.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===aA.RESTART&&tC&&(clearInterval(tC),lW())}));LEe=6e5;a(MEe,"startHTTPThreads");a(lW,"licenseWarning");a(rC,"startHTTPWorker");a(sC,"startSocketServer");sT=0;a(iC,"findMostIdleWorker");nW=36e5,Id=new Map;a(vEe,"findByRemoteAddressAffinity");a(UEe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Id)r.lastUsed+nW<e&&Id.delete(t)},nW).unref();xEe=1e3;a(uW,"updateWorkerIdleness");(0,Cs.setMonitorListener)(uW);iT=new Map,BEe=1;a(HEe,"proxySocket")});var OW=C((eMe,bW)=>{var fW=M(require("cluster")),Ka=M(ce());k();var $i=M(X()),_W=M(require("fastify")),hW=M(require("@fastify/cors")),mW=M(require("@fastify/compress")),pW=M(require("@fastify/static")),EW=M(Ub()),gW=M(require("path")),SW=M(pt()),TW=M(qs()),AW=M(oe()),RW=M(qn()),yW=M(Xu());Pr();var Ya=M(PS());to();Ka.default.initSync();var kEe=6e4,FEe=1024*1024*1024,GEe="TRUE",{CONFIG_PARAMS:tm}=$,Cd;bW.exports={hdbServer:dW,start:dW};async function dW(e){try{$i.default.debug("In Fastify server"+process.cwd()),$i.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),$i.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=fW.default.isMaster,await qEe();let t=e.securePort>0;Cd=$Ee(t),await Cd.ready(),e||(e={}),e.isOperationsServer=!0;try{Ke.http(Cd.server,e),Cd.server.closeIdleConnections||await Cd.listen({port:0,host:"::"})}catch(r){throw Cd.close(),$i.default.error(r),$i.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),$i.default.fatal(t),process.exit(1)}}a(dW,"operationsServer");async function qEe(){$i.default.trace("Configuring HarperDB process."),TW.default.setSchemaDataToGlobal(),await RW.default.setUsersWithRolesCache(),await yW.default.getLicense()}a(qEe,"setUp");function $Ee(e){$i.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=VEe(e),r=(0,_W.default)(t);r.server.headersTimeout=YEe(),r.setErrorHandler(Ya.serverErrorHandler);let n=KEe();n&&r.register(hW.default,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(EW.default),r.register(mW.default),r.register(pW.default,{root:gW.default.join(SW.PACKAGE_ROOT,"studio/build-local")}),Nf(r);let s=Ka.default.get(sA.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!AW.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Ya.reqBodyValidationHandler,Ya.authHandler],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),(0,Ya.handlePostRequest)(i,o)}),r.get("/health",()=>"HarperDB is running."),$i.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a($Ee,"buildServer");function VEe(e){let t=Ka.default.get(tm.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ka.default.get(tm.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:FEe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(VEe,"getServerOptions");function KEe(){let e=Ka.default.get(tm.OPERATIONSAPI_NETWORK_CORS),t=Ka.default.get(tm.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===GEe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(KEe,"getCORSOpts");function YEe(){return Ka.default.get(tm.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??kEe}a(YEe,"getHeaderTimeoutConfig")});var dC={};xe(dC,{disableNATS:()=>zEe,publishToStream:()=>uT,setNATSReplicator:()=>oC,setPublishToStream:()=>QEe,setSubscription:()=>uC,start:()=>WEe});function WEe(){rm.default.get(B.CLUSTERING_ENABLED)&&JEe()}function zEe(e=!0){PW=e}function QEe(e,t){uT=e,uC=t}function JEe(){if(PW||process.env._DISABLE_NATS)return;let e=Xe(),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];oC(s,r,i)}}sl((r,n)=>{oC(r.tableName,r.databaseName,r),n&&LW(r)}),!NW&&(NW=!0)}function oC(e,t,r){if(t==="system"&&XEe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends qr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){LW(i)}static subscribe(){let i=new Un;return uC(t,e,i),i}static subscribeOnThisThread(i){return i<(rm.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??jEe)}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 cT(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=DW;return i}a(n,"getNATSTransaction")}function LW(e){let t=rm.default.get(B.CLUSTERING_NODENAME);uT(`${cC.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lC.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 wW,cC,lC,IW,CW,rm,lT,PW,uT,uC,jEe,DW,NW,XEe,cT,aC,MW=ye(()=>{Ue();ra();wW=M(pr()),cC=M(Ct()),lC=M(uo());Wl();IW=M(Qb()),CW=M(ln()),rm=M(ce());k();lT=M(X());a(WEe,"start");a(zEe,"disableNATS");uT=wW.publishToStream,uC=IW.setSubscription;a(QEe,"setPublishToStream");jEe=2;a(JEe,"assignReplicationSource");XEe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(oC,"setNATSReplicator");a(LW,"publishSchema");cT=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=rm.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(lT.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(uT(`${cC.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,lC.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw lT.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},aC=class extends cT{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,CW.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};DW=new aC});async function HW({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await fC.get(e,{returnNonexistent:!0});i=new mC(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await fC.get(e);o&&o.delete()}i=new fT(e,t)}return n&&(n.id=e,n.user={username:t?.username},nm.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function _C(){return dT++,dT>65500&&(dT=1),dT}function hC(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=us.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return wt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var UW,Wa,xW,BW,vW,fC,nm,dT,fT,mC,kW=ye(()=>{Ue();Zl();UW=M(ln()),Wa=M(X());_c();xW=M(nt()),BW=M(ZI());Pr();vW=100,fC=ft({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),nm=ft({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,xW.getWorkerIndex)()===0&&(async()=>{await BW.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of nm.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ke.getUser(r.user.username));try{await hC(r,t,r)}catch{(0,Wa.warn)("Failed to publish will",t)}nm.delete(e.id)}})();a(HW,"getSession");dT=1;a(_C,"getNextMessageId");fT=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(y=>y.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Wa.trace)("Resuming subscription from",s,"from",o);let _=us.getMatch(u,"mqtt");if(!_){let y=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw y.statusCode=404,y}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let y=h.url.slice(1);if(y.indexOf("#")>-1&&y.indexOf("#")!==y.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,y.indexOf("+")===y.length-1)h.onlyChildren=!0,h.url="/"+y.slice(0,y.length-1);else{let E=y.split("/"),T;for(let H=0;H<E.length;H++)if(E[H].indexOf("+")>-1)if(E[H]==="+")T=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&T)throw new Error("Filters can not be combined");let N=!0;E[E.length-1]==="#"&&(E.length--,N=!1),T&&(n=a(H=>{let q=H.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(N&&q.length!==E.length)return!1;for(let Q=0;Q<E.length;Q++)if(E[Q]!=="+"&&E[Q]!==q[Q])return!1;return!0},"filter"));let x=E.indexOf("+");h.url="/"+(x>-1?E.slice(0,x):E).concat("").join("/")}}else h.isCollection=!1;let m=_.path,S=_.Resource,g=await wt(h,async()=>{let y=this.createContext();y.topic=s,y.retainHandling=i,y.isCollection=h.isCollection;let E=await S.subscribe(h,y);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let T=(async()=>{for await(let N of E)try{let x;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"&&N.type!=="patch"||n&&!n(N))continue;r?(N.topic=s,x=this.needsAcknowledge(N)):(N.acknowledge?.(),x=_C());let H=N.id;if(Array.isArray(H)&&(H=Xl(H)),H==null&&(H=""),await this.listener(m+"/"+H,N.value,x,t)===!1)break;this.awaitingAcks?.size>vW?await new Promise(Q=>setTimeout(Q,this.awaitingAcks.size-vW)):await new Promise(setImmediate)}catch(x){(0,Wa.warn)(x)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=_C();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 hC(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();wt(r,async()=>{try{if(!t){let n=await nm.get(this.sessionId);n?.doesExist()&&await hC(n,n.data,r)}}finally{await nm.delete(this.sessionId)}}).catch(n=>{(0,Wa.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(hC,"publish");mC=class extends fT{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=_C(),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,Wa.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,UW.getNextMonotonicTime)()),(0,Wa.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),fC.put(this.sessionRecord)}}});var EC={};xe(EC,{bypassAuth:()=>ZEe,start:()=>ege});function ZEe(){VW=!0}function ege({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new $W.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),fr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:m}=GW(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",m),u.on("error",S=>{fr.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),fr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Pd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&hT.notify?.({username:f?.username,status:Us.SUCCESS,type:Wo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(m){throw(0,Pd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&hT.error?.({username:_,status:Us.FAILURE,type:Wo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),m}}else fr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),fr.error?.(_)}else if(l.required)return fr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&VW&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,qW.getSuperUser)(),fr.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=GW(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{fr.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function GW(e,t,r,n,s){FW||(FW=!0,T_(d=>{_T>0&&d.push({metric:"mqtt-connections",connections:_T,byThread:!0})}));let i;_T++;let o,c={protocolVersion:4},l=(0,mT.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){_T--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!1,"connection","mqtt","disconnect"),fr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){fr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,m=_?.indexOf("/",1),S=m>0?_.slice(0,m):_;rr(d.length,"bytes-received",S,y(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Ke.getUser(d.username,d.password.toString(),r),(0,Pd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&hT.notify?.({username:n?.username,status:Us.SUCCESS,type:Wo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(se){return(0,Pd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&hT.error?.({username:d.username,status:Us.FAILURE,type:Wo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,se),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let se=e.deserialize||(e.deserialize=so(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?se(d.will.payload):void 0,delete d.will.payload}o=HW({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(se){return fr.error?.(se),s.events.emit("auth-failed",d,e,se),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:se.code||5,returnCode:se.code||128})}s.events.emit("connected",o,e),Wn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let T=a(async(se,W,ne,ue)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",se);let ie=se.indexOf("/",1),Re=ie>0?se.slice(0,ie):se;g({cmd:"publish",topic:se,payload:await E(W),messageId:ne||Math.floor(Math.random()*1e8),qos:ue.qos},Re);let Ee=e._socket??e;return Ee.writableNeedDrain?new Promise(Ae=>Ee.once("drain",Ae)):!Ee.closed}catch(ie){return fr.error?.(ie),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(T),o.sessionWasPresent&&await o.resume();break;case"subscribe":let N=[];for(let se of d.subscriptions){let W;try{let ne=await o.addSubscription(se,se.qos>=1);W=ne?ne.qos||0:c.protocolVersion<5?128:143}catch(ne){s.events.emit("error",ne,e,se,o),ne.statusCode?ne.statusCode===500?fr.warn?.(ne):fr.info?.(ne):fr.error?.(ne),W=c.protocolVersion<5?128:ne.statusCode===403?135:ne.statusCode===404?143:128}N.push(W)}await o.committed,g({cmd:"suback",granted:N,messageId:d.messageId});break;case"unsubscribe":{let se=[];for(let W of d.unsubscriptions)se.push(o.removeSubscription(W)?0:17);g({cmd:"unsuback",granted:se,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let x=d.qos===2?"pubrec":"puback",H=e.deserialize||(e.deserialize=so(r?.headers.get?.("content-type"))),Q=(d.payload?.length||0)>0?H(d.payload):void 0,te;try{te=await o.publish(d,Q)}catch(se){s.events.emit("error",se,e,d,o),fr.warn?.(se),d.qos>0&&g({cmd:x,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:x,messageId:d.messageId,reasonCode:te===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!0,"connection","mqtt","disconnect"),fr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),fr.error?.(T),g({cmd:"disconnect"})}function g(T,N){let x=(0,mT.generate)(T,c);t(x),rr(x.length,"bytes-sent",N,y(T),"mqtt")}a(g,"sendPacket");function y(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(y,"packetMethodName");function E(T){return ia(T,r)}a(E,"serialize")}),l.on("error",d=>{fr.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var mT,qW,Pd,pC,$W,hT,fr,VW,FW,_T,KW=ye(()=>{mT=require("mqtt-packet");kW();qW=M(qn());to();Ci();Pr();Pd=M(ce());k();pC=M(pi()),$W=require("events"),hT=(0,pC.loggerWithTag)("auth-event"),fr=(0,pC.loggerWithTag)("mqtt"),VW=(0,Pd.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(ZEe,"bypassAuth");a(ege,"start");_T=0;a(GW,"onSocket")});var yh={};xe(yh,{component_errors:()=>Ld,getComponentName:()=>ige,loadComponent:()=>gT,loadComponentDirectories:()=>jW,setErrorReporter:()=>sge});function jW(e,t){t&&(SC=t),e&&(RC=e);let r=[];if((0,lt.existsSync)(gC)){let s=(0,lt.readdirSync)(gC,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,St.join)(gC,o);r.push(gT(c,SC,eA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(gT(n,SC,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{QW=!0})}function sge(e){sm=e}function oge(e,t){return new Promise((r,n)=>{let s=Xe().system.hdb_info;if(!s)return r();let i=setTimeout(()=>{s.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(s.primaryStore.attemptLock(e,0,()=>{clearTimeout(i),r()}))try{(0,lt.rmSync)(t,{recursive:!0,force:!0}),(0,lt.existsSync)((0,St.join)(e,"node_modules"))||(0,lt.mkdirSync)((0,St.join)(e,"node_modules")),(0,lt.symlinkSync)(OC.PACKAGE_ROOT,t,"dir"),r()}finally{s.primaryStore.unlock(e,0)}})}async function gT(e,t,r,n,s,i){let o=(0,lt.realpathSync)(e);if(pT.has(o))return pT.get(o);pT.set(o,!0),s&&(RC=s);try{let c;n&&(Ld=new Map);let l=(0,St.join)(e,"harperdb-config.yaml");(0,lt.existsSync)(l)?c=n?(0,ST.getConfigObj)():(0,TC.parseDocument)((0,lt.readFileSync)(l,"utf8")).toJSON():!n&&(0,lt.existsSync)(l=(0,St.join)(e,"config.yaml"))?c=(0,TC.parseDocument)((0,lt.readFileSync)(l,"utf8")).toJSON():c=yC;try{let d=(0,St.join)(e,"node_modules","harperdb");(n||((0,lt.existsSync)(d)||!e.startsWith((0,AC.getHdbBasePath)()))&&(!(0,lt.existsSync)(d)||(0,lt.realpathSync)(OC.PACKAGE_ROOT)!==(0,lt.realpathSync)(d)))&&await oge(e,d)}catch(d){Ll.default.error("Error symlinking harperdb module",d),d.code=="EPERM"&&process.platform==="win32"&&Ll.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=ET,f=n;for(let d in c){ET=d;let h=c[d];if(Ld.set(n?d:(0,St.basename)(e),!1),!h)continue;let _,m=h.package;try{if(m){let T=e,N;for(;!(0,lt.existsSync)(N=(0,St.join)(T,"node_modules",d));)if(T=(0,St.dirname)(T),T.length<(0,AC.getHdbBasePath)().length){N=null;break}if(N)_=await gT(N,t,r,!1),f=!0;else throw new Error(`Unable to find package ${d}:${m}`)}else _=nge[d];if(!_)continue;let S=a(T=>(T.origin=r,ft(T)),"ensureTable"),g=h.network||(h.port||h.securePort)&&h,y=g?.securePort||g?.https&&g.port,E=!g?.https&&g?.port;if(Dd.isMainThread&&(_=await _.startOnMainThread?.({server:Ke,ensureTable:S,port:E,securePort:y,resources:t,...h})||_,n&&g))for(let T of[E,y])try{if(+T&&!YW.includes(T)){let N=bC.get(B.HTTP_SESSIONAFFINITY);N&&Ll.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!AE)&&(YW.push(T),sC(T,N))}}catch(N){console.error("Error listening on socket",T,N,d)}if(t.isWorker&&(_=await _.start?.({server:Ke,ensureTable:S,port:E,securePort:y,resources:t,...h})||_),RC.set(_,!0),(_.handleFile||_.handleDirectory||_.setupFile||_.setupDirectory)&&h.files!=null){if(h.files.includes(".."))throw(0,zW.handleHDBError)("Can not reference parent directories");let T=(0,St.join)(e,h.files).replace(/\\/g,"/"),N=T.indexOf("/*");if(N>-1&&h.files!==yC[d]?.files&&!(0,lt.existsSync)(T.slice(0,N)))throw new Error(`The path '${T.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${h.files}'`);let x=(0,St.basename)(e),H=h.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+x+H.slice(2):H==="."?"/"+x:"/"+x+"/"+H;let q,Q,te;if(h.root){let W=h.root;W.startsWith("/")&&(W=W.slice(1)),W.endsWith("/")&&(W=W.slice(0,-1)),W+="/",Q=(0,St.join)(e,W)}else(te=T.indexOf("/*"))>-1?(Q=T.slice(0,te+1),q=(0,St.relative)(e,Q)):h.files.indexOf("/")>-1&&(Q=T.slice(0,T.lastIndexOf("/")+1),q=(0,St.relative)(e,Q));let se=!1;if(Dd.isMainThread&&_.setupDirectory&&(se=await _.setupDirectory?.(H,Q,t)),t.isWorker&&_.handleDirectory&&(se=await _.handleDirectory?.(H,Q,t)),se){f=!0;continue}for(let W of await(0,WW.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:ne,dirent:ue}=W;f=!0;let ie=(0,St.relative)(e,ne).replace(/\\/g,"/");if(q)if(ie.startsWith(q))ie=ie.slice(q.length+1);else throw new Error(`The root path '${h.root}' does not reference a valid part of the file path '${ie}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Re=H+(H.endsWith("/")?"":"/")+ie;try{if(ue.isFile()){let Ee=await rge(ne);Dd.isMainThread&&await _.setupFile?.(Ee,Re,ne,t),t.isWorker&&await _.handleFile?.(Ee,Re,ne,t)}else Dd.isMainThread&&await _.setupDirectory?.(Re,ne,t),t.isWorker&&await _.handleDirectory?.(Re,ne,t)}catch(Ee){let Ae=`Could not load ${ue.isFile()?"file":"directory"} '${ne}'${h.module?` using '${h.module}'`:""} for application '${e}' due to:
|
|
132
|
-
`;Ee.message=`${Ae}${Ee.message}`,Ee.stack=`${Ae}${Ee.stack}`,sm?.(Ee),Ll.default.error(Ee),t.set(h.path||"/",new na(Ee)),Ld.set(n?d:(0,St.basename)(e),Ee.message)}}}}catch(S){S.message=`Could not load component '${d}' for application '${(0,St.basename)(e)}' due to: ${S.message}`,sm?.(S),((0,im.getWorkerIndex)()===0?console:Ll.default).error(S),t.set(h.path||"/",new na(S),null,!0),Ld.set(n?d:(0,St.basename)(e),S.message)}}if(ET=u,Dd.isMainThread&&!QW&&i&&(0,im.watchDir)(e,async()=>jW()),c.extensionModule){let d=await pE((0,St.join)(e,c.extensionModule));return pT.set(o,d),d}if(!f&&t.isWorker){let d=`${e} did not load any modules, resources, or files, is this a valid component?`;sm?.(new Error(d)),((0,im.getWorkerIndex)()===0?console:Ll.default).error(d),Ld.set((0,St.basename)(e),d)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,sm?.(c),t.set("",new na(c))}}var lt,St,Dd,TC,bC,OC,WW,im,Ll,zW,AC,tge,ST,rge,gC,RC,QW,SC,Ld,nge,yC,YW,pT,sm,ET,ige,bh=ye(()=>{lt=require("fs"),St=require("path"),Dd=require("worker_threads"),TC=require("yaml"),bC=M(ce()),OC=M(pt());k();iL();FL();jx();eB();tB();kB();tK();aK();lK();WW=M(require("fast-glob")),im=M(nt()),Ll=M(X());Eb();Pr();zW=M(pe());Ue();$I();AC=M(ce()),tge=M(OW());Qg();MW();ms();KW();ST=M(Nt());RE();xA();({readFile:rge}=lt.promises),gC=(0,ST.resolvePath)(bC.get(B.COMPONENTSROOT)),RC=new Map,Ld=new Map;a(jW,"loadComponentDirectories");nge={REST:bE,rest:bE,graphql:rR,graphqlSchema:FA,roles:pb,jsResource:Sb,fastifyRoutes:iI,login:Ab,static:oI,operationsApi:tge,customFunctions:{},http:{},clustering:dC,replication:Ta,authentication:ph,mqtt:EC,loadEnv:aI},yC={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(yC,"static",{value:{files:"web/**"}});YW=[],pT=new Map;a(sge,"setErrorReporter");ige=a(()=>ET,"getComponentName");a(oge,"symlinkHarperModule");a(gT,"loadComponent")});var nT=C((PMe,XW)=>{var{isMainThread:JW}=require("worker_threads"),{getTables:age,getDatabases:IMe,table:CMe}=(Ue(),P(ot)),{loadComponentDirectories:cge,loadComponent:lge}=(bh(),P(yh)),{resetResources:uge}=(Zl(),P(tL)),dge=nw(),fge=Nt(),{dirname:_ge}=require("path"),{getConnection:hge}=pr(),mge=ce(),{CONFIG_PARAMS:pge}=(k(),P($)),{loadCertificates:Ege}=Xs(),NC=new Map;async function gge(e=!1){!JW&&mge.get(pge.CLUSTERING_ENABLED)&&hge();try{JW&&await dge()}catch(n){console.error(n)}let t=uge();age(),t.isWorker=e,await Ege(),await lge(_ge(fge.getConfigFilePath()),t,"hdb",!0,NC),await cge(NC,t);let r=[];for(let[n]of NC)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(gge,"loadRootComponents");XW.exports.loadRootComponents=gge});var nt=C((LMe,ci)=>{"use strict";BA();var{Worker:Sge,MessageChannel:Tge,parentPort:Vi,isMainThread:DC,threadId:Age,workerData:Ki}=require("worker_threads"),{PACKAGE_ROOT:Rge}=pt(),{join:rz,isAbsolute:yge,extname:bge}=require("path"),{server:nz}=(Pr(),P(Vl)),{watch:Oge,readdir:Nge}=require("fs/promises"),{totalmem:ZW}=require("os"),Md=(k(),P($)),sz=ce(),ai=X(),{randomBytes:wge}=require("crypto"),{_assignPackageExport:Ige}=ui(),ez=1024*1024,za=[],Ps=[],Cge=50,LC=1e4,Pge="restart",iz="request_thread_info",oz="resource_report",az="thread_info",cz="added-port",Dge="ack",wC;Ige("threads",Ps);ci.exports={startWorker:IC,restartWorkers:vC,shutdownWorkers:xge,workers:za,setMonitorListener:Vge,onMessageFromWorkers:Bge,onMessageByType:mz,broadcast:kge,broadcastWithAcknowledgement:Gge,setChildListenerByType:Uge,getWorkerIndex:lz,getWorkerCount:uz,getTicketKeys:fz,setMainIsWorker:Mge,setTerminateTimeout:Lge,restartNumber:Ki?.restartNumber||1};Ps.onMessageByType=mz;Ps.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ps.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};ci.exports.whenThreadsStarted=new Promise(e=>{ci.exports.threadsHaveStarted=e});var MC;function Lge(e){LC=e}a(Lge,"setTerminateTimeout");function lz(){return Ki?Ki.workerIndex:MC?0:void 0}a(lz,"getWorkerIndex");function uz(){return Ki?Ki.workerCount:MC?1:void 0}a(uz,"getWorkerCount");function Mge(e){MC=e,ci.exports.threadsHaveStarted()}a(Mge,"setMainIsWorker");var dz=1,TT;function fz(){return TT||(TT=DC?wge(48):Ki.ticketKeys,TT)}a(fz,"getTicketKeys");Object.defineProperty(nz,"workerIndex",{get(){return lz()}});Object.defineProperty(nz,"workerCount",{get(){return uz()}});var _z={[iz](e,t){qge(t)},[oz](e,t){$ge(t,e)}};function IC(e,t={}){let r=process.constrainedMemory?.()||ZW();r=Math.min(r,ZW(),2e4*ez);let n=sz.get(Md.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/ez/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ps){let u=new Tge;u.existingPort=l,i.push(u),o.push(u.port2)}bge(e)||(e+=".js");let c=new Sge(yge(e)?e:rz(Rge,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:dz=t.threadCount,name:t.name,restartNumber:ci.exports.restartNumber,ticketKeys:fz()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:cz,port:l,threadId:c.threadId},[l]);return RT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>IC(e,t),c.on("error",l=>{ai.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{za.splice(za.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Cge?(t.unexpectedRestarts=c.unexpectedRestarts+1,IC(e,t)):ai.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{_z[l.type]?.(l,c)}),za.push(c),Yge(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(IC,"startWorker");var vge=[Md.THREAD_TYPES.HTTP];async function vC(e=null,t=Math.max(dz>3,1),r=!0){if(DC){try{process.chdir(process.cwd())}catch(o){ai.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=nT();await o()}ci.exports.restartNumber++,t<1&&(t=t*za.length);let n=[],s=[];for(let o of za.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ai.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ci.exports.restartNumber,type:Md.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=vge.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{ai.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},LC*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===Md.ITC_EVENT_TYPES.CHILD_STARTED&&(ai.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");ai.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=sd();r&&(e==="http"||!e)&&sz.get(Md.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vi.postMessage({type:Pge,workerType:e})}a(vC,"restartWorkers");function Uge(e,t){_z[e]=t}a(Uge,"setChildListenerByType");function xge(e){return vC(e,1/0,!1)}a(xge,"shutdownWorkers");var hz=[];function Bge(e){hz.push(e)}a(Bge,"onMessageFromWorkers");var CC=new Map;function mz(e,t){let r=CC.get(e);r||CC.set(e,r=[]),r.push(t)}a(mz,"onMessageByType");var Hge=10;async function kge(e,t){let r=0;for(let n of Ps)try{n.postMessage(e),r++>Hge&&(r=0,await new Promise(setImmediate))}catch(s){ai.error("Unable to send message to worker",s)}t&&Ez(e,null)}a(kge,"broadcast");var AT=new Map,Fge=1;function Gge(e){return new Promise(t=>{let r=0;for(let n of Ps)try{let s=Fge++,i=a(()=>{AT.delete(s),--r===0&&t(),n!==Vi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,AT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of AT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ai.error("Unable to send message to worker",s)}r===0&&t()})}a(Gge,"broadcastWithAcknowledgement");function qge(e){e.postMessage({type:az,workers:pz()})}a(qge,"sendThreadInfo");function pz(){let e=Date.now();return za.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(pz,"getChildWorkerInfo");function $ge(e,t){e.resources=t,e.resources.updated=Date.now()}a($ge,"recordResourceReport");var PC;function Vge(e){PC=e}a(Vge,"setMonitorListener");var Kge=1e3,tz=!1;function Yge(){tz||(tz=!0,setInterval(()=>{for(let e of za){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}PC&&PC()},Kge).unref())}a(Yge,"startMonitoring");var Wge=1e3;if(Vi&&Ki?.addPorts){RT(Vi);for(let e=0,t=Ki.addPorts.length;e<t;e++){let r=Ki.addPorts[e];r.threadId=Ki.addThreadIds[e],RT(r)}setInterval(()=>{let e=process.memoryUsage();Vi.postMessage({type:oz,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Wge).unref(),wC=a(()=>new Promise((e,t)=>{Vi.on("message",r),Vi.postMessage({type:iz});function r(n){n.type===az&&(Vi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else wC=pz;ci.exports.getThreadInfo=wC;function RT(e,t){Ps.push(e),e.on("message",r=>{if(r.type===cz)r.port.threadId=r.threadId,RT(r.port);else if(r.type===Dge){let n=AT.get(r.id);n&&n()}else Ez(r,e)}).on("close",()=>{Ps.splice(Ps.indexOf(e),1)}).on("exit",()=>{Ps.splice(Ps.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(RT,"addPort");function Ez(e,t){for(let n of hz)n(e,t);let r=CC.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ai.error(s)}}a(Ez,"notifyMessageListeners");if(DC){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Nge(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(rz(s,o.name));try{for await(let{filename:o}of Oge(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await vC(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");ci.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Vi.on("message",async e=>{let{type:t}=e;t===Md.ITC_EVENT_TYPES.SHUTDOWN&&(ci.exports.restartNumber=e.restartNumber,Vi.unref(),setTimeout(()=>{ai.warn("Thread did not voluntarily terminate",Age),process.exit(0)},LC).unref())})});var mx={};xe(mx,{ACTION_32_BIT:()=>Sp,ACTION_64_BIT:()=>Jge,AUDIT_STORE_OPTIONS:()=>dh,Decoder:()=>nl,HAS_BLOBS:()=>mn,HAS_CURRENT_RESIDENCY_ID:()=>Oc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mf,HAS_ORIGINATING_OPERATION:()=>Lf,HAS_PREVIOUS_RESIDENCY_ID:()=>Nc,REMOTE_SEQUENCE_UPDATE:()=>ng,createAuditEntry:()=>yc,getLastRemoved:()=>Qge,openAuditStore:()=>OT,readAuditEntry:()=>It,removeAuditEntry:()=>NT,setAuditRetention:()=>jge,transactionKeyEncoder:()=>Nz});function OT(e){let t=e.auditStore=e.openDB(UC.AUDIT_STORE_NAME,{create:!1,...dh});t||(t=e.auditStore=e.openDB(UC.AUDIT_STORE_NAME,dh),Sz(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,f){return r[l]=f,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=BC;Qh(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(f=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let d=0,h,_;try{for(let{key:m,value:S}of t.getRange({start:1,snapshot:!1,end:Date.now()-xC/(1+i*i)})){try{h=NT(t,m,S)}catch(g){vd.warn("Error removing audit entry",g)}if(_=m,await new Promise(setImmediate),++d>=zge){o=10;break}}await h}finally{d===0?o=Math.min(o<<1,xC/10):(Sz(t,_),o>100&&(o=o>>1)),f(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,am.getWorkerIndex)()===(0,am.getWorkerCount)()-1&&c(),(0,am.getWorkerIndex)()===0&&!gz)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(gz=!0,vd.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 NT(e,t,r){let n=Xge(r),s;if(n&mn){s=It(r);let i=e.tableStores[s.tableId],o=i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&gc(()=>sa(s.getValue(i)),i.rootStore)}if((n&15)===HC){s=s||It(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 Sz(e,t){kC[0]=t,e.put(Symbol.for("last-removed"),wz)}function Qge(e){let t=e.get(Symbol.for("last-removed"));if(t)return wz.set(t),kC[0]}function jge(e,t=BC){xC=e,BC=t}function yc(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=Iz[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let m=1;if(n&&(n>1?Qa.setFloat64(0,n):Ds.set(fR),m=9),l){if(l&255)throw new Error("Illegal extended type");m+=3}y(s),y(t),g(r),Qa.setFloat64(m,e),m+=8,l&Oc&&y(u),l&Nc&&y(f),l&Mf&&(Qa.setFloat64(m,d),m+=8),l&Lf&&y(Cz[h]),i?g(i):Ds[m++]=0,l?Qa.setUint32(n?8:0,_|l|3221225472):Ds[n?8:0]=_;let S=Ds.subarray(0,m);if(c)return Buffer.concat([S,c]);return S;function g(E){let T=m;m+=1,m=(0,Ml.writeKey)(E,Ds,m);let N=m-T-1;N>127?N>16383?(vd.error("Key or username was too large for audit entry",E),m=T+1,Ds[T]=0):(Ds.copyWithin(T+2,T+1,m),Qa.setUint16(T,N|32768),m++):Ds[T]=N}function y(E){E<128?Ds[m++]=E:E<16384?(Qa.setUint16(m,E|32768),m+=2):E<1056964608?(Qa.setUint32(m,E|3221225472),m+=4):(Ds[m]=255,Qa.setUint32(m+1,E),m+=5)}}function Xge(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 nl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function It(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new nl(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,m,S;if(i&Oc&&(h=n.readInt()),i&Nc&&(_=n.readInt()),i&Mf&&(m=n.readFloat64()),i&Lf){let T=n.readInt();S=Cz[T]}l=n.readInt();let g=n.position,y=n.position+=l,E;return{type:Iz[i&7],tableId:c,nodeId:o,get recordId(){return(0,Ml.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return y>g?(0,Ml.readKey)(e,g,y):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(T,N,x){if(i&yT||i&om&&!N)return E||(E=gc(()=>T.decoder.decode(e.subarray(n.position,r)),T.rootStore)),E;if(i&om&&x)return tb(T.getEntry(this.recordId),x,T)},getBinaryValue(){return i&(yT|om)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:m,originatingOperation:S}}catch(n){return vd.error("Reading audit entry error",n,e),{}}}var Ml,bT,UC,am,Oz,vd,Ds,Qa,Nz,dh,xC,zge,kC,wz,BC,gz,yT,om,Tz,HC,Az,Rz,yz,bz,Sp,Jge,ng,Oc,Nc,Lf,Mf,mn,Iz,Cz,nl,io=ye(()=>{Ml=require("ordered-binary"),bT=M(ce()),UC=M(Ht());k();am=M(nt()),Oz=M(oe());su();vd=M(X());nE();fs();QS();(0,bT.initSync)();Ds=Buffer.alloc(2816),Qa=new DataView(Ds.buffer,Ds.byteOffset,2816),Nz={writeKey(e,t,r){return e===Df?(t.set(Df,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ml.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,Ml.readKey)(e,t,r)}},dh={encoding:"binary",keyEncoder:Nz},xC=(0,Oz.convertToMS)((0,bT.get)(B.LOGGING_AUDITRETENTION))||86400*3,zge=1e3,kC=new Float64Array(1),wz=new Uint8Array(kC.buffer),BC=1e4,gz=!1;a(OT,"openAuditStore");a(NT,"removeAuditEntry");a(Sz,"updateLastRemoved");a(Qge,"getLastRemoved");a(jge,"setAuditRetention");yT=16,om=32,Tz=1,HC=2,Az=3,Rz=4,yz=5,bz=6,Sp=14,Jge=15,ng=11,Oc=512,Nc=1024,Lf=2048,Mf=4096,mn=8192,Iz={put:Tz|yT,[Tz]:"put",delete:HC,[HC]:"delete",message:Az|yT,[Az]:"message",invalidate:Rz|om,[Rz]:"invalidate",patch:yz|om,[yz]:"patch",relocate:bz,[bz]:"relocate"},Cz={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(yc,"createAuditEntry");a(Xge,"readAction");a(It,"readAuditEntry");nl=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function qC(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Dz,Zge(e.primaryStore,e.auditStore)):(c=Pz,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Lz(Pz[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Xl(t);let f=new GC(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function Lz(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),Mz(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=It(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Xl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,FC.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,FC.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d!==l.length-1&&u++,d>-1?l=l.slice(0,d+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Zge(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=Dz[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{Lz(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function Mz(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Gk(e){return e.nextTransaction||(qC({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),Mz(e)),e.nextTransaction}var FC,Pz,Dz,GC,LO=ye(()=>{FC=M(X());Wl();Zl();io();Pz=Object.create(null),Dz=Object.create(null);a(qC,"addSubscription");GC=class extends Un{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(Lz,"notifyFromTransactionData");a(Zge,"listenToCommits");a(Mz,"nextTransaction");a(Gk,"whenNextTransaction")});var Fw={};xe(Fw,{EVICTED:()=>ta,INVALIDATED:()=>fn,coerceType:()=>CT,makeTable:()=>DT,setServerUtilities:()=>aSe});function DT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:m,evictionMS:S,audit:g,trackDeletes:y}=e;S??=0;let{attributes:E}=e;E||(E=[]);let T=mR(i,n,l),N,x,H={},q=Promise.resolve(),Q,te,se;for(let Y of E)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(Q=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(te=Y),Y.expiresAt&&(se=Y),Y.isPrimaryKey&&(H=Y);let W,ne=[],ue=[],ie=1,Re=2,Ee={},Ae={},vt=864e5,ut=0,Cn,nn,Nr,Fd=!1,tc,VT=new Map,KT=new Map,Ut,Gd,qd=Ul.get(B.REPLICATION_DATABASES);if(Array.isArray(qd)){for(let Y of qd)if(Y.name===c&&Y.replicateTo>=0){Gd=Y.replicateTo;break}}let YT=i.getRange({start:!1,end:!1}).constructor,gm=10,$d=6;g&&Gl(),Qh(i.env.path,Y=>{if(x)return sc(Y)});class Ce extends qr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=Q;static updatedTimeProperty=te;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return m}static dbisDB=f;static schemaDefined=u;static sourcedFrom(p,O){if(O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource)p.intermediateSource=!0,this.sources.unshift(p);else{if(this.sources.some(b=>!b.intermediateSource)){if(this.sources.some(b=>b.name===p.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(p)}x=x||p.get&&(!p.get.reliesOnPrototype||p.prototype.get),N=N||p.load;let D=a(b=>{let U=this.sources;if(U=U.filter(v=>v.intermediateSource&&v[b]&&(!v[b].reliesOnPrototype||v.prototype[b])),U.length>0)if(U.length===1){let v=U[0];return(I,L,G)=>{if(I?.source!==v)return v[b](L,G,I)}}else return(v,I,L)=>{let G=[];for(let z of U){if(v?.source===z)break;G.push(z[b](I,L,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1];A.intermediateSource&&(A={});let R=a(b=>{if(A[b]&&(!A[b].reliesOnPrototype||A.prototype[b]))return(U,v,I)=>{if(!U?.source)return A[b](v,I,U)}},"getApplyToCanonicalSource");Ee={put:R("put"),patch:R("patch"),delete:R("delete"),publish:R("publish")},Ae={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")};let w=A.shouldRevalidateEvents;return(async()=>{let b=!1,U,v=a(async(I,L)=>{let G=I.value,z=I.table?Ye[c][I.table]:Ce;if(c===zd&&(I.table===ql.ROLE_TABLE_NAME||I.table===ql.USER_TABLE_NAME)&&(b=!0),I.id===void 0&&(I.id=G[z.primaryKey],I.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(I));I.source=p;let j={residencyId:zi(I.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:I.nodeId},F=await z.getResource(I.id,L,j);switch(I.finished&&await I.finished,I.type){case"put":return w?F._writeInvalidate(G,j):F._writeUpdate(G,!0,j);case"patch":return w?F._writeInvalidate(G,j):F._writeUpdate(G,!1,j);case"delete":return F._writeDelete(j);case"publish":case"message":return F._writePublish(G,j);case"invalidate":return F._writeInvalidate(G,j);case"relocate":return F._writeRelocate(j);default:Be.default.error?.("Unknown operation",I.type,I.id)}},"writeUpdate");try{let I=p.subscribe;I&&y==null&&(y=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=p.subscribeOnThisThread?p.subscribeOnThisThread((0,vl.getWorkerIndex)(),L):(0,vl.getWorkerIndex)()===0,z=I&&G&&await p.subscribe?.(L);if(z){let j;for await(let F of z)try{if(!(F.type==="transaction"?F.writes[0]:F)){Be.default.error?.("Bad subscription event",F);continue}if(F.source=p,F.type==="end_txn"){if(j?.resolve(),F.localTime&&U!==F.localTime){if(F.remoteNodeIds?.length>0){let ae=[Symbol.for("seq"),F.remoteNodeIds[0]],V=f.get(ae),J=V?.nodes;J||(J=[]);for(let me of F.remoteNodeIds.slice(1)){let fe=J.find(ve=>ve.id===me);J=J.filter(ve=>ve.id!==me||ve===fe),fe||(fe={id:me,seqId:0},J.push(fe)),fe.seqId=Math.max(V?.seqId??1,F.localTime),me===j?.nodeId&&(fe.lastTxnTime=F.timestamp)}let de=Math.max(V?.seqId??1,F.localTime);Be.default.trace?.("Received txn",c,de,new Date(de),F.localTime,new Date(F.localTime),F.remoteNodeIds),f.put(ae,{seqId:de,nodes:J})}U=F.localTime}F.onCommit&&j?.committed.then(F.onCommit);continue}if(j)if(F.beginTxn)j.resolve();else{j.write_promises.push(v(F,j));continue}!F.timestamp&&F.version&&(F.timestamp=F.version);let he=wt(F,()=>{if(F.type==="transaction"){let ae=[];for(let V of F.writes)try{ae.push(v(V,F))}catch(J){throw J.message+=" writing "+JSON.stringify(V)+" of event "+JSON.stringify(F),J}return Promise.all(ae)}else if(F.type==="define_schema"){let ae=this.attributes.slice(0),V;for(let J of F.attributes)ae.find(de=>de.name===J.name)||(ae.push(J),V=!0);V&&(ft({table:s,database:c,attributes:ae,origin:"cluster"}),lm.signalSchemaChange(new um.SchemaEventMsg(process.pid,Vt.CREATE_TABLE,c,s)))}else return F.beginTxn?(j=F,j.write_promises=[v(F,F)],new Promise(ae=>{j.resolve=()=>ae(Promise.all(j.write_promises))})):v(F,F)});j&&(j.committed=he),b&&he&&!he?.waitingForUserChange&&(he.then(()=>lm.signalUserChange(new um.UserEventMsg(process.pid))),he.waitingForUserChange=!0),F.onCommit&&(he?he.then(F.onCommit):F.onCommit())}catch(De){Be.default.error?.("error in subscription handler",De)}}}catch(I){Be.default.error?.(I)}})(),this}static get isCaching(){return x}static get shouldRevalidateEvents(){return this.prototype.get!==Ce.prototype.get}static getResource(p,O,D){let A=super.getResource(p,O,D);if(p!=null){wr(p);try{if(A.getRecord?.())return A;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let R=!D?.async||i.cache?.get?.(p),w=Ir(O),b=w.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Pn(p,O,{transaction:b,ensureLoaded:D?.ensureLoaded},R,U=>{if(U?Ce._updateResource(A,U):A.#e=null,O.onlyIfCached&&O.noCacheStore){if(!A.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let v=sn(p,U,O,A);if(v)return w?.disregardReadTxn(),A.#i=!0,VC(v,I=>(Ce._updateResource(A,I),A))}return A})}catch(R){throw R.message.includes("Unable to serialize object")&&(R.message+=": "+JSON.stringify(p)),R}}return A}static _updateResource(p,O){p.#r=O,p.#e=O?.value??null,p.#n=O?.version}ensureLoaded(){let p=sn(this.getId(),this.#r,this.getContext());if(p)return this.#i=!0,VC(p,O=>{this.#r=O,this.#e=O.value,this.#n=O.version})}static getNewId(){let p=H?.type;if(p==="String"||p==="ID")return super.getNewId();if(!Ut){let R=i.getEntry(Symbol.for("id_allocation")),w=R?.value,b;if(w&&w.nodeName===server.hostname&&(!lSe(i)||w.pid===process.pid)){let U=w.start,v=w.end;b=U;for(let I of i.getKeys({start:v,end:U,limit:1,reverse:!0}))b=I}else w=A(R?.version??null),b=w.start;Ut=new BigInt64Array([BigInt(b)+1n]),Ut=new BigInt64Array(i.getUserSharedBuffer("id",Ut.buffer)),Ut.maxSafeId=w.end}let O=Number(Atomics.add(Ut,0,1n)),D=p==="Int"?512:1048576;if(O+D>=Ut.maxSafeId){let R=a(w=>{Ut.maxSafeId=O+(p==="Int"?1023:4194303);let b=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,U=w?void 0:i.useReadTransaction(),v=Number(Ut[0]);for(let G of i.getKeys({start:v+1,end:b,limit:1,transaction:U}))b=G;U?.done();let{value:I,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Ut.maxSafeId<b){if(I.end>Ut.maxSafeId-100)return;Be.default.info?.("New id allocation",O,Ut.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:I.start,end:Ut.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{Be.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ut.maxSafeId}, but id of ${b} detected`);let G=A(L);G.alreadyUpdated||Atomics.store(Ut,0,BigInt(G.start+1)),Ut.maxSafeId=G.end}},"updateEnd");O+D===Ut.maxSafeId?setImmediate(R):O+100>=Ut.maxSafeId&&(Be.default.warn?.(`Synchronous id allocation required on table ${s}${p=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>R(!0)))}return O;function A(R){let w=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,b=w/4,U,v,I=!1,L,G;do{L=Math.floor(Math.random()*w),G={start:L,end:L+(p==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},U=0;for(let z of i.getKeys({start:L,limit:1,reverse:!0}))U=z;v=w;for(let z of i.getKeys({start:L+1,end:w,limit:1}))v=z;b*=.875,b<1e3&&!I&&(I=!0,Be.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${p==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,U,v,b))}while(!(b<v-L&&(b<L-U||U===0)));return i.transactionSync(()=>{let z=i.getEntry(Symbol.for("id_allocation"));return(z?.version??null)==R?(Be.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(Be.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...z.value})})}}static setTTLExpiration(p){if(typeof p=="number")m=p*1e3,S||(S=0);else if(p&&typeof p=="object")m=p.expiration*1e3,S=(p.eviction||0)*1e3,vt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(m<0)throw new Error("Expiration can not be negative");vt=vt||(m+S)/4,sc()}static getResidencyRecord(p){return f.get([Symbol.for("residency_by_id"),p])}static setResidency(p){Ce.getResidency=p&&((O,D)=>{try{return p(O,D)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static setResidencyById(p){Ce.getResidencyById=p&&(O=>{try{return p(O)}catch(D){throw D.message+=` in residency function for table ${s}`,D}})}static getResidency(p,O){if(Ce.getResidencyById)return Ce.getResidencyById(p[t]);let D=Gd;if(O.replicateTo!=null){if(Array.isArray(O.replicateTo))return O.replicateTo.includes(server.hostname)?O.replicateTo:[server.hostname,...O.replicateTo];O.replicateTo>=0&&(D=O.replicateTo)}if(D>=0&&server.nodes){let A=[server.hostname];if(O.previousResidency)A.push(...O.previousResidency.slice(0,D));else{let R=server.nodes.map(U=>U.name),w=Math.floor(R.length*Math.random());A.push(...R.slice(w,w+D));let b=w+D-R.length;b>0&&A.push(...R.slice(0,b))}return A}}static enableAuditing(p=!0){g=p,p&&Gl(),Ce.audit=p}static coerceId(p){return p===""?null:CT(p,H)}static async dropTable(){delete Ye[c][s];for(let p of i.getRange({versions:!0,snapshot:!1,lazy:!0}))p.metadataFlags&mn&&p.value&&sa(p.value);if(c===o){for(let p of E)f.remove(Ce.tableName+"/"+p.name),r[p.name]?.drop();f.remove(Ce.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await IT.default.remove(data_path),await IT.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));lm.signalSchemaChange(new um.SchemaEventMsg(process.pid,Vt.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this.isCollection)return this.search(p);if(this.getId()===null){if(p?.conditions||p?.size>0)return this.search(p);let O={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E};return this.getContext()?.includeExpensiveRecordCountEstimates?Ce.getRecordCount().then(D=>(O.recordCount=D.recordCount,O.estimatedRecordRange=D.estimatedRange,O)):O}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(p,O){let D=rc(p);if(D?.read){if(D.isSuperUser)return!0;let A=D.attribute_permissions,R=O?.select;if(A?.length>0||Fd&&R){if(O||(O={}),R){let w=A?.length>0&&$C(A,"read");O.select=R.map(b=>{let U=b.name||b;if(!w||w[U]){let v=Nr[U]?.definition?.tableClass;if(v){if(b.name||(b={name:b}),!v.prototype.allowRead.call(null,p,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else O.select=A.filter(w=>w.read&&!Nr[w.attribute_name]).map(w=>w.attribute_name);return O}else return!0}}allowUpdate(p,O){let D=rc(p);if(D?.update){let A=D.attribute_permissions;if(A?.length>0){let R=$C(A,"update");for(let w in O)if(!R[w])return!1;for(let w of A){let b=w.attribute_name;!w.update&&!(b in O)&&(O[b]=this.getProperty(b))}}return nc(this.getContext())}}allowCreate(p,O){if(this.isCollection){let D=rc(p);if(D?.insert){let A=D.attribute_permissions;if(A?.length>0){let R=$C(A,"insert");for(let w in O)if(!R[w])return!1;return nc(this.getContext())}else return nc(this.getContext())}}else return this.allowUpdate(p,{})}allowDelete(p){return rc(p)?.delete&&nc(this.getContext())}update(p,O){if(!Ir(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let A;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p={...p}),this.#e={},this.#t=p):(A=this.#t,A&&(p=Object.assign(A,p)),this.#t=p)),this._writeUpdate(this.#t,O),this}addTo(p,O){if(typeof O=="number"||typeof O=="bigint")this.#s===Uz?this.set(p,(+this.getProperty(p)||0)+O):(this.#s||this.update(),this.set(p,new oE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(p){this.#t=p}setRecord(p){this.#e=p}invalidate(){this._writeInvalidate()}_writeInvalidate(p,O){let D=this.getContext(),A=this.getId();wr(A),Ir(this.getContext()).addWrite({key:A,store:i,invalidated:!0,entry:this.#r,before:Ee.invalidate?.bind(this,D,A),beforeIntermediate:Ae.invalidate?.bind(this,D,A),commit:a((w,b)=>{if(!(Yo(w,b,O?.nodeId)<=0)){p??=null;for(let U in r)p||(p={}),p[U]===void 0&&(p[U]=this.getProperty(U));Be.default.trace?.(`Invalidating entry id: ${A}, timestamp: ${new Date(w).toISOString()}`),T(A,p,this.#r,w,fn,g,{user:D?.user,residencyId:O?.residencyId,nodeId:O?.nodeId},"invalidate")}},"commit")})}_writeRelocate(p){let O=this.getContext(),D=this.getId();wr(D),Ir(this.getContext()).addWrite({key:D,store:i,invalidated:!0,entry:this.#r,before:Ee.relocate?.bind(this,O,D),beforeIntermediate:Ae.relocate?.bind(this,O,D),commit:a((R,w)=>{if(Yo(R,w,p?.nodeId)<=0)return;let b=Ce.getResidencyRecord(p.residencyId),U=0,v=null,I=w?.value;if(b&&!b.includes(server.hostname)){for(let L in r)v||(v={}),v[L]=I(L);U=fn}else v=I;Be.default.trace?.(`Relocating entry id: ${D}, timestamp: ${new Date(R).toISOString()}`),T(D,v,this.#r,R,U,g,{user:O.user,residencyId:p.residencyId,nodeId:p.nodeId,expiresAt:p.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(p,O){let D={previousResidency:this.getResidencyRecord(p.residencyId),isRelocation:!0},A=ic(this.getResidency(O.value,D)),R;if(A){if(!A.includes(server.hostname))return!1;R=zi(A)}let b=T(p.key,O.value,p,p.version,0,!0,{residencyId:R,expiresAt:O.expiresAt},"relocate",!1,null);return!0}static evict(p,O,D){let A=this.Source,R;if(!((x||g)&&(!O||(R=i.getEntry(p),!R||!O)||R.version!==D))){if(x){if(i.hasLock(p,R.version))return;let w;for(let b in r)w||(w={}),w[b]=O[b];if(w)return T(p,w,R,D,ta,null,null,null,!0)}if(i.ifVersion(p,D,()=>{Wi(p,O,null)}),g)return T(p,null,R,D,ta,null,null,null,!0);bc(i,R??i.getEntry(p),D)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,$z.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,D){let A=this.getContext(),R=Ir(A),w=this.getId();wr(w);let b=this.#r;this.#s=O?Uz:sSe;let U={key:w,store:i,entry:b,nodeName:A?.nodeName,validate:a(v=>{p||(p=this.#t),O||p&&sE(this.#t===p?this:p)?A?.source||(R.checkOverloaded(),this.validate(p,!O),te&&(p[te.name]=te.type==="Date"?new Date(v):te.type==="String"?new Date(v).toISOString():v),O&&(t&&p[t]!==w&&(p[t]=w),Q&&(b?.value?p[Q.name]=b?.value[Q.name]:p[Q.name]=Q.type==="Date"?new Date(v):Q.type==="String"?new Date(v).toISOString():v),p=Gc(p))):R.removeWrite(U)},"validate"),before:O?Ee.put?()=>Ee.put(A,w,p):null:Ee.patch?()=>Ee.patch(A,w,p):Ee.put?()=>Ee.put(A,w,Gc(this)):null,beforeIntermediate:O?Ae.put?()=>Ae.put(A,w,p):null:Ae.patch?()=>Ae.patch(A,w,p):Ae.put?()=>Ae.put(A,w,Gc(this)):null,commit:a((v,I,L)=>{if(L){if(A&&I?.version>(A.lastModified||0)&&(A.lastModified=I.version),this.#r=I,I?.value&&I.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");O||(this.#e=I?.value??null)}this.#t=void 0,this.#n=v;let G=I?.value,z=p;this.#s=0;let j=!1,F=Yo(v,I,D?.nodeId),De;if(F<=0)if(g){let de=I.localTime,me=I.version;Be.default.trace?.("Applying CRDT update to record with id: ",w,"applying later update:",me);let fe=[];for(;de>v||me>=v&&de>0;){let ve=l.get(de);if(!ve)break;let Ie=It(ve);if(me=Ie.version,me>=v){if(me===v){if(F=Yo(v,{version:me,localTime:de},D?.nodeId),F===0)return;if(F>0)continue}if(Ie.type==="patch")fe.push(Ie),De=p;else if(Ie.type==="put"||Ie.type==="delete")return}de=Ie.previousLocalTime}fe.sort((ve,Ie)=>ve.version-Ie.version);for(let ve of fe){let Ie=ve.getValue(i);if(z=rE(z,Ie,O),Be.default.debug?.("Rebuilding update with future patch:",z),!z)return}}else{if(O)return;z=rE(z,G,O),Be.default.debug?.("Rebuilding update without audit:",z)}let he;if(O?he=z:(this.#e=G,he=Gc(this,z)),this.#e=he,he&&he.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ae;if(D?.residencyId!=null)ae=D.residencyId;else{b?.residencyId&&(A.previousResidency=Ce.getResidencyRecord(b.residencyId));let de=ic(Ce.getResidency(he,A));if(de&&!de.includes(server.hostname))if(De??=he,j=!0,Ce.getResidencyById)he=void 0;else{he=null;for(let me in r)he||(he={}),he[me]=De[me]}ae=zi(de)}O||(De=p);let V=A?.expiresAt??(m?m+Date.now():-1);Be.default.trace?.(`Saving record with id: ${w}, timestamp: ${new Date(v).toISOString()}${V?", expires at: "+new Date(V).toISOString():""}${I?", replaces entry from: "+new Date(I.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(he).slice(0,100)}catch{return""}})()),Wi(w,G,he);let J=O?"put":"patch";T(w,he,I,v,j?fn:0,g,{omitLocalRecord:j,user:A?.user,residencyId:ae,expiresAt:V,nodeId:D?.nodeId,originatingOperation:A?.originatingOperation},J,!1,De),A.expiresAt&&sc()},"commit")};R.addWrite(U)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this.isCollection){for await(let O of this.search(p))(await Ce.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this.#e?this._writeDelete(p):!1}_writeDelete(p){let O=Ir(this.getContext()),D=this.getId();wr(D);let A=this.getContext();return O.addWrite({key:D,store:i,entry:this.#r,nodeName:A?.nodeName,before:Ee.delete?.bind(this,A,D),beforeIntermediate:Ae.delete?.bind(this,A,D),commit:a((R,w,b)=>{let U=w?.value;b&&(A&&w?.version>(A.lastModified||0)&&(A.lastModified=w.version),Ce._updateResource(this,w)),!(Yo(R,w,p?.nodeId)<=0)&&(Wi(this.getId(),U),Be.default.trace?.(`Deleting record with id: ${D}, txn timestamp: ${new Date(R).toISOString()}`),g||y?(T(D,null,this.#r,R,0,g,{user:A?.user,nodeId:p?.nodeId},"delete"),g||sc()):bc(i,w))},"commit")}),!0}search(p){let O=this.getContext(),D=Ir(O);if(!p)throw new Error("No query provided");let A=p.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this.getId()&&(A=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(A));let R,w={};function b(J,de){let me;switch(de){case"and":case void 0:if(J.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(J.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+de)}for(let fe of J){if(fe.conditions){fe.conditions=b(fe.conditions,fe.operator);continue}let ve=fe[0]??fe.attribute,Ie=ve==null?H:mi(E,ve);if(Ie)(Ie.type||DA[fe.comparator])&&(fe[1]===void 0?fe.value=v(fe.value,Ie):fe[1]=v(fe[1],Ie));else if(ve!=null)throw(0,Or.handleHDBError)(new Error,`${ve} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let $e=fe.chainedConditions[0],Fr,Dn;if($e.comparator==="gt"||$e.comparator==="greater_than"||$e.comparator==="ge"||$e.comparator==="greater_than_equal"?(Fr=fe,Dn=$e):(Fr=$e,Dn=fe),Fr.comparator!=="lt"&&Fr.comparator!=="less_than"&&Fr.comparator!=="le"&&Fr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let li=Dn.comparator==="ge"||Dn.comparator==="greater_than_equal",Oe=Fr.comparator==="le"||Fr.comparator==="less_than_equal";fe.comparator=(li?"ge":"gt")+(Oe?"le":"lt"),fe.value=[Dn.value,Fr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return J}a(b,"prepareConditions");function U(J,de){if(p.enforceExecutionOrder)return J;for(let me of J)me.conditions&&(me.conditions=U(me.conditions,me.operator));return J.length>1&&de!=="or"?(0,Gz.sortBy)(J,Qm(Ce)):J}a(U,"orderConditions");function v(J,de){return Array.isArray(J)?J.map(me=>CT(me,de)):CT(J,de)}a(v,"coerceTypedValues");let I=p.operator;(A.length>0||I)&&(A=b(A,I));let L=typeof p.sort=="object"&&p.sort,G;if(L&&I!=="or"){let J=L.attribute;if(J==null)throw new Or.ClientError("Sort requires an attribute");if(R=A.find(de=>Jl(de.attribute)===Jl(J)),!R){let de=mi(E,J);if(!de)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not a defined attribute`,404);if(de.indexed)R={attribute:J,comparator:"sort"},A.push(R);else if(A.length===0&&!p.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not indexed and not combined with any other conditions`,404)}R&&(R.descending=!!L.descending)}A=U(A,I),L&&(R&&A[0]===R?L.next&&(G={dbOrderedAttribute:L.attribute,attribute:L.next.attribute,descending:L.next.descending,next:L.next.next}):(R&&A.splice(A.indexOf(R),1),G=L));let z=p.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:A,operator:I,postOrdering:G,selectApplied:!!z};let j=D.useReadTxn(),F=LA(A,I,Ce,j,p,O,(J,de)=>Kd(J,z,O,j,de),w),De=p.ensureLoaded!==!1;G||(F=V(F));let he=Ce.transformEntryForSelect(z,O,j,w,De,!0),ae=Ce.transformToOrderedSelect(F,z,G,j,O,he);function V(J){return p.offset||p.limit!==void 0?J.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):J}return a(V,"applyOffset"),G&&(ae=V(ae)),ae.onDone=()=>{ae.onDone=null,D.doneReadTxn()},ae.selectApplied=!0,ae.getColumns=()=>{if(z){let J=[];for(let de of z)de==="*"?J.push(...E.map(me=>me.name)):J.push(de.name||de);return J}return E.filter(J=>!J.computed&&!J.relationship).map(J=>J.name)},ae}static transformToOrderedSelect(p,O,D,A,R,w){let b=new YT;if(D){p=Kd(p,O,A,R,null);let U;b.iterate=function(){let I,L=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),G,z=D.dbOrderedAttribute,j,F,De=!0;function he(V){let J=V.next&&he(V.next),de=V.descending;return(me,fe)=>{let ve=kl(me,V.attribute,A),Ie=kl(fe,V.attribute,A),$e=de?(0,xl.compareKeys)(Ie,ve):(0,xl.compareKeys)(ve,Ie);return $e===0?J?.(me,fe)||0:$e}}a(he,"createComparator");let ae=he(D);return{async next(){let V;if(I)if(V=I.next(),V.done){if(G)return b.onDone&&b.onDone(),V}else return{value:await w.call(this,V.value)};U=[],j&&U.push(j);do if(V=await L.next(),V.done){if(G=!0,U.length)break;return b.onDone&&b.onDone(),V}else{let J=V.value;if(J?.then&&(J=await J),z){let de=kl(J,z,A);if(De)De=!1,F=de;else if(de!==F){F=de,j=J;break}}U.push(J)}while(!0);return D.isGrouped,U.sort(ae),I=U[Symbol.iterator](),V=I.next(),V.done?(b.onDone&&b.onDone(),V):{value:await w.call(this,V.value)}},return(){b.onDone&&b.onDone(),L.return()},throw(){b.onDone&&b.onDone(),L.throw()}}};let v=a(I=>{if(typeof O=="object"&&Array.isArray(I.attribute))for(let L=0;L<O.length;L++){let G=O[L],z;if(G.name===I.attribute[0]){for(z=G.sort||(G.sort={});z.next;)z=z.next;z.attribute=I.attribute.slice(1),z.descending=I.descending}else G===I.attribute[0]&&(O[L]=z={name:G,sort:{attribute:I.attribute.slice(1),descending:I.descending}})}I.next&&v(I.next)},"applySortingOnSelect");v(D)}else b.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),b=b.map(function(U){try{let v=w.call(this,U);return typeof v?.catch=="function"?v.catch(I=>{throw I.partialObject={[t]:U.key},I}):v}catch(v){throw v.partialObject={[t]:U.key},v}});return b}static transformEntryForSelect(p,O,D,A,R,w){if(p&&(p===t||p?.length===1&&p[0]===t&&Array.isArray(p))){let I=a(L=>(O?.transaction?.stale&&(O.transaction.stale=!1),L?.key??L),"transform");return p===t?I:p.asArray?L=>[I(L)]:L=>({[t]:I(L)})}let b;R&&x&&!(typeof p=="string"?[p]:p)?.every(I=>{let L;return typeof I=="object"?L=I.name:L=I,r[L]||L===t})&&(b=!0);let U,v=a(function(I){let L;if(O?.transaction?.stale&&(O.transaction.stale=!1),I!=null){if(L=I.value||I.deref?.()?.value,!L&&(I.key===void 0||I.deref)||I.metadataFlags&fn){if(I.metadataFlags&fn&&O.replicateFrom===!1&&w&&I.residencyId)return Ja.SKIP;if(I=Pn(I.key??I,O,{transaction:D,lazy:p?.length<4,ensureLoaded:R},this?.isSync,G=>G),I?.then)return I.then(v.bind(this));L=I?.value}if(b&&I?.metadataFlags&(fn|ta)||I?.expiresAt!=null&&I?.expiresAt<Date.now()){if(O.onlyIfCached&&O.noCacheStore)return{[t]:I.key,message:"This entry has expired"};let G=sn(I.key??I,I,O);if(G?.then)return G.then(v)}}if(L==null)return w?Ja.SKIP:L;if(p&&!(p[0]==="*"&&p.length===1)){let G,z=a((F,De)=>{let he;typeof F=="object"?he=F.name:he=F;let ae=Nr?.[he],V;if(ae){let J=A?.[he];if(J)if(J.hasMappings){let me=ae.from?L[ae.from]:Jl(I.key);V=J.get(me),V||(V=[])}else V=J.fromRecord?.(L);else V=ae(L,O,I);let de=a(me=>{if(me&&typeof me=="object"){let fe=ae.definition?.tableClass||Ce;U||(U={});let ve=U[he]||(U[he]=fe.transformEntryForSelect(he===F?null:F.select||(Array.isArray(F)?F:null),O,D,J,R));if(Array.isArray(me)){let Ie=[],$e=fe.transformToOrderedSelect(me,F.select,typeof F.sort=="object"&&F.sort,O,D,ve)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Fr=a(li=>{for(;!li.done;){if(li?.then)return li.then(Fr);Ie.push(li.value),li=$e.next()}De(Ie,he)},"nextValue"),Dn=Fr($e.next());Dn&&(G||(G=[]),G.push(Dn));return}else if(me=ve.call(this,me),me?.then){G||(G=[]),G.push(me.then(Ie=>De(Ie,he)));return}}De(me,he)},"handleResolvedValue");V?.then?(G||(G=[]),G.push(V.then(de))):de(V);return}else V=L[he],V&&typeof V=="object"&&he!==F&&(V=Ce.transformEntryForSelect(F.select||F,O,D,null)({value:V}));De(V,he)},"selectAttribute"),j;if(typeof p=="string")z(p,F=>{j=F});else if(Array.isArray(p))if(p.asArray)j=[],p.forEach((F,De)=>{F==="*"?p[De]=L:z(F,he=>j[De]=he)});else{j={};let F=p.forceNulls;for(let De of p)if(De==="*")for(let he in L)j[he]=L[he];else z(De,(he,ae)=>{he===void 0&&F&&(he=null),j[ae]=he})}else throw new Or.ClientError("Invalid select"+p);return G?Promise.all(G).then(()=>j):j}return L},"transform");return v}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ft({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),p||(p={});let O=!p.rawEvents,D=[],A=this,R=qC(Ce,this.getId()??null,function(b,U,v,I){try{let L=U.getValue?.(i,O),G=U.type;if(!L&&G==="patch"&&O){let j=i.getEntry(b);j?.version===U.version?L=j.value:L=U.getValue?.(i,!0,v),G="put"}let z={id:b,localTime:v,value:L,version:U.version,type:G,beginTxn:I};D?D.push(z):this.send(z)}catch(L){Be.default.error?.(L)}},p.startTime||0,p),w=(async()=>{this.isCollection&&(R.includeDescendants=!0,p.onlyChildren&&(R.onlyChildren=!0)),p.supportsTransactions&&(R.supportsTransactions=!0);let b=this.getId(),U=p.previousCount;U>1e3&&(U=1e3);let v=p.startTime;if(this.isCollection){if(v){if(U)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:L}of l.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=It(L);if(G.tableId!==n)continue;let z=G.recordId;if(b==null||kz(b,z)){let j=G.getValue(i,O,I);if(R.send({id:z,localTime:I,value:j,version:G.version,type:G.type}),R.queue?.length>Bz&&await R.waitForDrain()===!1)return}R.startTime=I}}else if(U){let I=[];for(let{key:L,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let z=It(G);if(z.tableId!==n)continue;let j=z.recordId;if(b==null||kz(b,j)){let F=z.getValue(i,O,L);if(I.push({id:j,localTime:L,value:F,version:z.version,type:z.type}),--U<=0)break}}catch(z){Be.default.error("Error getting history entry",L,z)}for(let L=I.length;L>0;)R.send(I[--L]);I[0]&&(R.startTime=I[0].localTime)}else if(!p.omitCurrent){for(let{key:I,value:L,version:G,localTime:z}of i.getRange({start:b??!1,end:b==null?void 0:[b,xl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(R.send({id:I,localTime:z,value:L,version:G,type:"put"}),R.queue?.length>Bz&&await R.waitForDrain()===!1))return}}else{U&&!v&&(v=0);let I=this.#r?.localTime;if(I===hR&&(i.cache?.delete(b),this.#r=i.getEntry(b),Be.default.trace?.("re-retrieved record",I,this.#r?.localTime),I=this.#r?.localTime),Be.default.trace?.("Subscription from",v,"from",b,I),v<I){let L=[],G=I;do{let z=l.get(G);if(z){p.omitCurrent=!0;let j=It(z),F=j.getValue(i,O,G);O&&(j.type="put"),L.push({id:b,value:F,localTime:G,...j}),G=j.previousLocalTime}else break;U&&U--}while(G>v&&U!==0);for(let z=L.length;z>0;)R.send(L[--z]);R.startTime=I}!p.omitCurrent&&this.doesExist()&&R.send({id:b,localTime:I,value:this.#e,version:this.#n,type:"put"})}for(let I of D)R.send(I);D=null})();return p.listener&&R.on("data",p.listener),R}static subscribeOnThisThread(p,O){return p===0||O?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let D=Ir(this.getContext()),A=this.getId()||null;A!=null&&wr(A);let R=this.getContext();D.addWrite({key:A,store:i,entry:this.#r,nodeName:R?.nodeName,validate:a(()=>{R?.source||(D.checkOverloaded(),this.validate(p))},"validate"),before:Ee.publish?.bind(this,R,A,p),beforeIntermediate:Ae.publish?.bind(this,R,A,p),commit:a((w,b,U)=>{b===void 0&&y&&!g&&sc(),Be.default.trace?.(`Publishing message to id: ${A}, timestamp: ${new Date(w).toISOString()}`),T(A,b?.value??null,b,b?.version||w,0,!0,{user:R?.user,residencyId:O?.residencyId,expiresAt:R?.expiresAt,nodeId:O?.nodeId},"message",!1,p)},"commit")})}validate(p,O){let D,A=a((R,w,b)=>{if(w.type&&R!=null)if(O&&R.__op__&&(R=R.value),w.properties){typeof R!="object"&&(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be an object${w.type?" ("+w.type+")":""}`);let U=w.properties;for(let v=0,I=U.length;v<I;v++){let L=U[v],G=A(R[L.name],L,b+"."+L.name);G&&(R[L.name]=G)}if(w.sealed&&R!=null&&typeof R=="object")for(let v in R)U.find(I=>I.name===v)||(D||(D=[])).push(`Property ${v} is not allowed within object in property ${b}`)}else switch(w.type){case"Int":(typeof R!="number"||R>>0!==R)&&(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a string`);break;case"Boolean":typeof R!="boolean"&&(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof R!="bigint"){if(typeof R=="string"||typeof R=="number")return BigInt(R);(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a bigint`)}break;case"Bytes":if(!(R instanceof Uint8Array)){if(typeof R=="string")return Buffer.from(R);(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(R instanceof gi)){if(typeof R=="string"&&(R=Buffer.from(R)),R instanceof Buffer)return createBlob(R,{type:"text/plain"});(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be a Blob`)}break;case"array":if(Array.isArray(R)){if(w.elements)for(let U=0,v=R.length;U<v;U++){let I=R[U],L=A(I,w.elements,b+"[*]");L&&(R[U]=L)}}else(D||(D=[])).push(`Value ${Ls(R)} in property ${b} must be an Array`);break}w.nullable===!1&&R==null&&(D||(D=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let R=0,w=E.length;R<w;R++){let b=E[R];if(!(b.relationship||b.computed)&&(!O||b.name in p)){let U=A(p[b.name],b,b.name);U&&(p[b.name]=U)}}if(d)for(let R in p)E.find(w=>w.name===R)||(D||(D=[])).push(`Property ${R} is not allowed`);if(D)throw new Or.ClientError(D.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return x?!!this.#i:void 0}static async addAttributes(p){let O=E.slice(0);for(let D of p){if(!D.name)throw new Or.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,qz.validateAttribute)(D.name),O.push(D)}return ft({table:s,database:c,schemaDefined:u,attributes:O}),Ce.indexingOperation}static async removeAttributes(p){let O=E.filter(D=>!p.includes(D.name));return ft({table:s,database:c,schemaDefined:u,attributes:O}),Ce.indexingOperation}static getSize(){let p=i.getStats();return(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getAuditSize(){let p=l?.getStats();return p&&(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getStorageStats(){let p=i.env.path,O=IT.default.statfsSync?.(p)??{};return{available:O.bavail*O.bsize,free:O.bfree*O.bsize,size:O.blocks*O.bsize}}static async getRecordCount(p){let O=i.getStats().entryCount,D=1e3/2,A=performance.now(),R=Math.floor(O/2),w=p?.exactCount,b=0,U=0,v;for(let{value:I}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(I!=null&&b++,U++,await ja(),!w&&U<R&&performance.now()-A>D){v=U;break}if(v){let I=b;b=0;for(let{value:V}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:v,snapshot:!1}))V!=null&&b++,await ja();let L=v*2,G=(b+I)/L,z=Math.pow((b-I+1)/v/2,2)+G*(1-G)/L,j=Math.max(Math.sqrt(z)*O,1),F=Math.round(G*O),De=Math.max(F-1.96*j,b+I),he=Math.min(F+1.96*j,O),ae=Math.pow(10,Math.round(Math.log10(j)));return ae>F&&(ae=ae/10),b=Math.round(F/ae)*ae,{recordCount:b,estimatedRange:[Math.round(De),Math.round(he)]}}return{recordCount:b}}static updatedAttributes(){Nr=this.propertyResolvers={$id:a((p,O,D)=>({value:D.key}),"$id"),$updatedtime:a((p,O,D)=>D.version,"$updatedtime"),$record:a((p,O,D)=>D?{value:p}:p,"$record")};for(let p of this.attributes){p.isPrimaryKey&&(H=p),p.resolve=null;let O=p.relationship,D=p.computed;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),D&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Fd=!0,O.to)p.elements?.definition?(Nr[p.name]=p.resolve=(A,R,w)=>{let b=A[O.from?O.from:t],U=p.elements.definition.tableClass;return w?jl({attribute:O.to,value:b},Ir(R).getReadTxn(),!1,U,!1).asArray:U.search([{attribute:O.to,value:b}],R).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let A=p.definition||p.elements?.definition;A?(Nr[p.name]=p.resolve=(R,w,b)=>{let U=R[O.from];if(U!==void 0){if(p.elements){let v,I=U?.map(L=>{let G=b?A.tableClass.primaryStore.getEntry(L,{transaction:Ir(w).getReadTxn()}):A.tableClass.get(L,w);return G?.then&&(v=!0),G});return O.filterMissing?v?Promise.all(I).then(L=>L.filter(Fz)):I.filter(Fz):v?Promise.all(I):I}return b?A.tableClass.primaryStore.getEntry(U,{transaction:Ir(w).getReadTxn()}):A.tableClass.get(U,w)}},p.set=(R,w)=>{if(Array.isArray(w)){let b=w.map(U=>U.getId?.()||U[A.tableClass.primaryKey]);R[O.from]=b}else{let b=w.getId?.()||w[A.tableClass.primaryKey];R[O.from]=b}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`);else D&&(typeof D.from=="function"&&this.setComputedAttribute(p.name,D.from),Nr[p.name]=p.resolve=(A,R,w)=>{let b=typeof D.from=="string"?A[D.from]:A,U=this.userResolvers[p.name];if(U)return U(b,R,w);Be.default.warn(`Computed attribute "${p.name}" does not have a function assigned to it. Please use setComputedAttribute('${p.name}', resolver) to assign a resolver function.`),this.userResolvers[p.name]=()=>{}})}aE(this,this)}static setComputedAttribute(p,O){let D=mi(E,p);if(!D){console.error(`The attribute "${p}" does not exist in the table "${s}"`);return}if(!D.computed){console.error(`The attribute "${p}" is not defined as computed in the table "${s}"`);return}this.userResolvers[p]=O}static async deleteHistory(p=0,O=!1){let D;for(let{key:A,value:R}of l.getRange({start:0,end:p}))await ja(),It(R).tableId===n&&(D=NT(l,A,R));if(O)for(let A of i.getRange({start:0,versions:!0})){let{key:R,value:w,localTime:b}=A;await ja(),w===null&&b<p&&(D=bc(i,A))}await D}static async*getHistory(p=0,O=1/0){for(let{key:D,value:A}of l.getRange({start:p||1,end:O})){await ja();let R=It(A);R.tableId===n&&(yield{id:R.recordId,localTime:D,version:R.version,type:R.type,value:R.getValue(i,!0,D),user:R.user,operation:R.originatingOperation})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let D=i.getEntry(p);if(!D)return O;let A=D.localTime;if(!A)throw new Error("The entry does not have a local audit time");let R=0;do{await ja();let w=l.get(A);if(w){let b=It(w);O.push({id:b.recordId,localTime:A,version:b.version,type:b.type,value:b.getValue(i,!0,A),user:b.user}),A=b.previousLocalTime}else break}while(R<1e3&&A);return O.reverse()}static cleanup(){W?.remove()}}Ce.updatedAttributes();let Vd=Ce.prototype;return m&&Ce.setTTLExpiration(m/1e3),se&&Sm(),Ce;function Wi(Y,p,O){let D;for(let A in r){let R=r[A],w=R.isIndexing,b=Nr[A],U=O&&(b?b(O):O[A]),v=p&&(b?b(p):p[A]);if(U===v&&!w)continue;D=!0;let I=R.indexNulls,L=(0,cm.getIndexedValues)(U,I),G=(0,cm.getIndexedValues)(v,I);if(G?.length>0){let z=new Set(G);if(L=L?L.filter(j=>{if(z.has(j))z.delete(j);else return!0}):[],G=Array.from(z),(G.length>0||L.length>0)&&vz){let j=G.concat(L).map(F=>({key:F,value:Y}));R.prefetch(j,Hz)}for(let j=0,F=G.length;j<F;j++)R.remove(G[j],Y)}else L?.length>0&&vz&&R.prefetch(L.map(z=>({key:z,value:Y})),Hz);if(L)for(let z=0,j=L.length;z<j;z++)R.put(L[z],Y)}return D}a(Wi,"updateIndices");function wr(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>xz)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)throw new Error("Invalid primary key of null");break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,xl.writeKey)(Y,iSe,0)>xz)throw new Error("Primary key size is too large: "+Y.length);return!0}a(wr,"checkValidId");function Pn(Y,p,O,D,A){if(Ce.getResidencyById&&O.ensureLoaded&&p?.replicateFrom!==!1){let w=ic(Ce.getResidencyById(Y));if(w&&!w.includes(server.hostname)&&N)return N({key:Y,residency:w}).then(A)}let R=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return A(null,Y);let w=i.getEntry(Y,O);return w?.residencyId&&w.metadataFlags&fn&&N&&O.ensureLoaded&&p?.replicateFrom!==!1?N(w).then(b=>A(b,Y),b=>(Be.default.error?.("Error loading remote record",Y,w,O,b),A(null,Y))):(w&&p&&(w?.version>(p.lastModified||0)&&(p.lastModified=w.version),w?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=w.localTime)),A(w,Y))},"whenPrefetched");return D?R():ie>0?(ie--,R()):new Promise((w,b)=>{ie===0?(ie--,i.prefetch([Y],()=>{U(),v()})):(ne.push(Y),ue.push(v),ne.length>$d&&(ie--,U()));function U(){if(ne.length>0){let I=ue;i.prefetch(ne,()=>{ie===-1?U():ie++;for(let L of I)L()}),ne=[],ue=[],Re>2&&Re--}else ie=Re,Re<gm&&Re++}a(U,"prefetch");function v(){try{w(R())}catch(I){b(I)}}a(v,"load")})}a(Pn,"loadLocalRecord");function rc(Y){if(!Y?.role)return;let p=Y.role.permission;if(p.super_user)return oSe;let O=p[c],D,A=O?.tables;if(A)return A[s];if(c==="data"&&(D=p[s])&&!D.tables)return D}a(rc,"getTablePermissions");function sn(Y,p,O,D){if(x){let A=!1;if(O.noCache?A=!0:(p?(!p.value||p.metadataFlags&(fn|ta)||p.expiresAt!=null&&p.expiresAt<Date.now())&&(A=!0):A=!0,Wn(!A,"cache-hit",s)),A){let R=Fl(Y,p,O).then(w=>(w?.value&&w?.value.getRecord?.()&&Be.default.error?.("Can not assign a record that is already a resource"),O&&(w?.version>(O.lastModified||0)&&(O.lastModified=w.version),O.lastRefreshed=Date.now()),w));if(O?.onlyIfCached||p?.value&&D?.allowStaleWhileRevalidate?.(p,Y)){if(R.catch(w=>Be.default.warn?.(w)),O?.onlyIfCached&&!D.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return R}}else if(p?.value&&p.expiresAt!=null&&p.expiresAt<Date.now())return Ce.evict(p.key,p.value,p.version),p.value=null,{then(A){return A(p)}}}a(sn,"ensureLoadedFromSource");function Ir(Y){let p=Y?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new fc,p.lmdbDb=i,p;p=O}while(!0)}else return new Ym}a(Ir,"txnForContext");function kl(Y,p,O){if(!Y)return;let D=Y.value||i.getEntry(Y.key)?.value;if(typeof p=="object"){let R=Nr,w=D;for(let b=0,U=p.length;b<U;b++){let v=p[b],I=R?.[v];w=I&&w?I(w,O,!0)?.value:w?.[v],R=I?.definition?.tableClass?.propertyResolvers}return w}let A=Nr[p];return A?A(D,O):D[p]}a(kl,"getAttributeValue");function Kd(Y,p,O,D,A){let R=A?.length,w={transaction:D,lazy:R>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},b;function U(v,I){let L=v?.value;if(!L)return Ja.SKIP;for(let G=0;G<R;G++)if(!b?.includes(G)&&!A[G](L,v))return Ja.SKIP;return I!==void 0&&(v.key=I),v}if(a(U,"processEntry"),R>0||!Y.hasEntries){let v=Y.map(I=>{if(b=null,typeof I=="object"&&I?.key!==void 0)return R>0?U(I):I;if(I==null)return Ja.SKIP;for(let L=0;L<R;L++){let z=A[L].idFilter;if(z){if(!z(I))return Ja.SKIP;b||(b=[]),b.push(L)}}return Pn(I,O,w,!1,U)});return Array.isArray(Y)&&(v=v.filter(I=>I!==Ja.SKIP)),v.hasEntries=!0,v}return Y}a(Kd,"transformToEntries");function Yo(Y,p,O=server.replication?.getThisNodeId(l)){if(Y<=p?.version){if(p?.version===Y&&O!==void 0){let D=server.replication?.exportIdMapping(l),A=p.localTime,R=A&&l.get(A);if(R){let w,b,U=It(R);for(let v in D)D[v]===O&&(w=v),D[v]===U.nodeId&&(b=v);if(w>b)return 1;if(w===b)return 0}}return-1}return 1}a(Yo,"precedesExistingVersion");async function Fl(Y,p,O){let D=p?.metadataFlags,A=p?.version,R,w;if(!i.attemptLock(Y,A,()=>{clearTimeout(w);let I=i.getEntry(Y);!I||!I.value||I.metadataFlags&(fn|ta)?R(Fl(Y,i.getEntry(Y),O)):R(I)}))return new Promise(I=>{R=I,w=setTimeout(()=>{i.unlock(Y,A)},nSe)});let b=p?.value,U={requestContext:O,replacingRecord:b,replacingEntry:p,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:O?.resourceCache},v=O?.responseHeaders;return new Promise((I,L)=>{let G;VC(wt(U,async z=>{let j=performance.now(),F,De,he;try{for(let de of Ce.sources)if(de.get&&(!de.get.reliesOnPrototype||de.prototype.get)){if(de.available?.(p)===!1)continue;if(U.source=de,F=await de.get(Y,U),F)break}he=D&fn;let V=U.lastModified||he&&A;De=he||V>A||!b,V||(V=(0,cm.getNextMonotonicTime)());let J=performance.now()-j;if(rr(J,"cache-resolution",s,null,"success"),v&&TE(v,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),z.timestamp=V,m&&U.expiresAt==null&&(U.expiresAt=Date.now()+m),F){if(typeof F!="object")throw new Error("Only objects can be cached and stored in tables");if(F.status>0&&F.headers)if(F.status>=300)if(F.status===304)F=b,V=A;else throw new Or.ServerError(F.body||"Error from source",F.status);else F=F.body;typeof F.toJSON=="function"&&(F=F.toJSON()),t&&F[t]!==Y&&(F[t]=Y)}G=!0,I({key:Y,version:V,value:F})}catch(V){V.message+=` while resolving record ${Y} for ${s}`,b&&((V.code==="ECONNRESET"||V.code==="ECONNREFUSED"||V.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(V.statusCode===500||V.statusCode===502||V.statusCode===503||V.statusCode===504))?(I({key:Y,version:A,value:b}),Be.default.trace?.(V.message,"(returned stale record)")):L(V);let J=performance.now()-j;rr(J,"cache-resolution",s,null,"fail"),v&&TE(v,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),U.transaction.abort();return}if(O?.noCacheStore||U.noCacheStore){U.transaction.abort();return}Ir(U).addWrite({key:Y,store:i,entry:p,nodeName:"source",commit:a((V,J)=>{if(J?.version!==A)return;let de=Wi(Y,b,F);if(F){Ae.put?.(U,Y,F),J&&(O.previousResidency=Ce.getResidencyRecord(J.residencyId));let me,fe=!1,ve,Ie=ic(Ce.getResidency(F,O));if(Ie){if(!Ie.includes(server.hostname))if(me=F,fe=!0,Ce.getResidencyById)F=void 0;else{F=null;for(let $e in r)F||(F={}),F[$e]=me[$e]}ve=zi(Ie)}Be.default.trace?.(`Writing resolved record from source with id: ${Y}, timestamp: ${new Date(V).toISOString()}`),T(Y,F,J,V,fe?fn:0,g&&(De||fe)||null,{user:U?.user,expiresAt:U.expiresAt,residencyId:ve},"put",!!he,me)}else J&&(Ae.delete?.(U,Y),Be.default.trace?.(`Deleting resolved record from source with id: ${Y}, timestamp: ${new Date(V).toISOString()}`),g||y?T(Y,null,J,V,0,g&&De||null,{user:U?.user},"delete",!!he):bc(i,J,A))},"commit")})}),()=>{i.unlock(Y,A)},z=>{i.unlock(Y,A),G&&Be.default.error?.("Error committing cache update",z)})})}a(Fl,"getFromSource");function nc(Y){if(!Y||Y.user?.role?.permission?.super_user)return!0;if(Y.replicateTo)throw new Or.ClientError("Can not specify replication parameters without super user permissions",403);if(Y.replicatedConfirmation)throw new Or.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(nc,"checkContextPermissions");function sc(Y){let p=!1;if(Y&&(Y-ut>1&&(p=!0),ut=Y),!(vt===Cn&&!p)&&(Cn=vt,(0,vl.getWorkerIndex)()===(0,vl.getWorkerCount)()-1))return nn&&clearTimeout(nn),vt?new Promise(O=>{let D=new Date;D.setMonth(0),D.setDate(1),D.setHours(0),D.setMinutes(0),D.setSeconds(0);let A=vt/(1+ut),R=p?Date.now():Math.ceil((Date.now()-D.getTime())/A)*A+D.getTime(),w=a(b=>{Be.default.trace?.(`Scheduled next cleanup scan at ${new Date(b)}`),nn=setTimeout(()=>q=q.then(async()=>{if(w(Math.max(b+vt,Date.now())),i.rootStore.status!=="open"){clearTimeout(nn);return}let U=50,v=new Array(U),I=0,L=Math.pow(ut,8)*(Ul.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=S/Math.pow(Math.max(ut,1),4);Be.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${G}ms`);function z(j,F,De,he){let ae=j+G-Date.now();if(ae<0)return!0;if(ut){let V=i.lastSize;return De&mn&&tu(he,J=>{J.size&&(V+=J.size)}),Be.default.trace?.(`shouldEvict adjusted ${ae} ${V}, ${ae*(j-F)/V} < ${L}`),ae*(j-F)/V<L}return!1}a(z,"shouldEvict");try{let j=0;for(let F of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:De,value:he,version:ae,expiresAt:V,metadataFlags:J}=F,de;he===null&&!g&&ae+rSe<Date.now()?de=bc(i,F,ae):V!=null&&z(V,ae,J,he)&&(de=Ce.evict(De,he,ae),j++),de&&(await v[I],v[I]=de.catch(me=>{Be.default.error?.("Cleanup error",me)}),++I>=U&&(I=0)),await ja()}Be.default.info?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){Be.default.warn?.(`Error in cleanup scan for ${s}:`,j)}O(void 0),ut=0}),Math.min(b-Date.now(),2147483647)).unref()},"startNextTimer");w(R)}):void 0}a(sc,"scheduleCleanup");function Gl(){W=l?.addDeleteRemovalCallback(n,i,(Y,p)=>{i.remove(Y,p)})}a(Gl,"addDeleteRemoval");function Sm(){(0,vl.getWorkerIndex)()===0&&setInterval(async()=>{if(!tc){tc=!0;try{let Y=se.name,p=r[Y];if(!p)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let O of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of p.getValues(O)){let A=i.getEntry(D);A?.value?A.value[Y]<Date.now()&&Ce.evict(D,A.value,A.version):i.ifVersion(D,A?.version,()=>p.remove(O,D))}await ja()}}catch(Y){Be.default.error?.("Error in evicting old records",Y)}finally{tc=!1}}},tSe).unref()}a(Sm,"runRecordExpirationEviction");function ic(Y){if(Y!=null){if(Array.isArray(Y))return Y;if(typeof Y=="number"){if(Y>=65536)throw new Error(`Shard id ${Y} must be below 65536`);let p=server.shards?.get?.(Y);if(p)return Be.default.trace?.(`Shard ${Y} mapped to ${p.map(O=>O.name).join(", ")}`),p.map(O=>O.name);throw new Error(`Shard ${Y} is not defined`)}throw new Error(`Shard or residency list ${Y} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(ic,"residencyFromFunction");function zi(Y){if(Y){let p=Y.join(","),O=f.get([Symbol.for("residency_by_set"),p]);return O||(f.put([Symbol.for("residency_by_set"),p],O=Math.floor(Math.random()*2147418112)+65535),f.put([Symbol.for("residency_by_id"),O],Y),O)}}a(zi,"getResidencyId")}function $C(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 Hz(){}function aSe(e){$z=e}function CT(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 wT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return wT(+e);case"Float":return e==="null"?null:wT(+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;cSe.test(e)||(e+="Z");let n=new Date(e);return wT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,PT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function wT(e){if(isNaN(e))throw new SyntaxError;return e}function kz(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 VC(e,t,r){return e?.then?e.then(t,r):t(e)}function Fz(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function lSe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ja,cm,Gz,qz,Ul,Or,lm,um,Be,xl,vl,PT,IT,eSe,$z,tSe,rSe,vz,nSe,Uz,sSe,fn,ta,iSe,xz,Bz,oSe,lve,cSe,ja,Ef=ye(()=>{k();Ja=require("lmdb"),cm=M(ln()),Gz=require("lodash"),qz=M(df());ra();Wm();Ul=M(ce());LO();Or=M(pe()),lm=M(ho()),um=M(Vs());Ue();pf();Be=M(pi());sb();_c();xl=require("ordered-binary"),vl=M(nt());io();PT=M(oe());su();Ci();nE();R_();IT=M(require("node:fs"));fs();QS();eSe=new Uint8Array(9);eSe[8]=192;tSe=6e4,rSe=864e5;Ul.initSync();vz=Ul.get(B.STORAGE_PREFETCHWRITES),nSe=1e4,Uz=1,sSe=2,fn=1,ta=8,iSe=Buffer.allocUnsafeSlow(8192),xz=1978,Bz=100,oSe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},lve=(0,PT.convertToMS)(Ul.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(DT,"makeTable");a($C,"attributesAsObject");a(Hz,"noop");a(aSe,"setServerUtilities");cSe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(CT,"coerceType");a(wT,"rejectNaN");a(kz,"isDescendantId");ja=a(()=>new Promise(setImmediate),"rest");a(VC,"when");a(Fz,"exists");a(Ls,"stringify");a(lSe,"hasOtherProcesses")});var ot={};xe(ot,{database:()=>Eu,database_envs:()=>Go,databases:()=>Ye,dropDatabase:()=>lb,dropTableMeta:()=>hSe,getDatabases:()=>Xe,getDefaultCompression:()=>Vg,getTables:()=>uSe,onRemovedDB:()=>K_,onUpdatedTable:()=>sl,readMetaDb:()=>dm,resetDatabases:()=>rd,table:()=>ft,tables:()=>Yn});function uSe(){return UT||Xe(),Yn||{}}function Xe(){if(UT)return Ye;UT=!0,Bd=new Map;let e=(0,Jt.getHdbBasePath)()&&(0,Lt.join)((0,Jt.getHdbBasePath)(),ac),t=(0,Jt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Jt.get)(B.STORAGE_PATH)||e&&((0,ns.existsSync)(e)?e:(0,Lt.join)((0,Jt.getHdbBasePath)(),Om)),!e)return;if((0,ns.existsSync)(e))for(let n of(0,ns.readdirSync)(e,{withFileTypes:!0})){let s=(0,Lt.basename)(n.name,".mdb");n.isFile()&&(0,Lt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&dm((0,Lt.join)(e,n.name),null,s)}if((0,ns.existsSync)((0,xd.getBaseSchemaPath)())){for(let n of(0,ns.readdirSync)((0,xd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Lt.join)((0,xd.getBaseSchemaPath)(),n.name),i=(0,Lt.join)((0,xd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,ns.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Lt.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Lt.join)(i,o.name);dm((0,Lt.join)(s,o.name),(0,Lt.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ns.existsSync)(i))for(let c of(0,ns.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Lt.extname)(c.name).toLowerCase()===".mdb"&&dm((0,Lt.join)(i,c.name),(0,Lt.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Lt.join)(l.path,(0,Lt.basename)(c+".mdb"));(0,ns.existsSync)(u)&&dm(u,c,n,null,!0)}}for(let n in Ye){let s=Bd.get(n);if(s){let i=Ye[n];n.includes("delete")&&Mt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(Mt.trace(`delete table class ${o}`),delete i[o])}else if(delete Ye[n],n==="data"){for(let i in Yn)delete Yn[i];delete Yn[xT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(Ye.system)for(let n of r)Ye.system[n]&&(Ye.system[n].replicate=!1);return Bd=null,Ye}function rd(){UT=!1;for(let[,e]of Go)e.needsDeletion=!0;Xe();for(let[e,t]of Go)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Go.delete(e),delete Ye[t.databaseName],_m.forEach(r=>r(t.databaseName)));return Ye}function dm(e,t,r=WC,n,s){let i=new KC.default(e,!1);try{let o=Go.get(e);o?o.needsDeletion=!1:(o=(0,Hd.open)(i),Go.set(e,o));let c=new Bl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(LT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,ns.existsSync)(n)&&(i.path=n,u=(0,Hd.open)(i),u.isLegacy=!0):u=OT(o));let f=Wz(r),d=f[xT],h=new Map;for(let{key:_,value:m}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=m.name:g||(g=S,S=t,m.name||(m.name=g,m.indexed=!m.is_hash_attribute)),d?.add(S);let y=h.get(S);y||h.set(S,y={attributes:[]}),(g==null||m.is_hash_attribute)&&(y.primary=m),g!=null&&y.attributes.push(m),Object.defineProperty(m,"key",{value:_,configurable:!0})}for(let[_,m]of h){let{attributes:S,primary:g}=m;if(!g){for(let ie of S)if(ie.is_hash_attribute||ie.isPrimaryKey){g=ie;break}if(!g){Mt.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let y=f[_],E={},T=[],N,x,H=typeof g.audit=="boolean"?g.audit:(0,Jt.get)(B.LOGGING_AUDITLOG),q=g.trackDeletes,Q=g.expiration,te=g.eviction,se=g.sealed,W=g.splitSegments,ne=g.replicate;if(y)E=y.indices,T=y.attributes,y.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Ud)||0)&&(l.putSync(Ud,N+1),Mt.info(`Updating next table id (it was out of sync) to ${N+1} for ${_}`)):(g.tableId=N=l.get(Ud),N||(N=1),Mt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Ud,N+1),l.putSync(g.key,g));let ie=new Bl.default(!g.is_hash_attribute,g.is_hash_attribute);if(ie.compression=g.compression,ie.compression){let Re=(0,Jt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Yz;ie.compression.threshold=Re}x=Ap(o.openDB(g.key,ie),o),o.databaseName=r,x.tableId=N}let ue;for(let ie of S){ie.attribute=ie.name;try{if(!ie.is_hash_attribute&&(ie.indexed||ie.attribute&&!ie.name)){if(!E[ie.name]){let Ee=new Bl.default(!ie.is_hash_attribute,ie.is_hash_attribute);E[ie.name]=o.openDB(ie.key,Ee),E[ie.name].indexNulls=ie.indexNulls}let Re=T.find(Ee=>Ee.name===ie.name);Re?T.splice(T.indexOf(Re),1,ie):T.push(ie),ue=!0}}catch(Re){Mt.error("Error trying to update attribute",ie,T,E,Re)}}for(let ie of T)if(!S.find(Ee=>Ee.name===ie.name)){if(ie.is_hash_attribute){Mt.error("Unable to remove existing primary key attribute",ie);continue}ie.indexed&&(T.splice(T.indexOf(ie),1),ue=!0)}if(y)ue&&(y.schemaVersion++,y.updatedAttributes());else{y=zz(f,_,DT({primaryStore:x,auditStore:u,audit:H,sealed:se,splitSegments:W,replicate:ne,expirationMS:Q&&Q*1e3,evictionMS:te&&te*1e3,trackDeletes:q,tableName:_,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),y.schemaVersion=1;for(let ie of fm)ie(y)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Wz(e){let t=Ye[e];if(t||(e==="data"?t=Ye[e]=Yn:e==="system"?Object.defineProperty(Ye,"system",{value:t=Object.create(null),configurable:!0}):t=Ye[e]=Object.create(null)),Bd&&!Bd.has(e)){let r=new Set;t[xT]=r,Bd.set(e,r)}return t}function zz(e,t,r){return e[t]=r,r}function Eu({database:e,table:t}){e||(e=WC),Xe();let r=Wz(e),n=(0,Lt.join)((0,Jt.getHdbBasePath)(),ac),s=(0,Jt.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,Jt.get)(B.STORAGE_PATH)||((0,ns.existsSync)(n)?n:(0,Lt.join)((0,Jt.getHdbBasePath)(),Om));let o=(0,Lt.join)(n,(i?t:e)+".mdb"),c=Go.get(o);if(!c||c.status==="closed"){let l=new KC.default(o,!1);c=(0,Hd.open)(l),Go.set(o,c)}return c.auditStore||(c.auditStore=OT(c)),c}async function lb(e){if(!Ye[e])throw new Error("Schema does not exist");let t=Ye[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Go.delete(r.path),r.status==="open"&&(await r.close(),await hm.remove(r.path));if(r||(r=Eu({database:e,table:null}),r.status==="open"&&(await r.close(),await hm.remove(r.path))),e==="data"){for(let n in Yn)delete Yn[n];delete Yn[xT]}delete Ye[e],_m.forEach(n=>n(e)),await zA(r)}function ft(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=WC);let m=Eu({database:r,table:t}),S=Ye[r];Mt.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(m.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let y,E,T;h==null&&(h=!0);let N=new Bl.default(!1);for(let W of o)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let x,H;if(g){if(y=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let W=m.auditStore;E=o.find(Re=>Re.isPrimaryKey)||{},y=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=Vg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,Jt.get)(B.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),u??=!1,E.splitSegments=u,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),Mt.trace(`${t} table loading, opening primary store`);let ne=new Bl.default(!1,!0);ne.compression=E.compression;let ue=t+"/";if(T=m.dbisDb=m.openDB(LT.INTERNAL_DBIS_NAME,N),se(),T.get(ue))return H&&H(),rd(),ft(e);let ie=Ap(m.openDB(ue,ne),m);m.databaseName=r,ie.tableId=T.get(Ud),Mt.trace(`Assigning new table id ${ie.tableId} for ${t}`),ie.tableId||(ie.tableId=1),T.put(Ud,ie.tableId+1),E.tableId=ie.tableId,g=zz(S,t,DT({primaryStore:ie,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:y,tableName:t,tableId:ie.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:T})),g.schemaVersion=1,x=!0,T.put(ue,E)}let q=g.indices;T=T||(m.dbisDb=m.openDB(LT.INTERNAL_DBIS_NAME,N)),g.dbisDB=T;let Q=[];for(let{key:W,value:ne}of T.getRange({start:!0})){let[ue,ie]=W.toString().split("/");if(ie===""&&(ie=ne.name),ie){if(ue!==t)continue}else continue;let Re=o.find(Ae=>Ae.name===ie),Ee=!Re?.indexed&&ne.indexed&&!ne.isPrimaryKey;if((!Re||Ee)&&(se(),x=!0,Re||T.remove(W),Ee)){let Ae=g.indices[ue];Ae&&Q.push(Ae)}}let te=[];try{for(let W of o||[]){if((W.relationship||W.computed)&&(x=!0,W.relationship))continue;let ne=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:ne,configurable:!0});let ue=T.get(ne);if(W.isPrimaryKey){if(ue=ue||T.get(ne=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+ue.expiration||void 0)||(+s||void 0)!==(+ue.eviction||void 0)||W.type!==ue.type){let Re={...ue};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),f!==void 0&&(Re.replicate=f),W.type&&(Re.type=W.type),x=!0,se(),T.put(ne,Re)}continue}ue?.attribute&&!ue.name&&(ue.indexed=!0);let ie=!ue||ue.type!==W.type||ue.indexed!==W.indexed||ue.nullable!==W.nullable||ue.version!==W.version||JSON.stringify(ue.properties)!==JSON.stringify(W.properties)||JSON.stringify(ue.elements)!==JSON.stringify(W.elements);if(W.indexed){let Re=new Bl.default(!0,!1),Ee=m.openDB(ne,Re);(ie||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<mm.workerData?.restartNumber)&&(x=!0,se(),ue=T.get(ne),(ie||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<mm.workerData?.restartNumber)&&(x=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ue?.lastIndexedKey??void 0,W.indexingPID=process.pid,Ee.isIndexing=!0,Object.defineProperty(W,"dbi",{value:Ee}),te.push(W))),T.put(ne,W)),ue?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),Ee.indexNulls=W.indexNulls,q[W.name]=Ee}else ie&&(x=!0,se(),T.put(ne,W))}}finally{H&&H()}if(x&&(g.schemaVersion++,g.updatedAttributes()),Mt.trace(`${t} table loading, running index`),te.length>0||Q.length>0?g.indexingOperation=_Se(g,te,Q):x&&MT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,x)for(let W of fm)W(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Mt.trace(`${t} table loaded`),g;function se(){H||m.transactionSync(()=>({then(W){H=W}}))}a(se,"startTxn")}async function _Se(e,t,r){try{Mt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await MT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Hd.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let m=0;m<l;m++){let S=t[m],g=S.name;try{let y=S.resolve,E=h&&(y?y(h):h[g]),T=(0,Vz.getIndexedValues)(E);if(T)for(let N=0,x=T.length;N<x;N++)S.dbi.put(T[N],d)}catch(y){o[g]||(o[g]=!0,Mt.error(`Error indexing attribute ${g}`,y))}}}),s.then(()=>f--,m=>{f--,Mt.error(m)}),mm.workerData&&mm.workerData.restartNumber!==Kz.restartNumber&&(i=!0),++c%100===0||i){for(let m of t)m.lastIndexedKey=d,e.dbisDB.put(m.key,m);if(i)return}f>dSe?await s:f>fSe&&await new Promise(m=>setImmediate(m))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await MT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Mt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Mt.error("Error in indexing",n)}}function hSe({table:e,database:t}){let r=Eu({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 sl(e){return fm.push(e),{remove(){let t=fm.indexOf(e);t>-1&&fm.splice(t,1)}}}function K_(e){return _m.push(e),{remove(){let t=_m.indexOf(e);t>-1&&_m.splice(t,1)}}}function Vg(){let e=(0,Jt.get)(B.STORAGE_COMPRESSION),t=(0,Jt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Jt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Yz,n={startingOffset:32};return t&&(n.dictionary=hm.readFileSync(t)),r&&(n.threshold=r),e&&n}var Jt,LT,Hd,Lt,ns,xd,Bl,KC,hm,YC,Vz,MT,vT,mm,Mt,Kz,WC,xT,Yz,Yn,Ye,Ud,fm,_m,UT,Go,Bd,dSe,fSe,Ue=ye(()=>{Jt=M(ce()),LT=M(Ht()),Hd=require("lmdb"),Lt=require("path"),ns=require("fs"),xd=M(Et());Ef();Bl=M(vf()),KC=M(Uf());k();hm=M(require("fs-extra")),YC=M(ui()),Vz=M(ln()),MT=M(ho()),vT=M(Vs()),mm=require("worker_threads"),Mt=M(X()),Kz=M(nt());io();su();fs();WC="data",xT=Symbol("defined-tables"),Yz=((0,Jt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Jt.initSync)();Yn=Object.create(null),Ye=Object.create(null);(0,YC._assignPackageExport)("databases",Ye);(0,YC._assignPackageExport)("tables",Yn);Ud=Symbol.for("next-table-id"),fm=[],_m=[],Go=new Map;a(uSe,"getTables");a(Xe,"getDatabases");a(rd,"resetDatabases");a(dm,"readMetaDb");a(Wz,"ensureDB");a(zz,"setTable");a(Eu,"database");a(lb,"dropDatabase");a(ft,"table");dSe=1e3,fSe=10;a(_Se,"runIndexing");a(hSe,"dropTableMeta");a(sl,"onUpdatedTable");a(K_,"onRemovedDB");a(Vg,"getDefaultCompression")});var oe=C((Tve,cQ)=>{"use strict";var Xa=require("path"),Zz=require("fs-extra"),In=X(),Qz=require("fs-extra"),BT=require("os"),mSe=require("net"),pSe=require("recursive-iterator"),Tr=(k(),P($)),{PACKAGE_ROOT:ESe}=pt(),gSe=hA(),jz=require("papaparse"),HT=require("moment"),{inspect:SSe}=require("util"),Jz=require("is-number"),Sve=require("lodash"),TSe=require("minimist"),ASe=require("https"),RSe=require("http"),{hdb_errors:kT}=pe(),ySe=/^((\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)))$/,eQ=require("util").promisify(setTimeout),bSe=100,OSe=5,NSe="",wSe=4,Xz={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};cQ.exports={isEmpty:ss,isEmptyOrZeroLength:Yi,arrayHasEmptyValues:PSe,arrayHasEmptyOrZeroLengthValues:DSe,buildFolderPath:LSe,isBoolean:tQ,errorizeMessage:ISe,stripFileExtension:vSe,autoCast:USe,autoCastJSON:rQ,autoCastJSONDeep:QC,removeDir:xSe,compareVersions:BSe,isCompatibleDataVersion:HSe,escapeRawValue:kSe,unescapeValue:FSe,stringifyProps:GSe,timeoutPromise:$Se,isClusterOperation:KSe,getClusterUser:WSe,checkGlobalSchemaTable:YSe,getHomeDir:sQ,getPropsFilePath:qSe,promisifyPapaParse:zSe,removeBOM:iQ,createEventPromise:QSe,checkProcessRunning:jSe,checkSchemaTableExist:JSe,checkSchemaExists:oQ,checkTableExists:aQ,getStartOfTomorrowInSeconds:XSe,getLimitKey:ZSe,isObject:MSe,isNotEmptyAndHasValue:CSe,autoCasterIsNumberCheck:nQ,backtickASTSchemaItems:eTe,isPortTaken:VSe,createForkArgs:tTe,autoCastBoolean:rTe,async_set_timeout:eQ,getTableHashAttribute:nTe,doesSchemaExist:sTe,doesTableExist:iTe,stringifyObj:oTe,ms_to_time:aTe,changeExtension:cTe,getEnvCliRootPath:jC,noBootFile:lTe,httpRequest:uTe,transformReq:dTe,convertToMS:fTe,PACKAGE_ROOT:ESe};function ISe(e){return e instanceof Error?e:new Error(e)}a(ISe,"errorizeMessage");function ss(e){return e==null}a(ss,"isEmpty");function CSe(e){return!ss(e)&&(e||e===0||e===""||tQ(e))}a(CSe,"isNotEmptyAndHasValue");function Yi(e){return ss(e)||e.length===0||e.size===0}a(Yi,"isEmptyOrZeroLength");function PSe(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}a(PSe,"arrayHasEmptyValues");function DSe(e){if(Yi(e))return!0;for(let t=0;t<e.length;t++)if(Yi(e[t]))return!0;return!1}a(DSe,"arrayHasEmptyOrZeroLengthValues");function LSe(...e){try{return e.join(Xa.sep)}catch{console.error(e)}}a(LSe,"buildFolderPath");function tQ(e){return ss(e)?!1:e===!0||e===!1}a(tQ,"isBoolean");function MSe(e){return ss(e)?!1:typeof e=="object"}a(MSe,"isObject");function vSe(e){return Yi(e)?NSe:e.slice(0,-wSe)}a(vSe,"stripFileExtension");function USe(e){return ss(e)||e===""||typeof e!="string"?e:Xz[e]!==void 0?Xz[e]:nQ(e)===!0?Number(e):ySe.test(e)?new Date(e):e}a(USe,"autoCast");function rQ(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(rQ,"autoCastJSON");function QC(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=QC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=QC(r);n!==r&&(e[t]=n)}return e}else return rQ(e)}a(QC,"autoCastJSONDeep");function nQ(e){if(e.startsWith("0.")&&Jz(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Jz(e))}a(nQ,"autoCasterIsNumberCheck");async function xSe(e){if(Yi(e))throw new Error(`Directory path: ${e} does not exist`);try{await Qz.emptyDir(e),await Qz.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a(xSe,"removeDir");function BSe(e,t){if(Yi(e)){In.info("Invalid current version sent as parameter.");return}if(Yi(t)){In.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(BSe,"compareVersions");function HSe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(HSe,"isCompatibleDataVersion");function kSe(e){if(ss(e))return e;let t=String(e);return t==="."?Tr.UNICODE_PERIOD:t===".."?Tr.UNICODE_PERIOD+Tr.UNICODE_PERIOD:t.replace(Tr.FORWARD_SLASH_REGEX,Tr.UNICODE_FORWARD_SLASH)}a(kSe,"escapeRawValue");function FSe(e){if(ss(e))return e;let t=String(e);return t===Tr.UNICODE_PERIOD?".":t===Tr.UNICODE_PERIOD+Tr.UNICODE_PERIOD?"..":String(e).replace(Tr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(FSe,"unescapeValue");function GSe(e,t){if(ss(e))return In.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+BT.EOL}!Yi(n)&&n[0]===";"?r+=" "+n+s+BT.EOL:Yi(n)||(r+=n+"="+s+BT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(GSe,"stringifyProps");function sQ(){let e;try{e=BT.homedir()}catch{e=process.env.HOME}return e}a(sQ,"getHomeDir");function qSe(){let e=Xa.join(sQ(),Tr.HDB_HOME_DIR_NAME,Tr.BOOT_PROPS_FILE_NAME);return Zz.existsSync(e)||(e=Xa.join(__dirname,"../","hdb_boot_properties.file")),e}a(qSe,"getPropsFilePath");function $Se(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a($Se,"timeoutPromise");async function VSe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=mSe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(VSe,"isPortTaken");function KSe(e){try{return Tr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(KSe,"isClusterOperation");function YSe(e,t){let r=(Ue(),P(ot)).getDatabases();if(!r[e])return kT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return kT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YSe,"checkGlobalSchemaTable");function WSe(e,t){if(ss(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ss(e)||Yi(e)){In.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){In.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){In.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(WSe,"getClusterUser");function zSe(){jz.parsePromise=function(e,t,r){return new Promise(function(n,s){jz.parse(e,{header:!0,transformHeader:iQ,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(zSe,"promisifyPapaParse");function iQ(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(iQ,"removeBOM");function QSe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${SSe(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(QSe,"createEventPromise");async function jSe(e){let t=!0,r=0;do await eQ(bSe*r++),(await gSe.findPs(e)).length>0&&(t=!1);while(t&&r<OSe);if(t)throw new Error(`process ${e} was not started`)}a(jSe,"checkProcessRunning");function JSe(e,t){let r=oQ(e);if(r)return r;let n=aQ(e,t);if(n)return n}a(JSe,"checkSchemaTableExist");function oQ(e){let{getDatabases:t}=(Ue(),P(ot));if(!t()[e])return kT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(oQ,"checkSchemaExists");function aQ(e,t){let{getDatabases:r}=(Ue(),P(ot));if(!r()[e][t])return kT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(aQ,"checkTableExists");function XSe(){let e=HT().utc().add(1,"d").startOf("d").unix(),t=HT().utc().unix();return e-t}a(XSe,"getStartOfTomorrowInSeconds");function ZSe(){return HT().utc().format("DD-MM-YYYY")}a(ZSe,"getLimitKey");function eTe(e){try{let t=new pSe(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){In.error("Got an error back ticking items."),In.error(t)}}a(eTe,"backtickASTSchemaItems");function tTe(e){return[e]}a(tTe,"createForkArgs");function rTe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(rTe,"autoCastBoolean");function nTe(e,t){let{getDatabases:r}=(Ue(),P(ot)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(nTe,"getTableHashAttribute");function sTe(e){let{getDatabases:t}=(Ue(),P(ot));return t()[e]!==void 0}a(sTe,"doesSchemaExist");function iTe(e,t){let{getDatabases:r}=(Ue(),P(ot));return r()[e]?.[t]!==void 0}a(iTe,"doesTableExist");function oTe(e){try{return JSON.stringify(e)}catch{return e}}a(oTe,"stringifyObj");function aTe(e){let t=HT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(aTe,"ms_to_time");function cTe(e,t){let r=Xa.basename(e,Xa.extname(e));return Xa.join(Xa.dirname(e),r+t)}a(cTe,"changeExtension");function jC(){if(process.env[Tr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Tr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=TSe(process.argv);if(e[Tr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Tr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(jC,"getEnvCliRootPath");var zC;function lTe(){if(zC)return zC;let e=jC();if(jC()&&Zz.pathExistsSync(Xa.join(e,Tr.HDB_CONFIG_FILE)))return zC=!0,!0}a(lTe,"noBootFile");function uTe(e,t){let r;return e.protocol==="http:"?r=RSe:r=ASe,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(uTe,"httpRequest");function dTe(e){if(!e.schema&&!e.database){e.schema=Tr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(dTe,"transformReq");function fTe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(fTe,"convertToMS")});var hQ=C((Rve,_Q)=>{"use strict";var is=ce(),_Te=Xu(),qe=(k(),P($)),pm=Ct(),qo=require("path"),{PACKAGE_ROOT:GT}=pt(),lQ=ce(),FT=oe(),kd="/dev/null",hTe=qo.join(GT,"launchServiceScripts"),uQ=qo.join(GT,"utility/scripts"),mTe=qo.join(uQ,qe.HDB_RESTART_SCRIPT),dQ=qo.resolve(GT,"dependencies",`${process.platform}-${process.arch}`,pm.NATS_BINARY_NAME);function fQ(){let t=_Te.licenseSearch().ram_allocation||qe.RAM_ALLOCATION_ENUM.DEFAULT,r=qe.MEM_SETTING_KEY+t,n={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return FT.noBootFile()&&(n[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FT.getEnvCliRootPath()),{name:qe.PROCESS_DESCRIPTORS.HDB,script:qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:GT}}a(fQ,"generateMainServerConfig");var pTe=9930;function ETe(){is.initSync(!0);let e=is.get(qe.CONFIG_PARAMS.ROOTPATH),t=qo.join(e,"clustering",pm.NATS_CONFIG_FILES.HUB_SERVER),r=qo.join(is.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=lQ.get(qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=pm.LOG_LEVEL_FLAGS[is.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==pTe?"-"+n:""),script:dQ,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 is.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kd,i.error_file=kd),i}a(ETe,"generateNatsHubServerConfig");var gTe=9940;function STe(){is.initSync(!0);let e=is.get(qe.CONFIG_PARAMS.ROOTPATH),t=qo.join(e,"clustering",pm.NATS_CONFIG_FILES.LEAF_SERVER),r=qo.join(is.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=lQ.get(qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=pm.LOG_LEVEL_FLAGS[is.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==gTe?"-"+n:""),script:dQ,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 is.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kd,i.error_file=kd),i}a(STe,"generateNatsLeafServerConfig");function TTe(){is.initSync();let e=qo.join(is.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:hTe,autorestart:!1};return is.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=kd,t.error_file=kd),t}a(TTe,"generateClusteringUpgradeV4ServiceConfig");function ATe(){let e={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.RESTART_HDB};return FT.noBootFile()&&(e[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FT.getEnvCliRootPath()),{...{name:qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:uQ},script:mTe}}a(ATe,"generateRestart");function RTe(){return{apps:[fQ()]}}a(RTe,"generateAllServiceConfigs");_Q.exports={generateAllServiceConfigs:RTe,generateMainServerConfig:fQ,generateRestart:ATe,generateNatsHubServerConfig:ETe,generateNatsLeafServerConfig:STe,generateClusteringUpgradeV4ServiceConfig:TTe}});var id=C((Ove,IQ)=>{"use strict";var tt=(k(),P($)),yTe=oe(),Vo=Gg(),qT=pr(),$o=Ct(),Za=hQ(),$T=ce(),Hl=X(),bTe=Ro(),{startWorker:mQ,onMessageFromWorkers:OTe}=nt(),NTe=Yu(),bve=require("util"),wTe=require("child_process"),ITe=require("fs"),{execFile:CTe}=wTe,Qe;IQ.exports={enterPM2Mode:PTe,start:ec,stop:JC,reload:EQ,restart:gQ,list:XC,describe:AQ,connect:Ko,kill:UTe,startAllServices:xTe,startService:ZC,getUniqueServicesList:RQ,restartAllServices:BTe,isServiceRegistered:yQ,reloadStopStart:bQ,restartHdb:TQ,deleteProcess:MTe,startClusteringProcesses:NQ,startClusteringThreads:wQ,isHdbRestartRunning:vTe,isClusteringRunning:kTe,stopClustering:HTe,reloadClustering:FTe,expectedRestartOfChildren:SQ};var Em=!1;OTe(e=>{e.type==="restart"&&$T.initSync(!0)});function PTe(){Em=!0}a(PTe,"enterPM2Mode");function Ko(){return Qe||(Qe=require("pm2")),new Promise((e,t)=>{Qe.connect((r,n)=>{r&&t(r),e(n)})})}a(Ko,"connect");var rn,DTe=10,pQ;function ec(e,t=!1){if(Em)return LTe(e);let r=CTe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=rn.indexOf(r);o>-1&&rn.splice(o,1),!pQ&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<DTe&&(ITe.existsSync(Vo.getHubConfigPath())?ec(e):(await Vo.generateNatsConfig(!0),ec(e),await new Promise(c=>setTimeout(c,3e3)),await Vo.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Vo.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=$T.get(tt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&$o.LOG_LEVEL_HIERARCHY[o]>=$o.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===$o.LOG_LEVELS.ERR||f===$o.LOG_LEVELS.WRN?Hl.OUTPUTS.STDERR:Hl.OUTPUTS.STDOUT;Hl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=$o.LOG_LEVELS[h]}if($o.LOG_LEVEL_HIERARCHY[o]>=$o.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===$o.LOG_LEVELS.ERR||f===$o.LOG_LEVELS.WRN?Hl.OUTPUTS.STDERR:Hl.OUTPUTS.STDOUT;Hl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!rn&&(rn=[],!t)){let i=a(()=>{pQ=!0,rn&&(rn.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}rn.push(r)}a(ec,"start");function LTe(e){return new Promise(async(t,r)=>{try{await Ko()}catch(n){r(n)}Qe.start(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(LTe,"startWithPM2");function JC(e){if(!Em){for(let t of rn||[])t.name===e&&(rn.splice(rn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ko()}catch(n){r(n)}Qe.stop(e,async(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.delete(e,(i,o)=>{i&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(o)})})})}a(JC,"stop");function EQ(e){return new Promise(async(t,r)=>{try{await Ko()}catch(n){r(n)}Qe.reload(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(EQ,"reload");function gQ(e){if(!Em){SQ();for(let t of rn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Ko()}catch(n){r(n)}Qe.restart(e,(n,s)=>{Qe.disconnect(),t(s)})})}a(gQ,"restart");function SQ(){for(let e of rn||[])e.config&&(e.config.restarts=0)}a(SQ,"expectedRestartOfChildren");function MTe(e){return new Promise(async(t,r)=>{try{await Ko()}catch(n){r(n)}Qe.delete(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(MTe,"deleteProcess");async function TQ(){await ec(Za.generateRestart())}a(TQ,"restartHdb");async function vTe(){let e=await XC();for(let t in e)if(e[t].name===tt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(vTe,"isHdbRestartRunning");function XC(){return new Promise(async(e,t)=>{try{await Ko()}catch(r){t(r)}Qe.list((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(XC,"list");function AQ(e){return new Promise(async(t,r)=>{try{await Ko()}catch(n){r(n)}Qe.describe(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(AQ,"describe");function UTe(){if(!Em){for(let e of rn||[])e.kill();rn=[];return}return new Promise(async(e,t)=>{try{await Ko()}catch(r){t(r)}Qe.killDaemon((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(UTe,"kill");async function xTe(){try{await NQ(),await wQ(),await ec(Za.generateAllServiceConfigs())}catch(e){throw Qe?.disconnect(),e}}a(xTe,"startAllServices");async function ZC(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case tt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Za.generateMainServerConfig();break;case tt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Za.generateNatsIngestServiceConfig();break;case tt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Za.generateNatsReplyServiceConfig();break;case tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Za.generateNatsHubServerConfig(),await ec(r,t),await Vo.removeNatsConfig(e);return;case tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Za.generateNatsLeafServerConfig(),await ec(r,t),await Vo.removeNatsConfig(e);return;case tt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Za.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ec(r)}catch(r){throw Qe?.disconnect(),r}}a(ZC,"startService");async function RQ(){try{let e=await XC(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Qe?.disconnect(),e}}a(RQ,"getUniqueServicesList");async function BTe(e=[]){try{let t=!1,r=await RQ();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===tt.PROCESS_DESCRIPTORS.HDB?t=!0:await gQ(o))}t&&await bQ(tt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Qe?.disconnect(),t}}a(BTe,"restartAllServices");async function yQ(e){if(rn?.find(r=>r.name===e))return!0;let t=await NTe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(yQ,"isServiceRegistered");async function bQ(e){let t=$T.get(tt.CONFIG_PARAMS.THREADS_COUNT)??$T.get(tt.CONFIG_PARAMS.THREADS),r=await AQ(e),n=yTe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await JC(e),await ZC(e)):e===tt.PROCESS_DESCRIPTORS.HDB?await TQ():await EQ(e)}a(bQ,"reloadStopStart");var OQ;async function NQ(e=!1){for(let t in tt.CLUSTERING_PROCESSES){let r=tt.CLUSTERING_PROCESSES[t];await ZC(r,e)}}a(NQ,"startClusteringProcesses");async function wQ(){OQ=mQ(tt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:tt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await qT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await qT.updateLocalStreams();let e=await bTe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===tt.PRE_4_0_0_VERSION){Hl.info("Starting clustering upgrade 4.0.0 process"),mQ(tt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(wQ,"startClusteringThreads");async function HTe(){for(let e in tt.CLUSTERING_PROCESSES)if(e!==tt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===tt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await OQ.terminate();else{let t=tt.CLUSTERING_PROCESSES[e];await JC(t)}}a(HTe,"stopClustering");async function kTe(){for(let e in tt.CLUSTERING_PROCESSES){let t=tt.CLUSTERING_PROCESSES[e];if(await yQ(t)===!1)return!1}return!0}a(kTe,"isClusteringRunning");async function FTe(){await Vo.generateNatsConfig(!0),await qT.reloadNATSHub(),await qT.reloadNATSLeaf(),await Vo.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Vo.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(FTe,"reloadClustering")});var eP=id(),CQ=(k(),P($));a(async function(){try{let t=await eP.describe(CQ.PROCESS_DESCRIPTORS.HDB);for(let r of t)await eP.reload(r.pm_id);await eP.deleteProcess(CQ.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|
|
130
|
+
`))}},25).unref()}o.close?.(()=>{if(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&yd()==0)try{jY(XY(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ZS),o.cantCleanupProperly||wn.warn("Had to forcefully exit the thread",ZS),process.exit(0)},5e3).unref()})}if(ZY||process.env.DEV_MODE)try{require("inspector").close()}catch(i){wn.info("Could not close debugger",i)}}}).ref();let e;Jh&&!vEe&&(e=tW()),Promise.resolve(e).then(()=>{if(yd()===0)try{DEe(zI)}catch(t){console.error("Error displaying start-up log",t)}Xh?.postMessage({type:Xt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(eW,"startServers");function tW(){let e=[];for(let t in qi){let r=qi[t];if(t.includes?.("/")&&yd()==0){bEe(t)&&jY(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ot.get(Xt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=yd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?Jh?n={fd:Jh(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:Jh?n={fd:Jh(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.trace("Listening on port "+t,ZS)}).on("error",c)}))}return Promise.all(e)}a(tW,"listenOnPorts");!YI&&!mEe?.noServerStart&&eW();function JI(e,t,r){let n=e?.read?e:new EEe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=qi[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=qi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(wn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(JI,"deliverSocket");var VY=new Map;function UEe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=VY.get(s),r){case"connection":i=JI(void 0,t),VY.set(s,i),i.write=(c,l,u)=>(Xh.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Xh.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Xh.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(UEe,"proxyRequest");var{getComponentName:tT}=(yh(),D(Rh));function XI(e,t,r=!0){t||(t=ot.get(Xt.CONFIG_PARAMS.HTTP_PORT));let n=qi[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",zY),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else qi[t]=e;e.on("unhandled",zY)}a(XI,"registerServer");function ZI(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],ot.get(Xt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ot.get(Xt.CONFIG_PARAMS.HTTP_PORT),secure:ot.get(Xt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ot.get(Xt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ot.get(Xt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:XY(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(ZI,"getPorts");function eC(e,t){let r=[];for(let{port:n,secure:s}of ZI(t))r.push(rW(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?jI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,XI(e,n,!1)),eT[n]=nT(jI,n);return r}a(eC,"httpServer");function rT(e,t){let r=zI.get(e)??[];zI.set(e,[...r,t])}a(rT,"setPortServerMap");function rW(e,t,r,n){if(rT(e,{protocol_name:t?"HTTPS":"HTTP",name:tT()}),!XS[e]){let s=r?"operationsApi_network":"http",i=ot.get(s+"_keepAliveTimeout"),o=ot.get(s+"_timeout"),c=ot.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:ot.get(Xt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=ot.get(s+"_mtls"),f=ot.get(s+"_mtls_required"),d;if(t){let p=ot.get("tls");d=ot.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:wEe(),SNICallback:JY(r?"operations-api":"server",u),ciphers:p.ciphers??p[0]?.ciphers})}let h=PEe(),_=XS[e]=(t?d?REe:AEe:SEe)(l,async(p,S)=>{try{let R=performance.now(),E=new QY(p,S);r&&(E.isOperationsServer=!0);let T=await eT[e](E);if(!T){if(E._nodeResponse.statusCode)return;T=nW(E)}if(T.headers?.set||(T.headers=new WI(T.headers)),h?T.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):T.headers?.set?.("Server","HarperDB"),T.status===-1){for(let ne of T.headers||[])S.setHeader(ne[0],ne[1]);return p.baseRequest=E,S.baseResponse=T,XS[e].emit("unhandled",p,S)}let O=T.status||200,v=performance.now(),F=v-R,q=T.body,j,te=!1;if(!T.handlesHeaders){let ne=T.headers||new WI;q?q.length>=0?(typeof q=="string"?ne.set("Content-Length",Buffer.byteLength(q)):ne.set("Content-Length",q.length),j=!0):q instanceof yEe&&(q.size?ne.set("Content-Length",q.size):q.on&&(te=!0,q.on("size",ie=>{S.headersSent||S.setHeader("Content-Length",ie)})),q=q.stream()):(ne.set("Content-Length","0"),j=!0);let le=`hdb;dur=${F.toFixed(2)}`;if(T.wasCacheMiss&&(le+=", miss"),CEe(ne,"Server-Timing",le,!0),!S.headersSent)if(te){if(S.statusCode=O,ne)if(ne[Symbol.iterator])for(let[ie,Re]of ne)S.setHeader(ie,Re);else for(let ie in ne)S.setHeader(ie,ne[ie])}else S.writeHead(O,ne&&(ne[Symbol.iterator]?Array.from(ne):ne));j&&S.end(q)}let se=E.handlerPath,z=E.method;if(jh(F,"duration",se,z,T.wasCacheMiss==null?void 0:T.wasCacheMiss?"cache-miss":"cache-hit"),qY(O<400,"success",se,z),qY(1,"response_"+O,se,z),!j)if(q instanceof ReadableStream&&(q=$Y.fromWeb(q)),(q[Symbol.iterator]||q[Symbol.asyncIterator])&&(q=$Y.from(q)),q?.pipe){q.pipe(S),q.destroy&&S.on("close",()=>{q.destroy()});let ne=0;q.on("data",le=>{ne+=le.length}),q.on("end",()=>{jh(performance.now()-v,"transfer",se,z),jh(ne,"bytes-sent",se,z)})}else q?.then?q.then(ne=>{S.end(ne)},g):S.end(q)}catch(R){g(R)}function g(R){let E=R.headers;S.writeHead(R.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),S.end(R.toString()),R.statusCode?R.statusCode===500?wn.warn(R):wn.info(R):wn.error(R)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",p=>{p._parent.startTime&&jh(performance.now()-p._parent.startTime,"tls-handshake",e),jh(p.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),XI(_,e)}return XS[e]}a(rW,"getHTTPServer");function nT(e,t){let r=nW;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"next_callback")}}return r}a(nT,"makeCallbackChain");function nW(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new WI}}a(nW,"unhandled");function xEe(e,t){eC(e,{requestOnly:!0,...t})}a(xEe,"onRequest");function BEe(e,t){let r;if(t.securePort){rT(t.securePort,{protocol_name:"TLS",name:tT()});let n=JY("server",t.mtls),s=ot.get("tls");r=NEe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:s.ciphers??s[0]?.ciphers,SNICallback:n},e),n.initialize(r),qi[t.securePort]=r}return t.port&&(rT(t.port,{protocol_name:"TCP",name:tT()}),r=gEe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),qi[t.port]=r),r}a(BEe,"onSocket");Object.defineProperty(TEe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var KY=[],QI={};function sW(e,t){for(let{port:r}of ZI(t))KY[t?.runFirst?"unshift":"push"]({listener:e,port:r}),QI[r]=nT(KY,r)}a(sW,"onUpgrade");var YY=[],WY={};function HEe(e,t){let r=[];for(let{port:n,secure:s}of ZI(t)){rT(n,{protocol_name:s?"WSS":"WS",name:tT()});let i=rW(n,s,t?.isOperationsServer,t?.mtls);Qh[n]||(Qh[n]=new OEe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Qh[n].on("connection",(o,c)=>{let l=new QY(c);l.isWebSocket=!0;let u=eT[n](l);WY[n](o,l,u)}),sW((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):Qh[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),Qh[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{QI[n]&&QI[n](o,c,l)})),r.push(i),YY[t?.runFirst?"unshift":"push"]({listener:e,port:n}),WY[n]=nT(YY,n),eT[n]=nT(jI,n)}return r}a(HEe,"onWebSocket");function zY(e,t){t.writeHead(404),t.end(`Not found
|
|
131
|
+
`)}a(zY,"defaultNotFound")});var GY={};Be(GY,{startHTTPThreads:()=>FEe,startSocketServer:()=>oC,updateWorkerIdleness:()=>_W});async function FEe(e=2,t){try{if(t)sC(0,1,!0);else{let{loadRootComponents:r}=sT();if(e===0)return(0,Cs.setMainIsWorker)(!0),await tC().startServers(),Promise.resolve([]);await r()}fW();for(let r=0;r<e;r++)sC(r,e);return Promise.all(dW)}finally{(0,Cs.threadsHaveStarted)()}}function fW(){let e=(0,cW.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),nC=setInterval(()=>{aT.notify(e)},kEe).unref())}function sC(e,t=1,r){if(rC++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:lA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===oA.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});dW.push(s),await s,bd.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=oT.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=bd.indexOf(n);o>-1&&bd.splice(o,1)}if(a(i,"removeWorker"),Od){let o=Od;Od=[];for(let c of o)uW[c.localPort](null,c)}}}),r){let n=setInterval(()=>{iC?iC=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),rC=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function oC(e=0,t){if(typeof e=="string")try{(0,cT.existsSync)(e)&&(0,cT.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=GEe:r=qEe(t):r=aC;let n=(0,Nd.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=uW[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),iC=!0,r(i,(o,c)=>{if(!o){if(iW){let u=i._socket||new Nd.Socket({handle:i,writable:!0,readable:!0});iW.deliverSocket(u,e,c),u.resume()}else rC>0?(Od.length===0&&setTimeout(()=>{Od.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,Od.push(i)):(console.log("start up a dynamic thread to handle request"),sC(0));Dt(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Nd.Socket({handle:i,writable:!0,readable:!0});KEe(u,o,e)}Dt(!0,"socket-routed")})},aT.info(`HarperDB ${lW.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function aC(e,t){let r,n=0;for(let s of bd){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=iT)return iT=i,t(r);n=i}iT=0,t(r)}function GEe(e,t){let r={};e.getpeername(r);let n=r.address,s=wd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);aC(e,o=>{wd.set(n,{worker:o,lastUsed:i}),t(o)})}function qEe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Nd.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=wd.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);aC(n,d=>{wd.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function _W(){iT=0;for(let e of bd)e.expectedIdle=e.recentELU.idle+$Ee,e.requests=1;bd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function KEe(e,t,r){let n=VEe++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),oT.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),oT.delete(n)),s.event=="destroy"&&(e.destroy(),oT.delete(n))})}var Cs,Nd,aT,cT,aW,cW,lW,bd,Od,uW,iW,rC,dW,nC,kEe,iC,iT,oW,wd,$Ee,oT,VEe,KI=be(()=>{Cs=M(st()),Nd=require("net");G();aT=M(X()),cT=require("fs");Ci();aW=require("worker_threads"),cW=M(Ju()),lW=M(Et()),bd=[],Od=[],uW=[],rC=0,dW=[];aW.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===cA.RESTART&&nC&&(clearInterval(nC),fW())}));kEe=6e5;a(FEe,"startHTTPThreads");a(fW,"licenseWarning");a(sC,"startHTTPWorker");a(oC,"startSocketServer");iT=0;a(aC,"findMostIdleWorker");oW=36e5,wd=new Map;a(GEe,"findByRemoteAddressAffinity");a(qEe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of wd)r.lastUsed+oW<e&&wd.delete(t)},oW).unref();$Ee=1e3;a(_W,"updateWorkerIdleness");(0,Cs.setMonitorListener)(_W);oT=new Map,VEe=1;a(KEe,"proxySocket")});var IW=P((aMe,wW)=>{var pW=M(require("cluster")),Ya=M(ce());G();var $i=M(X()),mW=M(require("fastify")),EW=M(require("@fastify/cors")),gW=M(require("@fastify/compress")),SW=M(require("@fastify/static")),TW=M(xb()),AW=M(require("path")),RW=M(Et()),yW=M($s()),bW=M(oe()),OW=M(Gn()),NW=M(Ju());Dr();var Wa=M(DS());eo();Ya.default.initSync();var YEe=6e4,WEe=1024*1024*1024,zEe="TRUE",{CONFIG_PARAMS:ep}=$,Id;wW.exports={hdbServer:hW,start:hW};async function hW(e){try{$i.default.debug("In Fastify server"+process.cwd()),$i.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),$i.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=pW.default.isMaster,await jEe();let t=e.securePort>0;Id=QEe(t),await Id.ready(),e||(e={}),e.isOperationsServer=!0;try{Ke.http(Id.server,e),Id.server.closeIdleConnections||await Id.listen({port:0,host:"::"})}catch(r){throw Id.close(),$i.default.error(r),$i.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),$i.default.fatal(t),process.exit(1)}}a(hW,"operationsServer");async function jEe(){$i.default.trace("Configuring HarperDB process."),yW.default.setSchemaDataToGlobal(),await OW.default.setUsersWithRolesCache(),await NW.default.getLicense()}a(jEe,"setUp");function QEe(e){$i.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=JEe(e),r=(0,mW.default)(t);r.server.headersTimeout=ZEe(),r.setErrorHandler(Wa.serverErrorHandler);let n=XEe();n&&r.register(EW.default,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(TW.default),r.register(gW.default),r.register(SW.default,{root:AW.default.join(RW.PACKAGE_ROOT,"studio/build-local")}),wf(r);let s=Ya.default.get(iA.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!bW.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wa.reqBodyValidationHandler,Wa.authHandler],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),(0,Wa.handlePostRequest)(i,o)}),r.get("/health",()=>"HarperDB is running."),$i.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(QEe,"buildServer");function JEe(e){let t=Ya.default.get(ep.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ya.default.get(ep.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:WEe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(JEe,"getServerOptions");function XEe(){let e=Ya.default.get(ep.OPERATIONSAPI_NETWORK_CORS),t=Ya.default.get(ep.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===zEe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(XEe,"getCORSOpts");function ZEe(){return Ya.default.get(ep.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??YEe}a(ZEe,"getHeaderTimeoutConfig")});var _C={};Be(_C,{disableNATS:()=>tge,publishToStream:()=>dT,setNATSReplicator:()=>cC,setPublishToStream:()=>rge,setSubscription:()=>fC,start:()=>ege});function ege(){tp.default.get(B.CLUSTERING_ENABLED)&&sge()}function tge(e=!0){MW=e}function rge(e,t){dT=e,fC=t}function sge(){if(MW||process.env._DISABLE_NATS)return;let e=Ze(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];cC(s,r,i)}}il((r,n)=>{cC(r.tableName,r.databaseName,r),n&&UW(r)}),!CW&&(CW=!0)}function cC(e,t,r){if(t==="system"&&ige.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends qr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){UW(i)}static subscribe(){let i=new vn;return fC(t,e,i),i}static subscribeOnThisThread(i){return i<(tp.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??nge)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new lT(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=vW;return i}a(n,"getNATSTransaction")}function UW(e){let t=tp.default.get(B.CLUSTERING_NODENAME);dT(`${uC.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,dC.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var PW,uC,dC,DW,LW,tp,uT,MW,dT,fC,nge,vW,CW,ige,lT,lC,xW=be(()=>{Ue();na();PW=M(Er()),uC=M(Pt()),dC=M(lo());Kl();DW=M(Qb()),LW=M(ln()),tp=M(ce());G();uT=M(X());a(ege,"start");a(tge,"disableNATS");dT=PW.publishToStream,fC=DW.setSubscription;a(rge,"setPublishToStream");nge=2;a(sge,"assignReplicationSource");ige=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(cC,"setNATSReplicator");a(UW,"publishSchema");lT=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=tp.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(uT.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(dT(`${uC.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,dC.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw uT.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},lC=class extends lT{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,LW.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};vW=new lC});async function GW({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await hC.get(e,{returnNonexistent:!0});i=new EC(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await hC.get(e);o&&o.delete()}i=new _T(e,t)}return n&&(n.id=e,n.user={username:t?.username},rp.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function pC(){return fT++,fT>65500&&(fT=1),fT}function mC(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=us.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return It(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var HW,za,kW,FW,BW,hC,rp,fT,_T,EC,qW=be(()=>{Ue();Jl();HW=M(ln()),za=M(X());hc();kW=M(st()),FW=M(tC());Dr();BW=100,hC=_t({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),rp=_t({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,kW.getWorkerIndex)()===0&&(async()=>{await FW.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of rp.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ke.getUser(r.user.username));try{await mC(r,t,r)}catch{(0,za.warn)("Failed to publish will",t)}rp.delete(e.id)}})();a(GW,"getSession");fT=1;a(pC,"getNextMessageId");_T=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(R=>R.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,za.trace)("Resuming subscription from",s,"from",o);let _=us.getMatch(u,"mqtt");if(!_){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let R=h.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,R.indexOf("+")===R.length-1)h.onlyChildren=!0,h.url="/"+R.slice(0,R.length-1);else{let E=R.split("/"),T;for(let F=0;F<E.length;F++)if(E[F].indexOf("+")>-1)if(E[F]==="+")T=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&T)throw new Error("Filters can not be combined");let O=!0;E[E.length-1]==="#"&&(E.length--,O=!1),T&&(n=a(F=>{let q=F.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==E.length)return!1;for(let j=0;j<E.length;j++)if(E[j]!=="+"&&E[j]!==q[j])return!1;return!0},"filter"));let v=E.indexOf("+");h.url="/"+(v>-1?E.slice(0,v):E).concat("").join("/")}}else h.isCollection=!1;let p=_.path,S=_.Resource,g=await It(h,async()=>{let R=this.createContext();R.topic=s,R.retainHandling=i,R.isCollection=h.isCollection;let E=await S.subscribe(h,R);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let T=(async()=>{for await(let O of E)try{let v;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,v=this.needsAcknowledge(O)):(O.acknowledge?.(),v=pC());let F=O.id;if(Array.isArray(F)&&(F=Ql(F)),F==null&&(F=""),await this.listener(p+"/"+F,O.value,v,t)===!1)break;this.awaitingAcks?.size>BW?await new Promise(j=>setTimeout(j,this.awaitingAcks.size-BW)):await new Promise(setImmediate)}catch(v){(0,za.warn)(v)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=pC();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return mC(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();It(r,async()=>{try{if(!t){let n=await rp.get(this.sessionId);n?.doesExist()&&await mC(n,n.data,r)}}finally{await rp.delete(this.sessionId)}}).catch(n=>{(0,za.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(mC,"publish");EC=class extends _T{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=pC(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,za.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,HW.getNextMonotonicTime)()),(0,za.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),hC.put(this.sessionRecord)}}});var SC={};Be(SC,{bypassAuth:()=>oge,start:()=>age});function oge(){WW=!0}function age({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new YW.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),_r.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:p}=VW(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",p),u.on("error",S=>{_r.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),_r.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pT.notify?.({username:f?.username,status:xs.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(p){throw(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pT.error?.({username:_,status:xs.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),p}}else _r.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),_r.error?.(_)}else if(l.required)return _r.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&WW&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,KW.getSuperUser)(),_r.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=VW(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{_r.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function VW(e,t,r,n,s){$W||($W=!0,A_(d=>{hT>0&&d.push({metric:"mqtt-connections",connections:hT,byThread:!0})}));let i;hT++;let o,c={protocolVersion:4},l=(0,mT.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){hT--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!1,"connection","mqtt","disconnect"),_r.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){_r.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,p=_?.indexOf("/",1),S=p>0?_.slice(0,p):_;Dt(d.length,"bytes-received",S,R(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Ke.getUser(d.username,d.password.toString(),r),(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pT.notify?.({username:n?.username,status:xs.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(se){return(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pT.error?.({username:d.username,status:xs.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let se=e.deserialize||(e.deserialize=no(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?se(d.will.payload):void 0,delete d.will.payload}o=GW({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(se){return _r.error?.(se),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:se.code||5,returnCode:se.code||128})}s.events.emit("connected",o,e),Yn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let T=a(async(se,z,ne,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",se);let ie=se.indexOf("/",1),Re=ie>0?se.slice(0,ie):se;g({cmd:"publish",topic:se,payload:await E(z),messageId:ne||Math.floor(Math.random()*1e8),qos:le.qos},Re);let pe=e._socket??e;return pe.writableNeedDrain?new Promise(Ae=>pe.once("drain",Ae)):!pe.closed}catch(ie){return _r.error?.(ie),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(T),o.sessionWasPresent&&await o.resume();break;case"subscribe":let O=[];for(let se of d.subscriptions){let z;try{let ne=await o.addSubscription(se,se.qos>=1);z=ne?ne.qos||0:c.protocolVersion<5?128:143}catch(ne){s.events.emit("error",ne,e,se,o),ne.statusCode?ne.statusCode===500?_r.warn?.(ne):_r.info?.(ne):_r.error?.(ne),z=c.protocolVersion<5?128:ne.statusCode===403?135:ne.statusCode===404?143:128}O.push(z)}await o.committed,g({cmd:"suback",granted:O,messageId:d.messageId});break;case"unsubscribe":{let se=[];for(let z of d.unsubscriptions)se.push(o.removeSubscription(z)?0:17);g({cmd:"unsuback",granted:se,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let v=d.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=no(r?.headers.get?.("content-type"))),j=(d.payload?.length||0)>0?F(d.payload):void 0,te;try{te=await o.publish(d,j)}catch(se){s.events.emit("error",se,e,d,o),_r.warn?.(se),d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:te===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!0,"connection","mqtt","disconnect"),_r.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),_r.error?.(T),g({cmd:"disconnect"})}function g(T,O){let v=(0,mT.generate)(T,c);t(v),Dt(v.length,"bytes-sent",O,R(T),"mqtt")}a(g,"sendPacket");function R(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(R,"packetMethodName");function E(T){return oa(T,r)}a(E,"serialize")}),l.on("error",d=>{_r.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var mT,KW,Cd,gC,YW,pT,_r,WW,$W,hT,zW=be(()=>{mT=require("mqtt-packet");qW();KW=M(Gn());eo();Ci();Dr();Cd=M(ce());G();gC=M(mi()),YW=require("events"),pT=(0,gC.loggerWithTag)("auth-event"),_r=(0,gC.loggerWithTag)("mqtt"),WW=(0,Cd.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(oge,"bypassAuth");a(age,"start");hT=0;a(VW,"onSocket")});var Rh={};Be(Rh,{component_errors:()=>Dd,getComponentName:()=>fge,loadComponent:()=>ST,loadComponentDirectories:()=>ZW,setErrorReporter:()=>dge});function ZW(e,t){t&&(AC=t),e&&(bC=e);let r=[];if((0,ut.existsSync)(TC)){let s=(0,ut.readdirSync)(TC,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Tt.join)(TC,o);r.push(ST(c,AC,tA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(ST(n,AC,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{XW=!0})}function dge(e){np=e}function _ge(e,t){return new Promise((r,n)=>{let s=Ze().system.hdb_info;if(!s)return r();let i=setTimeout(()=>{s.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(s.primaryStore.attemptLock(e,0,()=>{clearTimeout(i),r()}))try{(0,ut.rmSync)(t,{recursive:!0,force:!0}),(0,ut.existsSync)((0,Tt.join)(e,"node_modules"))||(0,ut.mkdirSync)((0,Tt.join)(e,"node_modules")),(0,ut.symlinkSync)(wC.PACKAGE_ROOT,t,"dir"),r()}finally{s.primaryStore.unlock(e,0)}})}async function ST(e,t,r,n,s,i){let o=(0,ut.realpathSync)(e);if(ET.has(o))return ET.get(o);ET.set(o,!0),s&&(bC=s);try{let c;n&&(Dd=new Map);let l=(0,Tt.join)(e,"harperdb-config.yaml");(0,ut.existsSync)(l)?c=n?(0,TT.getConfigObj)():(0,RC.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():!n&&(0,ut.existsSync)(l=(0,Tt.join)(e,"config.yaml"))?c=(0,RC.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():c=OC;try{let d=(0,Tt.join)(e,"node_modules","harperdb");(n||((0,ut.existsSync)(d)||!e.startsWith((0,yC.getHdbBasePath)()))&&(!(0,ut.existsSync)(d)||(0,ut.realpathSync)(wC.PACKAGE_ROOT)!==(0,ut.realpathSync)(d)))&&await _ge(e,d)}catch(d){Ml.default.error("Error symlinking harperdb module",d),d.code=="EPERM"&&process.platform==="win32"&&Ml.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=gT,f=n;for(let d in c){gT=d;let h=c[d];if(Dd.set(n?d:(0,Tt.basename)(e),!1),!h)continue;let _,p=h.package;try{if(p){let T=e,O;for(;!(0,ut.existsSync)(O=(0,Tt.join)(T,"node_modules",d));)if(T=(0,Tt.dirname)(T),T.length<(0,yC.getHdbBasePath)().length){O=null;break}if(O)_=await ST(O,t,r,!1),f=!0;else throw new Error(`Unable to find package ${d}:${p}`)}else _=uge[d];if(!_)continue;let S=a(T=>(T.origin=r,_t(T)),"ensureTable"),g=h.network||(h.port||h.securePort)&&h,R=g?.securePort||g?.https&&g.port,E=!g?.https&&g?.port;if(Pd.isMainThread&&(_=await _.startOnMainThread?.({server:Ke,ensureTable:S,port:E,securePort:R,resources:t,...h})||_,n&&g))for(let T of[E,R])try{if(+T&&!jW.includes(T)){let O=NC.get(B.HTTP_SESSIONAFFINITY);O&&Ml.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!AE)&&(jW.push(T),oC(T,O))}}catch(O){console.error("Error listening on socket",T,O,d)}if(t.isWorker&&(_=await _.start?.({server:Ke,ensureTable:S,port:E,securePort:R,resources:t,...h})||_),bC.set(_,!0),(_.handleFile||_.handleDirectory||_.setupFile||_.setupDirectory)&&h.files!=null){if(h.files.includes(".."))throw(0,JW.handleHDBError)("Can not reference parent directories");let T=(0,Tt.join)(e,h.files).replace(/\\/g,"/"),O=T.indexOf("/*");if(O>-1&&h.files!==OC[d]?.files&&!(0,ut.existsSync)(T.slice(0,O)))throw new Error(`The path '${T.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${h.files}'`);let v=(0,Tt.basename)(e),F=h.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+v+F.slice(2):F==="."?"/"+v:"/"+v+"/"+F;let q,j,te;if(h.root){let z=h.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",j=(0,Tt.join)(e,z)}else(te=T.indexOf("/*"))>-1?(j=T.slice(0,te+1),q=(0,Tt.relative)(e,j)):h.files.indexOf("/")>-1&&(j=T.slice(0,T.lastIndexOf("/")+1),q=(0,Tt.relative)(e,j));let se=!1;if(Pd.isMainThread&&_.setupDirectory&&(se=await _.setupDirectory?.(F,j,t)),t.isWorker&&_.handleDirectory&&(se=await _.handleDirectory?.(F,j,t)),se){f=!0;continue}for(let z of await(0,QW.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:ne,dirent:le}=z;f=!0;let ie=(0,Tt.relative)(e,ne).replace(/\\/g,"/");if(q)if(ie.startsWith(q))ie=ie.slice(q.length+1);else throw new Error(`The root path '${h.root}' does not reference a valid part of the file path '${ie}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Re=F+(F.endsWith("/")?"":"/")+ie;try{if(le.isFile()){let pe=await lge(ne);Pd.isMainThread&&await _.setupFile?.(pe,Re,ne,t),t.isWorker&&await _.handleFile?.(pe,Re,ne,t)}else Pd.isMainThread&&await _.setupDirectory?.(Re,ne,t),t.isWorker&&await _.handleDirectory?.(Re,ne,t)}catch(pe){let Ae=`Could not load ${le.isFile()?"file":"directory"} '${ne}'${h.module?` using '${h.module}'`:""} for application '${e}' due to:
|
|
132
|
+
`;pe.message=`${Ae}${pe.message}`,pe.stack=`${Ae}${pe.stack}`,np?.(pe),Ml.default.error(pe),t.set(h.path||"/",new sa(pe)),Dd.set(n?d:(0,Tt.basename)(e),pe.message)}}}}catch(S){S.message=`Could not load component '${d}' for application '${(0,Tt.basename)(e)}' due to: ${S.message}`,np?.(S),((0,sp.getWorkerIndex)()===0?console:Ml.default).error(S),t.set(h.path||"/",new sa(S),null,!0),Dd.set(n?d:(0,Tt.basename)(e),S.message)}}if(gT=u,Pd.isMainThread&&!XW&&i&&(0,sp.watchDir)(e,async()=>ZW()),c.extensionModule){let d=await mE((0,Tt.join)(e,c.extensionModule));return ET.set(o,d),d}if(!f&&t.isWorker){let d=`${e} did not load any modules, resources, or files, is this a valid component?`;np?.(new Error(d)),((0,sp.getWorkerIndex)()===0?console:Ml.default).error(d),Dd.set((0,Tt.basename)(e),d)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,np?.(c),t.set("",new sa(c))}}var ut,Tt,Pd,RC,NC,wC,QW,sp,Ml,JW,yC,cge,TT,lge,TC,bC,XW,AC,Dd,uge,OC,jW,ET,np,gT,fge,yh=be(()=>{ut=require("fs"),Tt=require("path"),Pd=require("worker_threads"),RC=require("yaml"),NC=M(ce()),wC=M(Et());G();aL();qL();Xx();rB();nB();GB();sK();uK();fK();QW=M(require("fast-glob")),sp=M(st()),Ml=M(X());gb();Dr();JW=M(he());Ue();KI();yC=M(ce()),cge=M(IW());Qg();xW();ps();zW();TT=M(wt());RE();BA();({readFile:lge}=ut.promises),TC=(0,TT.resolvePath)(NC.get(B.COMPONENTSROOT)),bC=new Map,Dd=new Map;a(ZW,"loadComponentDirectories");uge={REST:bE,rest:bE,graphql:nR,graphqlSchema:GA,roles:Eb,jsResource:Tb,fastifyRoutes:aI,login:Rb,static:cI,operationsApi:cge,customFunctions:{},http:{},clustering:_C,replication:Aa,authentication:ph,mqtt:SC,loadEnv:lI},OC={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(OC,"static",{value:{files:"web/**"}});jW=[],ET=new Map;a(dge,"setErrorReporter");fge=a(()=>gT,"getComponentName");a(_ge,"symlinkHarperModule");a(ST,"loadComponent")});var sT=P((BMe,tz)=>{var{isMainThread:ez}=require("worker_threads"),{getTables:hge,getDatabases:UMe,table:xMe}=(Ue(),D(at)),{loadComponentDirectories:pge,loadComponent:mge}=(yh(),D(Rh)),{resetResources:Ege}=(Jl(),D(nL)),gge=iw(),Sge=wt(),{dirname:Tge}=require("path"),{getConnection:Age}=Er(),Rge=ce(),{CONFIG_PARAMS:yge}=(G(),D($)),{loadCertificates:bge}=Zs(),IC=new Map;async function Oge(e=!1){!ez&&Rge.get(yge.CLUSTERING_ENABLED)&&Age();try{ez&&await gge()}catch(n){console.error(n)}let t=Ege();hge(),t.isWorker=e,await bge(),await mge(Tge(Sge.getConfigFilePath()),t,"hdb",!0,IC),await pge(IC,t);let r=[];for(let[n]of IC)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Oge,"loadRootComponents");tz.exports.loadRootComponents=Oge});var st=P((kMe,li)=>{"use strict";HA();var{Worker:Nge,MessageChannel:wge,parentPort:Vi,isMainThread:MC,threadId:Ige,workerData:Ki}=require("worker_threads"),{PACKAGE_ROOT:Cge}=Et(),{join:iz,isAbsolute:Pge,extname:Dge}=require("path"),{server:oz}=(Dr(),D(ql)),{watch:Lge,readdir:Mge}=require("fs/promises"),{totalmem:rz}=require("os"),Ld=(G(),D($)),az=ce(),ci=X(),{randomBytes:vge}=require("crypto"),{_assignPackageExport:Uge}=ui(),nz=1024*1024,ja=[],Ps=[],xge=50,vC=1e4,Bge="restart",cz="request_thread_info",lz="resource_report",uz="thread_info",dz="added-port",Hge="ack",CC;Uge("threads",Ps);li.exports={startWorker:PC,restartWorkers:xC,shutdownWorkers:$ge,workers:ja,setMonitorListener:Jge,onMessageFromWorkers:Vge,onMessageByType:gz,broadcast:Yge,broadcastWithAcknowledgement:zge,setChildListenerByType:qge,getWorkerIndex:fz,getWorkerCount:_z,getTicketKeys:pz,setMainIsWorker:Fge,setTerminateTimeout:kge,restartNumber:Ki?.restartNumber||1};Ps.onMessageByType=gz;Ps.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ps.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};li.exports.whenThreadsStarted=new Promise(e=>{li.exports.threadsHaveStarted=e});var UC;function kge(e){vC=e}a(kge,"setTerminateTimeout");function fz(){return Ki?Ki.workerIndex:UC?0:void 0}a(fz,"getWorkerIndex");function _z(){return Ki?Ki.workerCount:UC?1:void 0}a(_z,"getWorkerCount");function Fge(e){UC=e,li.exports.threadsHaveStarted()}a(Fge,"setMainIsWorker");var hz=1,AT;function pz(){return AT||(AT=MC?vge(48):Ki.ticketKeys,AT)}a(pz,"getTicketKeys");Object.defineProperty(oz,"workerIndex",{get(){return fz()}});Object.defineProperty(oz,"workerCount",{get(){return _z()}});var mz={[cz](e,t){jge(t)},[lz](e,t){Qge(t,e)}};function PC(e,t={}){let r=process.constrainedMemory?.()||rz();r=Math.min(r,rz(),2e4*nz);let n=az.get(Ld.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/nz/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ps){let u=new wge;u.existingPort=l,i.push(u),o.push(u.port2)}Dge(e)||(e+=".js");let c=new Nge(Pge(e)?e:iz(Cge,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:hz=t.threadCount,name:t.name,restartNumber:li.exports.restartNumber,ticketKeys:pz()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:dz,port:l,threadId:c.threadId},[l]);return yT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>PC(e,t),c.on("error",l=>{ci.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{ja.splice(ja.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<xge?(t.unexpectedRestarts=c.unexpectedRestarts+1,PC(e,t)):ci.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{mz[l.type]?.(l,c)}),ja.push(c),Zge(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(PC,"startWorker");var Gge=[Ld.THREAD_TYPES.HTTP];async function xC(e=null,t=Math.max(hz>3,1),r=!0){if(MC){try{process.chdir(process.cwd())}catch(o){ci.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=sT();await o()}li.exports.restartNumber++,t<1&&(t=t*ja.length);let n=[],s=[];for(let o of ja.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ci.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:li.exports.restartNumber,type:Ld.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Gge.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{ci.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},vC*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===Ld.ITC_EVENT_TYPES.CHILD_STARTED&&(ci.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");ci.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=nd();r&&(e==="http"||!e)&&az.get(Ld.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vi.postMessage({type:Bge,workerType:e})}a(xC,"restartWorkers");function qge(e,t){mz[e]=t}a(qge,"setChildListenerByType");function $ge(e){return xC(e,1/0,!1)}a($ge,"shutdownWorkers");var Ez=[];function Vge(e){Ez.push(e)}a(Vge,"onMessageFromWorkers");var DC=new Map;function gz(e,t){let r=DC.get(e);r||DC.set(e,r=[]),r.push(t)}a(gz,"onMessageByType");var Kge=10;async function Yge(e,t){let r=0;for(let n of Ps)try{n.postMessage(e),r++>Kge&&(r=0,await new Promise(setImmediate))}catch(s){ci.error("Unable to send message to worker",s)}t&&Tz(e,null)}a(Yge,"broadcast");var RT=new Map,Wge=1;function zge(e){return new Promise(t=>{let r=0;for(let n of Ps)try{let s=Wge++,i=a(()=>{RT.delete(s),--r===0&&t(),n!==Vi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,RT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of RT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ci.error("Unable to send message to worker",s)}r===0&&t()})}a(zge,"broadcastWithAcknowledgement");function jge(e){e.postMessage({type:uz,workers:Sz()})}a(jge,"sendThreadInfo");function Sz(){let e=Date.now();return ja.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(Sz,"getChildWorkerInfo");function Qge(e,t){e.resources=t,e.resources.updated=Date.now()}a(Qge,"recordResourceReport");var LC;function Jge(e){LC=e}a(Jge,"setMonitorListener");var Xge=1e3,sz=!1;function Zge(){sz||(sz=!0,setInterval(()=>{for(let e of ja){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}LC&&LC()},Xge).unref())}a(Zge,"startMonitoring");var eSe=1e3;if(Vi&&Ki?.addPorts){yT(Vi);for(let e=0,t=Ki.addPorts.length;e<t;e++){let r=Ki.addPorts[e];r.threadId=Ki.addThreadIds[e],yT(r)}setInterval(()=>{let e=process.memoryUsage();Vi.postMessage({type:lz,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},eSe).unref(),CC=a(()=>new Promise((e,t)=>{Vi.on("message",r),Vi.postMessage({type:cz});function r(n){n.type===uz&&(Vi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else CC=Sz;li.exports.getThreadInfo=CC;function yT(e,t){Ps.push(e),e.on("message",r=>{if(r.type===dz)r.port.threadId=r.threadId,yT(r.port);else if(r.type===Hge){let n=RT.get(r.id);n&&n()}else Tz(r,e)}).on("close",()=>{Ps.splice(Ps.indexOf(e),1)}).on("exit",()=>{Ps.splice(Ps.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(yT,"addPort");function Tz(e,t){for(let n of Ez)n(e,t);let r=DC.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ci.error(s)}}a(Tz,"notifyMessageListeners");if(MC){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Mge(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(iz(s,o.name));try{for await(let{filename:o}of Lge(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await xC(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");li.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Vi.on("message",async e=>{let{type:t}=e;t===Ld.ITC_EVENT_TYPES.SHUTDOWN&&(li.exports.restartNumber=e.restartNumber,Vi.unref(),setTimeout(()=>{ci.warn("Thread did not voluntarily terminate",Ige),process.exit(0)},vC).unref())})});var Ex={};Be(Ex,{ACTION_32_BIT:()=>Sm,ACTION_64_BIT:()=>sSe,AUDIT_STORE_OPTIONS:()=>uh,Decoder:()=>sl,HAS_BLOBS:()=>pn,HAS_CURRENT_RESIDENCY_ID:()=>Nc,HAS_EXPIRATION_EXTENDED_TYPE:()=>vf,HAS_ORIGINATING_OPERATION:()=>Mf,HAS_PREVIOUS_RESIDENCY_ID:()=>wc,REMOTE_SEQUENCE_UPDATE:()=>ng,createAuditEntry:()=>bc,getLastRemoved:()=>rSe,openAuditStore:()=>NT,readAuditEntry:()=>Ct,removeAuditEntry:()=>wT,setAuditRetention:()=>nSe,transactionKeyEncoder:()=>Cz});function NT(e){let t=e.auditStore=e.openDB(BC.AUDIT_STORE_NAME,{create:!1,...uh});t||(t=e.auditStore=e.openDB(BC.AUDIT_STORE_NAME,uh),Rz(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,f){return r[l]=f,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=kC;zh(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(f=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let d=0,h,_;try{for(let{key:p,value:S}of t.getRange({start:1,snapshot:!1,end:Date.now()-HC/(1+i*i)})){try{h=wT(t,p,S)}catch(g){Md.warn("Error removing audit entry",g)}if(_=p,await new Promise(setImmediate),++d>=tSe){o=10;break}}await h}finally{d===0?o=Math.min(o<<1,HC/10):(Rz(t,_),o>100&&(o=o>>1)),f(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,op.getWorkerIndex)()===(0,op.getWorkerCount)()-1&&c(),(0,op.getWorkerIndex)()===0&&!Az)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Az=!0,Md.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function wT(e,t,r){let n=iSe(r),s;if(n&pn){s=Ct(r);let i=e.tableStores[s.tableId],o=i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Sc(()=>ia(s.getValue(i)),i.rootStore)}if((n&15)===FC){s=s||Ct(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Rz(e,t){GC[0]=t,e.put(Symbol.for("last-removed"),Pz)}function rSe(e){let t=e.get(Symbol.for("last-removed"));if(t)return Pz.set(t),GC[0]}function nSe(e,t=kC){HC=e,kC=t}function bc(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=Dz[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let p=1;if(n&&(n>1?Qa.setFloat64(0,n):Ds.set(_R),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}R(s),R(t),g(r),Qa.setFloat64(p,e),p+=8,l&Nc&&R(u),l&wc&&R(f),l&vf&&(Qa.setFloat64(p,d),p+=8),l&Mf&&R(Lz[h]),i?g(i):Ds[p++]=0,l?Qa.setUint32(n?8:0,_|l|3221225472):Ds[n?8:0]=_;let S=Ds.subarray(0,p);if(c)return Buffer.concat([S,c]);return S;function g(E){let T=p;p+=1,p=(0,vl.writeKey)(E,Ds,p);let O=p-T-1;O>127?O>16383?(Md.error("Key or username was too large for audit entry",E),p=T+1,Ds[T]=0):(Ds.copyWithin(T+2,T+1,p),Qa.setUint16(T,O|32768),p++):Ds[T]=O}function R(E){E<128?Ds[p++]=E:E<16384?(Qa.setUint16(p,E|32768),p+=2):E<1056964608?(Qa.setUint32(p,E|3221225472),p+=4):(Ds[p]=255,Qa.setUint32(p+1,E),p+=5)}}function iSe(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new sl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ct(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new sl(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,p,S;if(i&Nc&&(h=n.readInt()),i&wc&&(_=n.readInt()),i&vf&&(p=n.readFloat64()),i&Mf){let T=n.readInt();S=Lz[T]}l=n.readInt();let g=n.position,R=n.position+=l,E;return{type:Dz[i&7],tableId:c,nodeId:o,get recordId(){return(0,vl.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return R>g?(0,vl.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(T,O,v){if(i&bT||i&ip&&!O)return E||(E=Sc(()=>T.decoder.decode(e.subarray(n.position,r)),T.rootStore)),E;if(i&ip&&v)return rb(T.getEntry(this.recordId),v,T)},getBinaryValue(){return i&(bT|ip)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:p,originatingOperation:S}}catch(n){return Md.error("Reading audit entry error",n,e),{}}}var vl,OT,BC,op,Iz,Md,Ds,Qa,Cz,uh,HC,tSe,GC,Pz,kC,Az,bT,ip,yz,FC,bz,Oz,Nz,wz,Sm,sSe,ng,Nc,wc,Mf,vf,pn,Dz,Lz,sl,so=be(()=>{vl=require("ordered-binary"),OT=M(ce()),BC=M(Ft());G();op=M(st()),Iz=M(oe());ru();Md=M(X());nE();fs();QS();(0,OT.initSync)();Ds=Buffer.alloc(2816),Qa=new DataView(Ds.buffer,Ds.byteOffset,2816),Cz={writeKey(e,t,r){return e===Lf?(t.set(Lf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,vl.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,vl.readKey)(e,t,r)}},uh={encoding:"binary",keyEncoder:Cz},HC=(0,Iz.convertToMS)((0,OT.get)(B.LOGGING_AUDITRETENTION))||86400*3,tSe=1e3,GC=new Float64Array(1),Pz=new Uint8Array(GC.buffer),kC=1e4,Az=!1;a(NT,"openAuditStore");a(wT,"removeAuditEntry");a(Rz,"updateLastRemoved");a(rSe,"getLastRemoved");a(nSe,"setAuditRetention");bT=16,ip=32,yz=1,FC=2,bz=3,Oz=4,Nz=5,wz=6,Sm=14,sSe=15,ng=11,Nc=512,wc=1024,Mf=2048,vf=4096,pn=8192,Dz={put:yz|bT,[yz]:"put",delete:FC,[FC]:"delete",message:bz|bT,[bz]:"message",invalidate:Oz|ip,[Oz]:"invalidate",patch:Nz|ip,[Nz]:"patch",relocate:wz,[wz]:"relocate"},Lz={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(bc,"createAuditEntry");a(iSe,"readAction");a(Ct,"readAuditEntry");sl=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function VC(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=vz,oSe(e.primaryStore,e.auditStore)):(c=Mz,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Uz(Mz[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Ql(t);let f=new $C(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function Uz(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),xz(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ct(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Ql(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,qC.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,qC.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d!==l.length-1&&u++,d>-1?l=l.slice(0,d+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function oSe(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=vz[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{Uz(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function xz(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Kk(e){return e.nextTransaction||(VC({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),xz(e)),e.nextTransaction}var qC,Mz,vz,$C,vO=be(()=>{qC=M(X());Kl();Jl();so();Mz=Object.create(null),vz=Object.create(null);a(VC,"addSubscription");$C=class extends vn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(Uz,"notifyFromTransactionData");a(oSe,"listenToCommits");a(xz,"nextTransaction");a(Kk,"whenNextTransaction")});var qw={};Be(qw,{EVICTED:()=>ra,INVALIDATED:()=>fn,coerceType:()=>PT,makeTable:()=>LT,setServerUtilities:()=>hSe});function LT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:p,evictionMS:S,audit:g,trackDeletes:R}=e;S??=0;let{attributes:E}=e;E||(E=[]);let T=mR(i,n,l),O,v,F={},q=Promise.resolve(),j,te,se;for(let K of E)(K.assignCreatedTime||K.name==="__createdtime__")&&(j=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(te=K),K.expiresAt&&(se=K),K.isPrimaryKey&&(F=K);let z,ne=[],le=[],ie=1,Re=2,pe={},Ae={},xt=864e5,dt=0,Cn,nn,wr,kd=!1,rc,KT=new Map,YT=new Map,Bt,Fd,Gd=xl.get(B.REPLICATION_DATABASES);if(Array.isArray(Gd)){for(let K of Gd)if(K.name===c&&K.replicateTo>=0){Fd=K.replicateTo;break}}let WT=i.getRange({start:!1,end:!1}).constructor,Ep=10,qd=6;g&&gp(),zh(i.env.path,K=>{if(v)return Wo(K)});class De extends qr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=j;static updatedTimeProperty=te;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=f;static schemaDefined=u;static sourcedFrom(m,y){if(y&&(this.sourceOptions=y,(y.expiration||y.eviction||y.scanInterval)&&this.setTTLExpiration(y)),y?.intermediateSource)m.intermediateSource=!0,this.sources.unshift(m);else{if(this.sources.some(b=>!b.intermediateSource)){if(this.sources.some(b=>b.name===m.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(m)}v=v||m.get&&(!m.get.reliesOnPrototype||m.prototype.get),O=O||m.load;let L=a(b=>{let C=this.sources;if(C=C.filter(x=>x.intermediateSource&&x[b]&&(!x[b].reliesOnPrototype||x.prototype[b])),C.length>0)if(C.length===1){let x=C[0];return(w,H,U)=>{if(w?.source!==x)return x[b](H,U,w)}}else return(x,w,H)=>{let U=[];for(let Q of C){if(x?.source===Q)break;U.push(Q[b](w,H,x))}return Promise.all(U)}},"getApplyToIntermediateSource"),I=this.sources[this.sources.length-1];I.intermediateSource&&(I={});let A=a(b=>{if(I[b]&&(!I[b].reliesOnPrototype||I.prototype[b]))return(C,x,w)=>{if(!C?.source)return I[b](x,w,C)}},"getApplyToCanonicalSource");pe={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Ae={put:L("put"),patch:L("patch"),delete:L("delete"),publish:L("publish"),invalidate:L("invalidate")};let N=I.shouldRevalidateEvents;return(async()=>{let b=!1,C,x=a(async(w,H)=>{let U=w.value,Q=w.table?Ye[c][w.table]:De;if(c===jd&&(w.table===Fl.ROLE_TABLE_NAME||w.table===Fl.USER_TABLE_NAME)&&(b=!0),w.id===void 0&&(w.id=U[Q.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=m;let J={residencyId:oc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId},k=await Q.getResource(w.id,H,J);switch(w.finished&&await w.finished,w.type){case"put":return N?k._writeInvalidate(U,J):k._writeUpdate(U,!0,J);case"patch":return N?k._writeInvalidate(U,J):k._writeUpdate(U,!1,J);case"delete":return k._writeDelete(J);case"publish":case"message":return k._writePublish(U,J);case"invalidate":return k._writeInvalidate(U,J);case"relocate":return k._writeRelocate(J);default:xe.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=m.subscribe;w&&R==null&&(R=!0);let H={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},U=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Ul.getWorkerIndex)(),H):(0,Ul.getWorkerIndex)()===0,Q=w&&U&&await m.subscribe?.(H);if(Q){let J;for await(let k of Q)try{if(!(k.type==="transaction"?k.writes[0]:k)){xe.default.error?.("Bad subscription event",k);continue}if(k.source=m,k.type==="end_txn"){if(J?.resolve(),k.localTime&&C!==k.localTime){if(k.remoteNodeIds?.length>0){let ye=[Symbol.for("seq"),k.remoteNodeIds[0]],Y=f.get(ye),V=Y?.nodes;V||(V=[]);for(let _e of k.remoteNodeIds.slice(1)){let me=V.find(Te=>Te.id===_e);V=V.filter(Te=>Te.id!==_e||Te===me),me||(me={id:_e,seqId:0},V.push(me)),me.seqId=Math.max(Y?.seqId??1,k.localTime),_e===J?.nodeId&&(me.lastTxnTime=k.timestamp)}let ue=Math.max(Y?.seqId??1,k.localTime);xe.default.trace?.("Received txn",c,ue,new Date(ue),k.localTime,new Date(k.localTime),k.remoteNodeIds),f.put(ye,{seqId:ue,nodes:V})}C=k.localTime}k.onCommit&&J?.committed.then(k.onCommit);continue}if(J)if(k.beginTxn)J.resolve();else{J.write_promises.push(x(k,J));continue}!k.timestamp&&k.version&&(k.timestamp=k.version);let de=It(k,()=>{if(k.type==="transaction"){let ye=[];for(let Y of k.writes)try{ye.push(x(Y,k))}catch(V){throw V.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(k),V}return Promise.all(ye)}else if(k.type==="define_schema"){let ye=this.attributes.slice(0),Y;for(let V of k.attributes)ye.find(ue=>ue.name===V.name)||(ye.push(V),Y=!0);Y&&(_t({table:s,database:c,attributes:ye,origin:"cluster"}),cp.signalSchemaChange(new lp.SchemaEventMsg(process.pid,Yt.CREATE_TABLE,c,s)))}else return k.beginTxn?(J=k,J.write_promises=[x(k,k)],new Promise(ye=>{J.resolve=()=>ye(Promise.all(J.write_promises))})):x(k,k)});J&&(J.committed=de),b&&de&&!de?.waitingForUserChange&&(de.then(()=>cp.signalUserChange(new lp.UserEventMsg(process.pid))),de.waitingForUserChange=!0),k.onCommit&&(de?de.then(k.onCommit):k.onCommit())}catch(Ce){xe.default.error?.("error in subscription handler",Ce)}}}catch(w){xe.default.error?.(w)}})(),this}static get isCaching(){return v}static get shouldRevalidateEvents(){return this.prototype.get!==De.prototype.get}static getResource(m,y,L){let I=super.getResource(m,y,L);if(m!=null){Ir(m);try{if(I.getRecord?.())return I;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!L?.async||i.cache?.get?.(m),N=Cr(y),b=N.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Pn(m,y,{transaction:b,ensureLoaded:L?.ensureLoaded},A,C=>{if(C?De._updateResource(I,C):I.#e=null,y.onlyIfCached&&y.noCacheStore){if(!I.doesExist())throw new Nr.ServerError("Entry is not cached",504)}else if(L?.ensureLoaded){let x=sn(m,C,y,I);if(x)return N?.disregardReadTxn(),I.#i=!0,YC(x,w=>(De._updateResource(I,w),I))}return I})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return I}static _updateResource(m,y){m.#r=y,m.#e=y?.value??null,m.#n=y?.version}ensureLoaded(){let m=sn(this.getId(),this.#r,this.getContext());if(m)return this.#i=!0,YC(m,y=>{this.#r=y,this.#e=y.value,this.#n=y.version})}static getNewId(){let m=F?.type;if(m==="String"||m==="ID")return super.getNewId();if(!Bt){let A=i.getEntry(Symbol.for("id_allocation")),N=A?.value,b;if(N&&N.nodeName===server.hostname&&(!mSe(i)||N.pid===process.pid)){let C=N.start,x=N.end;b=C;for(let w of i.getKeys({start:x,end:C,limit:1,reverse:!0}))b=w}else N=I(A?.version??null),b=N.start;Bt=new BigInt64Array([BigInt(b)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=N.end}let y=Number(Atomics.add(Bt,0,1n)),L=m==="Int"?512:1048576;if(y+L>=Bt.maxSafeId){let A=a(N=>{Bt.maxSafeId=y+(m==="Int"?1023:4194303);let b=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,C=N?void 0:i.useReadTransaction(),x=Number(Bt[0]);for(let U of i.getKeys({start:x+1,end:b,limit:1,transaction:C}))b=U;C?.done();let{value:w,version:H}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<b){if(w.end>Bt.maxSafeId-100)return;xe.default.info?.("New id allocation",y,Bt.maxSafeId,H),i.put(Symbol.for("id_allocation"),{start:w.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),H)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${b} detected`);let U=I(H);U.alreadyUpdated||Atomics.store(Bt,0,BigInt(U.start+1)),Bt.maxSafeId=U.end}},"updateEnd");y+L===Bt.maxSafeId?setImmediate(A):y+100>=Bt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${m=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>A(!0)))}return y;function I(A){let N=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,b=N/4,C,x,w=!1,H,U;do{H=Math.floor(Math.random()*N),U={start:H,end:H+(m==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},C=0;for(let Q of i.getKeys({start:H,limit:1,reverse:!0}))C=Q;x=N;for(let Q of i.getKeys({start:H+1,end:N,limit:1}))x=Q;b*=.875,b<1e3&&!w&&(w=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${m==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,H,C,x,b))}while(!(b<x-H&&(b<H-C||C===0)));return i.transactionSync(()=>{let Q=i.getEntry(Symbol.for("id_allocation"));return(Q?.version??null)==A?(xe.default.info?.("Allocated new id range",U),i.put(Symbol.for("id_allocation"),U,Date.now()),U):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Q.value})})}}static setTTLExpiration(m){if(typeof m=="number")p=m*1e3,S||(S=0);else if(m&&typeof m=="object")p=m.expiration*1e3,S=(m.eviction||0)*1e3,xt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");xt=xt||(p+S)/4,Wo()}static getResidencyRecord(m){return f.get([Symbol.for("residency_by_id"),m])}static setResidency(m){De.getResidency=m&&((y,L)=>{try{return m(y,L)}catch(I){throw I.message+=` in residency function for table ${s}`,I}})}static setResidencyById(m){De.getResidencyById=m&&(y=>{try{return m(y)}catch(L){throw L.message+=` in residency function for table ${s}`,L}})}static getResidency(m,y){if(De.getResidencyById)return De.getResidencyById(m[t]);let L=Fd;if(y.replicateTo!=null){if(Array.isArray(y.replicateTo))return y.replicateTo.includes(server.hostname)?y.replicateTo:[server.hostname,...y.replicateTo];y.replicateTo>=0&&(L=y.replicateTo)}if(L>=0&&server.nodes){let I=[server.hostname];if(y.previousResidency)I.push(...y.previousResidency.slice(0,L));else{let A=server.nodes.map(C=>C.name),N=Math.floor(A.length*Math.random());I.push(...A.slice(N,N+L));let b=N+L-A.length;b>0&&I.push(...A.slice(0,b))}return I}}static enableAuditing(m=!0){g=m,m&&gp(),De.audit=m}static coerceId(m){return m===""?null:PT(m,F)}static async dropTable(){delete Ye[c][s];for(let m of i.getRange({versions:!0,snapshot:!1,lazy:!0}))m.metadataFlags&pn&&m.value&&ia(m.value);if(c===o){for(let m of E)f.remove(De.tableName+"/"+m.name),r[m.name]?.drop();f.remove(De.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await CT.default.remove(data_path),await CT.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));cp.signalSchemaChange(new lp.SchemaEventMsg(process.pid,Yt.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this.isCollection)return this.search(m);if(this.getId()===null){if(m?.conditions||m?.size>0)return this.search(m);let y={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E};return this.getContext()?.includeExpensiveRecordCountEstimates?De.getRecordCount().then(L=>(y.recordCount=L.recordCount,y.estimatedRecordRange=L.estimatedRange,y)):y}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(m,y){let L=nc(m);if(L?.read){if(L.isSuperUser)return!0;let I=L.attribute_permissions,A=y?.select;if(I?.length>0||kd&&A){if(y||(y={}),A){let N=I?.length>0&&KC(I,"read");y.select=A.map(b=>{let C=b.name||b;if(!N||N[C]){let x=wr[C]?.definition?.tableClass;if(x){if(b.name||(b={name:b}),!x.prototype.allowRead.call(null,m,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else y.select=I.filter(N=>N.read&&!wr[N.attribute_name]).map(N=>N.attribute_name);return y}else return!0}}allowUpdate(m,y){let L=nc(m);if(L?.update){let I=L.attribute_permissions;if(I?.length>0){let A=KC(I,"update");for(let N in y)if(!A[N])return!1;for(let N of I){let b=N.attribute_name;!N.update&&!(b in y)&&(y[b]=this.getProperty(b))}}return Yo(this.getContext())}}allowCreate(m,y){if(this.isCollection){let L=nc(m);if(L?.insert){let I=L.attribute_permissions;if(I?.length>0){let A=KC(I,"insert");for(let N in y)if(!A[N])return!1;return Yo(this.getContext())}else return Yo(this.getContext())}}else return this.allowUpdate(m,{})}allowDelete(m){return nc(m)?.delete&&Yo(this.getContext())}update(m,y){if(!Cr(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let I;return typeof m=="object"&&m&&(y?(Object.isFrozen(m)&&(m={...m}),this.#e={},this.#t=m):(I=this.#t,I&&(m=Object.assign(I,m)),this.#t=m)),this._writeUpdate(this.#t,y),this}addTo(m,y){if(typeof y=="number"||typeof y=="bigint")this.#s===Hz?this.set(m,(+this.getProperty(m)||0)+y):(this.#s||this.update(),this.set(m,new oE(y)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,y){if(typeof y=="number")return this.addTo(m,-y);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(m){this.#t=m}setRecord(m){this.#e=m}invalidate(){this._writeInvalidate()}_writeInvalidate(m,y){let L=this.getContext(),I=this.getId();Ir(I),Cr(this.getContext()).addWrite({key:I,store:i,invalidated:!0,entry:this.#r,before:pe.invalidate?.bind(this,L,I),beforeIntermediate:Ae.invalidate?.bind(this,L,I),commit:a((N,b)=>{if(!(Ko(N,b,y?.nodeId)<=0)){m??=null;for(let C in r)m||(m={}),m[C]===void 0&&(m[C]=this.getProperty(C));xe.default.trace?.(`Invalidating entry id: ${I}, timestamp: ${new Date(N).toISOString()}`),T(I,m,this.#r,N,fn,g,{user:L?.user,residencyId:y?.residencyId,nodeId:y?.nodeId},"invalidate")}},"commit")})}_writeRelocate(m){let y=this.getContext(),L=this.getId();Ir(L),Cr(this.getContext()).addWrite({key:L,store:i,invalidated:!0,entry:this.#r,before:pe.relocate?.bind(this,y,L),beforeIntermediate:Ae.relocate?.bind(this,y,L),commit:a((A,N)=>{if(Ko(A,N,m?.nodeId)<=0)return;let b=De.getResidencyRecord(m.residencyId),C=0,x=null,w=N?.value;if(b&&!b.includes(server.hostname)){for(let H in r)x||(x={}),x[H]=w[H];C=fn}else x=w;xe.default.trace?.(`Relocating entry id: ${L}, timestamp: ${new Date(A).toISOString()}`),T(L,x,this.#r,A,C,g,{user:y.user,residencyId:m.residencyId,nodeId:m.nodeId,expiresAt:m.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(m,y){let L={previousResidency:this.getResidencyRecord(m.residencyId),isRelocation:!0},I=ic(this.getResidency(y.value,L)),A;if(I){if(!I.includes(server.hostname))return!1;A=oc(I)}let N=0;xe.default.debug?.("Performing a relocate of an entry",m.key,y.value,I);let b=T(m.key,y.value,m,m.version,N,!0,{residencyId:A,expiresAt:y.expiresAt},"relocate",!1,null);return!0}static evict(m,y,L){let I=this.Source,A;if(!((v||g)&&(!y||(A=i.getEntry(m),!A||!y)||A.version!==L))){if(v){if(i.hasLock(m,A.version))return;let N;for(let b in r)N||(N={}),N[b]=y[b];if(N)return T(m,N,A,L,ra,null,null,null,!0)}if(i.ifVersion(m,L,()=>{Wi(m,y,null)}),g)return T(m,null,A,L,ra,null,null,null,!0);Oc(i,A??i.getEntry(m),L)}}lock(){throw new Error("Not yet implemented")}static operation(m,y){return m.table||=s,m.schema||=c,Yz.operation(m,y)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,y,L){let I=this.getContext(),A=Cr(I),N=this.getId();Ir(N);let b=this.#r;this.#s=y?Hz:dSe;let C={key:N,store:i,entry:b,nodeName:I?.nodeName,validate:a(x=>{m||(m=this.#t),y||m&&sE(this.#t===m?this:m)?I?.source||(A.checkOverloaded(),this.validate(m,!y),te&&(m[te.name]=te.type==="Date"?new Date(x):te.type==="String"?new Date(x).toISOString():x),y&&(t&&m[t]!==N&&(m[t]=N),j&&(b?.value?m[j.name]=b?.value[j.name]:m[j.name]=j.type==="Date"?new Date(x):j.type==="String"?new Date(x).toISOString():x),m=qc(m))):A.removeWrite(C)},"validate"),before:y?pe.put?()=>pe.put(I,N,m):null:pe.patch?()=>pe.patch(I,N,m):pe.put?()=>pe.put(I,N,qc(this)):null,beforeIntermediate:y?Ae.put?()=>Ae.put(I,N,m):null:Ae.patch?()=>Ae.patch(I,N,m):Ae.put?()=>Ae.put(I,N,qc(this)):null,commit:a((x,w,H)=>{if(H){if(I&&w?.version>(I.lastModified||0)&&(I.lastModified=w.version),this.#r=w,w?.value&&w.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");y||(this.#e=w?.value??null)}this.#t=void 0,this.#n=x;let U=w?.value,Q=m;this.#s=0;let J=!1,k=Ko(x,w,L?.nodeId),Ce;if(k<=0)if(g){let ue=w.localTime,_e=w.version;xe.default.trace?.("Applying CRDT update to record with id: ",N,"applying later update:",_e);let me=[];for(;ue>x||_e>=x&&ue>0;){let Te=l.get(ue);if(!Te)break;let Pe=Ct(Te);if(_e=Pe.version,_e>=x){if(_e===x){if(k=Ko(x,{version:_e,localTime:ue},L?.nodeId),k===0)return;if(k>0)continue}if(Pe.type==="patch")me.push(Pe),Ce=m;else if(Pe.type==="put"||Pe.type==="delete")return}ue=Pe.previousLocalTime}me.sort((Te,Pe)=>Te.version-Pe.version);for(let Te of me){let Pe=Te.getValue(i);if(Q=rE(Q,Pe,y),xe.default.debug?.("Rebuilding update with future patch:",Q),!Q)return}}else{if(y)return;Q=rE(Q,U,y),xe.default.debug?.("Rebuilding update without audit:",Q)}let de;if(y?de=Q:(this.#e=U,de=qc(this,Q)),this.#e=de,de&&de.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ye;if(L?.residencyId!=null)ye=L.residencyId;else{b?.residencyId&&(I.previousResidency=De.getResidencyRecord(b.residencyId));let ue=ic(De.getResidency(de,I));if(ue&&!ue.includes(server.hostname))if(Ce??=de,J=!0,De.getResidencyById)de=void 0;else{de=null;for(let _e in r)de||(de={}),de[_e]=Ce[_e]}ye=oc(ue)}y||(Ce=m);let Y=I?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${N}, timestamp: ${new Date(x).toISOString()}${Y?", expires at: "+new Date(Y).toISOString():""}${w?", replaces entry from: "+new Date(w.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(de).slice(0,100)}catch{return""}})()),Wi(N,U,de);let V=y?"put":"patch";T(N,de,w,x,J?fn:0,g,{omitLocalRecord:J,user:I?.user,residencyId:ye,expiresAt:Y,nodeId:L?.nodeId,originatingOperation:I?.originatingOperation},V,!1,Ce),I.expiresAt&&Wo()},"commit")};A.addWrite(C)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this.isCollection){for await(let y of this.search(m))(await De.getResource(y[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this.#e?this._writeDelete(m):!1}_writeDelete(m){let y=Cr(this.getContext()),L=this.getId();Ir(L);let I=this.getContext();return y.addWrite({key:L,store:i,entry:this.#r,nodeName:I?.nodeName,before:pe.delete?.bind(this,I,L),beforeIntermediate:Ae.delete?.bind(this,I,L),commit:a((A,N,b)=>{let C=N?.value;b&&(I&&N?.version>(I.lastModified||0)&&(I.lastModified=N.version),De._updateResource(this,N)),!(Ko(A,N,m?.nodeId)<=0)&&(Wi(this.getId(),C),xe.default.trace?.(`Deleting record with id: ${L}, txn timestamp: ${new Date(A).toISOString()}`),g||R?(T(L,null,this.#r,A,0,g,{user:I?.user,nodeId:m?.nodeId},"delete"),g||Wo()):Oc(i,N))},"commit")}),!0}search(m){let y=this.getContext(),L=Cr(y);if(!m)throw new Error("No query provided");let I=m.conditions;I?I.length===void 0&&(I=I[Symbol.iterator]?Array.from(I):[I]):I=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this.getId()&&(I=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(I));let A,N={};function b(V,ue){let _e;switch(ue){case"and":case void 0:if(V.length<1)throw new Error('An "and" operator requires at least one condition');_e=!0;break;case"or":if(V.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ue)}for(let me of V){if(me.conditions){me.conditions=b(me.conditions,me.operator);continue}let Te=me[0]??me.attribute,Pe=Te==null?F:pi(E,Te);if(Pe)(Pe.type||LA[me.comparator])&&(me[1]===void 0?me.value=x(me.value,Pe):me[1]=x(me[1],Pe));else if(Te!=null)throw(0,Nr.handleHDBError)(new Error,`${Te} is not a defined attribute`,404);if(me.chainedConditions)if(me.chainedConditions.length===1&&(!me.operator||me.operator=="and")){let Ve=me.chainedConditions[0],We,Ms;if(Ve.comparator==="gt"||Ve.comparator==="greater_than"||Ve.comparator==="ge"||Ve.comparator==="greater_than_equal"?(We=me,Ms=Ve):(We=Ve,Ms=me),We.comparator!=="lt"&&We.comparator!=="less_than"&&We.comparator!=="le"&&We.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let is=Ms.comparator==="ge"||Ms.comparator==="greater_than_equal",Sp=We.comparator==="le"||We.comparator==="less_than_equal";me.comparator=(is?"ge":"gt")+(Sp?"le":"lt"),me.value=[Ms.value,We.value]}else throw new Error("Multiple chained conditions are not currently supported")}return V}a(b,"prepareConditions");function C(V,ue){if(m.enforceExecutionOrder)return V;for(let _e of V)_e.conditions&&(_e.conditions=C(_e.conditions,_e.operator));return V.length>1&&ue!=="or"?(0,Vz.sortBy)(V,jp(De)):V}a(C,"orderConditions");function x(V,ue){return Array.isArray(V)?V.map(_e=>PT(_e,ue)):PT(V,ue)}a(x,"coerceTypedValues");let w=m.operator;(I.length>0||w)&&(I=b(I,w));let H=typeof m.sort=="object"&&m.sort,U;if(H&&w!=="or"){let V=H.attribute;if(V==null)throw new Nr.ClientError("Sort requires an attribute");if(A=I.find(ue=>jl(ue.attribute)===jl(V)),!A){let ue=pi(E,V);if(!ue)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(V)?V.join("."):V} is not a defined attribute`,404);if(ue.indexed)A={attribute:V,comparator:"sort"},I.push(A);else if(I.length===0&&!m.allowFullScan)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(V)?V.join("."):V} is not indexed and not combined with any other conditions`,404)}A&&(A.descending=!!H.descending)}I=C(I,w),H&&(A&&I[0]===A?H.next&&(U={dbOrderedAttribute:H.attribute,attribute:H.next.attribute,descending:H.next.descending,next:H.next.next}):(A&&I.splice(I.indexOf(A),1),U=H));let Q=m.select;if(I.length===0&&(I=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:I,operator:w,postOrdering:U,selectApplied:!!Q};let J=L.useReadTxn(),k=MA(I,w,De,J,m,y,(V,ue)=>Vd(V,Q,y,J,ue),N),Ce=m.ensureLoaded!==!1;U||(k=Y(k));let de=De.transformEntryForSelect(Q,y,J,N,Ce,!0),ye=De.transformToOrderedSelect(k,Q,U,J,y,de);function Y(V){return m.offset||m.limit!==void 0?V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):V}return a(Y,"applyOffset"),U&&(ye=Y(ye)),ye.onDone=()=>{ye.onDone=null,L.doneReadTxn()},ye.selectApplied=!0,ye.getColumns=()=>{if(Q){let V=[];for(let ue of Q)ue==="*"?V.push(...E.map(_e=>_e.name)):V.push(ue.name||ue);return V}return E.filter(V=>!V.computed&&!V.relationship).map(V=>V.name)},ye}static transformToOrderedSelect(m,y,L,I,A,N){let b=new WT;if(L){m=Vd(m,y,I,A,null);let C;b.iterate=function(){let w,H=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),U,Q=L.dbOrderedAttribute,J,k,Ce=!0;function de(Y){let V=Y.next&&de(Y.next),ue=Y.descending;return(_e,me)=>{let Te=sc(_e,Y.attribute,I),Pe=sc(me,Y.attribute,I),Ve=ue?(0,Bl.compareKeys)(Pe,Te):(0,Bl.compareKeys)(Te,Pe);return Ve===0?V?.(_e,me)||0:Ve}}a(de,"createComparator");let ye=de(L);return{async next(){let Y;if(w)if(Y=w.next(),Y.done){if(U)return b.onDone&&b.onDone(),Y}else return{value:await N.call(this,Y.value)};C=[],J&&C.push(J);do if(Y=await H.next(),Y.done){if(U=!0,C.length)break;return b.onDone&&b.onDone(),Y}else{let V=Y.value;if(V?.then&&(V=await V),Q){let ue=sc(V,Q,I);if(Ce)Ce=!1,k=ue;else if(ue!==k){k=ue,J=V;break}}C.push(V)}while(!0);return L.isGrouped,C.sort(ye),w=C[Symbol.iterator](),Y=w.next(),Y.done?(b.onDone&&b.onDone(),Y):{value:await N.call(this,Y.value)}},return(){b.onDone&&b.onDone(),H.return()},throw(){b.onDone&&b.onDone(),H.throw()}}};let x=a(w=>{if(typeof y=="object"&&Array.isArray(w.attribute))for(let H=0;H<y.length;H++){let U=y[H],Q;if(U.name===w.attribute[0]){for(Q=U.sort||(U.sort={});Q.next;)Q=Q.next;Q.attribute=w.attribute.slice(1),Q.descending=w.descending}else U===w.attribute[0]&&(y[H]=Q={name:U,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&x(w.next)},"applySortingOnSelect");x(L)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(function(C){try{let x=N.call(this,C);return typeof x?.catch=="function"?x.catch(w=>{throw w.partialObject={[t]:C.key},w}):x}catch(x){throw x.partialObject={[t]:C.key},x}});return b}static transformEntryForSelect(m,y,L,I,A,N){if(m&&(m===t||m?.length===1&&m[0]===t&&Array.isArray(m))){let w=a(H=>(y?.transaction?.stale&&(y.transaction.stale=!1),H?.key??H),"transform");return m===t?w:m.asArray?H=>[w(H)]:H=>({[t]:w(H)})}let b;A&&v&&!(typeof m=="string"?[m]:m)?.every(w=>{let H;return typeof w=="object"?H=w.name:H=w,r[H]||H===t})&&(b=!0);let C,x=a(function(w){let H;if(y?.transaction?.stale&&(y.transaction.stale=!1),w!=null){if(H=w.value||w.deref?.()?.value,!H&&(w.key===void 0||w.deref)||w.metadataFlags&fn){if(w.metadataFlags&fn&&y.replicateFrom===!1&&N&&w.residencyId)return Xa.SKIP;if(w=Pn(w.key??w,y,{transaction:L,lazy:m?.length<4,ensureLoaded:A},this?.isSync,U=>U),w?.then)return w.then(x.bind(this));H=w?.value}if(b&&w?.metadataFlags&(fn|ra)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(y.onlyIfCached&&y.noCacheStore)return{[t]:w.key,message:"This entry has expired"};let U=sn(w.key??w,w,y);if(U?.then)return U.then(x)}}if(H==null)return N?Xa.SKIP:H;if(m&&!(m[0]==="*"&&m.length===1)){let U,Q=a((k,Ce)=>{let de;typeof k=="object"?de=k.name:de=k;let ye=wr?.[de],Y;if(ye){let V=I?.[de];if(V)if(V.hasMappings){let _e=ye.from?H[ye.from]:jl(w.key);Y=V.get(_e),Y||(Y=[])}else Y=V.fromRecord?.(H);else Y=ye(H,y,w);let ue=a(_e=>{if(_e&&typeof _e=="object"){let me=ye.definition?.tableClass||De;C||(C={});let Te=C[de]||(C[de]=me.transformEntryForSelect(de===k?null:k.select||(Array.isArray(k)?k:null),y,L,V,A));if(Array.isArray(_e)){let Pe=[],Ve=me.transformToOrderedSelect(_e,k.select,typeof k.sort=="object"&&k.sort,y,L,Te)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),We=a(is=>{for(;!is.done;){if(is?.then)return is.then(We);Pe.push(is.value),is=Ve.next()}Ce(Pe,de)},"nextValue"),Ms=We(Ve.next());Ms&&(U||(U=[]),U.push(Ms));return}else if(_e=Te.call(this,_e),_e?.then){U||(U=[]),U.push(_e.then(Pe=>Ce(Pe,de)));return}}Ce(_e,de)},"handleResolvedValue");Y?.then?(U||(U=[]),U.push(Y.then(ue))):ue(Y);return}else Y=H[de],Y&&typeof Y=="object"&&de!==k&&(Y=De.transformEntryForSelect(k.select||k,y,L,null)({value:Y}));Ce(Y,de)},"selectAttribute"),J;if(typeof m=="string")Q(m,k=>{J=k});else if(Array.isArray(m))if(m.asArray)J=[],m.forEach((k,Ce)=>{k==="*"?m[Ce]=H:Q(k,de=>J[Ce]=de)});else{J={};let k=m.forceNulls;for(let Ce of m)if(Ce==="*")for(let de in H)J[de]=H[de];else Q(Ce,(de,ye)=>{de===void 0&&k&&(de=null),J[ye]=de})}else throw new Nr.ClientError("Invalid select"+m);return U?Promise.all(U).then(()=>J):J}return H},"transform");return x}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||_t({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),m||(m={});let y=!m.rawEvents,L=[],I=this,A=VC(De,this.getId()??null,function(b,C,x,w){try{let H=C.getValue?.(i,y),U=C.type;if(!H&&U==="patch"&&y){let J=i.getEntry(b);J?.version===C.version?H=J.value:H=C.getValue?.(i,!0,x),U="put"}let Q={id:b,localTime:x,value:H,version:C.version,type:U,beginTxn:w};L?L.push(Q):this.send(Q)}catch(H){xe.default.error?.(H)}},m.startTime||0,m),N=(async()=>{this.isCollection&&(A.includeDescendants=!0,m.onlyChildren&&(A.onlyChildren=!0)),m.supportsTransactions&&(A.supportsTransactions=!0);let b=this.getId(),C=m.previousCount;C>1e3&&(C=1e3);let x=m.startTime;if(this.isCollection){if(x){if(C)throw new Nr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:H}of l.getRange({start:x,exclusiveStart:!0,snapshot:!1})){let U=Ct(H);if(U.tableId!==n)continue;let Q=U.recordId;if(b==null||qz(b,Q)){let J=U.getValue(i,y,w);if(A.send({id:Q,localTime:w,value:J,version:U.version,type:U.type}),A.queue?.length>Fz&&await A.waitForDrain()===!1)return}A.startTime=w}}else if(C){let w=[];for(let{key:H,value:U}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Q=Ct(U);if(Q.tableId!==n)continue;let J=Q.recordId;if(b==null||qz(b,J)){let k=Q.getValue(i,y,H);if(w.push({id:J,localTime:H,value:k,version:Q.version,type:Q.type}),--C<=0)break}}catch(Q){xe.default.error("Error getting history entry",H,Q)}for(let H=w.length;H>0;)A.send(w[--H]);w[0]&&(A.startTime=w[0].localTime)}else if(!m.omitCurrent){for(let{key:w,value:H,version:U,localTime:Q}of i.getRange({start:b??!1,end:b==null?void 0:[b,Bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(H&&(A.send({id:w,localTime:Q,value:H,version:U,type:"put"}),A.queue?.length>Fz&&await A.waitForDrain()===!1))return}}else{C&&!x&&(x=0);let w=this.#r?.localTime;if(w===pR&&(i.cache?.delete(b),this.#r=i.getEntry(b),xe.default.trace?.("re-retrieved record",w,this.#r?.localTime),w=this.#r?.localTime),xe.default.trace?.("Subscription from",x,"from",b,w),x<w){let H=[],U=w;do{let Q=l.get(U);if(Q){m.omitCurrent=!0;let J=Ct(Q),k=J.getValue(i,y,U);y&&(J.type="put"),H.push({id:b,value:k,localTime:U,...J}),U=J.previousLocalTime}else break;C&&C--}while(U>x&&C!==0);for(let Q=H.length;Q>0;)A.send(H[--Q]);A.startTime=w}!m.omitCurrent&&this.doesExist()&&A.send({id:b,localTime:w,value:this.#e,version:this.#n,type:"put"})}for(let w of L)A.send(w);L=null})();return m.listener&&A.on("data",m.listener),A}static subscribeOnThisThread(m,y){return m===0||y?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(m,y){this._writePublish(m,y)}_writePublish(m,y){let L=Cr(this.getContext()),I=this.getId()||null;I!=null&&Ir(I);let A=this.getContext();L.addWrite({key:I,store:i,entry:this.#r,nodeName:A?.nodeName,validate:a(()=>{A?.source||(L.checkOverloaded(),this.validate(m))},"validate"),before:pe.publish?.bind(this,A,I,m),beforeIntermediate:Ae.publish?.bind(this,A,I,m),commit:a((N,b,C)=>{b===void 0&&R&&!g&&Wo(),xe.default.trace?.(`Publishing message to id: ${I}, timestamp: ${new Date(N).toISOString()}`),T(I,b?.value??null,b,b?.version||N,0,!0,{user:A?.user,residencyId:y?.residencyId,expiresAt:A?.expiresAt,nodeId:y?.nodeId},"message",!1,m)},"commit")})}validate(m,y){let L,I=a((A,N,b)=>{if(N.type&&A!=null)if(y&&A.__op__&&(A=A.value),N.properties){typeof A!="object"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an object${N.type?" ("+N.type+")":""}`);let C=N.properties;for(let x=0,w=C.length;x<w;x++){let H=C[x],U=I(A[H.name],H,b+"."+H.name);U&&(A[H.name]=U)}if(N.sealed&&A!=null&&typeof A=="object")for(let x in A)C.find(w=>w.name===x)||(L||(L=[])).push(`Property ${x} is not allowed within object in property ${b}`)}else switch(N.type){case"Int":(typeof A!="number"||A>>0!==A)&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(C=>typeof C=="string")||(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a string`);break;case"Boolean":typeof A!="boolean"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a bigint`)}break;case"Bytes":if(!(A instanceof Uint8Array)){if(typeof A=="string")return Buffer.from(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(A instanceof gi)){if(typeof A=="string"&&(A=Buffer.from(A)),A instanceof Buffer)return createBlob(A,{type:"text/plain"});(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Blob`)}break;case"array":if(Array.isArray(A)){if(N.elements)for(let C=0,x=A.length;C<x;C++){let w=A[C],H=I(w,N.elements,b+"[*]");H&&(A[C]=H)}}else(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an Array`);break}N.nullable===!1&&A==null&&(L||(L=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let A=0,N=E.length;A<N;A++){let b=E[A];if(!(b.relationship||b.computed)&&(!y||b.name in m)){let C=I(m[b.name],b,b.name);C&&(m[b.name]=C)}}if(d)for(let A in m)E.find(N=>N.name===A)||(L||(L=[])).push(`Property ${A} is not allowed`);if(L)throw new Nr.ClientError(L.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return v?!!this.#i:void 0}static async addAttributes(m){let y=E.slice(0);for(let L of m){if(!L.name)throw new Nr.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new Nr.ClientError("Attribute names cannot include backticks or forward slashes");(0,Kz.validateAttribute)(L.name),y.push(L)}return _t({table:s,database:c,schemaDefined:u,attributes:y}),De.indexingOperation}static async removeAttributes(m){let y=E.filter(L=>!m.includes(L.name));return _t({table:s,database:c,schemaDefined:u,attributes:y}),De.indexingOperation}static getSize(){let m=i.getStats();return(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getAuditSize(){let m=l?.getStats();return m&&(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getStorageStats(){let m=i.env.path,y=CT.default.statfsSync?.(m)??{};return{available:y.bavail*y.bsize,free:y.bfree*y.bsize,size:y.blocks*y.bsize}}static async getRecordCount(m){let y=i.getStats().entryCount,L=1e3/2,I=performance.now(),A=Math.floor(y/2),N=m?.exactCount,b=0,C=0,x;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&b++,C++,await Ja(),!N&&C<A&&performance.now()-I>L){x=C;break}if(x){let w=b;b=0;for(let{value:Y}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:x,snapshot:!1}))Y!=null&&b++,await Ja();let H=x*2,U=(b+w)/H,Q=Math.pow((b-w+1)/x/2,2)+U*(1-U)/H,J=Math.max(Math.sqrt(Q)*y,1),k=Math.round(U*y),Ce=Math.max(k-1.96*J,b+w),de=Math.min(k+1.96*J,y),ye=Math.pow(10,Math.round(Math.log10(J)));return ye>k&&(ye=ye/10),b=Math.round(k/ye)*ye,{recordCount:b,estimatedRange:[Math.round(Ce),Math.round(de)]}}return{recordCount:b}}static updatedAttributes(){wr=this.propertyResolvers={$id:a((m,y,L)=>({value:L.key}),"$id"),$updatedtime:a((m,y,L)=>L.version,"$updatedtime"),$record:a((m,y,L)=>L?{value:m}:m,"$record")};for(let m of this.attributes){m.isPrimaryKey&&(F=m),m.resolve=null;let y=m.relationship,L=m.computed;if(y)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),L&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),kd=!0,y.to)m.elements?.definition?(wr[m.name]=m.resolve=(I,A,N)=>{let b=I[y.from?y.from:t],C=m.elements.definition.tableClass;return N?zl({attribute:y.to,value:b},Cr(A).getReadTxn(),!1,C,!1).asArray:C.search([{attribute:y.to,value:b}],A).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,y.from&&(m.resolve.from=y.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(y.from){let I=m.definition||m.elements?.definition;I?(wr[m.name]=m.resolve=(A,N,b)=>{let C=A[y.from];if(C!==void 0){if(m.elements){let x,w=C?.map(H=>{let U=b?I.tableClass.primaryStore.getEntry(H,{transaction:Cr(N).getReadTxn()}):I.tableClass.get(H,N);return U?.then&&(x=!0),U});return y.filterMissing?x?Promise.all(w).then(H=>H.filter($z)):w.filter($z):x?Promise.all(w):w}return b?I.tableClass.primaryStore.getEntry(C,{transaction:Cr(N).getReadTxn()}):I.tableClass.get(C,N)}},m.set=(A,N)=>{if(Array.isArray(N)){let b=N.map(C=>C.getId?.()||C[I.tableClass.primaryKey]);A[y.from]=b}else{let b=N.getId?.()||N[I.tableClass.primaryKey];A[y.from]=b}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=y.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`);else L&&(typeof L.from=="function"&&this.setComputedAttribute(m.name,L.from),wr[m.name]=m.resolve=(I,A,N)=>{let b=typeof L.from=="string"?I[L.from]:I,C=this.userResolvers[m.name];if(C)return C(b,A,N);xe.default.warn(`Computed attribute "${m.name}" does not have a function assigned to it. Please use setComputedAttribute('${m.name}', resolver) to assign a resolver function.`),this.userResolvers[m.name]=()=>{}})}aE(this,this)}static setComputedAttribute(m,y){let L=pi(E,m);if(!L){console.error(`The attribute "${m}" does not exist in the table "${s}"`);return}if(!L.computed){console.error(`The attribute "${m}" is not defined as computed in the table "${s}"`);return}this.userResolvers[m]=y}static async deleteHistory(m=0,y=!1){let L;for(let{key:I,value:A}of l.getRange({start:0,end:m}))await Ja(),Ct(A).tableId===n&&(L=wT(l,I,A));if(y)for(let I of i.getRange({start:0,versions:!0})){let{key:A,value:N,localTime:b}=I;await Ja(),N===null&&b<m&&(L=Oc(i,I))}await L}static async*getHistory(m=0,y=1/0){for(let{key:L,value:I}of l.getRange({start:m||1,end:y})){await Ja();let A=Ct(I);A.tableId===n&&(yield{id:A.recordId,localTime:L,version:A.version,type:A.type,value:A.getValue(i,!0,L),user:A.user,operation:A.originatingOperation})}}static async getHistoryOfRecord(m){let y=[];if(m==null)throw new Error("An id is required");let L=i.getEntry(m);if(!L)return y;let I=L.localTime;if(!I)throw new Error("The entry does not have a local audit time");let A=0;do{await Ja();let N=l.get(I);if(N){let b=Ct(N);y.push({id:b.recordId,localTime:I,version:b.version,type:b.type,value:b.getValue(i,!0,I),user:b.user}),I=b.previousLocalTime}else break}while(A<1e3&&I);return y.reverse()}static cleanup(){z?.remove()}}De.updatedAttributes();let $d=De.prototype;return p&&De.setTTLExpiration(p/1e3),se&&Yd(),De;function Wi(K,m,y){let L;for(let I in r){let A=r[I],N=A.isIndexing,b=wr[I],C=y&&(b?b(y):y[I]),x=m&&(b?b(m):m[I]);if(C===x&&!N)continue;L=!0;let w=A.indexNulls,H=(0,ap.getIndexedValues)(C,w),U=(0,ap.getIndexedValues)(x,w);if(U?.length>0){let Q=new Set(U);if(H=H?H.filter(J=>{if(Q.has(J))Q.delete(J);else return!0}):[],U=Array.from(Q),(U.length>0||H.length>0)&&Bz){let J=U.concat(H).map(k=>({key:k,value:K}));A.prefetch(J,Gz)}for(let J=0,k=U.length;J<k;J++)A.remove(U[J],K)}else H?.length>0&&Bz&&A.prefetch(H.map(Q=>({key:Q,value:K})),Gz);if(H)for(let Q=0,J=H.length;Q<J;Q++)A.put(H[Q],K)}return L}a(Wi,"updateIndices");function Ir(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>kz)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Bl.writeKey)(K,fSe,0)>kz)throw new Error("Primary key size is too large: "+K.length);return!0}a(Ir,"checkValidId");function Pn(K,m,y,L,I){if(De.getResidencyById&&y.ensureLoaded&&m?.replicateFrom!==!1){let N=ic(De.getResidencyById(K));if(N&&!N.includes(server.hostname)&&O)return O({key:K,residency:N}).then(I)}let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),y.transaction?.isDone)return I(null,K);let N=i.getEntry(K,y);return N?.residencyId&&N.metadataFlags&fn&&O&&y.ensureLoaded&&m?.replicateFrom!==!1?O(N).then(b=>I(b,K),b=>(xe.default.error?.("Error loading remote record",K,N,y,b),I(null,K))):(N&&m&&(N?.version>(m.lastModified||0)&&(m.lastModified=N.version),N?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=N.localTime)),I(N,K))},"whenPrefetched");return L?A():ie>0?(ie--,A()):new Promise((N,b)=>{ie===0?(ie--,i.prefetch([K],()=>{C(),x()})):(ne.push(K),le.push(x),ne.length>qd&&(ie--,C()));function C(){if(ne.length>0){let w=le;i.prefetch(ne,()=>{ie===-1?C():ie++;for(let H of w)H()}),ne=[],le=[],Re>2&&Re--}else ie=Re,Re<Ep&&Re++}a(C,"prefetch");function x(){try{N(A())}catch(w){b(w)}}a(x,"load")})}a(Pn,"loadLocalRecord");function nc(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return _Se;let y=m[c],L,I=y?.tables;if(I)return I[s];if(c==="data"&&(L=m[s])&&!L.tables)return L}a(nc,"getTablePermissions");function sn(K,m,y,L){if(v){let I=!1;if(y.noCache?I=!0:(m?(!m.value||m.metadataFlags&(fn|ra)||m.expiresAt!=null&&m.expiresAt<Date.now())&&(I=!0):I=!0,Yn(!I,"cache-hit",s)),I){let A=Kd(K,m,y).then(N=>(N?.value&&N?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),y&&(N?.version>(y.lastModified||0)&&(y.lastModified=N.version),y.lastRefreshed=Date.now()),N));if(y?.onlyIfCached||m?.value&&L?.allowStaleWhileRevalidate?.(m,K)){if(A.catch(N=>xe.default.warn?.(N)),y?.onlyIfCached&&!L.doesExist())throw new Nr.ServerError("Entry is not cached",504);return}else return A}}else if(m?.value&&m.expiresAt!=null&&m.expiresAt<Date.now())return De.evict(m.key,m.value,m.version),m.value=null,{then(I){return I(m)}}}a(sn,"ensureLoadedFromSource");function Cr(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let y=m.next;if(!y)return m=m.next=new _c,m.lmdbDb=i,m;m=y}while(!0)}else return new Yp}a(Cr,"txnForContext");function sc(K,m,y){if(!K)return;let L=K.value||i.getEntry(K.key)?.value;if(typeof m=="object"){let A=wr,N=L;for(let b=0,C=m.length;b<C;b++){let x=m[b],w=A?.[x];N=w&&N?w(N,y,!0)?.value:N?.[x],A=w?.definition?.tableClass?.propertyResolvers}return N}let I=wr[m];return I?I(L,y):L[m]}a(sc,"getAttributeValue");function Vd(K,m,y,L,I){let A=I?.length,N={transaction:L,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},b;function C(x,w){let H=x?.value;if(!H)return Xa.SKIP;for(let U=0;U<A;U++)if(!b?.includes(U)&&!I[U](H,x))return Xa.SKIP;return w!==void 0&&(x.key=w),x}if(a(C,"processEntry"),A>0||!K.hasEntries){let x=K.map(w=>{if(b=null,typeof w=="object"&&w?.key!==void 0)return A>0?C(w):w;if(w==null)return Xa.SKIP;for(let H=0;H<A;H++){let Q=I[H].idFilter;if(Q){if(!Q(w))return Xa.SKIP;b||(b=[]),b.push(H)}}return Pn(w,y,N,!1,C)});return Array.isArray(K)&&(x=x.filter(w=>w!==Xa.SKIP)),x.hasEntries=!0,x}return K}a(Vd,"transformToEntries");function Ko(K,m,y=server.replication?.getThisNodeId(l)){if(K<=m?.version){if(m?.version===K&&y!==void 0){let L=server.replication?.exportIdMapping(l),I=m.localTime,A=I&&l.get(I);if(A){let N,b,C=Ct(A);for(let x in L)L[x]===y&&(N=x),L[x]===C.nodeId&&(b=x);if(N>b)return 1;if(N===b)return 0}}return-1}return 1}a(Ko,"precedesExistingVersion");async function Kd(K,m,y){let L=m?.metadataFlags,I=m?.version,A,N;if(!i.attemptLock(K,I,()=>{clearTimeout(N);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(fn|ra)?A(Kd(K,i.getEntry(K),y)):A(w)}))return new Promise(w=>{A=w,N=setTimeout(()=>{i.unlock(K,I)},uSe)});let b=m?.value,C={requestContext:y,replacingRecord:b,replacingEntry:m,replacingVersion:I,noCacheStore:!1,source:null,resourceCache:y?.resourceCache},x=y?.responseHeaders;return new Promise((w,H)=>{let U;YC(It(C,async Q=>{let J=performance.now(),k,Ce,de;try{for(let ue of De.sources)if(ue.get&&(!ue.get.reliesOnPrototype||ue.prototype.get)){if(ue.available?.(m)===!1)continue;if(C.source=ue,k=await ue.get(K,C),k)break}de=L&fn;let Y=C.lastModified||de&&I;Ce=de||Y>I||!b,Y||(Y=(0,ap.getNextMonotonicTime)());let V=performance.now()-J;if(Dt(V,"cache-resolution",s,null,"success"),x&&TE(x,"Server-Timing",`cache-resolve;dur=${V.toFixed(2)}`,!0),Q.timestamp=Y,p&&C.expiresAt==null&&(C.expiresAt=Date.now()+p),k){if(typeof k!="object")throw new Error("Only objects can be cached and stored in tables");if(k.status>0&&k.headers)if(k.status>=300)if(k.status===304)k=b,Y=I;else throw new Nr.ServerError(k.body||"Error from source",k.status);else k=k.body;typeof k.toJSON=="function"&&(k=k.toJSON()),t&&k[t]!==K&&(k[t]=K)}U=!0,w({key:K,version:Y,value:k})}catch(Y){Y.message+=` while resolving record ${K} for ${s}`,b&&((Y.code==="ECONNRESET"||Y.code==="ECONNREFUSED"||Y.code==="EAI_AGAIN")&&!y?.mustRevalidate||y?.staleIfError&&(Y.statusCode===500||Y.statusCode===502||Y.statusCode===503||Y.statusCode===504))?(w({key:K,version:I,value:b}),xe.default.trace?.(Y.message,"(returned stale record)")):H(Y);let V=performance.now()-J;Dt(V,"cache-resolution",s,null,"fail"),x&&TE(x,"Server-Timing",`cache-resolve;dur=${V.toFixed(2)}`,!0),C.transaction.abort();return}if(y?.noCacheStore||C.noCacheStore){C.transaction.abort();return}Cr(C).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:a((Y,V)=>{if(V?.version!==I)return;let ue=Wi(K,b,k);if(k){Ae.put?.(C,K,k),V&&(y.previousResidency=De.getResidencyRecord(V.residencyId));let _e,me=!1,Te,Pe=ic(De.getResidency(k,y));if(Pe){if(!Pe.includes(server.hostname))if(_e=k,me=!0,De.getResidencyById)k=void 0;else{k=null;for(let Ve in r)k||(k={}),k[Ve]=_e[Ve]}Te=oc(Pe)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(Y).toISOString()}`),T(K,k,V,Y,me?fn:0,g&&(Ce||me)||null,{user:C?.user,expiresAt:C.expiresAt,residencyId:Te},"put",!!de,_e)}else V&&(Ae.delete?.(C,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(Y).toISOString()}`),g||R?T(K,null,V,Y,0,g&&Ce||null,{user:C?.user},"delete",!!de):Oc(i,V,I))},"commit")})}),()=>{i.unlock(K,I)},Q=>{i.unlock(K,I),U&&xe.default.error?.("Error committing cache update",Q)})})}a(Kd,"getFromSource");function Yo(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new Nr.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new Nr.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Yo,"checkContextPermissions");function Wo(K){let m=!1;if(K&&(K-dt>1&&(m=!0),dt=K),!(xt===Cn&&!m)&&(Cn=xt,(0,Ul.getWorkerIndex)()===(0,Ul.getWorkerCount)()-1))return nn&&clearTimeout(nn),xt?new Promise(y=>{let L=new Date;L.setMonth(0),L.setDate(1),L.setHours(0),L.setMinutes(0),L.setSeconds(0);let I=xt/(1+dt),A=m?Date.now():Math.ceil((Date.now()-L.getTime())/I)*I+L.getTime(),N=a(b=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(b)}`),nn=setTimeout(()=>q=q.then(async()=>{if(N(Math.max(b+xt,Date.now())),i.rootStore.status!=="open"){clearTimeout(nn);return}let C=50,x=new Array(C),w=0,H=Math.pow(dt,8)*(xl.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),U=S/Math.pow(Math.max(dt,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${H}, adjusted eviction ${U}ms`);function Q(J,k,Ce,de){let ye=J+U-Date.now();if(ye<0)return!0;if(dt){let Y=i.lastSize;return Ce&pn&&Zl(de,V=>{V.size&&(Y+=V.size)}),xe.default.trace?.(`shouldEvict adjusted ${ye} ${Y}, ${ye*(J-k)/Y} < ${H}`),ye*(J-k)/Y<H}return!1}a(Q,"shouldEvict");try{let J=0;for(let k of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ce,value:de,version:ye,expiresAt:Y,metadataFlags:V}=k,ue;de===null&&!g&&ye+lSe<Date.now()?ue=Oc(i,k,ye):Y!=null&&Q(Y,ye,V,de)&&(ue=De.evict(Ce,de,ye),J++),ue&&(await x[w],x[w]=ue.catch(_e=>{xe.default.error?.("Cleanup error",_e)}),++w>=C&&(w=0)),await Ja()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){xe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}y(void 0),dt=0}),Math.min(b-Date.now(),2147483647)).unref()},"startNextTimer");N(A)}):void 0}a(Wo,"scheduleCleanup");function gp(){z=l?.addDeleteRemovalCallback(n,i,(K,m)=>{i.remove(K,m)})}a(gp,"addDeleteRemoval");function Yd(){(0,Ul.getWorkerIndex)()===0&&setInterval(async()=>{if(!rc){rc=!0;try{let K=se.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let y of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let L of m.getValues(y)){let I=i.getEntry(L);I?.value?I.value[K]<Date.now()&&De.evict(L,I.value,I.version):i.ifVersion(L,I?.version,()=>m.remove(y,L))}await Ja()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{rc=!1}}},cSe).unref()}a(Yd,"runRecordExpirationEviction");function ic(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let m=server.shards?.get?.(K);if(m)return xe.default.trace?.(`Shard ${K} mapped to ${m.map(y=>y.name).join(", ")}`),m.map(y=>y.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(ic,"residencyFromFunction");function oc(K){if(K){let m=K.join(","),y=f.get([Symbol.for("residency_by_set"),m]);return y||(f.put([Symbol.for("residency_by_set"),m],y=Math.floor(Math.random()*2147418112)+65535),f.put([Symbol.for("residency_by_id"),y],K),y)}}a(oc,"getResidencyId")}function KC(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function Gz(){}function hSe(e){Yz=e}function PT(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return IT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return IT(+e);case"Float":return e==="null"?null:IT(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;pSe.test(e)||(e+="Z");let n=new Date(e);return IT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,DT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function IT(e){if(isNaN(e))throw new SyntaxError;return e}function qz(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function YC(e,t,r){return e?.then?e.then(t,r):t(e)}function $z(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function mSe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Xa,ap,Vz,Kz,xl,Nr,cp,lp,xe,Bl,Ul,DT,CT,aSe,Yz,cSe,lSe,Bz,uSe,Hz,dSe,fn,ra,fSe,kz,Fz,_Se,mve,pSe,Ja,gf=be(()=>{G();Xa=require("lmdb"),ap=M(ln()),Vz=require("lodash"),Kz=M(ff());na();Wp();xl=M(ce());vO();Nr=M(he()),cp=M(_o()),lp=M(Ks());Ue();Ef();xe=M(mi());ib();hc();Bl=require("ordered-binary"),Ul=M(st());so();DT=M(oe());ru();Ci();nE();y_();CT=M(require("node:fs"));fs();QS();aSe=new Uint8Array(9);aSe[8]=192;cSe=6e4,lSe=864e5;xl.initSync();Bz=xl.get(B.STORAGE_PREFETCHWRITES),uSe=1e4,Hz=1,dSe=2,fn=1,ra=8,fSe=Buffer.allocUnsafeSlow(8192),kz=1978,Fz=100,_Se={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},mve=(0,DT.convertToMS)(xl.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(LT,"makeTable");a(KC,"attributesAsObject");a(Gz,"noop");a(hSe,"setServerUtilities");pSe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(PT,"coerceType");a(IT,"rejectNaN");a(qz,"isDescendantId");Ja=a(()=>new Promise(setImmediate),"rest");a(YC,"when");a($z,"exists");a(Ls,"stringify");a(mSe,"hasOtherProcesses")});var at={};Be(at,{database:()=>pu,database_envs:()=>Fo,databases:()=>Ye,dropDatabase:()=>ub,dropTableMeta:()=>ASe,getDatabases:()=>Ze,getDefaultCompression:()=>Kg,getTables:()=>ESe,onRemovedDB:()=>K_,onUpdatedTable:()=>il,readMetaDb:()=>up,resetDatabases:()=>td,table:()=>_t,tables:()=>Kn});function ESe(){return xT||Ze(),Kn||{}}function Ze(){if(xT)return Ye;xT=!0,xd=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,vt.join)((0,Zt.getHdbBasePath)(),cc),t=(0,Zt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(B.STORAGE_PATH)||e&&((0,rs.existsSync)(e)?e:(0,vt.join)((0,Zt.getHdbBasePath)(),Op)),!e)return;if((0,rs.existsSync)(e))for(let n of(0,rs.readdirSync)(e,{withFileTypes:!0})){let s=(0,vt.basename)(n.name,".mdb");n.isFile()&&(0,vt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&up((0,vt.join)(e,n.name),null,s)}if((0,rs.existsSync)((0,Ud.getBaseSchemaPath)())){for(let n of(0,rs.readdirSync)((0,Ud.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,vt.join)((0,Ud.getBaseSchemaPath)(),n.name),i=(0,vt.join)((0,Ud.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,rs.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,vt.extname)(o.name).toLowerCase()===".mdb"){let c=(0,vt.join)(i,o.name);up((0,vt.join)(s,o.name),(0,vt.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,rs.existsSync)(i))for(let c of(0,rs.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,vt.extname)(c.name).toLowerCase()===".mdb"&&up((0,vt.join)(i,c.name),(0,vt.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,vt.join)(l.path,(0,vt.basename)(c+".mdb"));(0,rs.existsSync)(u)&&up(u,c,n,null,!0)}}for(let n in Ye){let s=xd.get(n);if(s){let i=Ye[n];n.includes("delete")&&Ut.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(Ut.trace(`delete table class ${o}`),delete i[o])}else if(delete Ye[n],n==="data"){for(let i in Kn)delete Kn[i];delete Kn[BT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(Ye.system)for(let n of r)Ye.system[n]&&(Ye.system[n].replicate=!1);return xd=null,Ye}function td(){xT=!1;for(let[,e]of Fo)e.needsDeletion=!0;Ze();for(let[e,t]of Fo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fo.delete(e),delete Ye[t.databaseName],fp.forEach(r=>r(t.databaseName)));return Ye}function up(e,t,r=jC,n,s){let i=new WC.default(e,!1);try{let o=Fo.get(e);o?o.needsDeletion=!1:(o=(0,Bd.open)(i),Fo.set(e,o));let c=new Hl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(MT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,rs.existsSync)(n)&&(i.path=n,u=(0,Bd.open)(i),u.isLegacy=!0):u=NT(o));let f=Qz(r),d=f[BT],h=new Map;for(let{key:_,value:p}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=p.name:g||(g=S,S=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),d?.add(S);let R=h.get(S);R||h.set(S,R={attributes:[]}),(g==null||p.is_hash_attribute)&&(R.primary=p),g!=null&&R.attributes.push(p),Object.defineProperty(p,"key",{value:_,configurable:!0})}for(let[_,p]of h){let{attributes:S,primary:g}=p;if(!g){for(let ie of S)if(ie.is_hash_attribute||ie.isPrimaryKey){g=ie;break}if(!g){Ut.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let R=f[_],E={},T=[],O,v,F=typeof g.audit=="boolean"?g.audit:(0,Zt.get)(B.LOGGING_AUDITLOG),q=g.trackDeletes,j=g.expiration,te=g.eviction,se=g.sealed,z=g.splitSegments,ne=g.replicate;if(R)E=R.indices,T=R.attributes,R.schemaVersion++;else{O=g.tableId,O?O>=(l.get(vd)||0)&&(l.putSync(vd,O+1),Ut.info(`Updating next table id (it was out of sync) to ${O+1} for ${_}`)):(g.tableId=O=l.get(vd),O||(O=1),Ut.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(vd,O+1),l.putSync(g.key,g));let ie=new Hl.default(!g.is_hash_attribute,g.is_hash_attribute);if(ie.compression=g.compression,ie.compression){let Re=(0,Zt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||jz;ie.compression.threshold=Re}v=Am(o.openDB(g.key,ie),o),o.databaseName=r,v.tableId=O}let le;for(let ie of S){ie.attribute=ie.name;try{if(!ie.is_hash_attribute&&(ie.indexed||ie.attribute&&!ie.name)){if(!E[ie.name]){let pe=new Hl.default(!ie.is_hash_attribute,ie.is_hash_attribute);E[ie.name]=o.openDB(ie.key,pe),E[ie.name].indexNulls=ie.indexNulls}let Re=T.find(pe=>pe.name===ie.name);Re?T.splice(T.indexOf(Re),1,ie):T.push(ie),le=!0}}catch(Re){Ut.error("Error trying to update attribute",ie,T,E,Re)}}for(let ie of T)if(!S.find(pe=>pe.name===ie.name)){if(ie.is_hash_attribute){Ut.error("Unable to remove existing primary key attribute",ie);continue}ie.indexed&&(T.splice(T.indexOf(ie),1),le=!0)}if(R)le&&(R.schemaVersion++,R.updatedAttributes());else{R=Jz(f,_,LT({primaryStore:v,auditStore:u,audit:F,sealed:se,splitSegments:z,replicate:ne,expirationMS:j&&j*1e3,evictionMS:te&&te*1e3,trackDeletes:q,tableName:_,tableId:O,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let ie of dp)ie(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Qz(e){let t=Ye[e];if(t||(e==="data"?t=Ye[e]=Kn:e==="system"?Object.defineProperty(Ye,"system",{value:t=Object.create(null),configurable:!0}):t=Ye[e]=Object.create(null)),xd&&!xd.has(e)){let r=new Set;t[BT]=r,xd.set(e,r)}return t}function Jz(e,t,r){return e[t]=r,r}function pu({database:e,table:t}){e||(e=jC),Ze();let r=Qz(e),n=(0,vt.join)((0,Zt.getHdbBasePath)(),cc),s=(0,Zt.get)(B.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(B.STORAGE_PATH)||((0,rs.existsSync)(n)?n:(0,vt.join)((0,Zt.getHdbBasePath)(),Op));let o=(0,vt.join)(n,(i?t:e)+".mdb"),c=Fo.get(o);if(!c||c.status==="closed"){let l=new WC.default(o,!1);c=(0,Bd.open)(l),Fo.set(o,c)}return c.auditStore||(c.auditStore=NT(c)),c}async function ub(e){if(!Ye[e])throw new Error("Schema does not exist");let t=Ye[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Fo.delete(r.path),r.status==="open"&&(await r.close(),await _p.remove(r.path));if(r||(r=pu({database:e,table:null}),r.status==="open"&&(await r.close(),await _p.remove(r.path))),e==="data"){for(let n in Kn)delete Kn[n];delete Kn[BT]}delete Ye[e],fp.forEach(n=>n(e)),await jA(r)}function _t(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=jC);let p=pu({database:r,table:t}),S=Ye[r];Ut.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,E,T;h==null&&(h=!0);let O=new Hl.default(!1);for(let z of o)z.attribute&&!z.name?(z.name=z.attribute,z.indexed=!0):z.attribute=z.name,z.expiresAt&&(z.indexed=!0);let v,F;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let z=p.auditStore;E=o.find(Re=>Re.isPrimaryKey)||{},R=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=Kg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,Zt.get)(B.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),u??=!1,E.splitSegments=u,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),Ut.trace(`${t} table loading, opening primary store`);let ne=new Hl.default(!1,!0);ne.compression=E.compression;let le=t+"/";if(T=p.dbisDb=p.openDB(MT.INTERNAL_DBIS_NAME,O),se(),T.get(le))return F&&F(),td(),_t(e);let ie=Am(p.openDB(le,ne),p);p.databaseName=r,ie.tableId=T.get(vd),Ut.trace(`Assigning new table id ${ie.tableId} for ${t}`),ie.tableId||(ie.tableId=1),T.put(vd,ie.tableId+1),E.tableId=ie.tableId,g=Jz(S,t,LT({primaryStore:ie,auditStore:z,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:ie.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:T})),g.schemaVersion=1,v=!0,T.put(le,E)}let q=g.indices;T=T||(p.dbisDb=p.openDB(MT.INTERNAL_DBIS_NAME,O)),g.dbisDB=T;let j=[];for(let{key:z,value:ne}of T.getRange({start:!0})){let[le,ie]=z.toString().split("/");if(ie===""&&(ie=ne.name),ie){if(le!==t)continue}else continue;let Re=o.find(Ae=>Ae.name===ie),pe=!Re?.indexed&&ne.indexed&&!ne.isPrimaryKey;if((!Re||pe)&&(se(),v=!0,Re||T.remove(z),pe)){let Ae=g.indices[le];Ae&&j.push(Ae)}}let te=[];try{for(let z of o||[]){if((z.relationship||z.computed)&&(v=!0,z.relationship))continue;let ne=t+"/"+(z.name||"");Object.defineProperty(z,"key",{value:ne,configurable:!0});let le=T.get(ne);if(z.isPrimaryKey){if(le=le||T.get(ne=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+le.expiration||void 0)||(+s||void 0)!==(+le.eviction||void 0)||z.type!==le.type){let Re={...le};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),f!==void 0&&(Re.replicate=f),z.type&&(Re.type=z.type),v=!0,se(),T.put(ne,Re)}continue}le?.attribute&&!le.name&&(le.indexed=!0);let ie=!le||le.type!==z.type||le.indexed!==z.indexed||le.nullable!==z.nullable||le.version!==z.version||JSON.stringify(le.properties)!==JSON.stringify(z.properties)||JSON.stringify(le.elements)!==JSON.stringify(z.elements);if(z.indexed){let Re=new Hl.default(!0,!1),pe=p.openDB(ne,Re);(ie||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<hp.workerData?.restartNumber)&&(v=!0,se(),le=T.get(ne),(ie||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<hp.workerData?.restartNumber)&&(v=!0,z.indexNulls===void 0&&(z.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(z.lastIndexedKey=le?.lastIndexedKey??void 0,z.indexingPID=process.pid,pe.isIndexing=!0,Object.defineProperty(z,"dbi",{value:pe}),te.push(z))),T.put(ne,z)),le?.indexNulls&&z.indexNulls===void 0&&(z.indexNulls=!0),pe.indexNulls=z.indexNulls,q[z.name]=pe}else ie&&(v=!0,se(),T.put(ne,z))}}finally{F&&F()}if(v&&(g.schemaVersion++,g.updatedAttributes()),Ut.trace(`${t} table loading, running index`),te.length>0||j.length>0?g.indexingOperation=TSe(g,te,j):v&&vT.signalSchemaChange(new UT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,v)for(let z of dp)z(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Ut.trace(`${t} table loaded`),g;function se(){F||p.transactionSync(()=>({then(z){F=z}}))}a(se,"startTxn")}async function TSe(e,t,r){try{Ut.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await vT.signalSchemaChange(new UT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Bd.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let p=0;p<l;p++){let S=t[p],g=S.name;try{let R=S.resolve,E=h&&(R?R(h):h[g]),T=(0,Wz.getIndexedValues)(E);if(T)for(let O=0,v=T.length;O<v;O++)S.dbi.put(T[O],d)}catch(R){o[g]||(o[g]=!0,Ut.error(`Error indexing attribute ${g}`,R))}}}),s.then(()=>f--,p=>{f--,Ut.error(p)}),hp.workerData&&hp.workerData.restartNumber!==zz.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(i)return}f>gSe?await s:f>SSe&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await vT.signalSchemaChange(new UT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Ut.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Ut.error("Error in indexing",n)}}function ASe({table:e,database:t}){let r=pu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function il(e){return dp.push(e),{remove(){let t=dp.indexOf(e);t>-1&&dp.splice(t,1)}}}function K_(e){return fp.push(e),{remove(){let t=fp.indexOf(e);t>-1&&fp.splice(t,1)}}}function Kg(){let e=(0,Zt.get)(B.STORAGE_COMPRESSION),t=(0,Zt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||jz,n={startingOffset:32};return t&&(n.dictionary=_p.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,MT,Bd,vt,rs,Ud,Hl,WC,_p,zC,Wz,vT,UT,hp,Ut,zz,jC,BT,jz,Kn,Ye,vd,dp,fp,xT,Fo,xd,gSe,SSe,Ue=be(()=>{Zt=M(ce()),MT=M(Ft()),Bd=require("lmdb"),vt=require("path"),rs=require("fs"),Ud=M(gt());gf();Hl=M(Uf()),WC=M(xf());G();_p=M(require("fs-extra")),zC=M(ui()),Wz=M(ln()),vT=M(_o()),UT=M(Ks()),hp=require("worker_threads"),Ut=M(X()),zz=M(st());so();ru();fs();jC="data",BT=Symbol("defined-tables"),jz=((0,Zt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();Kn=Object.create(null),Ye=Object.create(null);(0,zC._assignPackageExport)("databases",Ye);(0,zC._assignPackageExport)("tables",Kn);vd=Symbol.for("next-table-id"),dp=[],fp=[],Fo=new Map;a(ESe,"getTables");a(Ze,"getDatabases");a(td,"resetDatabases");a(up,"readMetaDb");a(Qz,"ensureDB");a(Jz,"setTable");a(pu,"database");a(ub,"dropDatabase");a(_t,"table");gSe=1e3,SSe=10;a(TSe,"runIndexing");a(ASe,"dropTableMeta");a(il,"onUpdatedTable");a(K_,"onRemovedDB");a(Kg,"getDefaultCompression")});var oe=P((wve,dj)=>{"use strict";var Za=require("path"),rj=require("fs-extra"),In=X(),Xz=require("fs-extra"),HT=require("os"),RSe=require("net"),ySe=require("recursive-iterator"),Ar=(G(),D($)),{PACKAGE_ROOT:bSe}=Et(),OSe=pA(),Zz=require("papaparse"),kT=require("moment"),{inspect:NSe}=require("util"),ej=require("is-number"),Nve=require("lodash"),wSe=require("minimist"),ISe=require("https"),CSe=require("http"),{hdb_errors:FT}=he(),PSe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,nj=require("util").promisify(setTimeout),DSe=100,LSe=5,MSe="",vSe=4,tj={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};dj.exports={isEmpty:ns,isEmptyOrZeroLength:Yi,arrayHasEmptyValues:BSe,arrayHasEmptyOrZeroLengthValues:HSe,buildFolderPath:kSe,isBoolean:sj,errorizeMessage:USe,stripFileExtension:GSe,autoCast:qSe,autoCastJSON:ij,autoCastJSONDeep:JC,removeDir:$Se,compareVersions:VSe,isCompatibleDataVersion:KSe,escapeRawValue:YSe,unescapeValue:WSe,stringifyProps:zSe,timeoutPromise:QSe,isClusterOperation:XSe,getClusterUser:eTe,checkGlobalSchemaTable:ZSe,getHomeDir:aj,getPropsFilePath:jSe,promisifyPapaParse:tTe,removeBOM:cj,createEventPromise:rTe,checkProcessRunning:nTe,checkSchemaTableExist:sTe,checkSchemaExists:lj,checkTableExists:uj,getStartOfTomorrowInSeconds:iTe,getLimitKey:oTe,isObject:FSe,isNotEmptyAndHasValue:xSe,autoCasterIsNumberCheck:oj,backtickASTSchemaItems:aTe,isPortTaken:JSe,createForkArgs:cTe,autoCastBoolean:lTe,async_set_timeout:nj,getTableHashAttribute:uTe,doesSchemaExist:dTe,doesTableExist:fTe,stringifyObj:_Te,ms_to_time:hTe,changeExtension:pTe,getEnvCliRootPath:XC,noBootFile:mTe,httpRequest:ETe,transformReq:gTe,convertToMS:STe,PACKAGE_ROOT:bSe};function USe(e){return e instanceof Error?e:new Error(e)}a(USe,"errorizeMessage");function ns(e){return e==null}a(ns,"isEmpty");function xSe(e){return!ns(e)&&(e||e===0||e===""||sj(e))}a(xSe,"isNotEmptyAndHasValue");function Yi(e){return ns(e)||e.length===0||e.size===0}a(Yi,"isEmptyOrZeroLength");function BSe(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(BSe,"arrayHasEmptyValues");function HSe(e){if(Yi(e))return!0;for(let t=0;t<e.length;t++)if(Yi(e[t]))return!0;return!1}a(HSe,"arrayHasEmptyOrZeroLengthValues");function kSe(...e){try{return e.join(Za.sep)}catch{console.error(e)}}a(kSe,"buildFolderPath");function sj(e){return ns(e)?!1:e===!0||e===!1}a(sj,"isBoolean");function FSe(e){return ns(e)?!1:typeof e=="object"}a(FSe,"isObject");function GSe(e){return Yi(e)?MSe:e.slice(0,-vSe)}a(GSe,"stripFileExtension");function qSe(e){return ns(e)||e===""||typeof e!="string"?e:tj[e]!==void 0?tj[e]:oj(e)===!0?Number(e):PSe.test(e)?new Date(e):e}a(qSe,"autoCast");function ij(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(ij,"autoCastJSON");function JC(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=JC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=JC(r);n!==r&&(e[t]=n)}return e}else return ij(e)}a(JC,"autoCastJSONDeep");function oj(e){if(e.startsWith("0.")&&ej(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&ej(e))}a(oj,"autoCasterIsNumberCheck");async function $Se(e){if(Yi(e))throw new Error(`Directory path: ${e} does not exist`);try{await Xz.emptyDir(e),await Xz.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a($Se,"removeDir");function VSe(e,t){if(Yi(e)){In.info("Invalid current version sent as parameter.");return}if(Yi(t)){In.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(VSe,"compareVersions");function KSe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(KSe,"isCompatibleDataVersion");function YSe(e){if(ns(e))return e;let t=String(e);return t==="."?Ar.UNICODE_PERIOD:t===".."?Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD:t.replace(Ar.FORWARD_SLASH_REGEX,Ar.UNICODE_FORWARD_SLASH)}a(YSe,"escapeRawValue");function WSe(e){if(ns(e))return e;let t=String(e);return t===Ar.UNICODE_PERIOD?".":t===Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD?"..":String(e).replace(Ar.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(WSe,"unescapeValue");function zSe(e,t){if(ns(e))return In.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+HT.EOL}!Yi(n)&&n[0]===";"?r+=" "+n+s+HT.EOL:Yi(n)||(r+=n+"="+s+HT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(zSe,"stringifyProps");function aj(){let e;try{e=HT.homedir()}catch{e=process.env.HOME}return e}a(aj,"getHomeDir");function jSe(){let e=Za.join(aj(),Ar.HDB_HOME_DIR_NAME,Ar.BOOT_PROPS_FILE_NAME);return rj.existsSync(e)||(e=Za.join(__dirname,"../","hdb_boot_properties.file")),e}a(jSe,"getPropsFilePath");function QSe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(QSe,"timeoutPromise");async function JSe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=RSe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(JSe,"isPortTaken");function XSe(e){try{return Ar.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(XSe,"isClusterOperation");function ZSe(e,t){let r=(Ue(),D(at)).getDatabases();if(!r[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ZSe,"checkGlobalSchemaTable");function eTe(e,t){if(ns(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ns(e)||Yi(e)){In.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){In.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){In.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(eTe,"getClusterUser");function tTe(){Zz.parsePromise=function(e,t,r){return new Promise(function(n,s){Zz.parse(e,{header:!0,transformHeader:cj,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(tTe,"promisifyPapaParse");function cj(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(cj,"removeBOM");function rTe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${NSe(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(rTe,"createEventPromise");async function nTe(e){let t=!0,r=0;do await nj(DSe*r++),(await OSe.findPs(e)).length>0&&(t=!1);while(t&&r<LSe);if(t)throw new Error(`process ${e} was not started`)}a(nTe,"checkProcessRunning");function sTe(e,t){let r=lj(e);if(r)return r;let n=uj(e,t);if(n)return n}a(sTe,"checkSchemaTableExist");function lj(e){let{getDatabases:t}=(Ue(),D(at));if(!t()[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(lj,"checkSchemaExists");function uj(e,t){let{getDatabases:r}=(Ue(),D(at));if(!r()[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uj,"checkTableExists");function iTe(){let e=kT().utc().add(1,"d").startOf("d").unix(),t=kT().utc().unix();return e-t}a(iTe,"getStartOfTomorrowInSeconds");function oTe(){return kT().utc().format("DD-MM-YYYY")}a(oTe,"getLimitKey");function aTe(e){try{let t=new ySe(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){In.error("Got an error back ticking items."),In.error(t)}}a(aTe,"backtickASTSchemaItems");function cTe(e){return[e]}a(cTe,"createForkArgs");function lTe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(lTe,"autoCastBoolean");function uTe(e,t){let{getDatabases:r}=(Ue(),D(at)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(uTe,"getTableHashAttribute");function dTe(e){let{getDatabases:t}=(Ue(),D(at));return t()[e]!==void 0}a(dTe,"doesSchemaExist");function fTe(e,t){let{getDatabases:r}=(Ue(),D(at));return r()[e]?.[t]!==void 0}a(fTe,"doesTableExist");function _Te(e){try{return JSON.stringify(e)}catch{return e}}a(_Te,"stringifyObj");function hTe(e){let t=kT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(hTe,"ms_to_time");function pTe(e,t){let r=Za.basename(e,Za.extname(e));return Za.join(Za.dirname(e),r+t)}a(pTe,"changeExtension");function XC(){if(process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=wSe(process.argv);if(e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(XC,"getEnvCliRootPath");var QC;function mTe(){if(QC)return QC;let e=XC();if(XC()&&rj.pathExistsSync(Za.join(e,Ar.HDB_CONFIG_FILE)))return QC=!0,!0}a(mTe,"noBootFile");function ETe(e,t){let r;return e.protocol==="http:"?r=CSe:r=ISe,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(ETe,"httpRequest");function gTe(e){if(!e.schema&&!e.database){e.schema=Ar.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(gTe,"transformReq");function STe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(STe,"convertToMS")});var Ej=P((Cve,mj)=>{"use strict";var ss=ce(),TTe=Ju(),qe=(G(),D($)),pp=Pt(),Go=require("path"),{PACKAGE_ROOT:qT}=Et(),fj=ce(),GT=oe(),Hd="/dev/null",ATe=Go.join(qT,"launchServiceScripts"),_j=Go.join(qT,"utility/scripts"),RTe=Go.join(_j,qe.HDB_RESTART_SCRIPT),hj=Go.resolve(qT,"dependencies",`${process.platform}-${process.arch}`,pp.NATS_BINARY_NAME);function pj(){let t=TTe.licenseSearch().ram_allocation||qe.RAM_ALLOCATION_ENUM.DEFAULT,r=qe.MEM_SETTING_KEY+t,n={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return GT.noBootFile()&&(n[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=GT.getEnvCliRootPath()),{name:qe.PROCESS_DESCRIPTORS.HDB,script:qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qT}}a(pj,"generateMainServerConfig");var yTe=9930;function bTe(){ss.initSync(!0);let e=ss.get(qe.CONFIG_PARAMS.ROOTPATH),t=Go.join(e,"clustering",pp.NATS_CONFIG_FILES.HUB_SERVER),r=Go.join(ss.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=fj.get(qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=pp.LOG_LEVEL_FLAGS[ss.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==yTe?"-"+n:""),script:hj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hd,i.error_file=Hd),i}a(bTe,"generateNatsHubServerConfig");var OTe=9940;function NTe(){ss.initSync(!0);let e=ss.get(qe.CONFIG_PARAMS.ROOTPATH),t=Go.join(e,"clustering",pp.NATS_CONFIG_FILES.LEAF_SERVER),r=Go.join(ss.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=fj.get(qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=pp.LOG_LEVEL_FLAGS[ss.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==OTe?"-"+n:""),script:hj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hd,i.error_file=Hd),i}a(NTe,"generateNatsLeafServerConfig");function wTe(){ss.initSync();let e=Go.join(ss.get(qe.CONFIG_PARAMS.LOGGING_ROOT),qe.LOG_NAMES.HDB),t={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:ATe,autorestart:!1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Hd,t.error_file=Hd),t}a(wTe,"generateClusteringUpgradeV4ServiceConfig");function ITe(){let e={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.RESTART_HDB};return GT.noBootFile()&&(e[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=GT.getEnvCliRootPath()),{...{name:qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:_j},script:RTe}}a(ITe,"generateRestart");function CTe(){return{apps:[pj()]}}a(CTe,"generateAllServiceConfigs");mj.exports={generateAllServiceConfigs:CTe,generateMainServerConfig:pj,generateRestart:ITe,generateNatsHubServerConfig:bTe,generateNatsLeafServerConfig:NTe,generateClusteringUpgradeV4ServiceConfig:wTe}});var sd=P((Lve,Dj)=>{"use strict";var rt=(G(),D($)),PTe=oe(),$o=qg(),$T=Er(),qo=Pt(),ec=Ej(),VT=ce(),kl=X(),DTe=Ao(),{startWorker:gj,onMessageFromWorkers:LTe}=st(),MTe=Ku(),Dve=require("util"),vTe=require("child_process"),UTe=require("fs"),{execFile:xTe}=vTe,Qe;Dj.exports={enterPM2Mode:BTe,start:tc,stop:ZC,reload:Tj,restart:Aj,list:eP,describe:bj,connect:Vo,kill:qTe,startAllServices:$Te,startService:tP,getUniqueServicesList:Oj,restartAllServices:VTe,isServiceRegistered:Nj,reloadStopStart:wj,restartHdb:yj,deleteProcess:FTe,startClusteringProcesses:Cj,startClusteringThreads:Pj,isHdbRestartRunning:GTe,isClusteringRunning:YTe,stopClustering:KTe,reloadClustering:WTe,expectedRestartOfChildren:Rj};var mp=!1;LTe(e=>{e.type==="restart"&&VT.initSync(!0)});function BTe(){mp=!0}a(BTe,"enterPM2Mode");function Vo(){return Qe||(Qe=require("pm2")),new Promise((e,t)=>{Qe.connect((r,n)=>{r&&t(r),e(n)})})}a(Vo,"connect");var rn,HTe=10,Sj;function tc(e,t=!1){if(mp)return kTe(e);let r=xTe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=rn.indexOf(r);o>-1&&rn.splice(o,1),!Sj&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<HTe&&(UTe.existsSync($o.getHubConfigPath())?tc(e):(await $o.generateNatsConfig(!0),tc(e),await new Promise(c=>setTimeout(c,3e3)),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=VT.get(rt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&qo.LOG_LEVEL_HIERARCHY[o]>=qo.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===qo.LOG_LEVELS.ERR||f===qo.LOG_LEVELS.WRN?kl.OUTPUTS.STDERR:kl.OUTPUTS.STDOUT;kl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=qo.LOG_LEVELS[h]}if(qo.LOG_LEVEL_HIERARCHY[o]>=qo.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===qo.LOG_LEVELS.ERR||f===qo.LOG_LEVELS.WRN?kl.OUTPUTS.STDERR:kl.OUTPUTS.STDOUT;kl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!rn&&(rn=[],!t)){let i=a(()=>{Sj=!0,rn&&(rn.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}rn.push(r)}a(tc,"start");function kTe(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.start(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(kTe,"startWithPM2");function ZC(e){if(!mp){for(let t of rn||[])t.name===e&&(rn.splice(rn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.stop(e,async(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.delete(e,(i,o)=>{i&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(o)})})})}a(ZC,"stop");function Tj(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.reload(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Tj,"reload");function Aj(e){if(!mp){Rj();for(let t of rn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.restart(e,(n,s)=>{Qe.disconnect(),t(s)})})}a(Aj,"restart");function Rj(){for(let e of rn||[])e.config&&(e.config.restarts=0)}a(Rj,"expectedRestartOfChildren");function FTe(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.delete(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(FTe,"deleteProcess");async function yj(){await tc(ec.generateRestart())}a(yj,"restartHdb");async function GTe(){let e=await eP();for(let t in e)if(e[t].name===rt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(GTe,"isHdbRestartRunning");function eP(){return new Promise(async(e,t)=>{try{await Vo()}catch(r){t(r)}Qe.list((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(eP,"list");function bj(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.describe(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(bj,"describe");function qTe(){if(!mp){for(let e of rn||[])e.kill();rn=[];return}return new Promise(async(e,t)=>{try{await Vo()}catch(r){t(r)}Qe.killDaemon((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(qTe,"kill");async function $Te(){try{await Cj(),await Pj(),await tc(ec.generateAllServiceConfigs())}catch(e){throw Qe?.disconnect(),e}}a($Te,"startAllServices");async function tP(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case rt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ec.generateMainServerConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ec.generateNatsIngestServiceConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ec.generateNatsReplyServiceConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ec.generateNatsHubServerConfig(),await tc(r,t),await $o.removeNatsConfig(e);return;case rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ec.generateNatsLeafServerConfig(),await tc(r,t),await $o.removeNatsConfig(e);return;case rt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ec.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await tc(r)}catch(r){throw Qe?.disconnect(),r}}a(tP,"startService");async function Oj(){try{let e=await eP(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Qe?.disconnect(),e}}a(Oj,"getUniqueServicesList");async function VTe(e=[]){try{let t=!1,r=await Oj();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===rt.PROCESS_DESCRIPTORS.HDB?t=!0:await Aj(o))}t&&await wj(rt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Qe?.disconnect(),t}}a(VTe,"restartAllServices");async function Nj(e){if(rn?.find(r=>r.name===e))return!0;let t=await MTe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Nj,"isServiceRegistered");async function wj(e){let t=VT.get(rt.CONFIG_PARAMS.THREADS_COUNT)??VT.get(rt.CONFIG_PARAMS.THREADS),r=await bj(e),n=PTe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ZC(e),await tP(e)):e===rt.PROCESS_DESCRIPTORS.HDB?await yj():await Tj(e)}a(wj,"reloadStopStart");var Ij;async function Cj(e=!1){for(let t in rt.CLUSTERING_PROCESSES){let r=rt.CLUSTERING_PROCESSES[t];await tP(r,e)}}a(Cj,"startClusteringProcesses");async function Pj(){Ij=gj(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:rt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await $T.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await $T.updateLocalStreams();let e=await DTe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===rt.PRE_4_0_0_VERSION){kl.info("Starting clustering upgrade 4.0.0 process"),gj(rt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Pj,"startClusteringThreads");async function KTe(){for(let e in rt.CLUSTERING_PROCESSES)if(e!==rt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===rt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Ij.terminate();else{let t=rt.CLUSTERING_PROCESSES[e];await ZC(t)}}a(KTe,"stopClustering");async function YTe(){for(let e in rt.CLUSTERING_PROCESSES){let t=rt.CLUSTERING_PROCESSES[e];if(await Nj(t)===!1)return!1}return!0}a(YTe,"isClusteringRunning");async function WTe(){await $o.generateNatsConfig(!0),await $T.reloadNATSHub(),await $T.reloadNATSLeaf(),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(WTe,"reloadClustering")});var rP=sd(),Lj=(G(),D($));a(async function(){try{let t=await rP.describe(Lj.PROCESS_DESCRIPTORS.HDB);for(let r of t)await rP.reload(r.pm_id);await rP.deleteProcess(Lj.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|