harperdb 4.6.23 → 4.6.25

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/bin/lite.js CHANGED
@@ -1,5 +1,5 @@
1
- var W4=Object.create;var qf=Object.defineProperty;var z4=Object.getOwnPropertyDescriptor;var j4=Object.getOwnPropertyNames;var Q4=Object.getPrototypeOf,J4=Object.prototype.hasOwnProperty;var o=(e,t)=>qf(e,"name",{value:t,configurable:!0});var ue=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Oe=(e,t)=>{for(var r in t)qf(e,r,{get:t[r],enumerable:!0})},rM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of j4(t))!J4.call(e,s)&&s!==r&&qf(e,s,{get:()=>t[s],enumerable:!(n=z4(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?W4(Q4(e)):{},rM(t||!e||!e.__esModule?qf(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>rM(qf({},"__esModule",{value:!0}),e);var Rt=M((CIe,iM)=>{var{join:X4,dirname:nM}=require("node:path"),{existsSync:Z4,readFileSync:e3}=require("node:fs");function t3(){let t=__dirname,r,n=0;for(;!Z4(r=X4(t,"package.json"));)if(t===(t=nM(t))||n++>10)throw new Error("Could not find package root");return r}o(t3,"findPackageJson");var sM=t3(),r3=JSON.parse(e3(sM,"utf8")),n3=nM(sM);iM.exports={packageJson:r3,PACKAGE_ROOT:n3}});var LE=M((LIe,oM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=Rt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let y=!1,T=!1;if(T=s(n(m,p))){let R=new Set;e.sync(h.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{R.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,p,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(y=!0)}),e.sync(h.map(N=>`${N}/**/*.js`),{cwd:n(m,p)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,p,N))}catch{}})}else y=!0;if(y){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),T){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",Z=>{console.error("Error trying to compile TypeScript",Z)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let _=oM.constructor,g=_._findPath;_._findPath=function(y,T,R){if(y.startsWith(".")&&!R&&T.length===1&&T[0].startsWith(m)&&!T[0].includes("node_modules")){let N=r(m,T[0]),O;N.startsWith(p)?O=n(m,r(p,N)):O=n(m,p,N),(y.endsWith(".js")||y.endsWith(".ts"))&&(y=y.slice(0,-3));let F=n(O,y),Z=F+".js";if(s(Z))return Z;if(F.includes(".")&&s(F))return F}return g(y,T,R)}}});var Xs=M($n=>{"use strict";global.Resource=$n.Resource=void 0;global.tables=$n.tables={};global.databases=$n.databases={};global.getUser=$n.getUser=void 0;global.authenticateUser=$n.authenticateUser=void 0;global.server=$n.server={};global.contentTypes=$n.contentTypes=null;global.threads=$n.threads=[];global.logger={};global.RequestTarget=$n.RequestTarget=void 0;global.operation=$n.operation=void 0;$n._assignPackageExport=(e,t)=>{global[e]=$n[e]=t}});var $f={};Oe($f,{server:()=>Le});var aM,Le,Mr=ue(()=>{aM=w(Xs()),Le={};(0,aM._assignPackageExport)("server",Le)});var W={};Oe(W,{AUTH_AUDIT_STATUS:()=>Zs,AUTH_AUDIT_TYPES:()=>ya,BOOT_PROPS_FILE_NAME:()=>w3,BOOT_PROP_PARAMS:()=>uM,CLUSTERING_FLAG:()=>Jy,CLUSTERING_PROCESSES:()=>m3,CLUSTER_MESSAGE_TYPE_ENUM:()=>Qy,CLUSTER_OPERATIONS:()=>$3,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>dM,DATABASES_DIR_NAME:()=>vc,DATABASES_PARAM_CONFIG:()=>W3,DEFAULT_DATABASE_NAME:()=>p3,ESCAPED_FORWARD_SLASH_REGEX:()=>b3,FORWARD_SLASH_REGEX:()=>y3,FUNC_VAL:()=>sX,GEO_CONVERSION_ENUM:()=>K3,HDB_COMPONENT_CONFIG_FILE:()=>o3,HDB_CONFIG_FILE:()=>s3,HDB_DEFAULT_CONFIG_FILE:()=>i3,HDB_FILE_PERMISSIONS:()=>C3,HDB_HOME_DIR_NAME:()=>N3,HDB_PID_FILE:()=>h3,HDB_PROCESS_SERVICES:()=>f3,HDB_PROC_NAME:()=>a3,HDB_RESTART_SCRIPT:()=>c3,HDB_ROOT_DIR_NAME:()=>Ky,HDB_SETTINGS_NAMES:()=>jy,HDB_SUPPORT_ADDRESS:()=>lM,INFO_TABLE_HASH_ATTRIBUTE:()=>U3,INSERT_MAX_CHARACTER_SIZE:()=>M3,INSTALL_PROMPTS:()=>D3,ITC_EVENT_TYPES:()=>Zy,JOB_STATUS_ENUM:()=>H3,JOB_TYPE_ENUM:()=>z3,JWT_ENUM:()=>Yf,LAUNCH_SERVICE_SCRIPTS:()=>_3,LEGACY_CONFIG_PARAMS:()=>Y3,LEGACY_DATABASES_DIR_NAME:()=>vE,LICENSE_FILE_NAME:()=>F3,LICENSE_KEY_DIR_NAME:()=>zy,LICENSE_VALUES:()=>j3,LOG_LEVELS:()=>Vf,LOG_NAMES:()=>E3,MEM_SETTING_KEY:()=>I3,METADATA_PROPERTY:()=>X3,NODE_ERROR_CODES:()=>J3,OPERATIONS_ENUM:()=>$,PERMS_CRUD_ENUM:()=>rX,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>tX,PRE_4_0_0_VERSION:()=>iX,PROCESS_DESCRIPTORS:()=>d3,PROCESS_NAME_ENV_PROP:()=>L3,RAM_ALLOCATION_ENUM:()=>Q3,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>xE,REG_KEY_FILE_NAME:()=>B3,RESTART_TIMEOUT_MS:()=>O3,ROLE_TYPES_ENUM:()=>g3,S3_BUCKET_AUTH_KEYS:()=>G3,SEARCH_NOT_FOUND_MESSAGE:()=>T3,SEARCH_WILDCARDS:()=>nX,SERVICE_ACTIONS_ENUM:()=>V3,SUPPORT_HELP_MSG:()=>S3,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>x3,SYSTEM_SCHEMA_NAME:()=>Kf,SYSTEM_TABLE_NAMES:()=>_u,THREAD_TYPES:()=>eA,TIME_STAMP_NAMES:()=>eX,TIME_STAMP_NAMES_ENUM:()=>Z3,TRANSACTIONS_DIR_NAME:()=>P3,UNICODE_FORWARD_SLASH:()=>A3,UNICODE_PERIOD:()=>R3,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>v3,VALID_S3_FILE_TYPES:()=>k3,VALID_SQL_OPS_ENUM:()=>q3,VALUE_SEARCH_COMPARATORS:()=>UE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Xy});var DE,ME,s3,i3,Ky,o3,a3,c3,cM,Vy,Yy,Wy,l3,u3,d3,f3,m3,h3,p3,E3,Vf,_3,g3,lM,S3,T3,R3,y3,A3,b3,I3,Kf,N3,zy,w3,O3,C3,vc,vE,P3,L3,uM,D3,M3,v3,_u,U3,x3,B3,F3,H3,$,k3,G3,q3,$3,V3,K3,jy,Y3,U,dM,W3,z3,Qy,j3,Q3,J3,X3,Jy,fM,mM,Z3,eX,tX,UE,Xy,rX,nX,sX,xE,Yf,Zy,eA,iX,Zs,ya,k=ue(()=>{DE=require("node:path"),ME=w(Rt()),s3="harperdb-config.yaml",i3="defaultConfig.yaml",Ky="hdb",o3="config.yaml",a3="harperdb.js",c3="restartHdb.js",cM="HarperDB",Vy="Custom Functions",Yy="Clustering Hub",Wy="Clustering Leaf",l3="Clustering Ingest Service",u3="Clustering Reply Service",d3={HDB:cM,CLUSTERING_HUB:Yy,CLUSTERING_LEAF:Wy,CLUSTERING_INGEST_SERVICE:l3,CLUSTERING_REPLY_SERVICE:u3,CUSTOM_FUNCTIONS:Vy,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"},f3={harperdb:cM,"clustering hub":Yy,"clustering leaf":Wy,"custom functions":Vy,custom_functions:Vy,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},m3={CLUSTERING_HUB_PROC_DESCRIPTOR:Yy,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wy},h3="hdb.pid",p3="data",E3={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Vf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},_3={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},g3={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},lM="support@harperdb.io",S3=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${lM}`,T3="None of the specified records were found.",R3="U+002E",y3=/\//g,A3="U+002F",b3=/U\+002F/g,I3="--max-old-space-size=",Kf="system",N3=".harperdb",zy="keys",w3="hdb_boot_properties.file",O3=6e4,C3=448,vc="database",vE="schema",P3="transactions",L3="PROCESS_NAME",uM={SETTINGS_PATH_KEY:"settings_path"},D3={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"},M3=250,v3={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},_u={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"},U3="info_id",x3={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"},B3="060493.ks",F3=".license",H3={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},k3={CSV:".csv",JSON:".json"},G3={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},q3={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},$3={[$.INSERT]:$.INSERT,[$.UPDATE]:$.UPDATE,[$.UPSERT]:$.UPSERT,[$.DELETE]:$.DELETE},V3={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"},K3={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},jy={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"},Y3={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"},U={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",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_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},dM={settings_path:uM.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];dM[t.toLowerCase()]=t}W3={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},z3={csv_file_load:"csv_file_load",csv_data_load:$.CSV_DATA_LOAD,csv_url_load:$.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},Qy={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"},j3={VERSION_DEFAULT:"2.2.0"},Q3={DEVELOPMENT:8192,DEFAULT:512},J3={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},X3=Symbol("metadata"),Jy="__clustering__",fM="__createdtime__",mM="__updatedtime__",Z3={CREATED_TIME:fM,UPDATED_TIME:mM},eX=[fM,mM],tX=15984864e5,UE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Xy={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},rX={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},nX=["*","%"],sX="func_val",xE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Zy={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"},eA={HTTP:"http"},iX="3.x.x",Zs={SUCCESS:"success",FAILURE:"failure"},ya={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Uc=M((MIe,EM)=>{"use strict";var hM=require("minimist");EM.exports=oX;function oX(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=pM(process.env),n=pM(hM(process.argv))):(r=process.env,n=hM(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(oX,"assignCMDENVVariables");function pM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(pM,"objKeysToLowerCase")});var tA=M((UIe,_M)=>{"use strict";var aX=require("util"),cX=require("path"),lX=require("child_process"),uX=aX.promisify(lX.execFile),dX=1e3*1e3*10;_M.exports={findPs:fX};async function fX(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await uX("ps",["wwxo",`pid,${r}`],{maxBuffer:dX});for(let s of n.trim().split(`
2
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:cX.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(fX,"findPs")});var qt=M((BIe,SM)=>{"use strict";var mX="__dbis__",hX="__txns__",pX="__environment_name__",EX="__dbi_defintion__",_X={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"},gX=["__createdtime__","__updatedtime__"],SX="\uFFFF",gM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},TX=Object.values(gM);SM.exports={AUDIT_STORE_NAME:hX,INTERNAL_DBIS_NAME:mX,DBI_DEFINITION_NAME:EX,SEARCH_TYPES:_X,TIMESTAMP_NAMES:gX,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:pX,TRANSACTIONS_DBI_NAMES_ENUM:gM,TRANSACTIONS_DBIS:TX,OVERFLOW_MARKER:SX}});var yt=M((FIe,NM)=>{"use strict";var Jf=(k(),v(W)),RX=ie(),yn=oe(),Xf=require("path"),yX=require("minimist"),TM=require("fs-extra"),RM=require("lodash");yn.initSync();var{CONFIG_PARAMS:Aa,DATABASES_PARAM_CONFIG:Wf,SYSTEM_SCHEMA_NAME:BE}=Jf,zf,jf,Qf;function yM(){if(zf!==void 0)return zf;if(yn.getHdbBasePath()!==void 0)return zf=yn.get(Aa.STORAGE_PATH)||Xf.join(yn.getHdbBasePath(),Jf.DATABASES_DIR_NAME),zf}o(yM,"getBaseSchemaPath");function AM(){if(jf!==void 0)return jf;if(yn.getHdbBasePath()!==void 0)return jf=IM(BE),jf}o(AM,"getSystemSchemaPath");function bM(){if(Qf!==void 0)return Qf;if(yn.getHdbBasePath()!==void 0)return Qf=yn.get(Jf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Xf.join(yn.getHdbBasePath(),Jf.TRANSACTIONS_DIR_NAME),Qf}o(bM,"getTransactionAuditStoreBasePath");function AX(e,t){let r=yn.get(Aa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Xf.join(bM(),e.toString())}o(AX,"getTransactionAuditStorePath");function IM(e,t){e=e.toString(),t=t&&t.toString();let r=yn.get(Jf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Xf.join(yM(),e)}o(IM,"getSchemaPath");function bX(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,yX(process.argv));let n=r[Aa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!RX.isObject(n))throw a;i=n}for(let a of i){let c=a[BE];if(!c)continue;let l=yn.get(Aa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Wf.PATH];if(u)return RM.set(l,[BE,Wf.TABLES,t,Wf.PATH],u),yn.setProperty(Aa.DATABASES,l),u;let d=c?.[Wf.PATH];if(d)return RM.set(l,[BE,Wf.PATH],d),yn.setProperty(Aa.DATABASES,l),d}}let s=r[Aa.STORAGE_PATH.toUpperCase()];if(s){if(!TM.pathExistsSync(s))throw new Error(s+" does not exist");let i=Xf.join(s,e);return TM.mkdirsSync(i),yn.setProperty(Aa.STORAGE_PATH,s),i}return AM()}o(bX,"initSystemSchemaPaths");function IX(){zf=void 0,jf=void 0,Qf=void 0}o(IX,"resetPaths");NM.exports={getBaseSchemaPath:yM,getSystemSchemaPath:AM,getTransactionAuditStorePath:AX,getTransactionAuditStoreBasePath:bM,getSchemaPath:IM,initSystemSchemaPaths:bX,resetPaths:IX}});var rn=M((kIe,UM)=>{"use strict";var wM=(k(),v(W)),OM=qt(),CM={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},PM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),LM={500:PM("There was an error processing your request."),400:"Invalid request"},NX=LM[CM.INTERNAL_SERVER_ERROR],wX={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},OX={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},CX={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},PX={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 ${OM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${OM.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"},LX={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${wM.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 ${wM.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"},DM={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"},DX={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},MX={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},vX={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},UX={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},xX={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},MM={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},vM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},BX={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"},FX={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},HX={...DM,...CX,...wX,...DX,...MX,...vX,...UX,...xX,...LX,...MM,...vM,...BX,...FX,...OX};UM.exports={CHECK_LOGS_WRAPPER:PM,HDB_ERROR_MSGS:HX,DEFAULT_ERROR_MSGS:LM,DEFAULT_ERROR_RESP:NX,HTTP_STATUS_CODES:CM,LMDB_ERRORS_ENUM:PX,AUTHENTICATION_ERROR_MSGS:DM,VALIDATION_ERROR_MSGS:MM,ITC_ERRORS:vM}});var An=M((VIe,kM)=>{"use strict";var kX=rn().LMDB_ERRORS_ENUM,qIe=require("lmdb"),GX=qt(),$Ie=require("buffer").Buffer,{OVERFLOW_MARKER:xM,MAX_SEARCH_KEY_LENGTH:FE}=GX,BM=["number","string","symbol","boolean","bigint"];function qX(e){if(e=e?.primaryStore||e,!e)throw new Error(kX.ENV_REQUIRED)}o(qX,"validateEnv");function $X(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o($X,"stringifyData");function VX(e){return e instanceof Date?e.valueOf():e}o(VX,"convertKeyValueToWrite");function KX(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(BM.includes(typeof e))return e.length>FE?[e.slice(0,FE)+xM]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(BM.includes(typeof i))i.length>FE?r.push(i.slice(0,FE)+xM):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(KX,"getIndexedValues");var HE=0,FM=0;function HM(){FM=Date.now()-performance.now()}o(HM,"adjustStartTime");HM();var YX=6e4;setInterval(HM,YX).unref();function WX(){let e=performance.now()+FM;return e>HE?(HE=e,e):(HE+=488e-6,HE)}o(WX,"getNextMonotonicTime");kM.exports={validateEnv:qX,stringifyData:$X,convertKeyValueToWrite:VX,getNextMonotonicTime:WX,getIndexedValues:KX}});var Zf=M((YIe,GM)=>{"use strict";var zX=(k(),v(W)).OPERATIONS_ENUM,rA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=zX.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};GM.exports=rA});var ge=M((zIe,VM)=>{"use strict";var gu=rn(),jX=Q(),QX=(k(),v(W)),kE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,qM),this.statusCode=n||gu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(gu.DEFAULT_ERROR_MSGS[n]?gu.DEFAULT_ERROR_MSGS[n]:gu.DEFAULT_ERROR_MSGS[gu.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&&jX[s](i)}},nA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},sA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function qM(e,t,r,n=QX.LOG_LEVELS.ERROR,s=null,i=!1){if($M(e))return e;let a=new kE(e,t,r,n,s);return i&&delete a.stack,a}o(qM,"handleHDBError");function Su(e){this.message=e}o(Su,"Violation");Su.prototype=Object.create(Error.prototype);Su.prototype.constructor=Su;Su.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var iA=class extends Su{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function $M(e){return e.__proto__.constructor.name===kE.name}o($M,"isHDBError");VM.exports={isHDBError:$M,handleHDBError:qM,ClientError:nA,ServerError:sA,AccessViolation:iA,Violation:Su,hdbErrors:gu}});var em=M((JIe,zM)=>{"use strict";var QIe=Zf(),GE=(k(),v(W)),oA=ie(),KM=Q(),JX=require("uuid"),{handleHDBError:qE,hdbErrors:XX}=ge(),{HDB_ERROR_MSGS:$E,HTTP_STATUS_CODES:VE}=XX;zM.exports=YM;function YM(e,t,r){for(let s=0;s<t.length;s++)WM(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];ZX(i,r,e.operation)}}o(YM,"processRows");YM.validateAttribute=WM;function WM(e){if(Buffer.byteLength(String(e))>GE.INSERT_MAX_CHARACTER_SIZE)throw qE(new Error,$E.ATTR_NAME_LENGTH_ERR(e),VE.BAD_REQUEST,void 0,void 0,!0);if(oA.isEmptyOrZeroLength(e)||oA.isEmpty(e.trim()))throw qE(new Error,$E.ATTR_NAME_NULLISH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(WM,"validateAttribute");function ZX(e,t,r){if(!e.hasOwnProperty(t)||oA.isEmptyOrZeroLength(e[t])){if(r===GE.OPERATIONS_ENUM.INSERT||r===GE.OPERATIONS_ENUM.UPSERT){e[t]=JX.v4();return}throw KM.error("Update transaction aborted due to record with no hash value:",e),qE(new Error,$E.RECORD_MISSING_HASH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>GE.INSERT_MAX_CHARACTER_SIZE)throw KM.error(e),qE(new Error,$E.HASH_VAL_LENGTH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(ZX,"validateHash")});function tv(e){cA=e}function n6(){r6=setInterval(function(){for(let e of aA)if(e.stale){let t=e.getContext()?.url;XM.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},t6).unref()}var lA,JM,XM,ZM,ev,jM,aA,e6,Eo,tm,QM,cA,_o,KE,t6,r6,rm=ue(()=>{lA=w(An()),JM=w(ge()),XM=w(Q()),ZM=w(oe());k();ev=w(ie()),jM=100,aA=new Set,e6=(0,ev.convertToMS)(ZM.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Eo={CLOSED:0,OPEN:1,LINGERING:2};o(tv,"replicationConfirmation");_o=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Eo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Eo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),aA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(aA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(tm&&!this.overloadChecked&&performance.now()-QM>e6)throw new JM.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Eo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Eo.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,lA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let h=f;h<this.validated;h++)this.writes[h]?.validate?.(this.timestamp);let m;for(let h=f;h<this.validated;h++){let p=this.writes[h];p&&(p.before||p.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let h=0;h<2;h++){let p;for(let _=f;_<this.validated;_++){let g=this.writes[_];if(!g)continue;let y=g[h===0?"before":"beforeIntermediate"];if(y){let T=y();p?p.push?p.push(T):p=[p,T]:p=T}}p&&await(p.push?Promise.all(p):p)}}catch(h){throw this.abort(),h}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Eo.LINGERING:Eo.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<jM>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return tm||(tm=s,QM=performance.now(),tm.then(()=>{tm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,h=this.writes[this.writes.length-1];cA&&h&&i.push(cA(m,h.store.getEntry(h.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+jM/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Eo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},KE=class extends _o{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lA.getNextMonotonicTime)())}getReadTxn(){}},t6=3e4;o(n6,"startMonitoringTxns");n6()});var rv,Vn,uA,Tu=ue(()=>{rv=require("events"),Vn=class extends rv.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new uA;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)}},uA=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function xt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Eo.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _o;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var nv,xc=ue(()=>{nv=w(Xs());rm();o(xt,"transaction");(0,nv._assignPackageExport)("transaction",xt);xt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};xt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var fA={};Oe(fA,{add:()=>YE,applyReverse:()=>sv,getRecordAtTime:()=>dA,rebuildUpdateBefore:()=>WE});function YE(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 WE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,YE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function sv(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=s6[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=iv}}function dA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":sv(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===iv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var s6,iv,zE=ue(()=>{Li();o(YE,"add");YE.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)};s6={add:YE};o(WE,"rebuildUpdateBefore");o(sv,"applyReverse");iv={};o(dA,"getRecordAtTime")});var ei=M(QE=>{var jE=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])jE.logsAtLevel(e)&&(QE[e]=jE[e]);QE.loggerWithTag=e=>jE.loggerWithTag(e,!0);QE.setLogLevel=jE.setLogLevel});var fv={};Oe(fv,{parse:()=>pA,streamAsJSON:()=>sm,stringify:()=>Bc});function sm(e){return new mA({value:e})}function ov(e){return console.error(e),JSON.stringify(nm(e))}function av(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Bc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===uv)return dv(e);if(t.resolution)return t.resolution.then(()=>Bc(e));throw t}}function dv(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+=dv(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Bc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function pA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),a6.test(e)?i6.parse(e):JSON.parse(e)):null}var cv,hA,lv,i6,o6,uv,nm,mA,a6,EA=ue(()=>{cv=require("stream"),hA=w(Q()),lv=w(require("json-bigint-fixes")),i6=(0,lv.default)({useNativeBigInt:!0}),o6=1e4,uv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw uv};({errorToString:nm}=hA);o(sm,"streamAsJSON");mA=class extends cv.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(hA.warn("Error serializing in stream",c),a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),ov)}catch(s){yield ov(s)}else yield Bc(t)}else yield Bc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);av(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(nm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>o6?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 av(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(nm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(ov,"handleError");o(av,"when");o(Bc,"stringify");o(dv,"jsStringify");a6=/[[,:]\s*-?\d{16,}/;o(pA,"parse")});var yv={};Oe(yv,{asyncSerialization:()=>RA,contentTypes:()=>TA,findBestSerializer:()=>XE,getDeserializer:()=>To,hasAsyncSerialization:()=>yA,registerContentHandlers:()=>am,serialize:()=>cm,serializeMessage:()=>ba,toCsvStream:()=>JE});function c6(e){try{return e?.[0]===123?SA(e):e}catch{return e}}function am(e){e.register(l6,{serializers:[{regex:/^application\/json$/,serializer:sm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Fc.EncoderStream(om).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Hc.Readable.from((0,Di.encodeIter)(t,om)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),JE(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Di.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Fc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function XE(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let p of d){let _=p.indexOf("=");m[p.substring(0,_)]=p.substring(_+1)}f=+m.q;let h=nn.get(u);if(h){let p=(h.q||1)*f;p>s&&(n=h,i=h.type||u,s=p,a=m)}}if(!n){if(r)throw new pv.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(nn.keys()).join(", "),406);n=nn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function cm(e,t,r){let n=hv&&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 Rs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=XE(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}),gA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,So.createBrotliCompress)({params:{[So.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?So.constants.BROTLI_MODE_TEXT:So.constants.BROTLI_MODE_GENERIC,[So.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>hv?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,So.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function ba(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;go=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=XE(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=im(e);return go?.length>0?(go.length===1?go[0]:Promise.all(go)).then(()=>ba(e,t,!0)):n}finally{go=void 0}}function RA(e){if(go)go.push(e);else throw new Error("Unable to serialize asynchronously")}function yA(){return!!go}function u6(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 f6(e){return d6.includes(e)}function m6(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function To(e="",t=!1){let r=m6(e),n=r.type&&nn.get(r.type)?.deserialize||h6(r);return t?s=>u6(s).then(n):n}function h6(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!f6(e.parameters.charset)&&gA.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 SA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function p6(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 JE(e,t){let r=Hc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new gv.Transform(n,s);return r.pipe(i)}var Di,Fc,So,pv,Hc,Ev,_A,_v,gA,gv,Sv,Tv,im,SA,om,nn,TA,mv,Rv,l6,hv,go,d6,Ro=ue(()=>{EA();Di=require("msgpackr"),Fc=require("cbor-x"),So=require("zlib"),pv=w(ge()),Hc=w(require("stream"));Mr();Ev=w(Xs()),_A=w(oe());k();_v=w(require("yaml")),gA=w(ei());Kn();gv=require("json2csv"),Sv=w(require("fastify-plugin")),Tv=_A.default.get(U.SERIALIZATION_BIGINT)!==!1,im=Tv?Bc:JSON.stringify,SA=Tv?pA:JSON.parse,om={useRecords:!1,useToJSON:!0},nn=new Map,TA=nn;Le.contentTypes=TA;(0,Ev._assignPackageExport)("contentTypes",TA);nn.set("application/json",{serializeStream:sm,serialize:im,deserialize(e){return SA(e)},q:.8});mv=new Fc.Encoder(om);nn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Fc.EncoderStream(om).end(e)},serialize:mv.encode,deserialize:mv.decode,q:1});nn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Hc.Readable.from((0,Di.encodeIter)(e,om)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});nn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),JE(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]),JE(e,e?.getColumns?.())},q:.1});nn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Hc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});nn.set("text/yaml",{serialize(e){return _v.stringify(e,{aliasDuplicateObjects:!1})},q:.7});nn.set("text/event-stream",{serializeStream:o(function(e){return Hc.Readable.from(p6(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
1
+ var z4=Object.create;var qf=Object.defineProperty;var j4=Object.getOwnPropertyDescriptor;var Q4=Object.getOwnPropertyNames;var J4=Object.getPrototypeOf,X4=Object.prototype.hasOwnProperty;var o=(e,t)=>qf(e,"name",{value:t,configurable:!0});var ce=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),we=(e,t)=>{for(var r in t)qf(e,r,{get:t[r],enumerable:!0})},rM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Q4(t))!X4.call(e,s)&&s!==r&&qf(e,s,{get:()=>t[s],enumerable:!(n=j4(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?z4(J4(e)):{},rM(t||!e||!e.__esModule?qf(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>rM(qf({},"__esModule",{value:!0}),e);var bt=M((PIe,iM)=>{var{join:Z4,dirname:nM}=require("node:path"),{existsSync:e3,readFileSync:t3}=require("node:fs");function r3(){let t=__dirname,r,n=0;for(;!e3(r=Z4(t,"package.json"));)if(t===(t=nM(t))||n++>10)throw new Error("Could not find package root");return r}o(r3,"findPackageJson");var sM=r3(),n3=JSON.parse(t3(sM,"utf8")),s3=nM(sM);iM.exports={packageJson:n3,PACKAGE_ROOT:s3}});var LE=M((DIe,oM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=bt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let R=!1,T=!1;if(T=s(n(m,p))){let y=new Set;e.sync(h.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{y.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,p,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(R=!0)}),e.sync(h.map(N=>`${N}/**/*.js`),{cwd:n(m,p)}).forEach(N=>{if(!y.has(N.replace(/.js$/,".ts")))try{l(n(m,p,N))}catch{}})}else R=!0;if(R){console.log("Compiling TypeScript...");let y=d("npx",["tsc"],{cwd:m});if(y.stdout?.length&&console.log(y.stdout.toString()),y.stderr?.length&&console.log(y.stderr.toString()),T){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",Z=>{console.error("Error trying to compile TypeScript",Z)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let _=oM.constructor,g=_._findPath;_._findPath=function(R,T,y){if(R.startsWith(".")&&!y&&T.length===1&&T[0].startsWith(m)&&!T[0].includes("node_modules")){let N=r(m,T[0]),O;N.startsWith(p)?O=n(m,r(p,N)):O=n(m,p,N),(R.endsWith(".js")||R.endsWith(".ts"))&&(R=R.slice(0,-3));let F=n(O,R),Z=F+".js";if(s(Z))return Z;if(F.includes(".")&&s(F))return F}return g(R,T,y)}}});var Xs=M($n=>{"use strict";global.Resource=$n.Resource=void 0;global.tables=$n.tables={};global.databases=$n.databases={};global.getUser=$n.getUser=void 0;global.authenticateUser=$n.authenticateUser=void 0;global.server=$n.server={};global.contentTypes=$n.contentTypes=null;global.threads=$n.threads=[];global.logger={};global.RequestTarget=$n.RequestTarget=void 0;global.operation=$n.operation=void 0;$n._assignPackageExport=(e,t)=>{global[e]=$n[e]=t}});var $f={};we($f,{server:()=>Le});var aM,Le,Dr=ce(()=>{aM=w(Xs()),Le={};(0,aM._assignPackageExport)("server",Le)});var W={};we(W,{AUTH_AUDIT_STATUS:()=>Zs,AUTH_AUDIT_TYPES:()=>ya,BOOT_PROPS_FILE_NAME:()=>O3,BOOT_PROP_PARAMS:()=>uM,CLUSTERING_FLAG:()=>Jy,CLUSTERING_PROCESSES:()=>h3,CLUSTER_MESSAGE_TYPE_ENUM:()=>Qy,CLUSTER_OPERATIONS:()=>V3,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>dM,DATABASES_DIR_NAME:()=>Uc,DATABASES_PARAM_CONFIG:()=>z3,DEFAULT_DATABASE_NAME:()=>E3,ESCAPED_FORWARD_SLASH_REGEX:()=>I3,FORWARD_SLASH_REGEX:()=>A3,FUNC_VAL:()=>iX,GEO_CONVERSION_ENUM:()=>Y3,HDB_COMPONENT_CONFIG_FILE:()=>a3,HDB_CONFIG_FILE:()=>i3,HDB_DEFAULT_CONFIG_FILE:()=>o3,HDB_FILE_PERMISSIONS:()=>P3,HDB_HOME_DIR_NAME:()=>w3,HDB_PID_FILE:()=>p3,HDB_PROCESS_SERVICES:()=>m3,HDB_PROC_NAME:()=>c3,HDB_RESTART_SCRIPT:()=>l3,HDB_ROOT_DIR_NAME:()=>Ky,HDB_SETTINGS_NAMES:()=>jy,HDB_SUPPORT_ADDRESS:()=>lM,INFO_TABLE_HASH_ATTRIBUTE:()=>x3,INSERT_MAX_CHARACTER_SIZE:()=>v3,INSTALL_PROMPTS:()=>M3,ITC_EVENT_TYPES:()=>Zy,JOB_STATUS_ENUM:()=>k3,JOB_TYPE_ENUM:()=>j3,JWT_ENUM:()=>Yf,LAUNCH_SERVICE_SCRIPTS:()=>g3,LEGACY_CONFIG_PARAMS:()=>W3,LEGACY_DATABASES_DIR_NAME:()=>vE,LICENSE_FILE_NAME:()=>H3,LICENSE_KEY_DIR_NAME:()=>zy,LICENSE_VALUES:()=>Q3,LOG_LEVELS:()=>Vf,LOG_NAMES:()=>_3,MEM_SETTING_KEY:()=>N3,METADATA_PROPERTY:()=>Z3,NODE_ERROR_CODES:()=>X3,OPERATIONS_ENUM:()=>q,PERMS_CRUD_ENUM:()=>nX,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>rX,PRE_4_0_0_VERSION:()=>oX,PROCESS_DESCRIPTORS:()=>f3,PROCESS_NAME_ENV_PROP:()=>D3,RAM_ALLOCATION_ENUM:()=>J3,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>xE,REG_KEY_FILE_NAME:()=>F3,RESTART_TIMEOUT_MS:()=>C3,ROLE_TYPES_ENUM:()=>S3,S3_BUCKET_AUTH_KEYS:()=>q3,SEARCH_NOT_FOUND_MESSAGE:()=>R3,SEARCH_WILDCARDS:()=>sX,SERVICE_ACTIONS_ENUM:()=>K3,SUPPORT_HELP_MSG:()=>T3,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>B3,SYSTEM_SCHEMA_NAME:()=>Kf,SYSTEM_TABLE_NAMES:()=>gu,THREAD_TYPES:()=>eA,TIME_STAMP_NAMES:()=>tX,TIME_STAMP_NAMES_ENUM:()=>eX,TRANSACTIONS_DIR_NAME:()=>L3,UNICODE_FORWARD_SLASH:()=>b3,UNICODE_PERIOD:()=>y3,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>U3,VALID_S3_FILE_TYPES:()=>G3,VALID_SQL_OPS_ENUM:()=>$3,VALUE_SEARCH_COMPARATORS:()=>UE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Xy});var DE,ME,i3,o3,Ky,a3,c3,l3,cM,Vy,Yy,Wy,u3,d3,f3,m3,h3,p3,E3,_3,Vf,g3,S3,lM,T3,R3,y3,A3,b3,I3,N3,Kf,w3,zy,O3,C3,P3,Uc,vE,L3,D3,uM,M3,v3,U3,gu,x3,B3,F3,H3,k3,q,G3,q3,$3,V3,K3,Y3,jy,W3,U,dM,z3,j3,Qy,Q3,J3,X3,Z3,Jy,fM,mM,eX,tX,rX,UE,Xy,nX,sX,iX,xE,Yf,Zy,eA,oX,Zs,ya,k=ce(()=>{DE=require("node:path"),ME=w(bt()),i3="harperdb-config.yaml",o3="defaultConfig.yaml",Ky="hdb",a3="config.yaml",c3="harperdb.js",l3="restartHdb.js",cM="HarperDB",Vy="Custom Functions",Yy="Clustering Hub",Wy="Clustering Leaf",u3="Clustering Ingest Service",d3="Clustering Reply Service",f3={HDB:cM,CLUSTERING_HUB:Yy,CLUSTERING_LEAF:Wy,CLUSTERING_INGEST_SERVICE:u3,CLUSTERING_REPLY_SERVICE:d3,CUSTOM_FUNCTIONS:Vy,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"},m3={harperdb:cM,"clustering hub":Yy,"clustering leaf":Wy,"custom functions":Vy,custom_functions:Vy,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},h3={CLUSTERING_HUB_PROC_DESCRIPTOR:Yy,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wy},p3="hdb.pid",E3="data",_3={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Vf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},g3={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},S3={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},lM="support@harperdb.io",T3=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${lM}`,R3="None of the specified records were found.",y3="U+002E",A3=/\//g,b3="U+002F",I3=/U\+002F/g,N3="--max-old-space-size=",Kf="system",w3=".harperdb",zy="keys",O3="hdb_boot_properties.file",C3=6e4,P3=448,Uc="database",vE="schema",L3="transactions",D3="PROCESS_NAME",uM={SETTINGS_PATH_KEY:"settings_path"},M3={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"},v3=250,U3={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gu={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"},x3="info_id",B3={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"},F3="060493.ks",H3=".license",k3={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},q={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},G3={CSV:".csv",JSON:".json"},q3={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},$3={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},V3={[q.INSERT]:q.INSERT,[q.UPDATE]:q.UPDATE,[q.UPSERT]:q.UPSERT,[q.DELETE]:q.DELETE},K3={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"},Y3={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},jy={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"},W3={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"},U={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",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_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},dM={settings_path:uM.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];dM[t.toLowerCase()]=t}z3={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},j3={csv_file_load:"csv_file_load",csv_data_load:q.CSV_DATA_LOAD,csv_url_load:q.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"},Qy={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"},Q3={VERSION_DEFAULT:"2.2.0"},J3={DEVELOPMENT:8192,DEFAULT:512},X3={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Z3=Symbol("metadata"),Jy="__clustering__",fM="__createdtime__",mM="__updatedtime__",eX={CREATED_TIME:fM,UPDATED_TIME:mM},tX=[fM,mM],rX=15984864e5,UE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Xy={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},nX={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},sX=["*","%"],iX="func_val",xE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Zy={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"},eA={HTTP:"http"},oX="3.x.x",Zs={SUCCESS:"success",FAILURE:"failure"},ya={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var xc=M((vIe,EM)=>{"use strict";var hM=require("minimist");EM.exports=aX;function aX(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=pM(process.env),n=pM(hM(process.argv))):(r=process.env,n=hM(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(aX,"assignCMDENVVariables");function pM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(pM,"objKeysToLowerCase")});var tA=M((xIe,_M)=>{"use strict";var cX=require("util"),lX=require("path"),uX=require("child_process"),dX=cX.promisify(uX.execFile),fX=1e3*1e3*10;_M.exports={findPs:mX};async function mX(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await dX("ps",["wwxo",`pid,${r}`],{maxBuffer:fX});for(let s of n.trim().split(`
2
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:lX.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(mX,"findPs")});var Vt=M((FIe,SM)=>{"use strict";var hX="__dbis__",pX="__txns__",EX="__environment_name__",_X="__dbi_defintion__",gX={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"},SX=["__createdtime__","__updatedtime__"],TX="\uFFFF",gM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RX=Object.values(gM);SM.exports={AUDIT_STORE_NAME:pX,INTERNAL_DBIS_NAME:hX,DBI_DEFINITION_NAME:_X,SEARCH_TYPES:gX,TIMESTAMP_NAMES:SX,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:EX,TRANSACTIONS_DBI_NAMES_ENUM:gM,TRANSACTIONS_DBIS:RX,OVERFLOW_MARKER:TX}});var It=M((HIe,NM)=>{"use strict";var Jf=(k(),v(W)),yX=ie(),Rn=oe(),Xf=require("path"),AX=require("minimist"),TM=require("fs-extra"),RM=require("lodash");Rn.initSync();var{CONFIG_PARAMS:Aa,DATABASES_PARAM_CONFIG:Wf,SYSTEM_SCHEMA_NAME:BE}=Jf,zf,jf,Qf;function yM(){if(zf!==void 0)return zf;if(Rn.getHdbBasePath()!==void 0)return zf=Rn.get(Aa.STORAGE_PATH)||Xf.join(Rn.getHdbBasePath(),Jf.DATABASES_DIR_NAME),zf}o(yM,"getBaseSchemaPath");function AM(){if(jf!==void 0)return jf;if(Rn.getHdbBasePath()!==void 0)return jf=IM(BE),jf}o(AM,"getSystemSchemaPath");function bM(){if(Qf!==void 0)return Qf;if(Rn.getHdbBasePath()!==void 0)return Qf=Rn.get(Jf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Xf.join(Rn.getHdbBasePath(),Jf.TRANSACTIONS_DIR_NAME),Qf}o(bM,"getTransactionAuditStoreBasePath");function bX(e,t){let r=Rn.get(Aa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Xf.join(bM(),e.toString())}o(bX,"getTransactionAuditStorePath");function IM(e,t){e=e.toString(),t=t&&t.toString();let r=Rn.get(Jf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Xf.join(yM(),e)}o(IM,"getSchemaPath");function IX(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,AX(process.argv));let n=r[Aa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!yX.isObject(n))throw a;i=n}for(let a of i){let c=a[BE];if(!c)continue;let l=Rn.get(Aa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Wf.PATH];if(u)return RM.set(l,[BE,Wf.TABLES,t,Wf.PATH],u),Rn.setProperty(Aa.DATABASES,l),u;let d=c?.[Wf.PATH];if(d)return RM.set(l,[BE,Wf.PATH],d),Rn.setProperty(Aa.DATABASES,l),d}}let s=r[Aa.STORAGE_PATH.toUpperCase()];if(s){if(!TM.pathExistsSync(s))throw new Error(s+" does not exist");let i=Xf.join(s,e);return TM.mkdirsSync(i),Rn.setProperty(Aa.STORAGE_PATH,s),i}return AM()}o(IX,"initSystemSchemaPaths");function NX(){zf=void 0,jf=void 0,Qf=void 0}o(NX,"resetPaths");NM.exports={getBaseSchemaPath:yM,getSystemSchemaPath:AM,getTransactionAuditStorePath:bX,getTransactionAuditStoreBasePath:bM,getSchemaPath:IM,initSystemSchemaPaths:IX,resetPaths:NX}});var tn=M((GIe,UM)=>{"use strict";var wM=(k(),v(W)),OM=Vt(),CM={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},PM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),LM={500:PM("There was an error processing your request."),400:"Invalid request"},wX=LM[CM.INTERNAL_SERVER_ERROR],OX={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},CX={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},PX={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},LX={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 ${OM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${OM.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"},DX={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${wM.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 ${wM.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"},DM={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"},MX={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},vX={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},UX={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},xX={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},BX={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},MM={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},vM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},FX={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"},HX={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},kX={...DM,...PX,...OX,...MX,...vX,...UX,...xX,...BX,...DX,...MM,...vM,...FX,...HX,...CX};UM.exports={CHECK_LOGS_WRAPPER:PM,HDB_ERROR_MSGS:kX,DEFAULT_ERROR_MSGS:LM,DEFAULT_ERROR_RESP:wX,HTTP_STATUS_CODES:CM,LMDB_ERRORS_ENUM:LX,AUTHENTICATION_ERROR_MSGS:DM,VALIDATION_ERROR_MSGS:MM,ITC_ERRORS:vM}});var yn=M((KIe,kM)=>{"use strict";var GX=tn().LMDB_ERRORS_ENUM,$Ie=require("lmdb"),qX=Vt(),VIe=require("buffer").Buffer,{OVERFLOW_MARKER:xM,MAX_SEARCH_KEY_LENGTH:FE}=qX,BM=["number","string","symbol","boolean","bigint"];function $X(e){if(e=e?.primaryStore||e,!e)throw new Error(GX.ENV_REQUIRED)}o($X,"validateEnv");function VX(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(VX,"stringifyData");function KX(e){return e instanceof Date?e.valueOf():e}o(KX,"convertKeyValueToWrite");function YX(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(BM.includes(typeof e))return e.length>FE?[e.slice(0,FE)+xM]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(BM.includes(typeof i))i.length>FE?r.push(i.slice(0,FE)+xM):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(YX,"getIndexedValues");var HE=0,FM=0;function HM(){FM=Date.now()-performance.now()}o(HM,"adjustStartTime");HM();var WX=6e4;setInterval(HM,WX).unref();function zX(){let e=performance.now()+FM;return e>HE?(HE=e,e):(HE+=488e-6,HE)}o(zX,"getNextMonotonicTime");kM.exports={validateEnv:$X,stringifyData:VX,convertKeyValueToWrite:KX,getNextMonotonicTime:zX,getIndexedValues:YX}});var Zf=M((WIe,GM)=>{"use strict";var jX=(k(),v(W)).OPERATIONS_ENUM,rA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=jX.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};GM.exports=rA});var ge=M((jIe,VM)=>{"use strict";var Su=tn(),QX=Q(),JX=(k(),v(W)),kE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,qM),this.statusCode=n||Su.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Su.DEFAULT_ERROR_MSGS[n]?Su.DEFAULT_ERROR_MSGS[n]:Su.DEFAULT_ERROR_MSGS[Su.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&&QX[s](i)}},nA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},sA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function qM(e,t,r,n=JX.LOG_LEVELS.ERROR,s=null,i=!1){if($M(e))return e;let a=new kE(e,t,r,n,s);return i&&delete a.stack,a}o(qM,"handleHDBError");function Tu(e){this.message=e}o(Tu,"Violation");Tu.prototype=Object.create(Error.prototype);Tu.prototype.constructor=Tu;Tu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var iA=class extends Tu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function $M(e){return e.__proto__.constructor.name===kE.name}o($M,"isHDBError");VM.exports={isHDBError:$M,handleHDBError:qM,ClientError:nA,ServerError:sA,AccessViolation:iA,Violation:Tu,hdbErrors:Su}});var em=M((XIe,zM)=>{"use strict";var JIe=Zf(),GE=(k(),v(W)),oA=ie(),KM=Q(),XX=require("uuid"),{handleHDBError:qE,hdbErrors:ZX}=ge(),{HDB_ERROR_MSGS:$E,HTTP_STATUS_CODES:VE}=ZX;zM.exports=YM;function YM(e,t,r){for(let s=0;s<t.length;s++)WM(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];e6(i,r,e.operation)}}o(YM,"processRows");YM.validateAttribute=WM;function WM(e){if(Buffer.byteLength(String(e))>GE.INSERT_MAX_CHARACTER_SIZE)throw qE(new Error,$E.ATTR_NAME_LENGTH_ERR(e),VE.BAD_REQUEST,void 0,void 0,!0);if(oA.isEmptyOrZeroLength(e)||oA.isEmpty(e.trim()))throw qE(new Error,$E.ATTR_NAME_NULLISH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(WM,"validateAttribute");function e6(e,t,r){if(!e.hasOwnProperty(t)||oA.isEmptyOrZeroLength(e[t])){if(r===GE.OPERATIONS_ENUM.INSERT||r===GE.OPERATIONS_ENUM.UPSERT){e[t]=XX.v4();return}throw KM.error("Update transaction aborted due to record with no hash value:",e),qE(new Error,$E.RECORD_MISSING_HASH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>GE.INSERT_MAX_CHARACTER_SIZE)throw KM.error(e),qE(new Error,$E.HASH_VAL_LENGTH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(e6,"validateHash")});function tv(e){cA=e}function s6(){n6=setInterval(function(){for(let e of aA)if(e.stale){let t=e.getContext()?.url;XM.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},r6).unref()}var lA,JM,XM,ZM,ev,jM,aA,t6,Eo,tm,QM,cA,_o,KE,r6,n6,rm=ce(()=>{lA=w(yn()),JM=w(ge()),XM=w(Q()),ZM=w(oe());k();ev=w(ie()),jM=100,aA=new Set,t6=(0,ev.convertToMS)(ZM.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Eo={CLOSED:0,OPEN:1,LINGERING:2};o(tv,"replicationConfirmation");_o=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Eo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Eo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),aA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(aA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(tm&&!this.overloadChecked&&performance.now()-QM>t6)throw new JM.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Eo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Eo.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,lA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let h=f;h<this.validated;h++)this.writes[h]?.validate?.(this.timestamp);let m;for(let h=f;h<this.validated;h++){let p=this.writes[h];p&&(p.before||p.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let h=0;h<2;h++){let p;for(let _=f;_<this.validated;_++){let g=this.writes[_];if(!g)continue;let R=g[h===0?"before":"beforeIntermediate"];if(R){let T=R();p?p.push?p.push(T):p=[p,T]:p=T}}p&&await(p.push?Promise.all(p):p)}}catch(h){throw this.abort(),h}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Eo.LINGERING:Eo.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<jM>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return tm||(tm=s,QM=performance.now(),tm.then(()=>{tm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,h=this.writes[this.writes.length-1];cA&&h&&i.push(cA(m,h.store.getEntry(h.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+jM/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Eo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},KE=class extends _o{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lA.getNextMonotonicTime)())}getReadTxn(){}},r6=3e4;o(s6,"startMonitoringTxns");s6()});var rv,Vn,uA,Ru=ce(()=>{rv=require("events"),Vn=class extends rv.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new uA;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)}},uA=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Ft(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Eo.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _o;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var nv,Bc=ce(()=>{nv=w(Xs());rm();o(Ft,"transaction");(0,nv._assignPackageExport)("transaction",Ft);Ft.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ft.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var fA={};we(fA,{add:()=>YE,applyReverse:()=>sv,getRecordAtTime:()=>dA,rebuildUpdateBefore:()=>WE});function YE(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 WE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,YE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function sv(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=i6[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=iv}}function dA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Nt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":sv(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===iv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Nt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var i6,iv,zE=ce(()=>{Li();o(YE,"add");YE.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)};i6={add:YE};o(WE,"rebuildUpdateBefore");o(sv,"applyReverse");iv={};o(dA,"getRecordAtTime")});var ei=M(QE=>{var jE=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])jE.logsAtLevel(e)&&(QE[e]=jE[e]);QE.loggerWithTag=e=>jE.loggerWithTag(e,!0);QE.setLogLevel=jE.setLogLevel});var fv={};we(fv,{parse:()=>pA,streamAsJSON:()=>sm,stringify:()=>Fc});function sm(e){return new mA({value:e})}function ov(e){return console.error(e),JSON.stringify(nm(e))}function av(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Fc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===uv)return dv(e);if(t.resolution)return t.resolution.then(()=>Fc(e));throw t}}function dv(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+=dv(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Fc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function pA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),c6.test(e)?o6.parse(e):JSON.parse(e)):null}var cv,hA,lv,o6,a6,uv,nm,mA,c6,EA=ce(()=>{cv=require("stream"),hA=w(Q()),lv=w(require("json-bigint-fixes")),o6=(0,lv.default)({useNativeBigInt:!0}),a6=1e4,uv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw uv};({errorToString:nm}=hA);o(sm,"streamAsJSON");mA=class extends cv.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(hA.warn("Error serializing in stream",c),a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),ov)}catch(s){yield ov(s)}else yield Fc(t)}else yield Fc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);av(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(nm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>a6?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 av(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(nm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(ov,"handleError");o(av,"when");o(Fc,"stringify");o(dv,"jsStringify");c6=/[[,:]\s*-?\d{16,}/;o(pA,"parse")});var yv={};we(yv,{asyncSerialization:()=>RA,contentTypes:()=>TA,findBestSerializer:()=>XE,getDeserializer:()=>To,hasAsyncSerialization:()=>yA,registerContentHandlers:()=>am,serialize:()=>cm,serializeMessage:()=>ba,toCsvStream:()=>JE});function l6(e){try{return e?.[0]===123?SA(e):e}catch{return e}}function am(e){e.register(u6,{serializers:[{regex:/^application\/json$/,serializer:sm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Hc.EncoderStream(om).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?kc.Readable.from((0,Di.encodeIter)(t,om)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),JE(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Di.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Hc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function XE(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let p of d){let _=p.indexOf("=");m[p.substring(0,_)]=p.substring(_+1)}f=+m.q;let h=rn.get(u);if(h){let p=(h.q||1)*f;p>s&&(n=h,i=h.type||u,s=p,a=m)}}if(!n){if(r)throw new pv.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(rn.keys()).join(", "),406);n=rn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function cm(e,t,r){let n=hv&&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 Rs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=XE(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}),gA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,So.createBrotliCompress)({params:{[So.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?So.constants.BROTLI_MODE_TEXT:So.constants.BROTLI_MODE_GENERIC,[So.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>hv?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,So.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function ba(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;go=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=XE(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=im(e);return go?.length>0?(go.length===1?go[0]:Promise.all(go)).then(()=>ba(e,t,!0)):n}finally{go=void 0}}function RA(e){if(go)go.push(e);else throw new Error("Unable to serialize asynchronously")}function yA(){return!!go}function d6(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 m6(e){return f6.includes(e)}function h6(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function To(e="",t=!1){let r=h6(e),n=r.type&&rn.get(r.type)?.deserialize||p6(r);return t?s=>d6(s).then(n):n}function p6(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!m6(e.parameters.charset)&&gA.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 SA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function E6(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 JE(e,t){let r=kc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new gv.Transform(n,s);return r.pipe(i)}var Di,Hc,So,pv,kc,Ev,_A,_v,gA,gv,Sv,Tv,im,SA,om,rn,TA,mv,Rv,u6,hv,go,f6,Ro=ce(()=>{EA();Di=require("msgpackr"),Hc=require("cbor-x"),So=require("zlib"),pv=w(ge()),kc=w(require("stream"));Dr();Ev=w(Xs()),_A=w(oe());k();_v=w(require("yaml")),gA=w(ei());Kn();gv=require("json2csv"),Sv=w(require("fastify-plugin")),Tv=_A.default.get(U.SERIALIZATION_BIGINT)!==!1,im=Tv?Fc:JSON.stringify,SA=Tv?pA:JSON.parse,om={useRecords:!1,useToJSON:!0},rn=new Map,TA=rn;Le.contentTypes=TA;(0,Ev._assignPackageExport)("contentTypes",TA);rn.set("application/json",{serializeStream:sm,serialize:im,deserialize(e){return SA(e)},q:.8});mv=new Hc.Encoder(om);rn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Hc.EncoderStream(om).end(e)},serialize:mv.encode,deserialize:mv.decode,q:1});rn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kc.Readable.from((0,Di.encodeIter)(e,om)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});rn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),JE(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]),JE(e,e?.getColumns?.())},q:.1});rn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return kc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});rn.set("text/yaml",{serialize(e){return _v.stringify(e,{aliasDuplicateObjects:!1})},q:.7});rn.set("text/event-stream",{serializeStream:o(function(e){return kc.Readable.from(E6(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
3
3
  `),e.data){let r=e.data;typeof r=="object"&&(r=im(r)),t+="data: "+r+`
4
4
  `}return e.id&&(t+="id: "+e.id+`
5
5
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -8,124 +8,124 @@ var W4=Object.create;var qf=Object.defineProperty;var z4=Object.getOwnPropertyDe
8
8
 
9
9
  `:`data: ${e}
10
10
 
11
- `},"serialize"),compressible:!1,q:.8});nn.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()}});Rv={type:"application/json",serializeStream:sm,serialize:im,deserialize:c6,q:.5};nn.set("*/*",Rv);nn.set("",Rv);o(c6,"tryJSONParse");o(am,"registerContentHandlers");l6=(0,Sv.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=XE(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(XE,"findBestSerializer");hv=_A.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(cm,"serialize");o(ba,"serializeMessage");o(RA,"asyncSerialization");o(yA,"hasAsyncSerialization");o(u6,"streamToBuffer");d6=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(f6,"isBufferEncoding");o(m6,"parseContentType");o(To,"getDeserializer");o(h6,"deserializerUnknownType");o(p6,"transformIterable");o(JE,"toCsvStream")});var o_={};Oe(o_,{Blob:()=>Rs,blobsWereEncoded:()=>Gc,cleanupOrphans:()=>C6,databasePaths:()=>bA,decodeBlobsWithWrites:()=>i_,decodeFromDatabase:()=>Ao,decodeWithBlobCallback:()=>fm,deleteBlob:()=>r_,deleteBlobsInObject:()=>Na,deleteRootBlobPathsForDB:()=>wA,encodeBlobsAsBuffers:()=>N6,encodeBlobsWithFilePath:()=>s_,findBlobsInObject:()=>kc,getFileId:()=>n_,getFilePathForBlob:()=>Lv,getRootBlobPathsForDB:()=>Iu,isSaving:()=>T6,saveBlob:()=>dm,setDeletionDelay:()=>S6,startPreCommitBlobsForRecord:()=>OA});function Cv(){}function r_(e){let t=Lv(e);t&&setTimeout(()=>{(0,qe.unlink)(t,r=>{r&&Bt.default.debug?.("Error trying to remove blob file",r)})},Pv)}function S6(e){Pv=e}function dm(e,t=!1){let r=vr.get(e);if(!r)r={storageIndex:0,fileId:null,store:bn},vr.set(e,r);else{if(r.fileId)return r;r.store=bn}return r.deleteOnFailure=t,y6(r),r.source?AA(e,r.source,r):r.contentBuffer?R6(e,r):AA(e,Ia.Readable.from(e.stream()),r),r}function AA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,qe.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(_6),h=(0,t_.createDeflate)(),(0,Ia.pipeline)(t,h,f,_)):(m||f.write(E6),(0,Ia.pipeline)(t,f,_));function p(g){let y=BigInt(g),T=new Uint8Array(Ar),R=new DataView(T.buffer);return y|=BigInt(a?NA:Ov)<<48n,R.setBigInt64(0,y),T}o(p,"createHeader");function _(g){let y=f.fd;if(g){if(i.unlock(d,0),y&&((0,qe.close)(y),f.fd=null),r.deleteOnFailure)(0,qe.unlink)(n,T=>{T&&Bt.default.debug?.("Error while deleting aborted blob file",T)});else try{if((0,qe.statSync)(n).size===0){let T=Buffer.from(g.toString());(0,qe.writeFile)(n,Buffer.concat([p(BigInt(T.length)+0xff000000000000n),T]),R=>{R&&Bt.default.debug?.("Error write error message to blob file",R)})}}catch(T){Bt.default.debug?.("Error checking blob file after abort",T)}u(g)}else{if(!m){m=!0;let T=h?h.bytesWritten:f.bytesWritten-Ar;e.size=T,(0,qe.write)(y,p(T),0,Ar,0,_);return}i.unlock(d,0),c?(0,qe.fdatasync)(y,T=>{T&&u(T),l(),(0,qe.close)(y),f.fd=null}):(l(),(0,qe.close)(y),f.fd=null)}}o(_,"finished")}),e}function n_(e){return vr.get(e)?.fileId}function T6(e){return vr.get(e)?.saving}function Lv(e){let t=vr.get(e);return t?.fileId&&bu(t)}function Iu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=bA.get(e);if(!t){if(!e.databaseName)return Bt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,um.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,vi.join)(n,e.databaseName)):t=[(0,vi.join)((0,um.getHdbBasePath)(),"blobs",e.databaseName)],bA.set(e,t)}return t}async function wA(e){let t=Iu(e);t&&await Promise.all(t.map(r=>Dv(r)))}async function Dv(e){if((0,qe.existsSync)(e)){for(let t of await(0,In.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Dv((0,vi.join)(e,t.name));else try{await(0,In.unlink)((0,vi.join)(e,t.name))}catch(r){Bt.default.warn?.("Error deleting file",r)}try{await(0,In.rmdir)(e)}catch(t){Bt.default.warn?.("Error deleting directory",t)}}}function bu({storageIndex:e,fileId:t,store:r}){let n=Iu(r);return(0,vi.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 R6(e,t){let r=t.contentBuffer,n=r.length;if(!(n<wv))return e.size=n,AA(e,Ia.Readable.from([r]),t)}function y6(e){let t=Iu(e.store),r=A6(),n=t?.length>1?b6(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bu(e),a=(0,vi.dirname)(i);(0,qe.existsSync)(a)||(0,IA.ensureDirSync)(a),e.filePath=i}function A6(){let e=Iv.get(bn);if(!e){let t=0,r=Iu(bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,qe.existsSync)(n))for(let c of(0,qe.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,vi.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(bn.getUserSharedBuffer("blob-file-id",e.buffer)),Iv.set(bn,e)}return Number(Atomics.add(e,0,1n))}function b6(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(e_);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,I6(e)),e.frequencyTable[t%e_]}async function I6(e){if(!In.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,In.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,IA.ensureDirSync)(s),a=await(0,In.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(e_),n=t.map(s=>1/s);for(let s=0;s<e_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function s_(e,t,r){Ru=t,bn=r,Gc=!1;try{return e()}finally{Ru=void 0,bn=void 0}}function N6(e){$r=[];let t;try{t=e()}catch(n){throw $r=void 0,n}let r=$r.length<2?$r[0]:Promise.all($r);return $r=void 0,r?r.then(()=>e()):t}function i_(e,t,r){try{$r=[],yo=r,bn=t,e()}catch(s){throw yo=void 0,$r=void 0,s}yo=void 0;let n=$r.length<2?$r[0]:Promise.all($r);return $r=void 0,n}function fm(e,t,r){bn=r;try{return yo=t,e()}finally{yo=void 0}}function Ao(e,t){return bn=t,e()}function Na(e){kc(e,t=>{r_(t)})}function kc(e,t){if(e instanceof Rs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&kc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&kc(e[r],t)}}function OA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Au&&s.saveBeforeCommit){bn=t;let i=dm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function O6(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function C6(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,a=Iu(r);if(a)for(let d of a)await c(d);return await l(),Bt.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,qe.existsSync)(d))return;for(let f of await(0,In.readdir)(d,{withFileTypes:!0})){let m=(0,vi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Bt.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let h=(0,Nv.getHeapStatistics)();h.used_heap_size>h.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Bt.default.error?.("Error searching path for blobs",d,f)}}o(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,um.get)(U.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Bt.default.warn?.("Checking for references to potential orphaned blobs in table",m);let h=e[m];for(let p of h.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{p.metadataFlags&Vr&&p.value&&u(p.value),d++%f===0?await(0,yu.setTimeout)(1):await(0,yu.setImmediate)()}catch(_){Bt.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",_)}}Bt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let h=At(m),p=n.tableStores[h.tableId],_=p?.getEntry(h.recordId);(!_||_.version!==h.version||!_.value)&&u(h.getValue(p)),d++%f===0?await(0,yu.setTimeout)(1):await(0,yu.setImmediate)()}catch(h){Bt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",h)}Bt.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,In.unlink)(m)}catch(h){Bt.default.warn?.("Error deleting file",h)}Bt.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}o(l,"removePathsThatAreNotReferenced");function u(d){kc(d,f=>{if(f instanceof Au){let m=vr.get(f);if(m.fileId!=null){let h=bu(m);i.has(h)&&i.delete(h)}}})}o(u,"checkObjectForReferences")}var Mi,In,qe,t_,Ia,IA,um,vi,Bt,Nv,yu,wv,Ar,Ov,NA,Av,E6,_6,bv,vr,yo,Rs,Ru,$r,bn,Gc,lm,ZE,g6,Au,Pv,bA,Iv,e_,w6,Kn=ue(()=>{Mi=require("msgpackr"),In=require("node:fs/promises"),qe=require("node:fs"),t_=require("node:zlib"),Ia=require("node:stream"),IA=require("fs-extra"),um=w(oe());k();vi=require("path"),Bt=w(ei());Ro();Li();Nv=require("node:v8"),yu=require("node:timers/promises"),wv=8192,Ar=8,Ov=0,NA=1,Av=255,E6=new Uint8Array([0,Ov,255,255,255,255,255,255]),_6=new Uint8Array([0,NA,255,255,255,255,255,255]),bv=0xffffffffffff,vr=new WeakMap,Rs=global.Blob||O6(),Gc=!1,lm=new Uint8Array(8),ZE=new DataView(lm.buffer),g6=6e4;o(Cv,"InstanceOfBlobWithNoConstructor");Cv.prototype=Rs.prototype;Au=class e extends Cv{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=vr.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):(yA()&&RA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=vr.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=bu(t),a,c=o(async()=>{let l,u=Ar;try{if(l=await(0,In.readFile)(i),l.length>=Ar){l.copy(lm,0,0,Ar);let f=ZE.getBigUint64(0);if(Number(f>>48n)===Av)throw new Error("Error in blob: "+l.subarray(Ar));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<bv&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,h=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!0,p(c()))))return a=!0,m.unlock(h,0),p(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===NA?new Promise((f,m)=>{(0,t_.deflate)(l.subarray(Ar),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(Ar))},"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=vr.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(_){_.enqueue(r),_.close()}});let i=bu(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((y,T)=>{(0,qe.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Bt.default.debug?.("File does not exist yet, waiting for it to be created",i,_),_-- >0))return setTimeout(()=>{p(),g(y,T)},20).unref();T(R),h.#e?.forEach(O=>O(R))}else a=N,y(N)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,y=100;return new Promise(o(function T(R,N){function O(Z){(0,qe.close)(a),clearTimeout(d),u&&u.close(),N(Z),h.#e?.forEach(G=>G(Z))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,qe.read)(a,F,0,F.length,c,(Z,G,Y)=>{if(l+=G,Z)return O(Z);if(c===0){if(G<Ar){y-- >0&&f!==!1?(p(),Bt.default.debug?.("File was empty, waiting for data to be written",i,y),setTimeout(()=>T(R,N),20).unref()):(Bt.default.debug?.("File was empty, throwing error",i,y),O(new Error(`Blob ${t.fileId} was empty`)));return}Y.copy(lm,0,0,Ar);let q=ZE.getBigUint64(0);if(Number(q>>48n)===Av)return O(new Error("Error in blob: "+Y.subarray(Ar,G)));if(g=Number(q&0xffffffffffffn),g<bv&&h.size!==g&&(h.size=g,h.#t))for(let K of h.#t)K(g);Y=Y.subarray(Ar,G),l-=Ar}else if(G===0){let q=Buffer.allocUnsafe(8);return(0,qe.read)(a,q,0,Ar,0,K=>{if(K)return O(K);if(lm.set(q),g=Number(ZE.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},g6).unref():(u=(0,qe.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(R,N))}),T(R,N)):m?O(new Error("Blob is incomplete")):(m=!0,T(R,N));return}(0,qe.close)(a),_.close(),R()})}else Y=Y.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,T(R,N);s&&l>=s&&(l>s&&(Y=Y.subarray(0,s-c)),l=g=s),n&&n>c&&(Y=Y.subarray(n-c))}c+=G;try{_.enqueue(Y)}catch(q){return Bt.default.debug?.("Error enqueuing chunk",q),R()}l===g&&((0,qe.close)(a),_.close()),R()})},"readMore"))},"pull"),cancel(){(0,qe.close)(a),clearTimeout(d),u&&u.close()}});function p(){if(f===void 0){let _=t.store,g=t.fileId+":blob";f=!_.attemptLock(g,0,()=>{f=!1}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=vr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};vr.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};vr.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return this.saveBeforeCommit=!0,Promise.resolve()}get written(){return vr.get(this)?.saving??Promise.resolve()}},Pv=500;o(r_,"deleteBlob");o(S6,"setDeletionDelay");global.createBlob=function(e,t){let r=new Au(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(vr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Ia.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Ia.Readable.from(e);else throw new Error("Invalid source type");return r};o(dm,"saveBlob");o(AA,"writeBlobWithStream");o(n_,"getFileId");o(T6,"isSaving");o(Lv,"getFilePathForBlob");bA=new Map;o(Iu,"getRootBlobPathsForDB");o(wA,"deleteRootBlobPathsForDB");o(Dv,"rimrafSteadily");o(bu,"getFilePath");o(R6,"writeBlobWithBuffer");o(y6,"generateFilePath");Iv=new Map;o(A6,"getNextFileId");e_=128;o(b6,"getNextStorageIndex");o(I6,"createFrequencyTableForStoragePaths");o(s_,"encodeBlobsWithFilePath");o(N6,"encodeBlobsAsBuffers");o(i_,"decodeBlobsWithWrites");o(fm,"decodeWithBlobCallback");o(Ao,"decodeFromDatabase");o(Na,"deleteBlobsInObject");o(kc,"findBlobsInObject");o(OA,"startPreCommitBlobsForRecord");w6=new Mi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Mi.addExtension)({Class:Rs,type:11,unpack:o(function(e){let t=w6.unpack(e),r=new Au;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(vr.set(r,{storageIndex:t[1],fileId:t[2],store:bn}),yo)return yo(r)??r;if(!bn)throw new Error("No store specified, cannot load blob from storage")}else vr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=vr.get(e);if(Ru!==void 0&&(Gc=!0,t?.recordId!==void 0&&t.recordId!==Ru))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<wv)return r.size=t.contentBuffer.length,(0,Mi.pack)([r,t.contentBuffer])}if(Ru!==void 0){if(t=dm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Ru,(0,Mi.pack)([r,t.storageIndex,t.fileId])}if(t){if(yo)return yo(e),(0,Mi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,qe.readFileSync)(bu(t));if(n.length>=Ar&&(n.copy(lm,0,0,Ar),Number(ZE.getBigUint64(0)&0xffffffffffffn)===n.length-Ar))return Buffer.concat([(0,Mi.pack)([r]),n]);if($r)$r.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&$r)return $r.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Mi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(O6,"polyfillBlob");o(C6,"cleanupOrphans")});var Bv={};Oe(Bv,{onStorageReclamation:()=>mm,runReclamationHandlers:()=>DA,setAvailableSpaceRatioGetter:()=>L6});function mm(e,t,r){(r||(0,c_.getWorkerIndex)()===(0,c_.getWorkerCount)()-1)&&(a_.has(e)||a_.set(e,[]),a_.get(e).push({priority:0,handler:t}),LA||(LA=setTimeout(DA,vv).unref()))}async function DA(){for(let[e,t]of a_)try{let r=await xv(e),n=P6/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(PA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){PA.default.error?.("Error running storage reclamation handlers",r)}LA=setTimeout(DA,vv).unref()}function L6(e){xv=e??Uv}var CA,c_,PA,l_,Mv,a_,P6,vv,LA,Uv,xv,u_=ue(()=>{CA=require("node:fs/promises"),c_=w(rt()),PA=w(ei());k();l_=w(oe()),Mv=w(ie());l_.default.initSync();a_=new Map,P6=l_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,vv=(0,Mv.convertToMS)(l_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(mm,"onStorageReclamation");Uv=o(async e=>{if(CA.statfs){let t=await(0,CA.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"),xv=Uv;o(DA,"runReclamationHandlers");o(L6,"setAvailableSpaceRatioGetter")});var Qv={};Oe(Qv,{ACTION_32_BIT:()=>p_,ACTION_64_BIT:()=>U6,AUDIT_STORE_OPTIONS:()=>Em,Decoder:()=>$c,HAS_BLOBS:()=>Vr,HAS_CURRENT_RESIDENCY_ID:()=>Vc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Sm,HAS_ORIGINATING_OPERATION:()=>gm,HAS_PREVIOUS_RESIDENCY_ID:()=>Kc,REMOTE_SEQUENCE_UPDATE:()=>E_,createAuditEntry:()=>Yc,getLastRemoved:()=>M6,openAuditStore:()=>m_,readAuditEntry:()=>At,removeAuditEntry:()=>h_,setAuditRetention:()=>v6,transactionKeyEncoder:()=>Yv});function m_(e){let t=e.auditStore=e.openDB(MA.AUDIT_STORE_NAME,{create:!1,...Em});t||(t=e.auditStore=e.openDB(MA.AUDIT_STORE_NAME,Em),Hv(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=UA;mm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,h;try{for(let{key:p,value:_}of t.getRange({start:1,snapshot:!1,end:Date.now()-vA/(1+i*i)})){try{m=h_(t,p,_)}catch(g){Nu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=D6){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,vA/10):(Hv(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,pm.getWorkerIndex)()===(0,pm.getWorkerCount)()-1&&c(),(0,pm.getWorkerIndex)()===0&&!Fv)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Fv=!0,Nu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function h_(e,t,r){let n=x6(r),s;if(n&Vr){s=At(r);let i=e.tableStores[s.tableId];if(i){let a=s.type==="message"?null:i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Ao(()=>Na(s.getValue(i)),i.rootStore)}}if((n&15)===xA){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Hv(e,t){BA[0]=t,e.put(Symbol.for("last-removed"),Wv)}function M6(e){let t=e.get(Symbol.for("last-removed"));if(t)return Wv.set(t),BA[0]}function v6(e,t=UA){vA=e,UA=t}function Yc(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=zv[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?wa.setFloat64(0,n):ys.set(FA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}y(s),y(t),g(r),wa.setFloat64(p,e),p+=8,l&Vc&&y(u),l&Kc&&y(d),l&Sm&&(wa.setFloat64(p,f),p+=8),l&gm&&y(jv[m]),i?g(i):ys[p++]=0,l?wa.setUint32(n?8:0,h|l|3221225472):ys[n?8:0]=h;let _=ys.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let R=p;p+=1,p=(0,qc.writeKey)(T,ys,p);let N=p-R-1;N>127?N>16383?(Nu.error("Key or username was too large for audit entry",T),p=R+1,ys[R]=0):(ys.copyWithin(R+2,R+1,p),wa.setUint16(R,N|32768),p++):ys[R]=N}function y(T){T<128?ys[p++]=T:T<16384?(wa.setUint16(p,T|32768),p+=2):T<1056964608?(wa.setUint32(p,T|3221225472),p+=4):(ys[p]=255,wa.setUint32(p+1,T),p+=5)}}function x6(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 $c(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new $c(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,h,p,_;if(i&Vc&&(m=n.readInt()),i&Kc&&(h=n.readInt()),i&Sm&&(p=n.readFloat64()),i&gm){let R=n.readInt();_=jv[R]}l=n.readInt();let g=n.position,y=n.position+=l,T;return{type:zv[i&7],tableId:c,nodeId:a,get recordId(){return(0,qc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return y>g?(0,qc.readKey)(e,g,y):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(R,N,O){if(i&d_||i&hm&&!N)return T||(T=Ao(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),T;if(i&hm&&O)return dA(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(d_|hm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return Nu.error("Reading audit entry error",n,e),{}}}var qc,f_,MA,pm,Kv,Nu,ys,wa,Yv,Em,vA,D6,BA,Wv,UA,Fv,d_,hm,kv,xA,Gv,qv,$v,Vv,p_,U6,E_,Vc,Kc,gm,Sm,Vr,zv,jv,$c,Li=ue(()=>{qc=require("ordered-binary"),f_=w(oe()),MA=w(qt());k();pm=w(rt()),Kv=w(ie());Wc();Nu=w(Q());zE();Kn();u_();(0,f_.initSync)();ys=Buffer.alloc(2816),wa=new DataView(ys.buffer,ys.byteOffset,2816),Yv={writeKey(e,t,r){return e===_m?(t.set(_m,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,qc.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,qc.readKey)(e,t,r)}},Em={encoding:"binary",keyEncoder:Yv},vA=(0,Kv.convertToMS)((0,f_.get)(U.LOGGING_AUDITRETENTION))||86400*3,D6=1e3,BA=new Float64Array(1),Wv=new Uint8Array(BA.buffer),UA=1e4,Fv=!1;o(m_,"openAuditStore");o(h_,"removeAuditEntry");o(Hv,"updateLastRemoved");o(M6,"getLastRemoved");o(v6,"setAuditRetention");d_=16,hm=32,kv=1,xA=2,Gv=3,qv=4,$v=5,Vv=6,p_=14,U6=15,E_=11,Vc=512,Kc=1024,gm=2048,Sm=4096,Vr=8192,zv={put:kv|d_,[kv]:"put",delete:xA,[xA]:"delete",message:Gv|d_,[Gv]:"message",invalidate:qv|hm,[qv]:"invalidate",patch:$v|hm,[$v]:"patch",relocate:Vv,[Vv]:"relocate"},jv={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Yc,"createAuditEntry");o(x6,"readAction");o(At,"readAuditEntry");$c=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var tU={};Oe(tU,{ENTRY:()=>F6,HAS_EXPIRATION:()=>T_,HAS_RESIDENCY_ID:()=>$A,HAS_STRUCTURE_UPDATE:()=>R_,LAST_TIMESTAMP_PLACEHOLDER:()=>_m,LOCAL_TIMESTAMP:()=>B6,METADATA:()=>wu,NEW_TIMESTAMP_PLACEHOLDER:()=>Xv,NO_TIMESTAMP:()=>g_,PENDING_LOCAL_TIME:()=>VA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>FA,RecordEncoder:()=>qA,TIMESTAMP_ASSIGN_LAST:()=>k6,TIMESTAMP_ASSIGN_NEW:()=>Zv,TIMESTAMP_ASSIGN_PREVIOUS:()=>eU,TIMESTAMP_PLACEHOLDER:()=>__,TIMESTAMP_RECORD_PREVIOUS:()=>HA,entryMap:()=>Oa,handleLocalTimeForGets:()=>y_,lastMetadata:()=>ct,recordUpdater:()=>KA,removeEntry:()=>Qc});function q6(){return ym[0]=ym[0]^64,H6.getFloat64(0)}function y_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[wu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Oa.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Oa.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[wu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,jc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<jc.length;u++){let d=jc[u].deref();(!d||d.isDone||d.isCommitted)&&jc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function KA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){l==null?zc=g_:f?zc=i?.localTime?HA|eU:g_:zc=l?i?.localTime?HA|16384:Zv|16384:g_;let h=u?.expiresAt;if(h>=0&&(c|=T_),Rm=c,kA=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:zc>0},_,g=0;try{let y=i?.residencyId,T=u?.residencyId;T&&(GA=T,Rm|=$A,g|=Vc),y!==T&&(g|=Kc,y||(y=0)),c&T_&&(g|=Sm),u?.originatingOperation&&(g|=gm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Vr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Na(i.value);let R;if(s!==void 0&&(R=s_(()=>e.put(n,s,p),n,e.rootStore),Gc&&(g|=Vr)),l){let N=u?.user?.username;if(m&&(s_(()=>e.encoder.encode(m),n,e.rootStore),Gc&&(g|=Vr)),e.encoder.hasStructureUpdate&&(g|=R_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let Z=At(F).previousLocalTime;return R=r.put(O,Yc(a,t,n,Z,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Tm,g,T,y,h),{ifVersion:_}),R}}R=r.put(s===void 0?Xv:_m,Yc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Tm,g,T,y,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:_})}return R}catch(y){throw y.message+=" id: "+n+" options: "+p,y}}}function Qc(e,t,r){if(t)return t.value&&t.metadataFlags&Vr&&!e.auditStore?.getBinaryFast(t.localTime)&&Na(t.value),e.remove(t.key,r)}var Jv,S_,__,_m,FA,Xv,B6,wu,F6,ym,H6,g_,Zv,k6,eU,HA,T_,$A,VA,R_,Oa,G6,Tm,zc,Rm,kA,GA,ct,qA,jc,Wc=ue(()=>{Jv=require("msgpackr");Li();S_=w(Q());Kn();Kn();__=new Uint8Array([1,1,1,1,4,64,0,0]),_m=new Uint8Array([1,1,1,1,1,0,0,0]),FA=new Uint8Array([1,1,1,1,3,64,0,0]),Xv=new Uint8Array([1,1,1,1,0,64,0,0]),B6=Symbol("local-timestamp"),wu=Symbol("metadata"),F6=Symbol("entry"),ym=new Uint8Array(8),H6=new DataView(ym.buffer,0,8),g_=0,Zv=0,k6=1,eU=3,HA=4,T_=16,$A=32,VA=1,R_=256,Oa=new WeakMap,zc=0,Rm=-1,kA=-1,GA=0,ct=null,qA=class extends Jv.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Oa.get(this)?.version}getExpiresAt(){return Oa.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(zc||Rm>=0){let c=0,l=zc;l&&(c+=8,zc=0);let u=Rm,d=kA,f=GA;u>=0&&(c+=4,Rm=-1,d>=0&&(c+=8,kA=-1),f&&(c+=4,GA=0));let m=G6=n.call(this,i,a|2048|c);Tm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(__[4]=l,__[5]=l>>8,m.set(__,h),h+=8),Gc&&(u|=Vr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|p_<<24),h+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(h,d),h+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,f)),m}else return Tm=n.call(this,i,a),Tm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(ym,0,c),c+=8;else for(let m=0;m<8;m++)ym[m]=t[c++];l=q6(),i=t[c]}let u,d;i<32&&(i===p_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&T_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&$A&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Ao(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[wu]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:Ao(()=>super.decode(t,r),this.rootStore)}catch(c){return S_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(q6,"getTimestamp");o(y_,"handleLocalTimeForGets");jc=[];setInterval(()=>{for(let e=0;e<jc.length;e++){let t=jc[e].deref();!t||t.isDone||t.isCommitted?jc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(S_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):S_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(KA,"recordUpdater");o(Qc,"removeEntry")});function zA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let h=1;h<e.length;h++){let p=e[h],_=u(p);f=f.concat(_)}let m=new Set;return f.filter(h=>{let p=h.key??h;return m.has(p)?!1:(m.add(p),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?zA(f.conditions,f.operator,r,n,s,i,a,c):Lu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,h){return f.map((p,_)=>{if(p.conditions){let T=p.operator==="or",R=d(p.conditions,!T,h);return T?(N,O)=>R.some(F=>F(N,O)):(N,O)=>R.every(F=>F(N,O))}let g=(p.attribute||p[0])===r.primaryKey,y=bm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=J6(r.primaryStore,p.estimated_count,h)),y}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Lu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new Kr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=xi(n.attributes,R);if(N.relationship){if(c.length<2)throw new Kr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,Z=Lu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let G=!!xi(O.attributes,N.relationship.to)?.elements;Z=W6(Z,N,O.primaryStore,G,F)}if(N.relationship.from){let G=o(Y=>(Y?.key!==void 0&&(Y=Y.key),Lu({attribute:N.relationship.from,value:Y},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,Z=z6(Z,N,O.primaryStore,F,G)):Z=Z.flatMap(G)}return Z}else if(c.length===1)c=c[0];else throw new Kr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,h,p,_;l instanceof Date&&(l=l.getTime());let g;switch(jA[u]||u){case"lt":m=!0,h=l;break;case"le":m=!0,h=l,p=!0;break;case"gt":m=l,_=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,h=l.slice(0),h[h.length-1]=Ui.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),h=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),h=l[1],h instanceof Date&&(h=h.getTime()),p=u==="gele"||u==="gtle"||u==="between",_=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,h=l,p=!0;break;case"ne":if(l===null){m=l,_=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new Kr.ClientError(`Unknown query comparator "${u}"`)}let y;if(typeof m=="string"&&m.length>As.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,_=!1,y=bm(e,n,null,i,d)),typeof h=="string"&&h.length>As.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,p=!0,y=y??bm(e,n,null,i,d)),r){let R=m;m=h,h=R,R=!_,_=!p,p=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new Kr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Kr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new Kr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Kr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(y=y??bm(e,n,null,i,d),!y)throw new Kr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:m,end:h,inclusiveEnd:p,exclusiveStart:_,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(T).map(y?function({key:N,value:O}){return this?.isSync?O&&y(O)?N:Ca.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(O&&y(O)?N:Ca.SKIP)}catch(G){Z(G)}}))}:N=>N.value==null&&!(N.metadataFlags&(Nn|Jc))?Ca.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...O}=R,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return R}):f.getRange(T).map(y?function({key:R,value:N}){let O;return typeof R=="string"&&R.length>As.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:R},this.isSync?y(O)?N:Ca.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(y(O)?N:Ca.SKIP)}catch(G){Z(G)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&y(N)?R:Ca.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&y(N)?R:Ca.SKIP)}catch(Z){F(Z)}}))})}function xi(e,t){if(Array.isArray(t))if(t.length>1){let r=xi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?xi(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 W6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function z6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function bm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=xi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=bm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,h?.[d]?.joined,c[1]===m.primaryKey,i);if(!p)return;if(h){h.filters||(h.filters=[]),h.filters.push(p);return}let _=t.propertyResolvers?.[d];_.to&&(p.to=_.to);let g,y=o((R,N)=>{let O,F;return _?_.returnDirect?(O=_(R,r,N),F=ct):(F=_(R,r,N,!0),Array.isArray(F)?(O=F.map(Z=>Z.value),F=null):O=F?.value):O=R[d],{subObject:O,subEntry:F}},"getSubObject"),T=o((R,N)=>{if(_&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let Y of p.idFilter.idSet)e={attribute:_.from??t.primaryKey,value:Y};g=u(_.from??t.primaryKey,p.idFilter,!0,!0)}else g=u(_.from??t.primaryKey,p.idFilter,!1,!0);let G=g(R);return g.idFilter&&(T.idFilter=g.idFilter),G}let{subObject:O,subEntry:F}=y(R,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let Y=y(G).subObject;return Array.isArray(Y)?Y.filter(p).map(q=>q[m.primaryKey]):Y}}),O.some(p)):p(O,F):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),jA[a]||a){case As.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Ui.compareKeys)(d,l[0])>=0&&(0,Ui.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Ui.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Ui.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Ui.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Ui.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Ui.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Kr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,h){let p;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&b_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function y(T){let R=T[d],N;if(typeof R!="object"||!R||h?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!y.idFilter&&++_/g*i>p)){let O=Lu(e,r.transaction.getReadTxn(),!1,t),F;y.to?F=O.flatMap(G=>t.primaryStore.get(G)[y.to]):F=O.map(Du);let Z=new Set(F);y.idFilter=G=>Z.has(Du(G)),y.idFilter.idSet=Z}return N}return o(y,"recordFilter"),s&&(y.idFilter=f),y}o(u,"attributeComparator")}function b_(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/bo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=jA[n]||n,n===As.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=xi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=b_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*bo(e.indices[i.relationship.from])/(bo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=bo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=K6*bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=V6*bo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=bo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=$6*bo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function I_(e,t){if(e)if(Io=e,Ou.lastIndex=0,j6.test(e))try{if(t&&(t.conditions=[]),ti=t??new Pu,Am(ti,""),Ur!==Io.length&&$t("Unable to parse query, unexpected end of query"),ti.parseErrorMessage&&(ti.parseError=new YA(t.parseErrorMessage),!t))throw ti.parseError;return ti}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Ur} in '${Io}'`,ti.parseErrorMessage&&(r.message+=", "+ti.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function $t(e){let t=`${e} at position ${Ur}`;ti.parseErrorMessage=ti.parseErrorMessage?ti.parseErrorMessage+", "+t:t}function Am(e,t){let r=Ou,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Io);){Ur=r.lastIndex;let[,d,f]=n;a?(d&&$t(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:$t(`invalid FIQL operator ${d}`),l=rU):(l=decodeURIComponent,i="equals",d||$t("attribute must be specified before equality comparator"),s=Cu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=Y6[f],l=WA[i]?rU:decodeURIComponent,d||$t(`attribute must be specified before comparator ${f}`),s=Cu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&$t(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),$t(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||$t("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&nU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else A_(e,u),e.conditions.push(p)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?$t("conditions/comparisons are not allowed in a property list"):e.push(Cu(d)),s=void 0;break;case"(":Ou.lastIndex=Ur;let h=Am(d?[]:new Pu,")");switch(d){case"":A_(e,u),e.conditions.push(h);break;case"limit":switch(h.length){case 1:e.limit=+h[0];break;case 2:e.offset=+h[0],e.limit=h[1]-e.offset;break;default:$t("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(h[0])&&h.length===1&&!h[0].name?(e.select=h[0],e.select.asArray=!0):h.length===1?e.select=h[0]:h.length===2&&h[1]===""?e.select=h.slice(0,1):e.select=h;break;case"group-by":$t("group by is not implemented yet");case"sort":e.sort=sU(h);break;default:$t(`unknown query function call ${d}`)}Io[Ur]===","?r.lastIndex=++Ur:a=!0,s=null;break;case"{":e.conditions&&$t("property sets are not allowed in a queries"),d||$t("property sets must have a defined parent property name"),Ou.lastIndex=Ur,m=Am([],"}"),m.name=d,e.push(m),Io[Ur]===","?r.lastIndex=++Ur:a=!0;break;case"[":if(Ou.lastIndex=Ur,d?(m=Am(new Pu,"]"),m.name=d):m=Am(e.conditions?new Pu:[],"]"),e.conditions)if(A_(e,u),Io[Ur]==="="){l=decodeURIComponent,i="equals",s=Cu(d),r.lastIndex=++Ur;break}else e.conditions.push(m),s=null;else e.push(m);Io[Ur]===","?r.lastIndex=++Ur:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let p={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&nU(p,d),A_(e,u),e.conditions.push(p)}else d&&$t("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Cu(d));return e}else $t(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:$t(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?Q6:Ou,r.lastIndex=Ur),Ur===Io.length)return e}t&&$t(`expected '${t}', but encountered end of string`)}function A_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&$t("Can not mix operators within a condition grouping"):e.operator=t)}function Cu(e){return e.indexOf(".")>-1?e.split(".").map(Cu):decodeURIComponent(e)}function rU(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 Kr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function nU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Kr.ClientError("wildcard can only be used at the end of a string")}function sU(e){let t=iU(e[0]);return e.length>1&&(t.next=sU(e.slice(1))),t}function iU(e){if(Array.isArray(e)){let t=iU(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}}$t(`Unknown sort type ${e}`)}function Du(e){return Array.isArray(e)?e.join("\0"):e}function bo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function J6(e,t,r){return t*r/bo(e)}var Kr,As,Ui,Ca,$6,V6,K6,Y6,WA,jA,YA,j6,Ou,Q6,Ur,ti,Io,Pu,N_=ue(()=>{Kr=w(ge()),As=w(qt()),Ui=require("ordered-binary"),Ca=require("lmdb");w_();Wc();$6=.3,V6=.1,K6=.05,Y6={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},WA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(zA,"executeConditions");o(Lu,"searchByIndex");o(xi,"findAttribute");o(W6,"joinTo");o(z6,"joinFrom");jA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(bm,"filterByType");o(b_,"estimateCondition");YA=class extends Kr.Violation{static{o(this,"SyntaxViolation")}},j6=/[()[\]|!<>.]|(=\w*=)/,Ou=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Q6=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(I_,"parseQuery");o($t,"recordError");o(Am,"parseBlock");o(A_,"assignOperator");o(Cu,"decodeProperty");o(rU,"typedDecoding");o(nU,"wildcardDecoding");o(sU,"toSortObject");o(iU,"toSortEntry");Pu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Du,"flattenKey");o(bo,"estimatedEntryCount");o(J6,"intersectionEstimate")});var oU,ri,O_=ue(()=>{oU=w(Xs());Pa();ri=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,oU._assignPackageExport)("Resource",xr)});var dU={};Oe(dU,{MultiPartId:()=>C_,Resource:()=>xr,contextStorage:()=>vu,snakeCase:()=>Z6,transformForSelect:()=>Uu});function Z6(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function aU(e,t){if(Xc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Xc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new C_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Xc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Xc=!0,null;e[e.length-1]==="/"&&(Xc=!0)}return t.coerceId(decodeURIComponent(e))}function wn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof _o?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Mu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let _=c.indexOf("?");_>-1&&(l=this.parseQuery(c.slice(_+1),s),c=c.slice(0,_),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ 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=new ri,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ri,l.id=c,c==null&&(u=!0);l||(l=new ri,l.id=c),u&&(l.isCollection=!0);let f;a||(a=vu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,h=p;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(h=o(_=>vu.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return xt(a,()=>{let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)},f);function p(_){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?_.allowRead(a.user,l,a):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(a.user,d,a):_.allowUpdate(a.user,d,a):t.type==="create"?_.allowCreate(a.user,d,a):_.allowDelete(a.user,l,a);if(g?.then)return g.then(y=>{if(!y)throw new Mu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new Mu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Yn(e,t){let r=new Mu.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 QA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Uu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):QA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(QA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(QA(l,r,n)),f;for(let m of e){let h=d(m);h===void 0&&a&&(h=null),h?.then?(f||(f=[]),f.push(h.then(p=>u[m.name||m]=p))):u[m.name||m]=h}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Uu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var cU,lU,Mu,uU,vu,X6,xr,Xc,C_,Pa=ue(()=>{cU=require("crypto");rm();Tu();lU=w(Xs()),Mu=w(ge());xc();N_();uU=require("async_hooks");O_();vu=new uU.AsyncLocalStorage,X6={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},xr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=wn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Uu(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=wn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Yn(t,"put")},{hasContent:!0,type:"update"});static patch=wn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Yn(t,"patch")},{hasContent:!0,type:"update"});static delete=wn(function(t,r,n,s){return t.delete?t.delete(r):Yn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,cU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=vu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),xt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Yn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=wn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Yn(t,"delete")},{hasContent:!1,type:"update"});static post=wn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=wn(function(t,r,n,s){return t.update(r,s)},{hasContent:!0,type:"create"});static connect=wn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Yn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=wn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Yn(t,"subscribe")},{type:"read"});static publish=wn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Yn(t,"publish")},{hasContent:!0,type:"create"});static search=wn(function(t,r,n){let s=t.search?t.search(r):Yn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Uu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=wn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Yn(t,"search")},{hasContent:!0,type:"read"});static copy=wn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Yn(t,"copy")},{hasContent:!0,type:"create"});static move=wn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Yn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Yn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return I_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&X6[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:aU(t,this),isCollection:Xc}}let i=aU(t,this);return Xc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Vn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Vn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,lU._assignPackageExport)("Resource",xr);o(Z6,"snakeCase");o(aU,"pathToId");C_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(wn,"transactional");o(Yn,"missingMethod");o(QA,"selectFromObject");o(Uu,"transformForSelect")});var Zc,JA=ue(()=>{Zc=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var hU={};Oe(hU,{Resources:()=>P_,keyArrayToString:()=>xu,resetResources:()=>e8,resources:()=>bs});function e8(){return bs=new P_,Le.resources=bs,bs}function xu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var fU,mU,P_,bs,Bu=ue(()=>{xc();JA();fU=w(Q()),mU=w(ge());Mr();P_=class extends Map{static{o(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:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new mU.ServerError(`Conflicting paths for ${t}`);fU.default.error(c),i.Resource=new Zc(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return xt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(e8,"resetResources");o(xu,"keyArrayToString")});function eb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=EU,t8(e.primaryStore,e.auditStore)):(c=pU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{_U(pU[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=xu(t);let d=new ZA(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function _U(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),gU(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=xu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,XA.info)("omitting",c,m.startTime,n);continue}try{let h;m.supportsTransactions&&m.txnInProgress!==i.version&&(h=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,h)}catch(h){console.error(h),(0,XA.info)(h)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function t8(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=EU[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{_U(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function gU(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function SU(e){return e.nextTransaction||(eb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),gU(e)),e.nextTransaction}var XA,pU,EU,ZA,tb=ue(()=>{XA=w(Q());Tu();Bu();Li();pU=Object.create(null),EU=Object.create(null);o(eb,"addSubscription");ZA=class extends Vn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(_U,"notifyFromTransactionData");o(t8,"listenToCommits");o(gU,"nextTransaction");o(SU,"whenNextTransaction")});var RU=M((owe,TU)=>{"use strict";var rb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};TU.exports=rb});var AU=M((cwe,yU)=>{"use strict";var nb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};yU.exports=nb});var Im=M((uwe,IU)=>{"use strict";var bU=oe(),r8=(k(),v(W)),{RecordEncoder:n8}=(Wc(),v(tU));bU.initSync();var s8=bU.get(r8.CONFIG_PARAMS.STORAGE_CACHING)!==!1,sb=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=s8&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:n8})}};IU.exports=sb});var Nm=M((fwe,NU)=>{"use strict";var Wn=oe(),Is=(k(),v(W));Wn.initSync();var L_=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Wn.get(Is.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};NU.exports=L_;L_.MAX_DBS=1e4});var _t=M((hwe,xU)=>{"use strict";var ob=require("lmdb"),ni=require("fs-extra"),zn=require("path"),D_=An(),CU=Q(),On=rn().LMDB_ERRORS_ENUM,M_=AU(),ab=Im(),PU=Nm(),La=qt(),wU=(k(),v(W)),{table:i8,resetDatabases:o8}=(De(),v(mt)),OU=oe(),si=La.INTERNAL_DBIS_NAME,LU=La.DBI_DEFINITION_NAME,a8="data.mdb",c8="lock.mdb",wm=".mdb",l8="-lock",ib=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ns(t,r),this.key_type=this.dbi[La.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[La.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new ob.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function v_(e,t){if(e===void 0)throw new Error(On.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(On.ENV_NAME_REQUIRED)}o(v_,"pathEnvNameValidation");async function cb(e,t,r=!0){try{await ni.access(e)}catch(n){throw n.code==="ENOENT"?new Error(On.INVALID_BASE_PATH):n}try{let n=zn.join(e,t+wm);return await ni.access(n,ni.constants.R_OK|ni.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ni.access(zn.join(e,t,a8),ni.constants.R_OK|ni.constants.F_OK),zn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(On.INVALID_ENVIRONMENT)}else throw new Error(On.INVALID_ENVIRONMENT);throw n}}o(cb,"validateEnvironmentPath");function U_(e,t){if(D_.validateEnv(e),t===void 0)throw new Error(On.DBI_NAME_REQUIRED)}o(U_,"validateEnvDBIName");async function u8(e,t,r=!1,n=!1){v_(e,t);let s=zn.basename(e);t=t.toString();let i=OU.get(wU.CONFIG_PARAMS.DATABASES);i||OU.setProperty(wU.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await cb(e,t,n),DU(e,t,r)}catch(a){if(a.message===On.INVALID_ENVIRONMENT){let c=zn.join(e,t);await ni.mkdirp(n?c:e);let l=new PU(n?c:c+wm,!1),u=ob.open(l);u.dbis=Object.create(null);let d=new ab(!1);u.openDB(si,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=lb(e,t,r);return u[La.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(u8,"createEnvironment");async function d8(e,t,r,n=!0){v_(e,t),t=t.toString();let s=zn.join(e,t);return i8({table:t,database:zn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(d8,"copyEnvironment");async function DU(e,t,r=!1){v_(e,t),t=t.toString();let n=lb(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 cb(e,t),i=zn.join(e,t+wm),a=s!=i,c=new PU(s,a),l=ob.open(c);l.dbis=Object.create(null);let u=vU(l);for(let d=0;d<u.length;d++)Ns(l,u[d]);return l[La.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(DU,"openEnvironment");async function f8(e,t,r=!1){v_(e,t),t=t.toString();let n=zn.join(e,t+wm),s=await cb(e,t);if(global.lmdb_map!==void 0){let i=lb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await MU(a),delete global.lmdb_map[i]}}await ni.remove(s),await ni.remove(s===n?s+l8:zn.join(zn.dirname(s),c8))}o(f8,"deleteEnvironment");async function MU(e){D_.validateEnv(e);let t=e[La.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(MU,"closeEnvironment");function lb(e,t,r=!1){let s=`${zn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(lb,"getCachedEnvironmentName");function m8(e){D_.validateEnv(e);let t=Object.create(null),r=Ns(e,si);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==si)try{t[n]=Object.assign(new M_,s)}catch{CU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(m8,"listDBIDefinitions");function vU(e){D_.validateEnv(e);let t=[],r=Ns(e,si);for(let{key:n}of r.getRange({start:!1}))n!==si&&t.push(n);return t}o(vU,"listDBIs");function h8(e,t){let n=Ns(e,si).getEntry(t),s=new M_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{CU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(h8,"getDBIDefinition");function UU(e,t,r,n=!r){if(U_(e,t),t=t.toString(),t===si)throw new Error(On.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ns(e,t)}catch(s){if(s.message===On.DBI_DOES_NOT_EXIST){let i=new ab(r,n===!0),a=e.openDB(t,i),c=new M_(r===!0,n);return a[LU]=c,Ns(e,si).putSync(t,c),e.dbis[t]=a,a}throw s}}o(UU,"createDBI");function Ns(e,t){if(U_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==si?r=h8(e,t):r=new M_,r===void 0)throw new Error(On.DBI_DOES_NOT_EXIST);let n;try{let s=new ab(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(On.DBI_DOES_NOT_EXIST):s}return n[LU]=r,e.dbis[t]=n,n}o(Ns,"openDBI");function p8(e,t){U_(e,t),t=t.toString();let r=Ns(e,t),n=r.getStats();return r[La.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(p8,"statDBI");async function E8(e,t){try{let r=zn.join(e,t+wm);return(await ni.stat(r)).size}catch{throw new Error(On.INVALID_ENVIRONMENT)}}o(E8,"environmentDataSize");function _8(e,t){if(U_(e,t),t=t.toString(),t===si)throw new Error(On.CANNOT_DROP_INTERNAL_DBIS_NAME);Ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ns(e,si).removeSync(t)}o(_8,"dropDBI");function g8(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ns(e,i)}catch(a){if(a.message===On.DBI_DOES_NOT_EXIST)UU(e,i,i!==t,i===t),n=!0;else throw a}}n&&o8()}o(g8,"initializeDBIs");xU.exports={openDBI:Ns,openEnvironment:DU,createEnvironment:u8,listDBIs:vU,listDBIDefinitions:m8,createDBI:UU,dropDBI:_8,statDBI:p8,deleteEnvironment:f8,initializeDBIs:g8,TransactionCursor:ib,environmentDataSize:E8,copyEnvironment:d8,closeEnvironment:MU}});var HU=M((Ewe,FU)=>{"use strict";var ub=_t(),S8=Q(),BU=rn().LMDB_ERRORS_ENUM;FU.exports=T8;async function T8(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await ub.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==BU.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await ub.closeEnvironment(global.lmdb_map[n]),await ub.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==BU.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){S8.error(t)}}o(T8,"cleanLMDBMap")});var No=M((gwe,R8)=>{R8.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_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ii=M((Swe,qU)=>{var y8=No(),{promisify:A8}=require("util"),{getDatabases:GU}=(De(),v(mt));qU.exports={setSchemaDataToGlobal:kU,getTableSchema:b8,getSystemSchema:I8,setSchemaDataToGlobalAsync:A8(kU)};function kU(e){global.hdb_schema=GU(),e&&e()}o(kU,"setSchemaDataToGlobal");function b8(e,t,r){let n=GU()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(b8,"getTableSchema");function I8(){return y8}o(I8,"getSystemSchema")});var t0=M((ywe,e0)=>{"use strict";var db=require("recursive-iterator"),N8=require("alasql"),fb=require("clone"),$U=ie(),{handleHDBError:VU,hdbErrors:w8}=ge(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:YU}=w8,{getDatabases:O8}=(De(),v(mt)),C8=["DISTINCT_ARRAY"],WU=Symbol("validateTables"),mb=Symbol("validateTable"),Rwe=Symbol("getAllColumns"),zU=Symbol("validateAllColumns"),x_=Symbol("findColumn"),jU=Symbol("validateOrderBy"),Om=Symbol("validateSegment"),hb=Symbol("validateColumn"),QU=Symbol("setColumnsForTable"),JU=Symbol("checkColumnsForAsterisk"),XU=Symbol("validateGroupBy"),ZU=Symbol("hasColumns"),pb=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WU](),this[JU](),this[zU]()}[WU](){if(this[ZU]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mb](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mb](t.table)})}}[ZU](){let t=!1,r=new db(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[mb](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=O8();if(!r[t.databaseid])throw VU(new Error,KU.SCHEMA_NOT_FOUND(t.databaseid),YU.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw VU(new Error,KU.TABLE_NOT_FOUND(t.databaseid,t.tableid),YU.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=fb(s);i.table=fb(t),this.attributes.push(i)})}[x_](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)}[JU](){let t=new db(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[QU](r.tableid)}[QU](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new N8.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[zU](){this[Om](this.statement.columns,!1),this[Om](this.statement.joins,!1),this[Om](this.statement.where,!1),this[XU](this.statement.group,!1),this[Om](this.statement.order,!0)}[Om](t,r){if(!t)return;let n=new db(t),s=[];for(let{node:i,path:a}of n)!$U.isEmpty(i)&&!$U.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jU](i):s.push(this[hb](i)));return s}[XU](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&C8.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=fb(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[x_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[x_](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${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`}[jU](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[hb](t)}[hb](t){let r=this[x_](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]}};e0.exports=pb});var n0=M((bwe,r0)=>{"use strict";var Eb=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};r0.exports=Eb});var i0=M((Nwe,s0)=>{"use strict";var _b=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};s0.exports=_b});var a0=M((Owe,o0)=>{"use strict";var gb=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};o0.exports=gb});var l0=M((Pwe,c0)=>{"use strict";var Sb=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};c0.exports=Sb});var tl=M((Uwe,f0)=>{"use strict";var P8=_t(),L8=i0(),D8=a0(),M8=l0(),Bi=An(),Cm=rn().LMDB_ERRORS_ENUM,v8=qt(),wo=(k(),v(W)),U8=ie(),x8=require("uuid"),Dwe=require("lmdb"),{handleHDBError:B8,hdbErrors:F8}=ge(),{OVERFLOW_MARKER:Mwe,MAX_SEARCH_KEY_LENGTH:vwe}=v8,u0=oe();u0.initSync();var B_=u0.get(wo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Tb=wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,el=wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function H8(e,t,r,n,s=Bi.getNextMonotonicTime()){bb(e,t,r,n),Rb(e,t,r);let i=new L8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];d0(u,!0,s);let d=k8(e,t,r,u),f=u[t];a.push(d),c.push(f)}return yb(a,c,n,i,s)}o(H8,"insertRecords");function k8(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][wo.FUNC_VAL],n[a]=c)}let l=Bi.getIndexedValues(c),u=e.dbis[a];if(l){B_&&u.prefetch(l.map(d=>({key:d,value:s})),F_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}B_&&e.dbis[t].prefetch([s],F_),e.dbis[t].put(s,n,n[el])})}o(k8,"insertRecord");function G8(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(G8,"removeSkippedRecords");function d0(e,t,r){let n=r>0;(n||!Number.isInteger(e[el]))&&(e[el]=r||(r=Bi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Tb]))&&(e[Tb]=r||Bi.getNextMonotonicTime()):delete e[Tb]}o(d0,"setTimestamps");function Rb(e,t,r){r.indexOf(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),P8.initializeDBIs(e,t,r)}o(Rb,"initializeTransaction");async function q8(e,t,r,n,s=Bi.getNextMonotonicTime()){bb(e,t,r,n),Rb(e,t,r);let i=new D8,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=Ab(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return yb(c,l,n,i,s,a)}o(q8,"updateRecords");async function $8(e,t,r,n,s=Bi.getNextMonotonicTime()){try{bb(e,t,r,n)}catch(l){throw B8(l,l.message,F8.HTTP_STATUS_CODES.BAD_REQUEST)}Rb(e,t,r);let i=new M8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;U8.isEmpty(u[t])?(d=x8.v4(),u[t]=d):d=u[t];let f=Ab(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return yb(a,c,n,i,s)}o($8,"upsertRecords");async function yb(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Bi.getNextMonotonicTime(),G8(r,i),n}o(yb,"finalizeWrite");function Ab(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(d0(r,!d,a),Number.isInteger(r[el])&&u[el]>r[el])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let _=r[p],g=e.dbis[p];if(g===void 0)continue;let y=u[p];if(typeof _=="function"){let R=_([[u]]);Array.isArray(R)&&(_=R[0][wo.FUNC_VAL],r[p]=_)}if(_===y)continue;let T=Bi.getIndexedValues(y);if(T){B_&&g.prefetch(T.map(R=>({key:R,value:n})),F_);for(let R=0,N=T.length;R<N;R++)g.remove(T[R],n)}if(T=Bi.getIndexedValues(_),T){B_&&g.prefetch(T.map(R=>({key:R,value:n})),F_);for(let R=0,N=T.length;R<N;R++)g.put(T[R],n)}}let h={...u,...r};c.put(n,h,h[el])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:Ab(e,t,r,n,s,i,a))}o(Ab,"updateUpsertRecord");function V8(e,t,r){if(Bi.validateEnv(e),t===void 0)throw new Error(Cm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cm.WRITE_ATTRIBUTES_REQUIRED):new Error(Cm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(V8,"validateBasic");function bb(e,t,r,n){if(V8(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Cm.RECORDS_REQUIRED):new Error(Cm.RECORDS_MUST_BE_ARRAY)}o(bb,"validateWrite");function F_(){}o(F_,"noop");f0.exports={insertRecords:H8,updateRecords:q8,upsertRecords:$8}});var lt=M((Bwe,m0)=>{"use strict";var Cn=require("validate.js");Cn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Cn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Cn.validators.type.checks={Object:o(function(e){return Cn.isObject(e)&&!Cn.isArray(e)},"Object"),Array:Cn.isArray,Integer:Cn.isInteger,Number:Cn.isNumber,String:Cn.isString,Date:Cn.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Cn.validators.hasValidFileExt=function(e,t){return Cn.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};m0.exports={validateObject:K8,validateObjectAsync:Y8,validateBySchema:W8};function K8(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Cn(e,t,{format:"flat"});return r?new Error(r):null}o(K8,"validateObject");async function Y8(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Cn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(Y8,"validateObjectAsync");function W8(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(W8,"validateBySchema")});var p0=M((Hwe,h0)=>{"use strict";var z8=require("uuid"),Ib=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||z8.v4(),this.schema_table=`${this.schema}.${this.table}`}};h0.exports=Ib});var H_=M((Gwe,E0)=>{"use strict";var j8=p0(),Nb=class extends j8{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};E0.exports=Nb});var g0=M(($we,_0)=>{"use strict";_0.exports=J8;var Q8="inserted";function J8(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===Q8?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(J8,"returnObject")});var k_=M((Ywe,T0)=>{"use strict";var X8=(k(),v(W)),wb=_t(),Z8=tl(),{getSystemSchemaPath:eZ,getSchemaPath:tZ}=yt(),Kwe=No(),{validateBySchema:rZ}=lt(),Pm=require("joi"),nZ=H_(),sZ=g0(),{handleHDBError:iZ,hdbErrors:oZ,ClientError:aZ}=ge(),S0=ie(),{HTTP_STATUS_CODES:cZ}=oZ,lZ="inserted";T0.exports=uZ;async function uZ(e){let t=rZ(e,Pm.object({database:Pm.string(),schema:Pm.string(),table:Pm.string().required(),attribute:Pm.string().required()}));if(t)throw new aZ(t.message);let r=!e.skip_table_check&&S0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw iZ(new Error,r,cZ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=S0.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 nZ(e.schema,e.table,e.attribute,e.id);try{let i=await wb.openEnvironment(tZ(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}`);wb.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await wb.openEnvironment(eZ(),X8.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await Z8.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return sZ(lZ,c,{records:[s]},l)}catch(i){throw i}}o(uZ,"lmdbCreateAttribute")});var Hi=M((zwe,A0)=>{"use strict";var y0=ie(),R0=(k(),v(W)),Fu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fi=require("joi"),Da={schema_format:{pattern:Fu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},dZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Fu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number(),Fi.array()).required(),fZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Fu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()),mZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Fu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()).required();function hZ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Da.schema_length.maximum?`'${e}' maximum of 250 characters`:Fu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(hZ,"checkValidTable");function pZ(e,t){return y0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(pZ,"validateSchemaExists");function EZ(e,t){let r=t.state.ancestors[0].schema;return y0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(EZ,"validateTableExists");function _Z(e,t){return e.toLowerCase()===R0.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${R0.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(_Z,"validateSchemaName");A0.exports={commonValidators:Da,schemaRegex:Fu,hdbSchemaTable:dZ,validateSchemaExists:pZ,validateTableExists:EZ,validateSchemaName:_Z,checkValidTable:hZ,hdbDatabase:fZ,hdbTable:mZ}});var Cb=M((Qwe,I0)=>{var{hdbTable:gZ,hdbDatabase:b0}=Hi(),SZ=lt(),Ob=require("joi"),TZ={undefined:"undefined",null:"null"},RZ=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||TZ[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),yZ=Ob.object({database:b0,schema:b0,table:gZ,records:Ob.array().items(Ob.object().custom(RZ)).required()});I0.exports=function(e){return SZ.validateBySchema(e,yZ)}});var Lm=M((Zwe,w0)=>{"use strict";var Oo=ie(),N0=Q(),Xwe=Cb(),{getDatabases:AZ}=(De(),v(mt)),{ClientError:rl}=ge();w0.exports=bZ;function bZ(e){if(Oo.isEmpty(e))throw new rl("invalid update parameters defined.");if(Oo.isEmptyOrZeroLength(e.schema))throw new rl("invalid schema specified.");if(Oo.isEmptyOrZeroLength(e.table))throw new rl("invalid table specified.");if(!Array.isArray(e.records))throw new rl("records must be an array");let t=AZ()[e.schema]?.[e.table];if(Oo.isEmpty(t))throw new rl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Oo.isEmptyOrZeroLength(a[r]))throw N0.error("a valid hash attribute must be provided with update record:",a),new rl("a valid hash attribute must be provided with update record, check log for more info");if(!Oo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw N0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new rl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Oo.isEmpty(a[r])&&a[r]!==""&&n.has(Oo.autoCast(a[r]))&&(a.skip=!0),n.add(Oo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(bZ,"insertUpdateValidate")});var G_=M((tOe,C0)=>{"use strict";var O0=ie(),IZ=(k(),v(W)),NZ=Q(),wZ=k_(),OZ=H_(),CZ=Co(),{SchemaEventMsg:PZ}=oi(),LZ="already exists in";C0.exports=DZ;async function DZ(e,t,r){if(O0.isEmptyOrZeroLength(r))return r;let n=[];O0.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 MZ(e,t.schema,t.name,i)})),s}o(DZ,"lmdbCheckForNewAttributes");async function MZ(e,t,r,n){let s=new OZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await vZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(LZ))NZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(MZ,"createNewAttribute");async function vZ(e){let t;return t=await wZ(e),CZ.signalSchemaChange(new PZ(process.pid,IZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(vZ,"createAttribute")});var Hu=M((nOe,P0)=>{"use strict";var Pb=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};P0.exports=Pb});var D0=M((iOe,L0)=>{"use strict";var UZ=Hu(),xZ=(k(),v(W)).OPERATIONS_ENUM,Lb=class extends UZ{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(xZ.INSERT,r,n,s,i),this.records=t}};L0.exports=Lb});var v0=M((aOe,M0)=>{"use strict";var BZ=Hu(),FZ=(k(),v(W)).OPERATIONS_ENUM,Db=class extends BZ{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(FZ.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};M0.exports=Db});var x0=M((lOe,U0)=>{"use strict";var HZ=Hu(),kZ=(k(),v(W)).OPERATIONS_ENUM,Mb=class extends HZ{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(kZ.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};U0.exports=Mb});var F0=M((dOe,B0)=>{"use strict";var GZ=Hu(),qZ=(k(),v(W)).OPERATIONS_ENUM,vb=class extends GZ{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(qZ.DELETE,n,s,t,i),this.original_records=r}};B0.exports=vb});var Dm=M((hOe,q0)=>{"use strict";var mOe=require("path"),H0=_t(),$Z=D0(),VZ=v0(),KZ=x0(),YZ=F0(),ku=qt(),k0=ie(),{CONFIG_PARAMS:WZ}=(k(),v(W)),G0=oe();G0.initSync();var q_=(k(),v(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:zZ}=yt();q0.exports=jZ;async function jZ(e,t){if(G0.get(WZ.LOGGING_AUDITLOG)===!1)return;let r=zZ(e.schema,e.table),n=await H0.openEnvironment(r,e.table,!0),s=QZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){H0.initializeDBIs(n,ku.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ku.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ku.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ku.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),k0.isEmpty(s.user_name)||n.dbis[ku.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[ku.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(jZ,"writeTransaction");function QZ(e,t){let r=k0.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===q_.INSERT)return new $Z(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new VZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new KZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new YZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(QZ,"createTransactionObject")});var Ub=M((_Oe,$0)=>{"use strict";var JZ=Lm(),EOe=Zf(),Mm=(k(),v(W)),XZ=em(),ZZ=tl().insertRecords,e5=_t(),t5=Q(),r5=G_(),{getSchemaPath:n5}=yt(),s5=Dm();$0.exports=i5;async function i5(e){try{let{schemaTable:t,attributes:r}=JZ(e);XZ(e,r,t.hash_attribute),e.schema!==Mm.SYSTEM_SCHEMA_NAME&&(r.includes(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await r5(e.hdb_auth_header,t,r),s=n5(e.schema,e.table),i=await e5.openEnvironment(s,e.table),a=await ZZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await s5(e,a)}catch(c){t5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(i5,"lmdbCreateRecords")});var Y0=M((SOe,K0)=>{"use strict";var V0=(k(),v(W)),o5=Ub(),a5=Zf(),c5=require("fs-extra"),{getSchemaPath:l5}=yt();K0.exports=u5;async function u5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a5(V0.SYSTEM_SCHEMA_NAME,V0.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o5(r),await c5.mkdirp(l5(e.schema))}o(u5,"lmdbCreateSchema")});var z0=M((ROe,W0)=>{"use strict";var xb=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};W0.exports=xb});var X0=M((NOe,J0)=>{"use strict";var j0=_t(),Bb=An(),Fb=rn().LMDB_ERRORS_ENUM,d5=qt(),Q0=Q(),AOe=ie(),f5=require("lmdb"),m5=z0(),h5=(k(),v(W)),{OVERFLOW_MARKER:bOe,MAX_SEARCH_KEY_LENGTH:IOe}=d5,p5=h5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E5(e,t,r,n){if(Bb.validateEnv(e),t===void 0)throw new Error(Fb.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Fb.IDS_REQUIRED):new Error(Fb.IDS_MUST_BE_ITERABLE);try{let s=j0.listDBIs(e);j0.initializeDBIs(e,t,s);let i=new m5,a,c=[],l=[];for(let m=0,h=r.length;m<h;m++)try{a=r[m];let p=e.dbis[t].get(a);if(!p||n&&p[p5]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,f5.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let y=s[g];if(!p.hasOwnProperty(y)||y===t)continue;let T=e.dbis[y],R=p[y];if(R!=null)try{let N=Bb.getIndexedValues(R);if(N)for(let O=0,F=N.length;O<F;O++)T.remove(N[O],a)}catch{Q0.warn(`cannot delete from attribute: ${y}, ${R}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){Q0.warn(p),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,h=d.length;m<h;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let h=u[m];i.original_records.splice(h-f,1),f++}return i.txn_time=Bb.getNextMonotonicTime(),i}catch(s){throw s}}o(E5,"deleteRecords");J0.exports={deleteRecords:E5}});var vm=M((OOe,ex)=>{"use strict";var Gu=ie(),_5=X0(),g5=_t(),{getSchemaPath:S5}=yt(),T5=Dm(),R5=Q();ex.exports=y5;async function y5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Gu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Gu.isEmptyOrZeroLength(e.hash_values)&&!Gu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Gu.isEmpty(l)||e.hash_values.push(l)}}if(Gu.isEmptyOrZeroLength(e.hash_values))return Z0([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Gu.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=S5(e.schema,e.table),i=await g5.openEnvironment(s,e.table),a=await _5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T5(e,a)}catch(c){R5.error(`unable to write transaction due to ${c.message}`)}return Z0(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(y5,"lmdbDeleteRecords");function Z0(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(Z0,"createDeleteResponse")});var kb=M((LOe,tx)=>{"use strict";var A5=(k(),v(W)),POe=An();function Hb(e,t){let r=Object.create(null);if(t.length===1&&A5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(Hb,"parseRow");function b5(e,t,r,n){let s=Hb(r,e);n.push(s)}o(b5,"searchAll");function I5(e,t,r,n){let s=Hb(r,e);n[t]=s}o(I5,"searchAllToMap");function N5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(N5,"iterateDBI");function nl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(nl,"pushResults");function w5(e,t,r,n,s,i){t.toString().endsWith(e)&&nl(t,r,n,s,i)}o(w5,"endsWith");function O5(e,t,r,n,s,i){t.toString().includes(e)&&nl(t,r,n,s,i)}o(O5,"contains");function C5(e,t,r,n,s,i){t>e&&nl(t,r,n,s,i)}o(C5,"greaterThanCompare");function P5(e,t,r,n,s,i){t>=e&&nl(t,r,n,s,i)}o(P5,"greaterThanEqualCompare");function L5(e,t,r,n,s,i){t<e&&nl(t,r,n,s,i)}o(L5,"lessThanCompare");function D5(e,t,r,n,s,i){t<=e&&nl(t,r,n,s,i)}o(D5,"lessThanEqualCompare");tx.exports={parseRow:Hb,searchAll:b5,searchAllToMap:I5,iterateDBI:N5,endsWith:w5,contains:O5,greaterThanCompare:C5,greaterThanEqualCompare:P5,lessThanCompare:L5,lessThanEqualCompare:D5,pushResults:nl}});var qu=M((xOe,cx)=>{"use strict";var Ma=_t(),MOe=Q(),jn=An(),$_=qt(),Zt=rn().LMDB_ERRORS_ENUM,vOe=ie(),M5=(k(),v(W)),V_=kb(),{parseRow:v5}=V_,UOe=require("lmdb"),{OVERFLOW_MARKER:rx,MAX_SEARCH_KEY_LENGTH:U5}=$_;function nx(e,t,r,n=!1,s=void 0,i=void 0){return sl(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(nx,"iterateFullIndex");function Um(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return sl(e,t,r,(d,f,m,h)=>{let T={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(T.values=!1,f.getRange(T).map(R=>({value:R}))):f.getRange(T)})}o(Um,"iterateRangeBetween");function sl(e,t,r,n){let s=e.database||e,i=Ma.openDBI(s,r);i[$_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ma.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(sl,"setupTransaction");function sx(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(rx)){if(!s)if(r)s=Ma.openDBI(e,r);else{let l=Ma.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Ma.openDBI(e,l[u]),!s[$_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(sx,"getOverflowCheck");function x5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return sl(e,t,t,(a,c,l)=>(K_(r),r=xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>v5(u.value,r))))}o(x5,"searchAll");function B5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);K_(r),r=xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of nx(e,t,t,n,s,i))a.set(c,V_.parseRow(l,r));return a}o(B5,"searchAllToMap");function F5(e,t,r=!1,n=void 0,s=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=nx(e,void 0,t,r,n,s),c=a.transaction,l=sx(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(F5,"iterateDBI");function H5(e,t){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return Ma.statDBI(e,t).entryCount}o(H5,"countAll");function k5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),sl(e,t,r,(c,l,u,d)=>(n=jn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(k5,"equals");function G5(e,t,r){return va(e,t,r),Ma.openDBI(e,t).getValuesCount(r)}o(G5,"count");function q5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),sl(e,null,r,(c,l)=>{n=jn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:h}=m;if(h!==f){if(h.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(q5,"startsWith");function $5(e,t,r,n,s=!1,i=void 0,a=void 0){return ix(e,t,r,n,s,i,a,!0)}o($5,"endsWith");function ix(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return va(e,r,n),sl(e,null,r,(l,u,d,f)=>{let m=sx(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let p=h.toString();return p.endsWith(rx)?u.getValues(h,{transaction:l}).map(_=>{let g=m(h,_);if(c?g.endsWith(n):g.includes(n))return{key:g,value:_}}).filter(_=>_):(c?p.endsWith(n):p.includes(n))?u[$_.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(_=>({key:h,value:_})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(ix,"contains");function V5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!0,!1)}o(V5,"greaterThan");function K5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!1,!1)}o(K5,"greaterThanEqual");function Y5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!0)}o(Y5,"lessThan");function W5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!1)}o(W5,"lessThanEqual");function z5(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(jn.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=jn.convertKeyValueToWrite(n),s=jn.convertKeyValueToWrite(s),n>s)throw new Error(Zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Um(e,t,r,n,s,i,a,c)}o(z5,"between");function j5(e,t,r,n){jn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),r=xm(s,r),n===void 0)throw new Error(Zt.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=V_.parseRow(c,r)),a}o(j5,"searchByHash");function Q5(e,t,r){jn.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}o(Q5,"checkHashExists");function J5(e,t,r,n,s=[]){return ax(e,t,r,n,s),ox(e,t,r,n,s).map(i=>i[1])}o(J5,"batchSearchByHash");function X5(e,t,r,n,s=[]){ax(e,t,r,n,s);let i=new Map;for(let[a,c]of ox(e,t,r,n,s))i.set(a,c);return i}o(X5,"batchSearchByHashToMap");function ox(e,t,r,n,s=[]){return sl(e,t,t,(i,a,c)=>{r=xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,V_.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(ox,"batchHashSearch");function ax(e,t,r,n,s){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),n==null)throw new Error(Zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Zt.IDS_MUST_BE_ITERABLE)}o(ax,"initializeBatchSearchByHash");function K_(e){if(!Array.isArray(e))throw e===void 0?new Error(Zt.FETCH_ATTRIBUTES_REQUIRED):new Error(Zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(K_,"validateFetchAttributes");function va(e,t,r){if(jn.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>U5)throw new Error(Zt.SEARCH_VALUE_TOO_LARGE)}o(va,"validateComparisonFunctions");function xm(e,t){return t.length===1&&M5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ma.listDBIs(e)),t}o(xm,"setGetWholeRowAttributes");cx.exports={searchAll:x5,searchAllToMap:B5,count:G5,countAll:H5,equals:k5,startsWith:q5,endsWith:$5,contains:ix,searchByHash:j5,setGetWholeRowAttributes:xm,batchSearchByHash:J5,batchSearchByHashToMap:X5,checkHashExists:Q5,iterateDBI:F5,greaterThan:V5,greaterThanEqual:K5,lessThan:Y5,lessThanEqual:W5,between:z5}});var $u=M((FOe,mx)=>{var lx=require("lodash"),ux=lt(),$e=require("joi"),Z5=ie(),{hdbSchemaTable:Bm,checkValidTable:dx,hdbTable:fx,hdbDatabase:Y_}=Hi(),{handleHDBError:e9,hdbErrors:t9}=ge(),{getDatabases:r9}=(De(),v(mt)),{HTTP_STATUS_CODES:n9}=t9,s9=$e.object({database:Y_,schema:Y_,table:fx,search_attribute:Bm,search_value:$e.any().required(),get_attributes:$e.array().min(1).items($e.alternatives(Bm,$e.object())).optional(),desc:$e.bool(),limit:$e.number().integer().min(1),offset:$e.number().integer().min(0)}),i9=$e.object({database:Y_,schema:Y_,table:fx,operator:$e.string().valid("and","or").default("and").lowercase(),offset:$e.number().integer().min(0),limit:$e.number().integer().min(1),get_attributes:$e.array().min(1).items($e.alternatives(Bm,$e.object())).optional(),sort:$e.object({attribute:$e.alternatives(Bm,$e.array().min(1)),descending:$e.bool().optional()}).optional(),conditions:$e.array().min(1).items($e.alternatives($e.object({operator:$e.string().valid("and","or").default("and").lowercase(),conditions:$e.array()}),$e.object({search_attribute:$e.alternatives(Bm,$e.array().min(1)),search_type:$e.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:$e.when("search_type",{switch:[{is:"equals",then:$e.any()},{is:"between",then:$e.array().items($e.alternatives([$e.string(),$e.number()])).length(2)}],otherwise:$e.alternatives($e.string(),$e.number())}).required()}))).required()});mx.exports=function(e,t){let r=null;switch(t){case"value":r=ux.validateBySchema(e,s9);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(dx("database",e.schema)),i(dx("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=ux.validateBySchema(e,i9);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Z5.checkGlobalSchemaTable(e.schema,e.table);if(s)return e9(new Error,s,n9.NOT_FOUND);let a=r9()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=o(d=>{for(let f=0,m=d.conditions.length;f<m;f++){let h=d.conditions[f];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=lx.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!lx.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var Gb=M((kOe,hx)=>{"use strict";var o9=_t(),a9=$u(),{getSchemaPath:c9}=yt();hx.exports=l9;function l9(e){let t=a9(e,"hashes");if(t)throw t;let r=c9(e.schema,e.table);return o9.openEnvironment(r,e.table)}o(l9,"initialize")});var qb=M((qOe,px)=>{"use strict";var u9=qu(),d9=Gb();px.exports=f9;async function f9(e){let t=await d9(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return u9.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(f9,"lmdbGetDataByHash")});var Vu=M((VOe,Ex)=>{"use strict";var $b=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Ex.exports=$b});var gx=M((WOe,_x)=>{"use strict";var YOe=Vu(),m9=qu(),h9=Gb();_x.exports=p9;async function p9(e){let t=await h9(e),r=global.hdb_schema[e.schema][e.table];return m9.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(p9,"lmdbSearchByHash")});var ai=M((jOe,Sx)=>{"use strict";var Vb=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};Sx.exports=Vb});var W_=M((JOe,Ix)=>{"use strict";var sn=qu(),E9=_t(),_9=ie(),Ve=qt(),il=(k(),v(W)),g9=No(),Tx=rn().LMDB_ERRORS_ENUM,{getSchemaPath:S9}=yt(),Po=il.SEARCH_WILDCARDS;async function T9(e,t,r){let n;e.schema===il.SYSTEM_SCHEMA_NAME?n=g9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=bx(e,n.hash_attribute,r,t);return yx(e,s,n.hash_attribute,r)}o(T9,"prepSearch");async function yx(e,t,r,n){let s=S9(e.schema,e.table),i=await E9.openEnvironment(s,e.table),a=Ax(i,e,t,r),c=a.transaction||i;if([Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ve.SEARCH_TYPES.SEARCH_ALL,Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(R9(e,r)===!1){let d=e.search_attribute;if(d===r)return n?Rx(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?Rx(a,f):a.map(f)}let u=e.search_attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?sn.batchSearchByHashToMap(c,r,e.get_attributes,u):sn.batchSearchByHash(c,r,e.get_attributes,u)}o(yx,"executeSearch");function Ax(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ve.SEARCH_TYPES.EQUALS:s=sn.equals(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.CONTAINS:s=sn.contains(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.ENDS_WITH:case Ve.SEARCH_TYPES._ENDS_WITH:s=sn.endsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.STARTS_WITH:case Ve.SEARCH_TYPES._STARTS_WITH:s=sn.startsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return sn.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return sn.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.SEARCH_ALL:return sn.searchAll(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return sn.searchAllToMap(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.BETWEEN:s=sn.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN:case Ve.SEARCH_TYPES._GREATER_THAN:s=sn.greaterThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ve.SEARCH_TYPES._GREATER_THAN_EQUAL:s=sn.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN:case Ve.SEARCH_TYPES._LESS_THAN:s=sn.lessThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN_EQUAL:case Ve.SEARCH_TYPES._LESS_THAN_EQUAL:s=sn.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;default:return Object.create(null)}return s}o(Ax,"searchByType");function Rx(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(Rx,"createMapFromIterable");function R9(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}o(R9,"checkToFetchMore");function bx(e,t,r,n){if(_9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Po.indexOf(s)>-1)return r===!0?Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ve.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Po[0])<0&&s.indexOf(Po[1])<0)return c===!0?r===!0?Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ve.SEARCH_TYPES.EQUALS;if(Po.indexOf(i)>=0&&Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),Ve.SEARCH_TYPES.CONTAINS;if(Po.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ve.SEARCH_TYPES.ENDS_WITH;if(Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),Ve.SEARCH_TYPES.STARTS_WITH;if(s.includes(Po[0])||s.includes(Po[1]))return Ve.SEARCH_TYPES.EQUALS;throw new Error(Tx.UNKNOWN_SEARCH_TYPE)}else switch(n){case il.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ve.SEARCH_TYPES.BETWEEN;case il.VALUE_SEARCH_COMPARATORS.GREATER:return Ve.SEARCH_TYPES.GREATER_THAN;case il.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ve.SEARCH_TYPES.GREATER_THAN_EQUAL;case il.VALUE_SEARCH_COMPARATORS.LESS:return Ve.SEARCH_TYPES.LESS_THAN;case il.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ve.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Tx.UNKNOWN_SEARCH_TYPE)}}o(bx,"createSearchTypeFromSearchObject");Ix.exports={executeSearch:yx,createSearchTypeFromSearchObject:bx,prepSearch:T9,searchByType:Ax}});var wx=M((eCe,Nx)=>{"use strict";var ZOe=ai(),y9=$u(),A9=ie(),b9=(k(),v(W)),I9=W_();Nx.exports=N9;function N9(e,t){if(!A9.isEmpty(t)&&b9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=y9(e,"value");if(n)throw n;return I9.prepSearch(e,t,!0)}o(N9,"lmdbGetDataByValue")});var Fm=M((nCe,Ox)=>{"use strict";var rCe=ai(),w9=$u(),O9=ie(),C9=(k(),v(W)),P9=W_();Ox.exports=L9;async function L9(e,t){if(!O9.isEmpty(t)&&C9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=w9(e,"value");if(n)throw n;return P9.prepSearch(e,t,!1)}o(L9,"lmdbSearchByValue")});var Px=M((oCe,Cx)=>{"use strict";var iCe=qt(),Kb=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},Yb=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Wb=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Cx.exports={SearchByConditionsObject:Kb,SearchCondition:Yb,SortAttribute:Wb}});var Ux=M((uCe,vx)=>{"use strict";var cCe=Px().SearchByConditionsObject,D9=ai(),M9=$u(),zb=qu(),z_=qt(),{Resource:lCe}=(Pa(),v(dU)),Mx=W_(),v9=kb(),U9=require("lodash"),{getSchemaPath:x9}=yt(),Lx=_t(),{handleHDBError:B9,hdbErrors:F9}=ge(),{HTTP_STATUS_CODES:H9}=F9,k9=1e8;vx.exports=G9;async function G9(e){let t=M9(e,"conditions");if(t)throw B9(t,t.message,H9.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=x9(e.schema,e.table),n=await Lx.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Lx.openDBI(n,u.search_attribute);let i=U9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===z_.SEARCH_TYPES.EQUALS?u.estimated_count=zb.count(n,u.search_attribute,u.search_value):d===z_.SEARCH_TYPES.CONTAINS||d===z_.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=k9}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await Dx(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(Mx.filterByType),f=d.length,m=zb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:a,lazy:!0})),f>0&&(l=l.filter(h=>{for(let p=0;p<f;p++)if(!d[p](h))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(h=>v9.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await Dx(a,e,m,s.hash_attribute);c=c.concat(h)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=zb.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(G9,"lmdbSearchByConditions");async function Dx(e,t,r,n){let s=new D9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===z_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Mx.searchByType(e,s,i,n).map(a=>a.value)}o(Dx,"executeConditionSearch")});var Hm=M((fCe,xx)=>{"use strict";var q9=(k(),v(W)).OPERATIONS_ENUM,jb=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};xx.exports=jb});var Qb=M((hCe,Vx)=>{"use strict";var kx=ai(),Gx=Hm(),qx=Fm(),$x=vm(),Pn=(k(),v(W)),Bx=ie(),Fx=_t(),{getTransactionAuditStorePath:$9,getSchemaPath:V9}=yt(),Hx=Q();Vx.exports=K9;async function K9(e){try{if(Bx.isEmpty(global.hdb_schema[e.schema])||Bx.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Y9(e),await W9(e);let t=V9(e.schema,e.table);try{await Fx.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Hx.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$9(e.schema,e.table);await Fx.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Hx.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(K9,"lmdbDropTable");async function Y9(e){let t=new kx(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await qx(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new Gx(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $x(s)}o(Y9,"deleteAttributesFromSystem");async function W9(e){let t=new kx(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await qx(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Gx(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $x(s)}catch(i){throw i}}o(W9,"dropTableFromSystem")});var Yx=M((ECe,Kx)=>{"use strict";var z9=require("fs-extra"),j9=ai(),Q9=Vu(),J9=Hm(),X9=Qb(),Z9=vm(),e7=qb(),t7=Fm(),Lo=(k(),v(W)),{getSchemaPath:r7}=yt(),{handleHDBError:n7,hdbErrors:s7}=ge(),{HDB_ERROR_MSGS:i7,HTTP_STATUS_CODES:o7}=s7;Kx.exports=a7;async function a7(e){let t;try{t=await c7(e.schema);let r=new j9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await t7(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await X9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new J9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Z9(s);let i=r7(t);await z9.remove(i)}catch(r){throw r}}o(a7,"lmdbDropSchema");async function c7(e){let t=new Q9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await e7(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw n7(new Error,i7.SCHEMA_NOT_FOUND(e),o7.NOT_FOUND,void 0,void 0,!0);return n}o(c7,"validateDropSchema")});var km=M((gCe,Wx)=>{"use strict";var Jb=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Wx.exports=Jb});var Zb=M((RCe,zx)=>{"use strict";var l7=require("fs-extra"),j_=_t(),{getTransactionAuditStorePath:u7}=yt(),Xb=qt(),TCe=km();zx.exports=d7;async function d7(e){let t;try{let r=u7(e.schema,e.table);await l7.mkdirp(r),t=await j_.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{j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(d7,"createTransactionsAuditEnvironment")});var Jx=M((bCe,Qx)=>{"use strict";var eI=(k(),v(W)),jx=_t(),f7=tl(),{getSystemSchemaPath:m7,getSchemaPath:h7}=yt(),ACe=No(),p7=k_(),tI=H_(),E7=Q(),_7=Zb();Qx.exports=g7;async function g7(e,t){let r=h7(t.schema,t.table),n=new tI(t.schema,t.table,eI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new tI(t.schema,t.table,eI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new tI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jx.createEnvironment(r,t.table),e!==void 0){let a=await jx.openEnvironment(m7(),eI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await f7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await rI(n),await rI(s),await rI(i)}await _7(t)}catch(a){throw a}}o(g7,"lmdbCreateTable");async function rI(e){try{await p7(e)}catch(t){E7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(rI,"createAttribute")});var Zx=M((NCe,Xx)=>{"use strict";var S7=Lm(),T7=em(),R7=G_(),Gm=(k(),v(W)),y7=tl().updateRecords,A7=_t(),{getSchemaPath:b7}=yt(),I7=Dm(),N7=Q();Xx.exports=w7;async function w7(e){try{let{schemaTable:t,attributes:r}=S7(e);T7(e,r,t.hash_attribute),e.schema!==Gm.SYSTEM_SCHEMA_NAME&&(r.includes(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await R7(e.hdb_auth_header,t,r),s=b7(e.schema,e.table),i=await A7.openEnvironment(s,e.table),a=await y7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I7(e,a)}catch(c){N7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(w7,"lmdbUpdateRecords")});var tB=M((OCe,eB)=>{"use strict";var O7=(k(),v(W)).OPERATIONS_ENUM,nI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=O7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};eB.exports=nI});var nB=M((LCe,rB)=>{"use strict";var PCe=tB(),C7=Lm(),P7=em(),L7=G_(),qm=(k(),v(W)),D7=tl().upsertRecords,M7=_t(),{getSchemaPath:v7}=yt(),U7=Dm(),x7=Q(),{handleHDBError:B7,hdbErrors:F7}=ge();rB.exports=H7;async function H7(e){let t;try{t=C7(e)}catch(l){throw B7(l,l.message,F7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;P7(e,n,r.hash_attribute),e.schema!==qm.SYSTEM_SCHEMA_NAME&&(n.includes(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await L7(e.hdb_auth_header,r,n),i=v7(e.schema,e.table),a=await M7.openEnvironment(i,e.table),c=await D7(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await U7(e,c)}catch(l){x7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(H7,"lmdbUpsertRecords")});var iB=M((MCe,sB)=>{"use strict";var sI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};sB.exports=sI});var aB=M((UCe,oB)=>{"use strict";var iI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};oB.exports=iI});var uB=M((FCe,lB)=>{"use strict";var oI=_t(),{getTransactionAuditStorePath:k7}=yt(),BCe=iB(),$m=qt(),G7=ie(),cB=aB(),q7=require("util").promisify,$7=q7(setTimeout),V7=1e4,K7=100;lB.exports=Y7;async function Y7(e){let t=k7(e.schema,e.table),r=await oI.openEnvironment(t,e.table,!0),n=oI.listDBIs(r);oI.initializeDBIs(r,$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new cB;do s=await W7(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(K7);while(s.transactions_deleted>0);return i}o(Y7,"deleteAuditLogsBefore");async function W7(e,t){let r=new cB;try{let n=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];G7.isEmpty(c)||(s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>V7)break}return await s,r}catch(n){throw n}}o(W7,"deleteTransactions")});var fB=M((kCe,dB)=>{"use strict";var aI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};dB.exports=aI});var hB=M(($Ce,mB)=>{"use strict";var z7=ai(),j7=Hm(),qCe=fB(),ki=(k(),v(W)),Q7=ie(),cI=_t(),J7=No(),X7=Fm(),Z7=vm(),{getSchemaPath:eee}=yt();mB.exports=tee;async function tee(e,t=!0){let r;e.schema===ki.SYSTEM_SCHEMA_NAME?r=J7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await nee(e),s=eee(e.schema,e.table),i=await cI.openEnvironment(s,e.table);return t===!0&&await ree(e,i,r.hash_attribute),cI.dropDBI(i,e.attribute),n}o(tee,"lmdbDropAttribute");async function ree(e,t,r){let n=cI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(ree,"removeAttributeFromAllObjects");async function nee(e){let t=new z7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await X7(t)).filter(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Q7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new j7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Z7(i)}o(nee,"dropAttributeFromSystem")});var TB=M((YCe,SB)=>{"use strict";var lI=_t(),Ku=qt(),KCe=An(),uI=(k(),v(W)),pB=ie(),{getTransactionAuditStorePath:see}=yt(),iee=qu(),Q_=Hu(),oee=Q();SB.exports=aee;async function aee(e){let t=see(e.schema,e.table),r=await lI.openEnvironment(t,e.table,!0),n=lI.listDBIs(r);lI.initializeDBIs(r,Ku.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return EB(r,e.search_values);case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,lee(r,e.search_values,s);case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return cee(r,e.search_values);default:return EB(r)}}o(aee,"readAuditLog");function EB(e,t=[0,Date.now()]){pB.isEmpty(t[0])&&(t[0]=0),pB.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ku.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 Q_,s))}o(EB,"searchTransactionsByTimestamp");function cee(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Ku.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,gB(e,i))}return Object.fromEntries(r)}o(cee,"searchTransactionsByUsername");function lee(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=iee.equals(e,Ku.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ku.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=gB(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);_B(l,"records",r,d,a),_B(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(lee,"searchTransactionsByHashValues");function _B(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Q_(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Q_(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(_B,"loopRecords");function gB(e,t){let r=[];try{let n=e.dbis[Ku.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new Q_,i);r.push(a)}}catch(i){oee.warn(i)}return r}catch(n){throw n}}o(gB,"batchSearchTransactions")});var yB=M((QCe,RB)=>{"use strict";var{getSchemaPath:zCe}=yt(),jCe=_t(),{database:uee}=(De(),v(mt));RB.exports={writeTransaction:dee};async function dee(e,t,r){return uee({database:e,table:t}).transaction(r)}o(dee,"writeTransaction")});var NB=M((XCe,IB)=>{"use strict";var{getSchemaPath:AB}=yt(),bB=_t();IB.exports={flush:fee,resetReadTxn:mee};async function fee(e,t){return(await bB.openEnvironment(AB(e,t),t.toString())).flushed}o(fee,"flush");async function mee(e,t){try{(await bB.openEnvironment(AB(e,t),t.toString())).resetReadTxn()}catch{}}o(mee,"resetReadTxn")});var PB=M((ePe,CB)=>{"use strict";var{Readable:hee}=require("stream"),{getDatabases:pee}=(De(),v(mt)),{readSync:Eee,openSync:_ee,createReadStream:wB}=require("fs"),{open:gee}=require("lmdb"),OB=Im(),See=Nm(),{AUDIT_STORE_OPTIONS:Tee}=(Li(),v(Qv)),{INTERNAL_DBIS_NAME:Ree,AUDIT_STORE_NAME:yee}=qt();CB.exports=bee;var dI=32768,Aee=100;async function bee(e){let t=e.database||e.schema||"data",r=pee()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=gee({noSync:!0,maxDbs:See.MAX_DBS}),m,h=f.openDB(Ree,new OB(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(T,R),O=d.openDB(T,R);for(let{key:F,version:Z,value:G}of O.getRange({start:null,transaction:p,versions:O.useVersions}))m=N.put(F,G,Z),_++%Aee===0&&(await new Promise(Y=>setTimeout(Y,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of d.getRange({transaction:p,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){h.put(T,R);let[,N]=T.split("/"),O=!N,F=new OB(!O,O);await g(T,F)}e.include_audit&&await g(yee,{...Tee}),await m;let y=wB(f.path);return y.headers=l(),y.on("close",()=>{p.done(),f.close()}),y}let a=r[Object.keys(r)[0]].primaryStore,c=_ee(a.path);return a.transaction(()=>{let u=Buffer.alloc(dI);Eee(c,u,0,dI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=wB(null,{fd:c,start:dI}),m=new hee.from((async function*(){yield u;for await(let h of f)d.openTimer&&(d.openTimer=0),yield h;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(bee,"getBackup")});var MB=M((rPe,DB)=>{"use strict";var Iee=Q(),{handleHDBError:Nee}=ge(),wee=n0(),Oee=k_(),Cee=Ub(),Pee=Y0(),Lee=vm(),Dee=qb(),Mee=gx(),vee=wx(),Uee=Fm(),xee=Ux(),Bee=Yx(),Fee=Jx(),Hee=Zx(),kee=nB(),Gee=uB(),qee=Qb(),$ee=hB(),Vee=TB(),Kee=yB(),LB=NB(),Yee=PB(),fI=class extends wee{static{o(this,"LMDBBridge")}async searchByConditions(t){return xee(t)}async getDataByHash(t){return await Dee(t)}async searchByHash(t){return await Mee(t)}async getDataByValue(t,r){return await vee(t,r)}async searchByValue(t){return await Uee(t)}async createSchema(t){return await Pee(t)}async dropSchema(t){return await Bee(t)}async createTable(t,r){return await Fee(t,r)}async dropTable(t){return await qee(t)}async createAttribute(t){return await Oee(t)}async createRecords(t){return await Cee(t)}async updateRecords(t){return await Hee(t)}async upsertRecords(t){try{return await kee(t)}catch(r){throw Nee(r,null,null,Iee.ERR,r)}}async deleteRecords(t){return await Lee(t)}async dropAttribute(t){return await $ee(t)}async deleteAuditLogsBefore(t){return await Gee(t)}async readAuditLog(t){return await Vee(t)}writeTransaction(t,r,n){return Kee.writeTransaction(t,r,n)}flush(t,r){return LB.flush(t,r)}resetReadTxn(t,r){return LB.resetReadTxn(t,r)}getBackup(t){return Yee(t)}};DB.exports=fI});function Ln(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Km(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(h=>typeof h=="string")||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="number"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a number, attempt to assign ${h}`);Ln(this)[u]=m},"set");break;case"Int":d=o(function(m){let h=m?.__op__?m.value:m;if(!(h>>0===h||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Long":d=o(function(m){let h=m?.__op__?m.value:m;if(!(Math.round(h)===m&&Math.abs(h)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="bigint"||m==null&&l.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be a number, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new Qn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Rs||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Ln(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be an object, attempt to assign ${m}`);Ln(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let p=m[u];if(p?.__op__){let _=this.getRecord()?.[u];return p.update(_)}return p}let h=this.getRecord()?.[u];if(h&&typeof h=="object"){let p=mI(h,l);if(p)return m||this._setChanges(m=Object.create(null)),m[u]=p}return h},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");Ln(this)[l]=u}),a("deleteProperty",function(l){Ln(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let h=u[f];m=m.update(h)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?xB:UB);break}c=l}while(c&&c!==UB&&c!==xB)}function BB(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(vB[t])return vB[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=mI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Wee(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function mI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends al{static{o(this,"TrackedObject")}},Km(r,t)),new r(e)):new al(e);case Array:let n=new X_(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=mI(a,t?.elements)),n[s]=a}return n;default:return e}}function Z_(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=Z_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function cl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=cl(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=fA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=cl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)zee.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function J_(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ol]||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(J_(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(J_(s))return!0}else return!0}else return!0}}return!1}var Qn,vB,UB,xB,al,zee,ol,X_,Vm,hI=ue(()=>{Qn=w(ge());zE();Kn();o(Ln,"getChanges");o(Km,"assignTrackedAccessors");vB=Object.prototype,UB=new Proxy({},{get:BB}),xB=new Proxy({},{get:BB,set:Wee});o(BB,"getProxiedProperty");o(Wee,"setProxiedProperty");o(mI,"trackObject");al=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Km(al,{},!0);o(Z_,"collapseData");zee=Object.prototype.hasOwnProperty;o(cl,"updateAndFreeze");o(J_,"hasChanges");ol=Symbol.for("has-array-changes"),X_=class extends Array{static{o(this,"TrackedArray")}#e;[ol];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[ol]=!0,super.splice(...t)}push(...t){return this[ol]=!0,super.push(...t)}pop(){return this[ol]=!0,super.pop()}unshift(...t){return this[ol]=!0,super.unshift(...t)}shift(){return this[ol]=!0,super.shift()}};X_.prototype.constructor=Array;Vm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var KB={};Oe(KB,{ResourceBridge:()=>_I});function gI({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 FB(e,t){let r=Gi(e),n=gI(e,r);if(!r)throw new ci.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;xt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Z_(d)}catch(f){d={message:(0,VB.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Gi(e){let t=e.database||e.schema||Qee,r=nt()[t];if(!r)throw(0,ci.handleHDBError)(new Error,jee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function HB(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*kB(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var GB,eg,ci,qB,pI,EI,$B,VB,jee,Qee,Jee,Xee,_I,YB=ue(()=>{GB=w(MB()),eg=w($u()),ci=w(ge());De();qB=w(Lm());k();pI=w(Co()),EI=w(oi()),$B=w(ie());xc();hI();VB=w(Q()),{HDB_ERROR_MSGS:jee}=ci.hdbErrors,Qee="data",Jee=1e4,Xee=10,_I=class extends GB.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let a of t.conditions||[])a?.attribute!==void 0&&(a.search_attribute=a.attribute),a?.comparator!==void 0&&(a.search_type=a.comparator),a?.value!==void 0&&(a.search_value=a.value);let r=(0,eg.default)(t,"conditions");if(r)throw(0,ci.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Gi(t);if(!n)throw new ci.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(a){if("conditions"in a&&a.conditions)return a.conditions=a.conditions.map(i),a;{let c=a;return{attribute:c.search_attribute??c.attribute,comparator:c.search_type??c.comparator,value:c.search_value!==void 0?c.search_value:c.value}}}return o(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:gI(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 a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ci.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Gi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Gi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Gi(t).dropTable()}createSchema(t){return Yu({database:t.schema,table:null}),pI.signalSchemaChange(new EI.SchemaEventMsg(process.pid,$.CREATE_SCHEMA,t.schema))}async dropSchema(t){await SI(t.schema),pI.signalSchemaChange(new EI.SchemaEventMsg(process.pid,$.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,qB.default)(t),s,i=nt()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),xt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Z_(m));for(let h in d)if(Object.prototype.hasOwnProperty.call(d,h)){let p=d[h];if(typeof p=="function")try{let _=p([[m]]);Array.isArray(_)&&(p=_[0].func_val,d[h]=p)}catch(_){throw _.message+="Trying to set key "+h+" on object"+JSON.stringify(d),_}}if(m)for(let h in m)Object.prototype.hasOwnProperty.call(d,h)||(d[h]=m[h]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=nt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),xt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return HB(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=nt()[t.schema][t.table];if(!r.createdTimeProperty)throw new ci.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:UE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,$B.asyncSetTimeout)(Xee),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Jee===0&&await u();return l.length>0&&await u(),s?HB(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,eg.default)(t,"hashes");if(r)throw r;return FB(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of FB(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Xy[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=t.attribute),t.value!==void 0&&(t.search_value=t.value);let n=(0,eg.default)(t,"value");if(n)throw n;let s=Gi(t);if(!s)throw new ci.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===UE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:gI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Gi(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){Gi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Gi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Gi(t),n={};switch(t.search_type){case xE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case xE.USERNAME:{let s=t.search_values;for await(let i of kB(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return kB(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(gI,"getSelect");o(FB,"getRecords");o(Gi,"getTable");o(HB,"createDeleteResponse");o(kB,"groupRecordsInHistory")});var Jn=M((mPe,WB)=>{"use strict";var{ResourceBridge:Zee}=(YB(),v(KB)),ete=oe();ete.initSync();var tg;function tte(){return tg||(tg=new Zee,tg)}o(tte,"getBridge");WB.exports=tte()});var JB=M((pPe,QB)=>{"use strict";var zB=require("lodash"),Ym=require("mathjs"),rte=require("jsonata"),jB=ie();QB.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?zB.uniqWith(e,zB.isEqual):e,"distinct_array"),searchJSON:nte,mad:Wm.bind(null,Ym.mad),mean:Wm.bind(null,Ym.mean),mode:Wm.bind(null,Ym.mode),prod:Wm.bind(null,Ym.prod),median:Wm.bind(null,Ym.median)};function Wm(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Wm,"aggregateFunction");function nte(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(jB.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),jB.isEmpty(this.__ala__.res[r])){let n=rte(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(nte,"searchJSON")});var ZB=M((_Pe,XB)=>{"use strict";var lr=require("moment"),TI="YYYY-MM-DDTHH:mm:ss.SSSZZ";lr.suppressDeprecationWarnings=!0;XB.exports={current_date:o(()=>lr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>lr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return lr(e).utc().format("YYYY");case"month":return lr(e).utc().format("MM");case"day":return lr(e).utc().format("DD");case"hour":return lr(e).utc().format("HH");case"minute":return lr(e).utc().format("mm");case"second":return lr(e).utc().format("ss");case"millisecond":return lr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>lr(e).utc().format(TI),"date"),date_format:o((e,t)=>lr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>lr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>lr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=lr(e).utc(),s=lr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>lr().utc().valueOf(),"now"),get_server_time:o(()=>lr().format(TI),"get_server_time"),offset_utc:o((e,t)=>lr(e).utc().utcOffset(t).format(TI),"offset_utc")}});var nF=M((SPe,rF)=>{"use strict";var ste=require("@turf/area"),ite=require("@turf/length"),ote=require("@turf/circle"),ate=require("@turf/difference"),cte=require("@turf/distance"),lte=require("@turf/boolean-contains"),ute=require("@turf/boolean-equal"),dte=require("@turf/boolean-disjoint"),fte=require("@turf/helpers"),eF=(k(),v(W)),Ye=ie(),Do=Q();rF.exports={geoArea:mte,geoLength:hte,geoCircle:pte,geoDifference:Ete,geoDistance:tF,geoNear:_te,geoContains:gte,geoEqual:Ste,geoCrosses:Tte,geoConvert:Rte};function mte(e){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return ste.default(e)}catch(t){return Do.trace(t,e),NaN}}o(mte,"geoArea");function hte(e,t){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return ite.default(e,{units:t||"kilometers"})}catch(r){return Do.trace(r,e),NaN}}o(hte,"geoLength");function pte(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return ote.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(pte,"geoCircle");function Ete(e,t){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return ate(e,t)}catch(r){return Do.trace(r,e,t),NaN}}o(Ete,"geoDifference");function tF(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return cte.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(tF,"geoDistance");function _te(e,t,r,n){if(Ye.isEmpty(e)||Ye.isEmpty(t))return!1;if(Ye.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return tF(e,t,n)<=r}catch(s){return Do.trace(s,e,t),!1}}o(_te,"geoNear");function gte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return lte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(gte,"geoContains");function Ste(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return ute.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Ste,"geoEqual");function Tte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return!dte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Tte,"geoCrosses");function Rte(e,t,r){if(Ye.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ye.isEmpty(t))throw new Error("geo_type is required");if(Ye.isEmpty(eF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(eF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ye.autoCastJSON(e)),fte[t](e,r)}o(Rte,"geoConvert")});var rg=M((RPe,sF)=>{var ll=JB(),Xn=ZB(),qi=nF();sF.exports=e=>{e.aggr.mad=e.aggr.MAD=ll.mad,e.aggr.mean=e.aggr.MEAN=ll.mean,e.aggr.mode=e.aggr.MODE=ll.mode,e.aggr.prod=e.aggr.PROD=ll.prod,e.aggr.median=e.aggr.MEDIAN=ll.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ll.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ll.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Xn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Xn.current_time,e.fn.extract=e.fn.EXTRACT=Xn.extract,e.fn.date=e.fn.DATE=Xn.date,e.fn.date_format=e.fn.DATE_FORMAT=Xn.date_format,e.fn.date_add=e.fn.DATE_ADD=Xn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Xn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Xn.date_diff,e.fn.now=e.fn.NOW=Xn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Xn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Xn.get_server_time,e.fn.getdate=e.fn.GETDATE=Xn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Xn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=qi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qi.geoNear}});var cF=M((yPe,aF)=>{"use strict";var zm=require("lodash"),Dn=require("alasql");Dn.options.cache=!1;var yte=rg(),iF=require("clone"),ng=require("recursive-iterator"),He=Q(),Xe=ie(),Wu=Jn(),Ate=(k(),v(W)),{hdbErrors:bte}=ge(),{getDatabases:oF}=(De(),v(mt)),Ite="IS NULL",li="There was a problem performing this search. Please check the logs and try again.";yte(Dn);var RI=class{static{o(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(li)}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(li)}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(li)}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(li)}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(li)}}_getColumns(){let t=new ng(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(iF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=zm.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=oF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(Xe.isEmpty(this.statement.where)){He.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ng(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 Dn.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 Dn.yy.LogicValue({value:i}):n instanceof Dn.yy.StringValue&&Xe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Dn.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 ng(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Xe.isEmpty(Ate.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Xe.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(Xe.isEmptyOrZeroLength(r.left.columnid)||Xe.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Xe.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!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[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(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&&zm.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 Dn.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(iF(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(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(Ite)>-1&&this.tables.forEach(s=>{let i={columnid:oF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=zm.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!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 d=await Wu.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),He.error(d),new Error(li)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.search_value=d;let m=await Wu.getDataByValue(f);for(let[h,p]of m)this.data[i].__mergedData[h]?this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]):(this.data[i].__mergedData[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(d){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),He.error(d),new Error(li)}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 d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let h=d[f];c.search_attribute=h.attribute,c.search_value=h.search_value;let p=await Wu.getDataByValue(c,h.operation);if(l)for(let[_]of p)this.data[i].__mergedData[_]||(this.data[i].__mergedData[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,g]of p)this.data[i].__mergedData[_]?this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]):(this.data[i].__mergedData[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,_))}}catch(d){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),He.error(d),new Error(li)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Wu.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),He.error(d),new Error(li)}}}_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 Dn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Dn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Dn.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 Dn.yy.FuncValue:new Dn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let p=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(p+=" ON "+h.on.toString()),i.push(p),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(h=>{let p=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hashName,_=h.as?h.as_orig:h.tableid_orig;a.push({key:`'${_}.${p}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${p}\` AS "${_}.${p}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,p=this._convertColumnsToIndexes(h,s);m=await Dn.promise(p,t),t=null}catch(h){throw He.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),He.error(h),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let h=0,p=m.length;h<p;h++){let _=m[h];a.forEach(g=>{_[g.key]!==null&&_[g.key]!==void 0&&g.keys.add(_[g.key])})}a.forEach(h=>{let p=Object.keys(this.data[`${h.schema}_${h.table}`].__mergedData),_=zm.difference(p,[...h.keys].map(g=>g.toString()));for(let g=0,y=_.length;g<y;g++){let T=_[g];delete this.data[`${h.schema}_${h.table}`].__mergedData[T]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new ng(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=zm.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(li)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await Wu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],h=l.get(m);for(let p=0;p<u;p++){let _=s.columns[p],g=h[_]===void 0?null:h[_];this.data[n].__mergedData[m].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}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();He.trace(`Final SQL: ${s}`),n=await Dn.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(bte.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].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let a=await Wu.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw He.error("There was an error when processing this SQL operation. Check your logs"),He.error(a),new Error(li)}}return Object.values(Object.values(this.data)[0].__mergedData)}};aF.exports=RI});var on=M((bPe,lF)=>{"use strict";var Nte=t0();lF.exports={searchByConditions:Ote,searchByHash:Cte,searchByValue:Pte,search:Lte};var yI=Jn(),{transformReq:AI}=ie(),wte=cF();async function Ote(e){return AI(e),yI.searchByConditions(e)}o(Ote,"searchByConditions");async function Cte(e){AI(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of yI.searchByHash(e))r&&t.push(r);return t}o(Cte,"searchByHash");async function Pte(e){AI(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of yI.searchByValue(e))t.push(r);return t}o(Pte,"searchByValue");function Lte(e,t){try{let r=new Nte(e);r.validate(),new wte(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Lte,"search")});var $i=M((NPe,mF)=>{"use strict";var jm=require("crypto"),Dte=oe(),{CONFIG_PARAMS:Mte}=(k(),v(W)),dF="aes-256-cbc",vte=32,Ute=16,bI=64,fF=32,xte=bI+fF,uF=new Map;mF.exports={encrypt:Bte,decrypt:Fte,createNatsTableStreamName:Hte};function Bte(e){let t=jm.randomBytes(vte),r=jm.randomBytes(Ute),n=jm.createCipheriv(dF,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Bte,"encrypt");function Fte(e){let t=e.substr(0,bI),r=e.substr(bI,fF),n=e.substr(xte,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=jm.createDecipheriv(dF,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Fte,"decrypt");function Hte(e,t){let r=Dte.get(Mte.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=uF.get(r);return n||(n=jm.createHash("md5").update(r).digest("hex"),uF.set(r,n)),n}o(Hte,"createNatsTableStreamName")});var Ua=M((CPe,_F)=>{"use strict";var OPe=on(),Qm=Q(),{validateBySchema:hF}=lt(),ul=require("joi"),kte=$i(),sg=ie(),{handleHDBError:ig,hdbErrors:Gte,ClientError:pF}=ge(),{HDB_ERROR_MSGS:og,HTTP_STATUS_CODES:II}=Gte,EF=oe();EF.initSync();var{getDatabases:NI}=(De(),v(mt)),qte=require("fs-extra"),$te=(k(),v(W));_F.exports={describeAll:Vte,describeTable:ag,describeSchema:Kte};async function Vte(e={}){try{let t=sg.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=NI(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let h in m)try{let p;if(t||s||r)p=await ag({schema:f,table:h,exactCount:u});else if(n&&n[f].describe&&n[f].tables[h].describe){let _=n[f].tables[h].attribute_permissions;p=await ag({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){Qm.error(p)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return Qm.error("Got an error in describeAll"),Qm.error(t),ig(new Error,og.DESCRIBE_ALL_ERR)}}o(Vte,"describeAll");async function ag(e,t){sg.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=hF(e,ul.object({database:ul.string(),table:ul.string().required(),exact_count:ul.boolean().strict()}));if(i)throw new pF(i.message);let c=NI()[r];if(!c)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),II.NOT_FOUND);let l=c[n];if(!l)throw ig(new Error,og.TABLE_NOT_FOUND(e.schema,e.table),II.NOT_FOUND);function u(h){d.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(p=>({type:p.type,name:p.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let h={};s.forEach(p=>{p.describe&&(h[p.attribute_name]=!0)}),l.attributes.forEach(p=>{h[p.name]&&u(p)})}else l.attributes?.forEach(h=>u(h));let f;try{f=(await qte.stat(l.primaryStore.env.path)).size}catch(h){Qm.warn("unable to get database size",h)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),EF.get($te.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=kte.createNatsTableStreamName(m.schema,m.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=h.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=h.estimatedRange;let p=l.auditStore;if(p)for(let _ of p.getKeys({reverse:!0,limit:1}))m.last_updated_record=_[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let _ of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=_}catch(h){Qm.warn(`unable to stat table dbi due to ${h}`)}return m}o(ag,"descTable");async function Kte(e){sg.transformReq(e);let t=hF(e,ul.object({database:ul.string(),exact_count:ul.boolean().strict()}));if(t)throw new pF(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=NI()[n];if(!i)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),II.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),sg.isEmpty(l)||l.describe){let u=await ag({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Kte,"describeSchema")});var Mn=M((LPe,RF)=>{"use strict";var lg=Cb(),Yr=ie(),Yte=require("util"),ug=Jn(),Wte=ii(),gF=Q(),{handleHDBError:dl,hdbErrors:zte}=ge(),{HTTP_STATUS_CODES:fl}=zte,jte=Yte.promisify(Wte.getTableSchema),Qte="updated",SF="inserted",TF="upserted";RF.exports={insert:Xte,update:Zte,upsert:ere,validation:Jte,flush:tre};async function Jte(e){if(Yr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Yr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Yr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await jte(e.schema,e.table),r=lg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Yr.isEmptyOrZeroLength(c[n]))throw gF.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(!Yr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw gF.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Yr.isEmpty(c[n])&&c[n]!==""&&s.has(Yr.autoCast(c[n]))&&(c.skip=!0),s.add(Yr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Jte,"validation");async function Xte(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=lg(e);if(t)throw dl(new Error,t.message,fl.BAD_REQUEST);Yr.transformReq(e);let r=Yr.checkSchemaTableExist(e.schema,e.table);if(r)throw dl(new Error,r,fl.BAD_REQUEST);let n=await ug.createRecords(e);return cg(SF,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Xte,"insertData");async function Zte(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=lg(e);if(t)throw dl(new Error,t.message,fl.BAD_REQUEST);Yr.transformReq(e);let r=Yr.checkSchemaTableExist(e.schema,e.table);if(r)throw dl(new Error,r,fl.BAD_REQUEST);let n=await ug.updateRecords(e);return Yr.isEmpty(n.existing_rows)?cg(Qte,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):cg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Zte,"updateData");async function ere(e){if(e.operation!=="upsert")throw dl(new Error,"invalid operation, must be upsert",fl.INTERNAL_SERVER_ERROR);let t=lg(e);if(t)throw dl(new Error,t.message,fl.BAD_REQUEST);Yr.transformReq(e);let r=Yr.checkSchemaTableExist(e.schema,e.table);if(r)throw dl(new Error,r,fl.BAD_REQUEST);let n=await ug.upsertRecords(e);return cg(TF,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(ere,"upsertData");function cg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===SF?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===TF?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(cg,"returnObject");function tre(e){return Yr.transformReq(e),ug.flush(e.schema,e.table)}o(tre,"flush")});var OI=M((MPe,bF)=>{var rre=lt(),wI=require("joi"),{hdbTable:nre,hdbDatabase:yF}=Hi(),AF={schema:yF,database:yF,table:nre},sre={date:wI.date().iso().required()},ire={timestamp:wI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};bF.exports=function(e,t){let r=t==="timestamp"?{...AF,...ire}:{...AF,...sre},n=wI.object(r);return rre.validateBySchema(e,n)}});var wF=M((vPe,NF)=>{var ore=lt(),CI=require("joi"),{hdbTable:are,hdbDatabase:IF}=Hi(),cre=CI.object({schema:IF,database:IF,table:are,hash_values:CI.array().required(),ids:CI.array()});NF.exports=function(e){return ore.validateBySchema(e,cre)}});var MI=M((UPe,OF)=>{"use strict";var PI=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},LI=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=a}},DI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};OF.exports={InsertObject:PI,NoSQLSeachObject:LI,DeleteResponseObject:DI}});var pl=M((BPe,MF)=>{"use strict";var PF=OI(),lre=wF(),ml=ie(),CF=require("moment"),LF=Q(),{promisify:ure,callbackify:dre}=require("util"),hl=(k(),v(W)),fre=ii(),vI=ure(fre.getTableSchema),UI=Jn(),{DeleteResponseObject:mre}=MI(),{handleHDBError:xa,hdbErrors:hre}=ge(),{HDB_ERROR_MSGS:dg,HTTP_STATUS_CODES:Ba}=hre,pre="records successfully deleted",Ere=dre(DF);MF.exports={delete:Ere,deleteRecord:DF,deleteFilesBefore:_re,deleteAuditLogsBefore:gre};async function _re(e){let t=PF(e,"date");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(ml.transformReq(e),!CF(e.date,CF.ISO_8601).isValid())throw xa(new Error,dg.INVALID_DATE,Ba.BAD_REQUEST,hl.LOG_LEVELS.ERROR,dg.INVALID_DATE,!0);let n=ml.checkSchemaTableExist(e.schema,e.table);if(n)throw xa(new Error,n,Ba.NOT_FOUND,hl.LOG_LEVELS.ERROR,n,!0);let s=await UI.deleteRecordsBefore(e);if(await vI(e.schema,e.table),LF.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(_re,"deleteFilesBefore");async function gre(e){let t=PF(e,"timestamp");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(ml.transformReq(e),isNaN(e.timestamp))throw xa(new Error,dg.INVALID_VALUE("Timestamp"),Ba.BAD_REQUEST,hl.LOG_LEVELS.ERROR,dg.INVALID_VALUE("Timestamp"),!0);let r=ml.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,hl.LOG_LEVELS.ERROR,r,!0);let n=await UI.deleteAuditLogsBefore(e);return await vI(e.schema,e.table),LF.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(gre,"deleteAuditLogsBefore");async function DF(e){e.ids&&(e.hash_values=e.ids);let t=lre(e);if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);ml.transformReq(e);let r=ml.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,hl.LOG_LEVELS.ERROR,r,!0);try{await vI(e.schema,e.table);let n=await UI.deleteRecords(e);return ml.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${pre}`),n}catch(n){if(n.message===hl.SEARCH_NOT_FOUND_MESSAGE){let s=new mre;return s.message=hl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(DF,"deleteRecord")});var fg={};Oe(fg,{HASH_FUNCTION:()=>Br,hash:()=>FI,validate:()=>HI});function xI(e=Xm){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Jm.randomBytes(e)).map(r=>t[r%t.length]).join("")}function FI(e,t=Br[UF?.toUpperCase()]??Br.SHA256){return BI[t](e)}function HI(e,t,r=Br[UF?.toUpperCase()]??Br.SHA256){return e?Sre[r](e,t):!1}var Jm,zu,vF,UF,Xm,xF,Br,BI,Sre,mg=ue(()=>{Jm=w(require("node:crypto")),zu=w(require("argon2")),vF=w(oe());k();UF=(0,vF.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Xm=16,xF=9,Br={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(xI,"generateSalt");BI={[Br.MD5]:(e,t=void 0)=>{t=t??xI(xF);let r=Jm.createHash(Br.MD5).update(e+t).digest("hex");return t+r},[Br.SHA256]:(e,t=void 0)=>{t=t??xI(Xm);let r=Jm.createHash(Br.SHA256).update(e+t).digest("hex");return t+r},[Br.ARGON2ID]:async e=>{let t=xI(Xm),r=await zu.hash(e,{type:zu.argon2id,salt:Buffer.from(t)});return t+r}},Sre={[Br.MD5]:(e,t)=>{let r=e.slice(0,xF);return e===BI[Br.MD5](t,r)},[Br.SHA256]:(e,t)=>{let r=e.slice(0,Xm);return e===BI[Br.SHA256](t,r)},[Br.ARGON2ID]:async(e,t)=>await zu.verify(e.slice(Xm),t)};o(FI,"hash");o(HI,"validate")});var FF=M((GPe,BF)=>{var kI=lt(),an={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 Tre(e){return an.password.presence=!0,an.username.presence=!0,an.role.presence=!0,an.active.presence=!0,kI.validateObject(e,an)}o(Tre,"addUserValidation");function Rre(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,kI.validateObject(e,an)}o(Rre,"alterUserValidation");function yre(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,kI.validateObject(e,an)}o(yre,"dropUserValidation");BF.exports={addUserValidation:Tre,alterUserValidation:Rre,dropUserValidation:yre}});var It=M((VPe,kF)=>{"use strict";var{platform:$Pe}=require("os"),Are="nats-server.zip",GI="nats-server",bre=process.platform==="win32"?`${GI}.exe`:GI,Ire=/^[^\s.,*>]+$/,HF="__request__",Nre=o(e=>`${e}.${HF}`,"REQUEST_SUBJECT"),wre={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Ore={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Cre={HUB:"hub.pid",LEAF:"leaf.pid"},Pre={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Lre={SUCCESS:"success",ERROR:"error"},Dre={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Mre={TXN:"txn",MSGID:"msgid"},ju={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},vre={[ju.ERR]:1,[ju.WRN]:2,[ju.INF]:3,[ju.DBG]:4,[ju.TRC]:5},Ure={debug:"-D",trace:"-DVV"};kF.exports={NATS_SERVER_ZIP:Are,NATS_SERVER_NAME:GI,NATS_BINARY_NAME:bre,PID_FILES:Cre,NATS_CONFIG_FILES:Ore,SERVER_SUFFIX:Pre,NATS_TERM_CONSTRAINTS_RX:Ire,REQUEST_SUFFIX:HF,UPDATE_REMOTE_RESPONSE_STATUSES:Lre,CLUSTER_STATUS_STATUSES:Dre,REQUEST_SUBJECT:Nre,SUBJECT_PREFIXES:Mre,MSG_HEADERS:wre,LOG_LEVELS:ju,LOG_LEVEL_FLAGS:Ure,LOG_LEVEL_HIERARCHY:vre}});var qI=M(cn=>{"use strict";var xre={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
11
+ `},"serialize"),compressible:!1,q:.8});rn.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()}});Rv={type:"application/json",serializeStream:sm,serialize:im,deserialize:l6,q:.5};rn.set("*/*",Rv);rn.set("",Rv);o(l6,"tryJSONParse");o(am,"registerContentHandlers");u6=(0,Sv.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=XE(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(XE,"findBestSerializer");hv=_A.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(cm,"serialize");o(ba,"serializeMessage");o(RA,"asyncSerialization");o(yA,"hasAsyncSerialization");o(d6,"streamToBuffer");f6=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(m6,"isBufferEncoding");o(h6,"parseContentType");o(To,"getDeserializer");o(p6,"deserializerUnknownType");o(E6,"transformIterable");o(JE,"toCsvStream")});var o_={};we(o_,{Blob:()=>Rs,blobsWereEncoded:()=>qc,cleanupOrphans:()=>P6,databasePaths:()=>bA,decodeBlobsWithWrites:()=>i_,decodeFromDatabase:()=>Ao,decodeWithBlobCallback:()=>fm,deleteBlob:()=>r_,deleteBlobsInObject:()=>Na,deleteRootBlobPathsForDB:()=>wA,encodeBlobsAsBuffers:()=>w6,encodeBlobsWithFilePath:()=>s_,findBlobsInObject:()=>Gc,getFileId:()=>n_,getFilePathForBlob:()=>Lv,getRootBlobPathsForDB:()=>Nu,isSaving:()=>R6,saveBlob:()=>dm,setDeletionDelay:()=>T6,startPreCommitBlobsForRecord:()=>OA});function Cv(){}function r_(e){let t=Lv(e);t&&setTimeout(()=>{(0,Ge.unlink)(t,r=>{r&&Ht.default.debug?.("Error trying to remove blob file",r)})},Pv)}function T6(e){Pv=e}function dm(e,t=!1){let r=Mr.get(e);if(!r)r={storageIndex:0,fileId:null,store:An},Mr.set(e,r);else{if(r.fileId)return r;r.store=An}return r.deleteOnFailure=t,A6(r),r.source?AA(e,r.source,r):r.contentBuffer?y6(e,r):AA(e,Ia.Readable.from(e.stream()),r),r}function AA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,Ge.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(g6),h=(0,t_.createDeflate)(),(0,Ia.pipeline)(t,h,f,_)):(m||f.write(_6),(0,Ia.pipeline)(t,f,_));function p(g){let R=BigInt(g),T=new Uint8Array(yr),y=new DataView(T.buffer);return R|=BigInt(a?NA:Ov)<<48n,y.setBigInt64(0,R),T}o(p,"createHeader");function _(g){let R=f.fd;if(g){if(i.unlock(d,0),R&&((0,Ge.close)(R),f.fd=null),r.deleteOnFailure)(0,Ge.unlink)(n,T=>{T&&Ht.default.debug?.("Error while deleting aborted blob file",T)});else try{if((0,Ge.statSync)(n).size===0){let T=Buffer.from(g.toString());(0,Ge.writeFile)(n,Buffer.concat([p(BigInt(T.length)+0xff000000000000n),T]),y=>{y&&Ht.default.debug?.("Error write error message to blob file",y)})}}catch(T){Ht.default.debug?.("Error checking blob file after abort",T)}u(g)}else{if(!m){m=!0;let T=h?h.bytesWritten:f.bytesWritten-yr;e.size=T,(0,Ge.write)(R,p(T),0,yr,0,_);return}i.unlock(d,0),c?(0,Ge.fdatasync)(R,T=>{T&&u(T),l(),(0,Ge.close)(R),f.fd=null}):(l(),(0,Ge.close)(R),f.fd=null)}}o(_,"finished")}),e}function n_(e){return Mr.get(e)?.fileId}function R6(e){return Mr.get(e)?.saving}function Lv(e){let t=Mr.get(e);return t?.fileId&&Iu(t)}function Nu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=bA.get(e);if(!t){if(!e.databaseName)return Ht.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,um.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,vi.join)(n,e.databaseName)):t=[(0,vi.join)((0,um.getHdbBasePath)(),"blobs",e.databaseName)],bA.set(e,t)}return t}async function wA(e){let t=Nu(e);t&&await Promise.all(t.map(r=>Dv(r)))}async function Dv(e){if((0,Ge.existsSync)(e)){for(let t of await(0,bn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Dv((0,vi.join)(e,t.name));else try{await(0,bn.unlink)((0,vi.join)(e,t.name))}catch(r){Ht.default.warn?.("Error deleting file",r)}try{await(0,bn.rmdir)(e)}catch(t){Ht.default.warn?.("Error deleting directory",t)}}}function Iu({storageIndex:e,fileId:t,store:r}){let n=Nu(r);return(0,vi.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 y6(e,t){let r=t.contentBuffer,n=r.length;if(!(n<wv))return e.size=n,AA(e,Ia.Readable.from([r]),t)}function A6(e){let t=Nu(e.store),r=b6(),n=t?.length>1?I6(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Iu(e),a=(0,vi.dirname)(i);(0,Ge.existsSync)(a)||(0,IA.ensureDirSync)(a),e.filePath=i}function b6(){let e=Iv.get(An);if(!e){let t=0,r=Nu(An);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,Ge.existsSync)(n))for(let c of(0,Ge.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,vi.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(An.getUserSharedBuffer("blob-file-id",e.buffer)),Iv.set(An,e)}return Number(Atomics.add(e,0,1n))}function I6(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(e_);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,N6(e)),e.frequencyTable[t%e_]}async function N6(e){if(!bn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,bn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,IA.ensureDirSync)(s),a=await(0,bn.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(e_),n=t.map(s=>1/s);for(let s=0;s<e_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function s_(e,t,r){yu=t,An=r,qc=!1;try{return e()}finally{yu=void 0,An=void 0}}function w6(e){qr=[];let t;try{t=e()}catch(n){throw qr=void 0,n}let r=qr.length<2?qr[0]:Promise.all(qr);return qr=void 0,r?r.then(()=>e()):t}function i_(e,t,r){try{qr=[],yo=r,An=t,e()}catch(s){throw yo=void 0,qr=void 0,s}yo=void 0;let n=qr.length<2?qr[0]:Promise.all(qr);return qr=void 0,n}function fm(e,t,r){An=r;try{return yo=t,e()}finally{yo=void 0}}function Ao(e,t){return An=t,e()}function Na(e){Gc(e,t=>{r_(t)})}function Gc(e,t){if(e instanceof Rs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Gc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Gc(e[r],t)}}function OA(e,t){let r=[];for(let n in e){let s=e[n];s instanceof bu&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(An=t,Promise.all(r.map(n=>dm(n,!0).saving??Promise.resolve())))}function C6(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function P6(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,a=Nu(r);if(a)for(let d of a)await c(d);return await l(),Ht.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,Ge.existsSync)(d))return;for(let f of await(0,bn.readdir)(d,{withFileTypes:!0})){let m=(0,vi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Ht.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let h=(0,Nv.getHeapStatistics)();h.used_heap_size>h.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Ht.default.error?.("Error searching path for blobs",d,f)}}o(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,um.get)(U.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Ht.default.warn?.("Checking for references to potential orphaned blobs in table",m);let h=e[m];for(let p of h.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{p.metadataFlags&$r&&p.value&&u(p.value),d++%f===0?await(0,Au.setTimeout)(1):await(0,Au.setImmediate)()}catch(_){Ht.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",_)}}Ht.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let h=Nt(m),p=n.tableStores[h.tableId],_=p?.getEntry(h.recordId);(!_||_.version!==h.version||!_.value)&&u(h.getValue(p)),d++%f===0?await(0,Au.setTimeout)(1):await(0,Au.setImmediate)()}catch(h){Ht.default.error?.("Error searching audit log for references to potential orphaned blobs failed",h)}Ht.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,bn.unlink)(m)}catch(h){Ht.default.warn?.("Error deleting file",h)}Ht.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}o(l,"removePathsThatAreNotReferenced");function u(d){Gc(d,f=>{if(f instanceof bu){let m=Mr.get(f);if(m.fileId!=null){let h=Iu(m);i.has(h)&&i.delete(h)}}})}o(u,"checkObjectForReferences")}var Mi,bn,Ge,t_,Ia,IA,um,vi,Ht,Nv,Au,wv,yr,Ov,NA,Av,_6,g6,bv,Mr,yo,Rs,yu,qr,An,qc,lm,ZE,S6,bu,Pv,bA,Iv,e_,O6,Kn=ce(()=>{Mi=require("msgpackr"),bn=require("node:fs/promises"),Ge=require("node:fs"),t_=require("node:zlib"),Ia=require("node:stream"),IA=require("fs-extra"),um=w(oe());k();vi=require("path"),Ht=w(ei());Ro();Li();Nv=require("node:v8"),Au=require("node:timers/promises"),wv=8192,yr=8,Ov=0,NA=1,Av=255,_6=new Uint8Array([0,Ov,255,255,255,255,255,255]),g6=new Uint8Array([0,NA,255,255,255,255,255,255]),bv=0xffffffffffff,Mr=new WeakMap,Rs=global.Blob||C6(),qc=!1,lm=new Uint8Array(8),ZE=new DataView(lm.buffer),S6=6e4;o(Cv,"InstanceOfBlobWithNoConstructor");Cv.prototype=Rs.prototype;bu=class e extends Cv{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Mr.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):(yA()&&RA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Mr.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=Iu(t),a,c=o(async()=>{let l,u=yr;try{if(l=await(0,bn.readFile)(i),l.length>=yr){l.copy(lm,0,0,yr);let f=ZE.getBigUint64(0);if(Number(f>>48n)===Av)throw new Error("Error in blob: "+l.subarray(yr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<bv&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,h=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!0,p(c()))))return a=!0,m.unlock(h,0),p(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===NA?new Promise((f,m)=>{(0,t_.deflate)(l.subarray(yr),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(yr))},"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=Mr.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(_){_.enqueue(r),_.close()}});let i=Iu(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((R,T)=>{(0,Ge.open)(i,"r",(y,N)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Ht.default.debug?.("File does not exist yet, waiting for it to be created",i,_),_-- >0))return setTimeout(()=>{p(),g(R,T)},20).unref();T(y),h.#e?.forEach(O=>O(y))}else a=N,R(N)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,R=100;return new Promise(o(function T(y,N){function O(Z){(0,Ge.close)(a),clearTimeout(d),u&&u.close(),N(Z),h.#e?.forEach(G=>G(Z))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,Ge.read)(a,F,0,F.length,c,(Z,G,Y)=>{if(l+=G,Z)return O(Z);if(c===0){if(G<yr){R-- >0&&f!==!1?(p(),Ht.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>T(y,N),20).unref()):(Ht.default.debug?.("File was empty, throwing error",i,R),O(new Error(`Blob ${t.fileId} was empty`)));return}Y.copy(lm,0,0,yr);let K=ZE.getBigUint64(0);if(Number(K>>48n)===Av)return O(new Error("Error in blob: "+Y.subarray(yr,G)));if(g=Number(K&0xffffffffffffn),g<bv&&h.size!==g&&(h.size=g,h.#t))for(let $ of h.#t)$(g);Y=Y.subarray(yr,G),l-=yr}else if(G===0){let K=Buffer.allocUnsafe(8);return(0,Ge.read)(a,K,0,yr,0,$=>{if($)return O($);if(lm.set(K),g=Number(ZE.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},S6).unref():(u=(0,Ge.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(y,N))}),T(y,N)):m?O(new Error("Blob is incomplete")):(m=!0,T(y,N));return}(0,Ge.close)(a),_.close(),y()})}else Y=Y.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,T(y,N);s&&l>=s&&(l>s&&(Y=Y.subarray(0,s-c)),l=g=s),n&&n>c&&(Y=Y.subarray(n-c))}c+=G;try{_.enqueue(Y)}catch(K){return Ht.default.debug?.("Error enqueuing chunk",K),y()}l===g&&((0,Ge.close)(a),_.close()),y()})},"readMore"))},"pull"),cancel(){(0,Ge.close)(a),clearTimeout(d),u&&u.close()}});function p(){if(f===void 0){let _=t.store,g=t.fileId+":blob";f=!_.attemptLock(g,0,()=>{f=!1}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=Mr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};Mr.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Mr.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Mr.get(this)?.saving??Promise.resolve()}},Pv=500;o(r_,"deleteBlob");o(T6,"setDeletionDelay");global.createBlob=function(e,t){let r=new bu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Mr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Ia.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Ia.Readable.from(e);else throw new Error("Invalid source type");return r};o(dm,"saveBlob");o(AA,"writeBlobWithStream");o(n_,"getFileId");o(R6,"isSaving");o(Lv,"getFilePathForBlob");bA=new Map;o(Nu,"getRootBlobPathsForDB");o(wA,"deleteRootBlobPathsForDB");o(Dv,"rimrafSteadily");o(Iu,"getFilePath");o(y6,"writeBlobWithBuffer");o(A6,"generateFilePath");Iv=new Map;o(b6,"getNextFileId");e_=128;o(I6,"getNextStorageIndex");o(N6,"createFrequencyTableForStoragePaths");o(s_,"encodeBlobsWithFilePath");o(w6,"encodeBlobsAsBuffers");o(i_,"decodeBlobsWithWrites");o(fm,"decodeWithBlobCallback");o(Ao,"decodeFromDatabase");o(Na,"deleteBlobsInObject");o(Gc,"findBlobsInObject");o(OA,"startPreCommitBlobsForRecord");O6=new Mi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Mi.addExtension)({Class:Rs,type:11,unpack:o(function(e){let t=O6.unpack(e),r=new bu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Mr.set(r,{storageIndex:t[1],fileId:t[2],store:An}),yo)return yo(r)??r;if(!An)throw new Error("No store specified, cannot load blob from storage")}else Mr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=Mr.get(e);if(yu!==void 0&&(qc=!0,t?.recordId!==void 0&&t.recordId!==yu))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<wv)return r.size=t.contentBuffer.length,(0,Mi.pack)([r,t.contentBuffer])}if(yu!==void 0){if(t=dm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=yu,(0,Mi.pack)([r,t.storageIndex,t.fileId])}if(t){if(yo)return yo(e),(0,Mi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Ge.readFileSync)(Iu(t));if(n.length>=yr&&(n.copy(lm,0,0,yr),Number(ZE.getBigUint64(0)&0xffffffffffffn)===n.length-yr))return Buffer.concat([(0,Mi.pack)([r]),n]);if(qr)qr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&qr)return qr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Mi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(C6,"polyfillBlob");o(P6,"cleanupOrphans")});var Bv={};we(Bv,{onStorageReclamation:()=>mm,runReclamationHandlers:()=>DA,setAvailableSpaceRatioGetter:()=>D6});function mm(e,t,r){(r||(0,c_.getWorkerIndex)()===(0,c_.getWorkerCount)()-1)&&(a_.has(e)||a_.set(e,[]),a_.get(e).push({priority:0,handler:t}),LA||(LA=setTimeout(DA,vv).unref()))}async function DA(){for(let[e,t]of a_)try{let r=await xv(e),n=L6/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(PA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){PA.default.error?.("Error running storage reclamation handlers",r)}LA=setTimeout(DA,vv).unref()}function D6(e){xv=e??Uv}var CA,c_,PA,l_,Mv,a_,L6,vv,LA,Uv,xv,u_=ce(()=>{CA=require("node:fs/promises"),c_=w(nt()),PA=w(ei());k();l_=w(oe()),Mv=w(ie());l_.default.initSync();a_=new Map,L6=l_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,vv=(0,Mv.convertToMS)(l_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(mm,"onStorageReclamation");Uv=o(async e=>{if(CA.statfs){let t=await(0,CA.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"),xv=Uv;o(DA,"runReclamationHandlers");o(D6,"setAvailableSpaceRatioGetter")});var Qv={};we(Qv,{ACTION_32_BIT:()=>p_,ACTION_64_BIT:()=>x6,AUDIT_STORE_OPTIONS:()=>Em,Decoder:()=>Vc,HAS_BLOBS:()=>$r,HAS_CURRENT_RESIDENCY_ID:()=>Kc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Sm,HAS_ORIGINATING_OPERATION:()=>gm,HAS_PREVIOUS_RESIDENCY_ID:()=>Yc,REMOTE_SEQUENCE_UPDATE:()=>E_,createAuditEntry:()=>Wc,getLastRemoved:()=>v6,openAuditStore:()=>m_,readAuditEntry:()=>Nt,removeAuditEntry:()=>h_,setAuditRetention:()=>U6,transactionKeyEncoder:()=>Yv});function m_(e){let t=e.auditStore=e.openDB(MA.AUDIT_STORE_NAME,{create:!1,...Em});t||(t=e.auditStore=e.openDB(MA.AUDIT_STORE_NAME,Em),Hv(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=UA;mm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,h;try{for(let{key:p,value:_}of t.getRange({start:1,snapshot:!1,end:Date.now()-vA/(1+i*i)})){try{m=h_(t,p,_)}catch(g){wu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=M6){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,vA/10):(Hv(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,pm.getWorkerIndex)()===(0,pm.getWorkerCount)()-1&&c(),(0,pm.getWorkerIndex)()===0&&!Fv)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Fv=!0,wu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function h_(e,t,r){let n=B6(r),s;if(n&$r){s=Nt(r);let i=e.tableStores[s.tableId];if(i){let a=s.type==="message"?null:i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Ao(()=>Na(s.getValue(i)),i.rootStore)}}if((n&15)===xA){s=s||Nt(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 Hv(e,t){BA[0]=t,e.put(Symbol.for("last-removed"),Wv)}function v6(e){let t=e.get(Symbol.for("last-removed"));if(t)return Wv.set(t),BA[0]}function U6(e,t=UA){vA=e,UA=t}function Wc(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=zv[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?wa.setFloat64(0,n):ys.set(FA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}R(s),R(t),g(r),wa.setFloat64(p,e),p+=8,l&Kc&&R(u),l&Yc&&R(d),l&Sm&&(wa.setFloat64(p,f),p+=8),l&gm&&R(jv[m]),i?g(i):ys[p++]=0,l?wa.setUint32(n?8:0,h|l|3221225472):ys[n?8:0]=h;let _=ys.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let y=p;p+=1,p=(0,$c.writeKey)(T,ys,p);let N=p-y-1;N>127?N>16383?(wu.error("Key or username was too large for audit entry",T),p=y+1,ys[y]=0):(ys.copyWithin(y+2,y+1,p),wa.setUint16(y,N|32768),p++):ys[y]=N}function R(T){T<128?ys[p++]=T:T<16384?(wa.setUint16(p,T|32768),p+=2):T<1056964608?(wa.setUint32(p,T|3221225472),p+=4):(ys[p]=255,wa.setUint32(p+1,T),p+=5)}}function B6(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 Vc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Nt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Vc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,h,p,_;if(i&Kc&&(m=n.readInt()),i&Yc&&(h=n.readInt()),i&Sm&&(p=n.readFloat64()),i&gm){let y=n.readInt();_=jv[y]}l=n.readInt();let g=n.position,R=n.position+=l,T;return{type:zv[i&7],tableId:c,nodeId:a,get recordId(){return(0,$c.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,$c.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(y,N,O){if(i&d_||i&hm&&!N)return T||(T=Ao(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),T;if(i&hm&&O)return dA(y.getEntry(this.recordId),O,y)},getBinaryValue(){return i&(d_|hm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return wu.error("Reading audit entry error",n,e),{}}}var $c,f_,MA,pm,Kv,wu,ys,wa,Yv,Em,vA,M6,BA,Wv,UA,Fv,d_,hm,kv,xA,Gv,qv,$v,Vv,p_,x6,E_,Kc,Yc,gm,Sm,$r,zv,jv,Vc,Li=ce(()=>{$c=require("ordered-binary"),f_=w(oe()),MA=w(Vt());k();pm=w(nt()),Kv=w(ie());zc();wu=w(Q());zE();Kn();u_();(0,f_.initSync)();ys=Buffer.alloc(2816),wa=new DataView(ys.buffer,ys.byteOffset,2816),Yv={writeKey(e,t,r){return e===_m?(t.set(_m,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,$c.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,$c.readKey)(e,t,r)}},Em={encoding:"binary",keyEncoder:Yv},vA=(0,Kv.convertToMS)((0,f_.get)(U.LOGGING_AUDITRETENTION))||86400*3,M6=1e3,BA=new Float64Array(1),Wv=new Uint8Array(BA.buffer),UA=1e4,Fv=!1;o(m_,"openAuditStore");o(h_,"removeAuditEntry");o(Hv,"updateLastRemoved");o(v6,"getLastRemoved");o(U6,"setAuditRetention");d_=16,hm=32,kv=1,xA=2,Gv=3,qv=4,$v=5,Vv=6,p_=14,x6=15,E_=11,Kc=512,Yc=1024,gm=2048,Sm=4096,$r=8192,zv={put:kv|d_,[kv]:"put",delete:xA,[xA]:"delete",message:Gv|d_,[Gv]:"message",invalidate:qv|hm,[qv]:"invalidate",patch:$v|hm,[$v]:"patch",relocate:Vv,[Vv]:"relocate"},jv={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Wc,"createAuditEntry");o(B6,"readAction");o(Nt,"readAuditEntry");Vc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var tU={};we(tU,{ENTRY:()=>H6,HAS_EXPIRATION:()=>T_,HAS_RESIDENCY_ID:()=>$A,HAS_STRUCTURE_UPDATE:()=>R_,LAST_TIMESTAMP_PLACEHOLDER:()=>_m,LOCAL_TIMESTAMP:()=>F6,METADATA:()=>Ou,NEW_TIMESTAMP_PLACEHOLDER:()=>Xv,NO_TIMESTAMP:()=>g_,PENDING_LOCAL_TIME:()=>VA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>FA,RecordEncoder:()=>qA,TIMESTAMP_ASSIGN_LAST:()=>G6,TIMESTAMP_ASSIGN_NEW:()=>Zv,TIMESTAMP_ASSIGN_PREVIOUS:()=>eU,TIMESTAMP_PLACEHOLDER:()=>__,TIMESTAMP_RECORD_PREVIOUS:()=>HA,entryMap:()=>Oa,handleLocalTimeForGets:()=>y_,lastMetadata:()=>lt,recordUpdater:()=>KA,removeEntry:()=>Jc});function $6(){return ym[0]=ym[0]^64,k6.getFloat64(0)}function y_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,lt=null;let l=r.call(this,a,c);return l&&(lt&&(l.metadataFlags=lt[Ou],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Oa.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){lt=null;let l=n.call(this,a,c);return lt&&l&&(Oa.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[Ou],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Qc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Qc.length;u++){let d=Qc[u].deref();(!d||d.isDone||d.isCommitted)&&Qc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function KA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){l==null?jc=g_:f?jc=i?.localTime?HA|eU:g_:jc=l?i?.localTime?HA|16384:Zv|16384:g_;let h=u?.expiresAt;if(h>=0&&(c|=T_),Rm=c,kA=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:jc>0},_,g=0;try{let R=i?.residencyId,T=u?.residencyId;T&&(GA=T,Rm|=$A,g|=Kc),R!==T&&(g|=Yc,R||(R=0)),c&T_&&(g|=Sm),u?.originatingOperation&&(g|=gm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&$r&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Na(i.value);let y;if(s!==void 0&&(y=s_(()=>e.put(n,s,p),n,e.rootStore),qc&&(g|=$r)),l){let N=u?.user?.username;if(m&&(s_(()=>e.encoder.encode(m),n,e.rootStore),qc&&(g|=$r)),e.encoder.hasStructureUpdate&&(g|=R_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let Z=Nt(F).previousLocalTime;return y=r.put(O,Wc(a,t,n,Z,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Tm,g,T,R,h),{ifVersion:_}),y}}y=r.put(s===void 0?Xv:_m,Wc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Tm,g,T,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:_})}return y}catch(R){throw R.message+=" id: "+n+" options: "+p,R}}}function Jc(e,t,r){if(t)return t.value&&t.metadataFlags&$r&&!e.auditStore?.getBinaryFast(t.localTime)&&Na(t.value),e.remove(t.key,r)}var Jv,S_,__,_m,FA,Xv,F6,Ou,H6,ym,k6,g_,Zv,G6,eU,HA,T_,$A,VA,R_,Oa,q6,Tm,jc,Rm,kA,GA,lt,qA,Qc,zc=ce(()=>{Jv=require("msgpackr");Li();S_=w(Q());Kn();Kn();__=new Uint8Array([1,1,1,1,4,64,0,0]),_m=new Uint8Array([1,1,1,1,1,0,0,0]),FA=new Uint8Array([1,1,1,1,3,64,0,0]),Xv=new Uint8Array([1,1,1,1,0,64,0,0]),F6=Symbol("local-timestamp"),Ou=Symbol("metadata"),H6=Symbol("entry"),ym=new Uint8Array(8),k6=new DataView(ym.buffer,0,8),g_=0,Zv=0,G6=1,eU=3,HA=4,T_=16,$A=32,VA=1,R_=256,Oa=new WeakMap,jc=0,Rm=-1,kA=-1,GA=0,lt=null,qA=class extends Jv.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Oa.get(this)?.version}getExpiresAt(){return Oa.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(jc||Rm>=0){let c=0,l=jc;l&&(c+=8,jc=0);let u=Rm,d=kA,f=GA;u>=0&&(c+=4,Rm=-1,d>=0&&(c+=8,kA=-1),f&&(c+=4,GA=0));let m=q6=n.call(this,i,a|2048|c);Tm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(__[4]=l,__[5]=l>>8,m.set(__,h),h+=8),qc&&(u|=$r),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|p_<<24),h+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(h,d),h+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,f)),m}else return Tm=n.call(this,i,a),Tm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(ym,0,c),c+=8;else for(let m=0;m<8;m++)ym[m]=t[c++];l=$6(),i=t[c]}let u,d;i<32&&(i===p_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&T_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&$A&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Ao(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[Ou]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:Ao(()=>super.decode(t,r),this.rootStore)}catch(c){return S_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o($6,"getTimestamp");o(y_,"handleLocalTimeForGets");Qc=[];setInterval(()=>{for(let e=0;e<Qc.length;e++){let t=Qc[e].deref();!t||t.isDone||t.isCommitted?Qc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(S_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):S_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(KA,"recordUpdater");o(Jc,"removeEntry")});function zA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let h=1;h<e.length;h++){let p=e[h],_=u(p);f=f.concat(_)}let m=new Set;return f.filter(h=>{let p=h.key??h;return m.has(p)?!1:(m.add(p),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?zA(f.conditions,f.operator,r,n,s,i,a,c):Du(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,h){return f.map((p,_)=>{if(p.conditions){let T=p.operator==="or",y=d(p.conditions,!T,h);return T?(N,O)=>y.some(F=>F(N,O)):(N,O)=>y.every(F=>F(N,O))}let g=(p.attribute||p[0])===r.primaryKey,R=bm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=X6(r.primaryStore,p.estimated_count,h)),R}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Du(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new Vr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],N=xi(n.attributes,y);if(N.relationship){if(c.length<2)throw new Vr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,Z=Du({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let G=!!xi(O.attributes,N.relationship.to)?.elements;Z=z6(Z,N,O.primaryStore,G,F)}if(N.relationship.from){let G=o(Y=>(Y?.key!==void 0&&(Y=Y.key),Du({attribute:N.relationship.from,value:Y},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,Z=j6(Z,N,O.primaryStore,F,G)):Z=Z.flatMap(G)}return Z}else if(c.length===1)c=c[0];else throw new Vr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,h,p,_;l instanceof Date&&(l=l.getTime());let g;switch(jA[u]||u){case"lt":m=!0,h=l;break;case"le":m=!0,h=l,p=!0;break;case"gt":m=l,_=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,h=l.slice(0),h[h.length-1]=Ui.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),h=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),h=l[1],h instanceof Date&&(h=h.getTime()),p=u==="gele"||u==="gtle"||u==="between",_=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,h=l,p=!0;break;case"ne":if(l===null){m=l,_=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new Vr.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>As.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,_=!1,R=bm(e,n,null,i,d)),typeof h=="string"&&h.length>As.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,p=!0,R=R??bm(e,n,null,i,d)),r){let y=m;m=h,h=y,y=!_,_=!p,p=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new Vr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Vr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new Vr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Vr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??bm(e,n,null,i,d),!R)throw new Vr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:m,end:h,inclusiveEnd:p,exclusiveStart:_,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(T).map(R?function({key:N,value:O}){return this?.isSync?O&&R(O)?N:Ca.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(O&&R(O)?N:Ca.SKIP)}catch(G){Z(G)}}))}:N=>N.value==null&&!(N.metadataFlags&(In|Xc))?Ca.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,a).map(y=>{if(typeof y=="object"&&y){let{key:N,...O}=y,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return y}):f.getRange(T).map(R?function({key:y,value:N}){let O;return typeof y=="string"&&y.length>As.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:y},this.isSync?R(O)?N:Ca.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(R(O)?N:Ca.SKIP)}catch(G){Z(G)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:N}){return this.isSync?N&&R(N)?y:Ca.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&R(N)?y:Ca.SKIP)}catch(Z){F(Z)}}))})}function xi(e,t){if(Array.isArray(t))if(t.length>1){let r=xi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?xi(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 z6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function j6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function bm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=xi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=bm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,h?.[d]?.joined,c[1]===m.primaryKey,i);if(!p)return;if(h){h.filters||(h.filters=[]),h.filters.push(p);return}let _=t.propertyResolvers?.[d];_.to&&(p.to=_.to);let g,R=o((y,N)=>{let O,F;return _?_.returnDirect?(O=_(y,r,N),F=lt):(F=_(y,r,N,!0),Array.isArray(F)?(O=F.map(Z=>Z.value),F=null):O=F?.value):O=y[d],{subObject:O,subEntry:F}},"getSubObject"),T=o((y,N)=>{if(_&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let Y of p.idFilter.idSet)e={attribute:_.from??t.primaryKey,value:Y};g=u(_.from??t.primaryKey,p.idFilter,!0,!0)}else g=u(_.from??t.primaryKey,p.idFilter,!1,!0);let G=g(y);return g.idFilter&&(T.idFilter=g.idFilter),G}let{subObject:O,subEntry:F}=R(y,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let Y=R(G).subObject;return Array.isArray(Y)?Y.filter(p).map(K=>K[m.primaryKey]):Y}}),O.some(p)):p(O,F):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),jA[a]||a){case As.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Ui.compareKeys)(d,l[0])>=0&&(0,Ui.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Ui.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Ui.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Ui.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Ui.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Ui.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Vr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,h){let p;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&b_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function R(T){let y=T[d],N;if(typeof y!="object"||!y||h?N=f(y):Array.isArray(y)?N=y.some(f):y instanceof Date&&(N=f(y.getTime())),m&&(g++,!N&&!R.idFilter&&++_/g*i>p)){let O=Du(e,r.transaction.getReadTxn(),!1,t),F;R.to?F=O.flatMap(G=>t.primaryStore.get(G)[R.to]):F=O.map(Mu);let Z=new Set(F);R.idFilter=G=>Z.has(Mu(G)),R.idFilter.idSet=Z}return N}return o(R,"recordFilter"),s&&(R.idFilter=f),R}o(u,"attributeComparator")}function b_(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/bo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=jA[n]||n,n===As.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=xi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=b_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*bo(e.indices[i.relationship.from])/(bo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=bo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=Y6*bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=K6*bo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=bo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=V6*bo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function I_(e,t){if(e)if(Io=e,Cu.lastIndex=0,Q6.test(e))try{if(t&&(t.conditions=[]),ti=t??new Lu,Am(ti,""),vr!==Io.length&&Kt("Unable to parse query, unexpected end of query"),ti.parseErrorMessage&&(ti.parseError=new YA(t.parseErrorMessage),!t))throw ti.parseError;return ti}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${vr} in '${Io}'`,ti.parseErrorMessage&&(r.message+=", "+ti.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Kt(e){let t=`${e} at position ${vr}`;ti.parseErrorMessage=ti.parseErrorMessage?ti.parseErrorMessage+", "+t:t}function Am(e,t){let r=Cu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Io);){vr=r.lastIndex;let[,d,f]=n;a?(d&&Kt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Kt(`invalid FIQL operator ${d}`),l=rU):(l=decodeURIComponent,i="equals",d||Kt("attribute must be specified before equality comparator"),s=Pu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=W6[f],l=WA[i]?rU:decodeURIComponent,d||Kt(`attribute must be specified before comparator ${f}`),s=Pu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Kt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Kt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Kt("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&nU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else A_(e,u),e.conditions.push(p)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Kt("conditions/comparisons are not allowed in a property list"):e.push(Pu(d)),s=void 0;break;case"(":Cu.lastIndex=vr;let h=Am(d?[]:new Lu,")");switch(d){case"":A_(e,u),e.conditions.push(h);break;case"limit":switch(h.length){case 1:e.limit=+h[0];break;case 2:e.offset=+h[0],e.limit=h[1]-e.offset;break;default:Kt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(h[0])&&h.length===1&&!h[0].name?(e.select=h[0],e.select.asArray=!0):h.length===1?e.select=h[0]:h.length===2&&h[1]===""?e.select=h.slice(0,1):e.select=h;break;case"group-by":Kt("group by is not implemented yet");case"sort":e.sort=sU(h);break;default:Kt(`unknown query function call ${d}`)}Io[vr]===","?r.lastIndex=++vr:a=!0,s=null;break;case"{":e.conditions&&Kt("property sets are not allowed in a queries"),d||Kt("property sets must have a defined parent property name"),Cu.lastIndex=vr,m=Am([],"}"),m.name=d,e.push(m),Io[vr]===","?r.lastIndex=++vr:a=!0;break;case"[":if(Cu.lastIndex=vr,d?(m=Am(new Lu,"]"),m.name=d):m=Am(e.conditions?new Lu:[],"]"),e.conditions)if(A_(e,u),Io[vr]==="="){l=decodeURIComponent,i="equals",s=Pu(d),r.lastIndex=++vr;break}else e.conditions.push(m),s=null;else e.push(m);Io[vr]===","?r.lastIndex=++vr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let p={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&nU(p,d),A_(e,u),e.conditions.push(p)}else d&&Kt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Pu(d));return e}else Kt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Kt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?J6:Cu,r.lastIndex=vr),vr===Io.length)return e}t&&Kt(`expected '${t}', but encountered end of string`)}function A_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Kt("Can not mix operators within a condition grouping"):e.operator=t)}function Pu(e){return e.indexOf(".")>-1?e.split(".").map(Pu):decodeURIComponent(e)}function rU(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 Vr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function nU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Vr.ClientError("wildcard can only be used at the end of a string")}function sU(e){let t=iU(e[0]);return e.length>1&&(t.next=sU(e.slice(1))),t}function iU(e){if(Array.isArray(e)){let t=iU(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Kt(`Unknown sort type ${e}`)}function Mu(e){return Array.isArray(e)?e.join("\0"):e}function bo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function X6(e,t,r){return t*r/bo(e)}var Vr,As,Ui,Ca,V6,K6,Y6,W6,WA,jA,YA,Q6,Cu,J6,vr,ti,Io,Lu,N_=ce(()=>{Vr=w(ge()),As=w(Vt()),Ui=require("ordered-binary"),Ca=require("lmdb");w_();zc();V6=.3,K6=.1,Y6=.05,W6={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},WA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(zA,"executeConditions");o(Du,"searchByIndex");o(xi,"findAttribute");o(z6,"joinTo");o(j6,"joinFrom");jA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(bm,"filterByType");o(b_,"estimateCondition");YA=class extends Vr.Violation{static{o(this,"SyntaxViolation")}},Q6=/[()[\]|!<>.]|(=\w*=)/,Cu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,J6=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(I_,"parseQuery");o(Kt,"recordError");o(Am,"parseBlock");o(A_,"assignOperator");o(Pu,"decodeProperty");o(rU,"typedDecoding");o(nU,"wildcardDecoding");o(sU,"toSortObject");o(iU,"toSortEntry");Lu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Mu,"flattenKey");o(bo,"estimatedEntryCount");o(X6,"intersectionEstimate")});var oU,ri,O_=ce(()=>{oU=w(Xs());Pa();ri=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,oU._assignPackageExport)("Resource",Ur)});var dU={};we(dU,{MultiPartId:()=>C_,Resource:()=>Ur,contextStorage:()=>Uu,snakeCase:()=>e8,transformForSelect:()=>xu});function e8(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function aU(e,t){if(Zc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Zc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new C_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Zc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Zc=!0,null;e[e.length-1]==="/"&&(Zc=!0)}return t.coerceId(decodeURIComponent(e))}function Nn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof _o?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new vu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let _=c.indexOf("?");_>-1&&(l=this.parseQuery(c.slice(_+1),s),c=c.slice(0,_),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ 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=new ri,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ri,l.id=c,c==null&&(u=!0);l||(l=new ri,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Uu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,h=p;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(h=o(_=>Uu.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return Ft(a,()=>{let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)},f);function p(_){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?_.allowRead(a.user,l,a):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(a.user,d,a):_.allowUpdate(a.user,d,a):t.type==="create"?_.allowCreate(a.user,d,a):_.allowDelete(a.user,l,a);if(g?.then)return g.then(R=>{if(!R)throw new vu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new vu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Yn(e,t){let r=new vu.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 QA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function xu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):QA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(QA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(QA(l,r,n)),f;for(let m of e){let h=d(m);h===void 0&&a&&(h=null),h?.then?(f||(f=[]),f.push(h.then(p=>u[m.name||m]=p))):u[m.name||m]=h}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=xu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var cU,lU,vu,uU,Uu,Z6,Ur,Zc,C_,Pa=ce(()=>{cU=require("crypto");rm();Ru();lU=w(Xs()),vu=w(ge());Bc();N_();uU=require("async_hooks");O_();Uu=new uU.AsyncLocalStorage,Z6={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ur=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Nn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=xu(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=Nn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Yn(t,"put")},{hasContent:!0,type:"update"});static patch=Nn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Yn(t,"patch")},{hasContent:!0,type:"update"});static delete=Nn(function(t,r,n,s){return t.delete?t.delete(r):Yn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,cU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Uu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),Ft(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Yn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Nn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Yn(t,"delete")},{hasContent:!1,type:"update"});static post=Nn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Nn(function(t,r,n,s){return t.update(r,s)},{hasContent:!0,type:"create"});static connect=Nn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Yn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Nn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Yn(t,"subscribe")},{type:"read"});static publish=Nn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Yn(t,"publish")},{hasContent:!0,type:"create"});static search=Nn(function(t,r,n){let s=t.search?t.search(r):Yn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=xu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Nn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Yn(t,"search")},{hasContent:!0,type:"read"});static copy=Nn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Yn(t,"copy")},{hasContent:!0,type:"create"});static move=Nn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Yn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Yn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return I_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&Z6[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:aU(t,this),isCollection:Zc}}let i=aU(t,this);return Zc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Vn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Vn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,lU._assignPackageExport)("Resource",Ur);o(e8,"snakeCase");o(aU,"pathToId");C_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Nn,"transactional");o(Yn,"missingMethod");o(QA,"selectFromObject");o(xu,"transformForSelect")});var el,JA=ce(()=>{el=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var hU={};we(hU,{Resources:()=>P_,keyArrayToString:()=>Bu,resetResources:()=>t8,resources:()=>bs});function t8(){return bs=new P_,Le.resources=bs,bs}function Bu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var fU,mU,P_,bs,Fu=ce(()=>{Bc();JA();fU=w(Q()),mU=w(ge());Dr();P_=class extends Map{static{o(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:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new mU.ServerError(`Conflicting paths for ${t}`);fU.default.error(c),i.Resource=new el(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ft(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(t8,"resetResources");o(Bu,"keyArrayToString")});function eb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=EU,r8(e.primaryStore,e.auditStore)):(c=pU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{_U(pU[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Bu(t);let d=new ZA(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function _U(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),gU(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Nt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Bu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,XA.info)("omitting",c,m.startTime,n);continue}try{let h;m.supportsTransactions&&m.txnInProgress!==i.version&&(h=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,h)}catch(h){console.error(h),(0,XA.info)(h)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function r8(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=EU[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{_U(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function gU(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function SU(e){return e.nextTransaction||(eb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),gU(e)),e.nextTransaction}var XA,pU,EU,ZA,tb=ce(()=>{XA=w(Q());Ru();Fu();Li();pU=Object.create(null),EU=Object.create(null);o(eb,"addSubscription");ZA=class extends Vn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(_U,"notifyFromTransactionData");o(r8,"listenToCommits");o(gU,"nextTransaction");o(SU,"whenNextTransaction")});var RU=M((awe,TU)=>{"use strict";var rb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};TU.exports=rb});var AU=M((lwe,yU)=>{"use strict";var nb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};yU.exports=nb});var Im=M((dwe,IU)=>{"use strict";var bU=oe(),n8=(k(),v(W)),{RecordEncoder:s8}=(zc(),v(tU));bU.initSync();var i8=bU.get(n8.CONFIG_PARAMS.STORAGE_CACHING)!==!1,sb=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=i8&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:s8})}};IU.exports=sb});var Nm=M((mwe,NU)=>{"use strict";var Wn=oe(),Is=(k(),v(W));Wn.initSync();var L_=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Wn.get(Is.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};NU.exports=L_;L_.MAX_DBS=1e4});var Tt=M((pwe,xU)=>{"use strict";var ob=require("lmdb"),ni=require("fs-extra"),zn=require("path"),D_=yn(),CU=Q(),wn=tn().LMDB_ERRORS_ENUM,M_=AU(),ab=Im(),PU=Nm(),La=Vt(),wU=(k(),v(W)),{table:o8,resetDatabases:a8}=(Me(),v(Et)),OU=oe(),si=La.INTERNAL_DBIS_NAME,LU=La.DBI_DEFINITION_NAME,c8="data.mdb",l8="lock.mdb",wm=".mdb",u8="-lock",ib=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ns(t,r),this.key_type=this.dbi[La.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[La.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new ob.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function v_(e,t){if(e===void 0)throw new Error(wn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(wn.ENV_NAME_REQUIRED)}o(v_,"pathEnvNameValidation");async function cb(e,t,r=!0){try{await ni.access(e)}catch(n){throw n.code==="ENOENT"?new Error(wn.INVALID_BASE_PATH):n}try{let n=zn.join(e,t+wm);return await ni.access(n,ni.constants.R_OK|ni.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ni.access(zn.join(e,t,c8),ni.constants.R_OK|ni.constants.F_OK),zn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(wn.INVALID_ENVIRONMENT)}else throw new Error(wn.INVALID_ENVIRONMENT);throw n}}o(cb,"validateEnvironmentPath");function U_(e,t){if(D_.validateEnv(e),t===void 0)throw new Error(wn.DBI_NAME_REQUIRED)}o(U_,"validateEnvDBIName");async function d8(e,t,r=!1,n=!1){v_(e,t);let s=zn.basename(e);t=t.toString();let i=OU.get(wU.CONFIG_PARAMS.DATABASES);i||OU.setProperty(wU.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await cb(e,t,n),DU(e,t,r)}catch(a){if(a.message===wn.INVALID_ENVIRONMENT){let c=zn.join(e,t);await ni.mkdirp(n?c:e);let l=new PU(n?c:c+wm,!1),u=ob.open(l);u.dbis=Object.create(null);let d=new ab(!1);u.openDB(si,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=lb(e,t,r);return u[La.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(d8,"createEnvironment");async function f8(e,t,r,n=!0){v_(e,t),t=t.toString();let s=zn.join(e,t);return o8({table:t,database:zn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(f8,"copyEnvironment");async function DU(e,t,r=!1){v_(e,t),t=t.toString();let n=lb(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 cb(e,t),i=zn.join(e,t+wm),a=s!=i,c=new PU(s,a),l=ob.open(c);l.dbis=Object.create(null);let u=vU(l);for(let d=0;d<u.length;d++)Ns(l,u[d]);return l[La.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(DU,"openEnvironment");async function m8(e,t,r=!1){v_(e,t),t=t.toString();let n=zn.join(e,t+wm),s=await cb(e,t);if(global.lmdb_map!==void 0){let i=lb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await MU(a),delete global.lmdb_map[i]}}await ni.remove(s),await ni.remove(s===n?s+u8:zn.join(zn.dirname(s),l8))}o(m8,"deleteEnvironment");async function MU(e){D_.validateEnv(e);let t=e[La.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(MU,"closeEnvironment");function lb(e,t,r=!1){let s=`${zn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(lb,"getCachedEnvironmentName");function h8(e){D_.validateEnv(e);let t=Object.create(null),r=Ns(e,si);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==si)try{t[n]=Object.assign(new M_,s)}catch{CU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(h8,"listDBIDefinitions");function vU(e){D_.validateEnv(e);let t=[],r=Ns(e,si);for(let{key:n}of r.getRange({start:!1}))n!==si&&t.push(n);return t}o(vU,"listDBIs");function p8(e,t){let n=Ns(e,si).getEntry(t),s=new M_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{CU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(p8,"getDBIDefinition");function UU(e,t,r,n=!r){if(U_(e,t),t=t.toString(),t===si)throw new Error(wn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ns(e,t)}catch(s){if(s.message===wn.DBI_DOES_NOT_EXIST){let i=new ab(r,n===!0),a=e.openDB(t,i),c=new M_(r===!0,n);return a[LU]=c,Ns(e,si).putSync(t,c),e.dbis[t]=a,a}throw s}}o(UU,"createDBI");function Ns(e,t){if(U_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==si?r=p8(e,t):r=new M_,r===void 0)throw new Error(wn.DBI_DOES_NOT_EXIST);let n;try{let s=new ab(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(wn.DBI_DOES_NOT_EXIST):s}return n[LU]=r,e.dbis[t]=n,n}o(Ns,"openDBI");function E8(e,t){U_(e,t),t=t.toString();let r=Ns(e,t),n=r.getStats();return r[La.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(E8,"statDBI");async function _8(e,t){try{let r=zn.join(e,t+wm);return(await ni.stat(r)).size}catch{throw new Error(wn.INVALID_ENVIRONMENT)}}o(_8,"environmentDataSize");function g8(e,t){if(U_(e,t),t=t.toString(),t===si)throw new Error(wn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ns(e,si).removeSync(t)}o(g8,"dropDBI");function S8(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ns(e,i)}catch(a){if(a.message===wn.DBI_DOES_NOT_EXIST)UU(e,i,i!==t,i===t),n=!0;else throw a}}n&&a8()}o(S8,"initializeDBIs");xU.exports={openDBI:Ns,openEnvironment:DU,createEnvironment:d8,listDBIs:vU,listDBIDefinitions:h8,createDBI:UU,dropDBI:g8,statDBI:E8,deleteEnvironment:m8,initializeDBIs:S8,TransactionCursor:ib,environmentDataSize:_8,copyEnvironment:f8,closeEnvironment:MU}});var HU=M((_we,FU)=>{"use strict";var ub=Tt(),T8=Q(),BU=tn().LMDB_ERRORS_ENUM;FU.exports=R8;async function R8(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await ub.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==BU.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await ub.closeEnvironment(global.lmdb_map[n]),await ub.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==BU.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){T8.error(t)}}o(R8,"cleanLMDBMap")});var No=M((Swe,y8)=>{y8.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_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ii=M((Twe,qU)=>{var A8=No(),{promisify:b8}=require("util"),{getDatabases:GU}=(Me(),v(Et));qU.exports={setSchemaDataToGlobal:kU,getTableSchema:I8,getSystemSchema:N8,setSchemaDataToGlobalAsync:b8(kU)};function kU(e){global.hdb_schema=GU(),e&&e()}o(kU,"setSchemaDataToGlobal");function I8(e,t,r){let n=GU()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(I8,"getTableSchema");function N8(){return A8}o(N8,"getSystemSchema")});var t0=M((Awe,e0)=>{"use strict";var db=require("recursive-iterator"),w8=require("alasql"),fb=require("clone"),$U=ie(),{handleHDBError:VU,hdbErrors:O8}=ge(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:YU}=O8,{getDatabases:C8}=(Me(),v(Et)),P8=["DISTINCT_ARRAY"],WU=Symbol("validateTables"),mb=Symbol("validateTable"),ywe=Symbol("getAllColumns"),zU=Symbol("validateAllColumns"),x_=Symbol("findColumn"),jU=Symbol("validateOrderBy"),Om=Symbol("validateSegment"),hb=Symbol("validateColumn"),QU=Symbol("setColumnsForTable"),JU=Symbol("checkColumnsForAsterisk"),XU=Symbol("validateGroupBy"),ZU=Symbol("hasColumns"),pb=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WU](),this[JU](),this[zU]()}[WU](){if(this[ZU]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mb](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mb](t.table)})}}[ZU](){let t=!1,r=new db(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[mb](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=C8();if(!r[t.databaseid])throw VU(new Error,KU.SCHEMA_NOT_FOUND(t.databaseid),YU.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw VU(new Error,KU.TABLE_NOT_FOUND(t.databaseid,t.tableid),YU.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=fb(s);i.table=fb(t),this.attributes.push(i)})}[x_](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)}[JU](){let t=new db(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[QU](r.tableid)}[QU](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new w8.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[zU](){this[Om](this.statement.columns,!1),this[Om](this.statement.joins,!1),this[Om](this.statement.where,!1),this[XU](this.statement.group,!1),this[Om](this.statement.order,!0)}[Om](t,r){if(!t)return;let n=new db(t),s=[];for(let{node:i,path:a}of n)!$U.isEmpty(i)&&!$U.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jU](i):s.push(this[hb](i)));return s}[XU](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&P8.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=fb(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[x_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[x_](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${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`}[jU](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[hb](t)}[hb](t){let r=this[x_](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]}};e0.exports=pb});var n0=M((Iwe,r0)=>{"use strict";var Eb=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};r0.exports=Eb});var i0=M((wwe,s0)=>{"use strict";var _b=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};s0.exports=_b});var a0=M((Cwe,o0)=>{"use strict";var gb=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};o0.exports=gb});var l0=M((Lwe,c0)=>{"use strict";var Sb=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};c0.exports=Sb});var rl=M((xwe,f0)=>{"use strict";var L8=Tt(),D8=i0(),M8=a0(),v8=l0(),Bi=yn(),Cm=tn().LMDB_ERRORS_ENUM,U8=Vt(),wo=(k(),v(W)),x8=ie(),B8=require("uuid"),Mwe=require("lmdb"),{handleHDBError:F8,hdbErrors:H8}=ge(),{OVERFLOW_MARKER:vwe,MAX_SEARCH_KEY_LENGTH:Uwe}=U8,u0=oe();u0.initSync();var B_=u0.get(wo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Tb=wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,tl=wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function k8(e,t,r,n,s=Bi.getNextMonotonicTime()){bb(e,t,r,n),Rb(e,t,r);let i=new D8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];d0(u,!0,s);let d=G8(e,t,r,u),f=u[t];a.push(d),c.push(f)}return yb(a,c,n,i,s)}o(k8,"insertRecords");function G8(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][wo.FUNC_VAL],n[a]=c)}let l=Bi.getIndexedValues(c),u=e.dbis[a];if(l){B_&&u.prefetch(l.map(d=>({key:d,value:s})),F_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}B_&&e.dbis[t].prefetch([s],F_),e.dbis[t].put(s,n,n[tl])})}o(G8,"insertRecord");function q8(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(q8,"removeSkippedRecords");function d0(e,t,r){let n=r>0;(n||!Number.isInteger(e[tl]))&&(e[tl]=r||(r=Bi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Tb]))&&(e[Tb]=r||Bi.getNextMonotonicTime()):delete e[Tb]}o(d0,"setTimestamps");function Rb(e,t,r){r.indexOf(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),L8.initializeDBIs(e,t,r)}o(Rb,"initializeTransaction");async function $8(e,t,r,n,s=Bi.getNextMonotonicTime()){bb(e,t,r,n),Rb(e,t,r);let i=new M8,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=Ab(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return yb(c,l,n,i,s,a)}o($8,"updateRecords");async function V8(e,t,r,n,s=Bi.getNextMonotonicTime()){try{bb(e,t,r,n)}catch(l){throw F8(l,l.message,H8.HTTP_STATUS_CODES.BAD_REQUEST)}Rb(e,t,r);let i=new v8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;x8.isEmpty(u[t])?(d=B8.v4(),u[t]=d):d=u[t];let f=Ab(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return yb(a,c,n,i,s)}o(V8,"upsertRecords");async function yb(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Bi.getNextMonotonicTime(),q8(r,i),n}o(yb,"finalizeWrite");function Ab(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(d0(r,!d,a),Number.isInteger(r[tl])&&u[tl]>r[tl])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let _=r[p],g=e.dbis[p];if(g===void 0)continue;let R=u[p];if(typeof _=="function"){let y=_([[u]]);Array.isArray(y)&&(_=y[0][wo.FUNC_VAL],r[p]=_)}if(_===R)continue;let T=Bi.getIndexedValues(R);if(T){B_&&g.prefetch(T.map(y=>({key:y,value:n})),F_);for(let y=0,N=T.length;y<N;y++)g.remove(T[y],n)}if(T=Bi.getIndexedValues(_),T){B_&&g.prefetch(T.map(y=>({key:y,value:n})),F_);for(let y=0,N=T.length;y<N;y++)g.put(T[y],n)}}let h={...u,...r};c.put(n,h,h[tl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:Ab(e,t,r,n,s,i,a))}o(Ab,"updateUpsertRecord");function K8(e,t,r){if(Bi.validateEnv(e),t===void 0)throw new Error(Cm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cm.WRITE_ATTRIBUTES_REQUIRED):new Error(Cm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(K8,"validateBasic");function bb(e,t,r,n){if(K8(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Cm.RECORDS_REQUIRED):new Error(Cm.RECORDS_MUST_BE_ARRAY)}o(bb,"validateWrite");function F_(){}o(F_,"noop");f0.exports={insertRecords:k8,updateRecords:$8,upsertRecords:V8}});var ut=M((Fwe,m0)=>{"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:o(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:o(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};m0.exports={validateObject:Y8,validateObjectAsync:W8,validateBySchema:z8};function Y8(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}o(Y8,"validateObject");async function W8(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}o(W8,"validateObjectAsync");function z8(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(z8,"validateBySchema")});var p0=M((kwe,h0)=>{"use strict";var j8=require("uuid"),Ib=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||j8.v4(),this.schema_table=`${this.schema}.${this.table}`}};h0.exports=Ib});var H_=M((qwe,E0)=>{"use strict";var Q8=p0(),Nb=class extends Q8{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};E0.exports=Nb});var g0=M((Vwe,_0)=>{"use strict";_0.exports=X8;var J8="inserted";function X8(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===J8?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(X8,"returnObject")});var k_=M((Wwe,T0)=>{"use strict";var Z8=(k(),v(W)),wb=Tt(),eZ=rl(),{getSystemSchemaPath:tZ,getSchemaPath:rZ}=It(),Ywe=No(),{validateBySchema:nZ}=ut(),Pm=require("joi"),sZ=H_(),iZ=g0(),{handleHDBError:oZ,hdbErrors:aZ,ClientError:cZ}=ge(),S0=ie(),{HTTP_STATUS_CODES:lZ}=aZ,uZ="inserted";T0.exports=dZ;async function dZ(e){let t=nZ(e,Pm.object({database:Pm.string(),schema:Pm.string(),table:Pm.string().required(),attribute:Pm.string().required()}));if(t)throw new cZ(t.message);let r=!e.skip_table_check&&S0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw oZ(new Error,r,lZ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=S0.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 sZ(e.schema,e.table,e.attribute,e.id);try{let i=await wb.openEnvironment(rZ(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}`);wb.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await wb.openEnvironment(tZ(),Z8.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await eZ.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return iZ(uZ,c,{records:[s]},l)}catch(i){throw i}}o(dZ,"lmdbCreateAttribute")});var Hi=M((jwe,A0)=>{"use strict";var y0=ie(),R0=(k(),v(W)),Hu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fi=require("joi"),Da={schema_format:{pattern:Hu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},fZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number(),Fi.array()).required(),mZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()),hZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()).required();function pZ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Da.schema_length.maximum?`'${e}' maximum of 250 characters`:Hu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(pZ,"checkValidTable");function EZ(e,t){return y0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(EZ,"validateSchemaExists");function _Z(e,t){let r=t.state.ancestors[0].schema;return y0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(_Z,"validateTableExists");function gZ(e,t){return e.toLowerCase()===R0.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${R0.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(gZ,"validateSchemaName");A0.exports={commonValidators:Da,schemaRegex:Hu,hdbSchemaTable:fZ,validateSchemaExists:EZ,validateTableExists:_Z,validateSchemaName:gZ,checkValidTable:pZ,hdbDatabase:mZ,hdbTable:hZ}});var Cb=M((Jwe,I0)=>{var{hdbTable:SZ,hdbDatabase:b0}=Hi(),TZ=ut(),Ob=require("joi"),RZ={undefined:"undefined",null:"null"},yZ=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||RZ[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),AZ=Ob.object({database:b0,schema:b0,table:SZ,records:Ob.array().items(Ob.object().custom(yZ)).required()});I0.exports=function(e){return TZ.validateBySchema(e,AZ)}});var Lm=M((eOe,w0)=>{"use strict";var Oo=ie(),N0=Q(),Zwe=Cb(),{getDatabases:bZ}=(Me(),v(Et)),{ClientError:nl}=ge();w0.exports=IZ;function IZ(e){if(Oo.isEmpty(e))throw new nl("invalid update parameters defined.");if(Oo.isEmptyOrZeroLength(e.schema))throw new nl("invalid schema specified.");if(Oo.isEmptyOrZeroLength(e.table))throw new nl("invalid table specified.");if(!Array.isArray(e.records))throw new nl("records must be an array");let t=bZ()[e.schema]?.[e.table];if(Oo.isEmpty(t))throw new nl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Oo.isEmptyOrZeroLength(a[r]))throw N0.error("a valid hash attribute must be provided with update record:",a),new nl("a valid hash attribute must be provided with update record, check log for more info");if(!Oo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw N0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new nl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Oo.isEmpty(a[r])&&a[r]!==""&&n.has(Oo.autoCast(a[r]))&&(a.skip=!0),n.add(Oo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(IZ,"insertUpdateValidate")});var G_=M((rOe,C0)=>{"use strict";var O0=ie(),NZ=(k(),v(W)),wZ=Q(),OZ=k_(),CZ=H_(),PZ=Co(),{SchemaEventMsg:LZ}=oi(),DZ="already exists in";C0.exports=MZ;async function MZ(e,t,r){if(O0.isEmptyOrZeroLength(r))return r;let n=[];O0.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 vZ(e,t.schema,t.name,i)})),s}o(MZ,"lmdbCheckForNewAttributes");async function vZ(e,t,r,n){let s=new CZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await UZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DZ))wZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(vZ,"createNewAttribute");async function UZ(e){let t;return t=await OZ(e),PZ.signalSchemaChange(new LZ(process.pid,NZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(UZ,"createAttribute")});var ku=M((sOe,P0)=>{"use strict";var Pb=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};P0.exports=Pb});var D0=M((oOe,L0)=>{"use strict";var xZ=ku(),BZ=(k(),v(W)).OPERATIONS_ENUM,Lb=class extends xZ{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(BZ.INSERT,r,n,s,i),this.records=t}};L0.exports=Lb});var v0=M((cOe,M0)=>{"use strict";var FZ=ku(),HZ=(k(),v(W)).OPERATIONS_ENUM,Db=class extends FZ{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(HZ.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};M0.exports=Db});var x0=M((uOe,U0)=>{"use strict";var kZ=ku(),GZ=(k(),v(W)).OPERATIONS_ENUM,Mb=class extends kZ{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(GZ.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};U0.exports=Mb});var F0=M((fOe,B0)=>{"use strict";var qZ=ku(),$Z=(k(),v(W)).OPERATIONS_ENUM,vb=class extends qZ{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super($Z.DELETE,n,s,t,i),this.original_records=r}};B0.exports=vb});var Dm=M((pOe,q0)=>{"use strict";var hOe=require("path"),H0=Tt(),VZ=D0(),KZ=v0(),YZ=x0(),WZ=F0(),Gu=Vt(),k0=ie(),{CONFIG_PARAMS:zZ}=(k(),v(W)),G0=oe();G0.initSync();var q_=(k(),v(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:jZ}=It();q0.exports=QZ;async function QZ(e,t){if(G0.get(zZ.LOGGING_AUDITLOG)===!1)return;let r=jZ(e.schema,e.table),n=await H0.openEnvironment(r,e.table,!0),s=JZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){H0.initializeDBIs(n,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Gu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),k0.isEmpty(s.user_name)||n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(QZ,"writeTransaction");function JZ(e,t){let r=k0.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===q_.INSERT)return new VZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new KZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new YZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new WZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(JZ,"createTransactionObject")});var Ub=M((gOe,$0)=>{"use strict";var XZ=Lm(),_Oe=Zf(),Mm=(k(),v(W)),ZZ=em(),e5=rl().insertRecords,t5=Tt(),r5=Q(),n5=G_(),{getSchemaPath:s5}=It(),i5=Dm();$0.exports=o5;async function o5(e){try{let{schemaTable:t,attributes:r}=XZ(e);ZZ(e,r,t.hash_attribute),e.schema!==Mm.SYSTEM_SCHEMA_NAME&&(r.includes(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await n5(e.hdb_auth_header,t,r),s=s5(e.schema,e.table),i=await t5.openEnvironment(s,e.table),a=await e5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await i5(e,a)}catch(c){r5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(o5,"lmdbCreateRecords")});var Y0=M((TOe,K0)=>{"use strict";var V0=(k(),v(W)),a5=Ub(),c5=Zf(),l5=require("fs-extra"),{getSchemaPath:u5}=It();K0.exports=d5;async function d5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new c5(V0.SYSTEM_SCHEMA_NAME,V0.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await a5(r),await l5.mkdirp(u5(e.schema))}o(d5,"lmdbCreateSchema")});var z0=M((yOe,W0)=>{"use strict";var xb=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};W0.exports=xb});var X0=M((wOe,J0)=>{"use strict";var j0=Tt(),Bb=yn(),Fb=tn().LMDB_ERRORS_ENUM,f5=Vt(),Q0=Q(),bOe=ie(),m5=require("lmdb"),h5=z0(),p5=(k(),v(W)),{OVERFLOW_MARKER:IOe,MAX_SEARCH_KEY_LENGTH:NOe}=f5,E5=p5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _5(e,t,r,n){if(Bb.validateEnv(e),t===void 0)throw new Error(Fb.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Fb.IDS_REQUIRED):new Error(Fb.IDS_MUST_BE_ITERABLE);try{let s=j0.listDBIs(e);j0.initializeDBIs(e,t,s);let i=new h5,a,c=[],l=[];for(let m=0,h=r.length;m<h;m++)try{a=r[m];let p=e.dbis[t].get(a);if(!p||n&&p[E5]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,m5.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let R=s[g];if(!p.hasOwnProperty(R)||R===t)continue;let T=e.dbis[R],y=p[R];if(y!=null)try{let N=Bb.getIndexedValues(y);if(N)for(let O=0,F=N.length;O<F;O++)T.remove(N[O],a)}catch{Q0.warn(`cannot delete from attribute: ${R}, ${y}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){Q0.warn(p),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,h=d.length;m<h;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let h=u[m];i.original_records.splice(h-f,1),f++}return i.txn_time=Bb.getNextMonotonicTime(),i}catch(s){throw s}}o(_5,"deleteRecords");J0.exports={deleteRecords:_5}});var vm=M((COe,ex)=>{"use strict";var qu=ie(),g5=X0(),S5=Tt(),{getSchemaPath:T5}=It(),R5=Dm(),y5=Q();ex.exports=A5;async function A5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(qu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(qu.isEmptyOrZeroLength(e.hash_values)&&!qu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];qu.isEmpty(l)||e.hash_values.push(l)}}if(qu.isEmptyOrZeroLength(e.hash_values))return Z0([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(qu.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=T5(e.schema,e.table),i=await S5.openEnvironment(s,e.table),a=await g5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await R5(e,a)}catch(c){y5.error(`unable to write transaction due to ${c.message}`)}return Z0(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(A5,"lmdbDeleteRecords");function Z0(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(Z0,"createDeleteResponse")});var kb=M((DOe,tx)=>{"use strict";var b5=(k(),v(W)),LOe=yn();function Hb(e,t){let r=Object.create(null);if(t.length===1&&b5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(Hb,"parseRow");function I5(e,t,r,n){let s=Hb(r,e);n.push(s)}o(I5,"searchAll");function N5(e,t,r,n){let s=Hb(r,e);n[t]=s}o(N5,"searchAllToMap");function w5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(w5,"iterateDBI");function sl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(sl,"pushResults");function O5(e,t,r,n,s,i){t.toString().endsWith(e)&&sl(t,r,n,s,i)}o(O5,"endsWith");function C5(e,t,r,n,s,i){t.toString().includes(e)&&sl(t,r,n,s,i)}o(C5,"contains");function P5(e,t,r,n,s,i){t>e&&sl(t,r,n,s,i)}o(P5,"greaterThanCompare");function L5(e,t,r,n,s,i){t>=e&&sl(t,r,n,s,i)}o(L5,"greaterThanEqualCompare");function D5(e,t,r,n,s,i){t<e&&sl(t,r,n,s,i)}o(D5,"lessThanCompare");function M5(e,t,r,n,s,i){t<=e&&sl(t,r,n,s,i)}o(M5,"lessThanEqualCompare");tx.exports={parseRow:Hb,searchAll:I5,searchAllToMap:N5,iterateDBI:w5,endsWith:O5,contains:C5,greaterThanCompare:P5,greaterThanEqualCompare:L5,lessThanCompare:D5,lessThanEqualCompare:M5,pushResults:sl}});var $u=M((BOe,cx)=>{"use strict";var Ma=Tt(),vOe=Q(),jn=yn(),$_=Vt(),Zt=tn().LMDB_ERRORS_ENUM,UOe=ie(),v5=(k(),v(W)),V_=kb(),{parseRow:U5}=V_,xOe=require("lmdb"),{OVERFLOW_MARKER:rx,MAX_SEARCH_KEY_LENGTH:x5}=$_;function nx(e,t,r,n=!1,s=void 0,i=void 0){return il(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(nx,"iterateFullIndex");function Um(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return il(e,t,r,(d,f,m,h)=>{let T={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(T.values=!1,f.getRange(T).map(y=>({value:y}))):f.getRange(T)})}o(Um,"iterateRangeBetween");function il(e,t,r,n){let s=e.database||e,i=Ma.openDBI(s,r);i[$_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ma.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(il,"setupTransaction");function sx(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(rx)){if(!s)if(r)s=Ma.openDBI(e,r);else{let l=Ma.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Ma.openDBI(e,l[u]),!s[$_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(sx,"getOverflowCheck");function B5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return il(e,t,t,(a,c,l)=>(K_(r),r=xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>U5(u.value,r))))}o(B5,"searchAll");function F5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);K_(r),r=xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of nx(e,t,t,n,s,i))a.set(c,V_.parseRow(l,r));return a}o(F5,"searchAllToMap");function H5(e,t,r=!1,n=void 0,s=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=nx(e,void 0,t,r,n,s),c=a.transaction,l=sx(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(H5,"iterateDBI");function k5(e,t){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return Ma.statDBI(e,t).entryCount}o(k5,"countAll");function G5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),il(e,t,r,(c,l,u,d)=>(n=jn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(G5,"equals");function q5(e,t,r){return va(e,t,r),Ma.openDBI(e,t).getValuesCount(r)}o(q5,"count");function $5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),il(e,null,r,(c,l)=>{n=jn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:h}=m;if(h!==f){if(h.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o($5,"startsWith");function V5(e,t,r,n,s=!1,i=void 0,a=void 0){return ix(e,t,r,n,s,i,a,!0)}o(V5,"endsWith");function ix(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return va(e,r,n),il(e,null,r,(l,u,d,f)=>{let m=sx(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let p=h.toString();return p.endsWith(rx)?u.getValues(h,{transaction:l}).map(_=>{let g=m(h,_);if(c?g.endsWith(n):g.includes(n))return{key:g,value:_}}).filter(_=>_):(c?p.endsWith(n):p.includes(n))?u[$_.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(_=>({key:h,value:_})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(ix,"contains");function K5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!0,!1)}o(K5,"greaterThan");function Y5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!1,!1)}o(Y5,"greaterThanEqual");function W5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!0)}o(W5,"lessThan");function z5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!1)}o(z5,"lessThanEqual");function j5(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(jn.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=jn.convertKeyValueToWrite(n),s=jn.convertKeyValueToWrite(s),n>s)throw new Error(Zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Um(e,t,r,n,s,i,a,c)}o(j5,"between");function Q5(e,t,r,n){jn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),r=xm(s,r),n===void 0)throw new Error(Zt.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=V_.parseRow(c,r)),a}o(Q5,"searchByHash");function J5(e,t,r){jn.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}o(J5,"checkHashExists");function X5(e,t,r,n,s=[]){return ax(e,t,r,n,s),ox(e,t,r,n,s).map(i=>i[1])}o(X5,"batchSearchByHash");function Z5(e,t,r,n,s=[]){ax(e,t,r,n,s);let i=new Map;for(let[a,c]of ox(e,t,r,n,s))i.set(a,c);return i}o(Z5,"batchSearchByHashToMap");function ox(e,t,r,n,s=[]){return il(e,t,t,(i,a,c)=>{r=xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,V_.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(ox,"batchHashSearch");function ax(e,t,r,n,s){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),n==null)throw new Error(Zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Zt.IDS_MUST_BE_ITERABLE)}o(ax,"initializeBatchSearchByHash");function K_(e){if(!Array.isArray(e))throw e===void 0?new Error(Zt.FETCH_ATTRIBUTES_REQUIRED):new Error(Zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(K_,"validateFetchAttributes");function va(e,t,r){if(jn.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>x5)throw new Error(Zt.SEARCH_VALUE_TOO_LARGE)}o(va,"validateComparisonFunctions");function xm(e,t){return t.length===1&&v5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ma.listDBIs(e)),t}o(xm,"setGetWholeRowAttributes");cx.exports={searchAll:B5,searchAllToMap:F5,count:q5,countAll:k5,equals:G5,startsWith:$5,endsWith:V5,contains:ix,searchByHash:Q5,setGetWholeRowAttributes:xm,batchSearchByHash:X5,batchSearchByHashToMap:Z5,checkHashExists:J5,iterateDBI:H5,greaterThan:K5,greaterThanEqual:Y5,lessThan:W5,lessThanEqual:z5,between:j5}});var Vu=M((HOe,mx)=>{var lx=require("lodash"),ux=ut(),qe=require("joi"),e9=ie(),{hdbSchemaTable:Bm,checkValidTable:dx,hdbTable:fx,hdbDatabase:Y_}=Hi(),{handleHDBError:t9,hdbErrors:r9}=ge(),{getDatabases:n9}=(Me(),v(Et)),{HTTP_STATUS_CODES:s9}=r9,i9=qe.object({database:Y_,schema:Y_,table:fx,search_attribute:Bm,search_value:qe.any().required(),get_attributes:qe.array().min(1).items(qe.alternatives(Bm,qe.object())).optional(),desc:qe.bool(),limit:qe.number().integer().min(1),offset:qe.number().integer().min(0)}),o9=qe.object({database:Y_,schema:Y_,table:fx,operator:qe.string().valid("and","or").default("and").lowercase(),offset:qe.number().integer().min(0),limit:qe.number().integer().min(1),get_attributes:qe.array().min(1).items(qe.alternatives(Bm,qe.object())).optional(),sort:qe.object({attribute:qe.alternatives(Bm,qe.array().min(1)),descending:qe.bool().optional()}).optional(),conditions:qe.array().min(1).items(qe.alternatives(qe.object({operator:qe.string().valid("and","or").default("and").lowercase(),conditions:qe.array()}),qe.object({search_attribute:qe.alternatives(Bm,qe.array().min(1)),search_type:qe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:qe.when("search_type",{switch:[{is:"equals",then:qe.any()},{is:"between",then:qe.array().items(qe.alternatives([qe.string(),qe.number()])).length(2)}],otherwise:qe.alternatives(qe.string(),qe.number())}).required()}))).required()});mx.exports=function(e,t){let r=null;switch(t){case"value":r=ux.validateBySchema(e,i9);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(dx("database",e.schema)),i(dx("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=ux.validateBySchema(e,o9);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=e9.checkGlobalSchemaTable(e.schema,e.table);if(s)return t9(new Error,s,s9.NOT_FOUND);let a=n9()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=o(d=>{for(let f=0,m=d.conditions.length;f<m;f++){let h=d.conditions[f];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=lx.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!lx.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var Gb=M((GOe,hx)=>{"use strict";var a9=Tt(),c9=Vu(),{getSchemaPath:l9}=It();hx.exports=u9;function u9(e){let t=c9(e,"hashes");if(t)throw t;let r=l9(e.schema,e.table);return a9.openEnvironment(r,e.table)}o(u9,"initialize")});var qb=M(($Oe,px)=>{"use strict";var d9=$u(),f9=Gb();px.exports=m9;async function m9(e){let t=await f9(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return d9.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(m9,"lmdbGetDataByHash")});var Ku=M((KOe,Ex)=>{"use strict";var $b=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Ex.exports=$b});var gx=M((zOe,_x)=>{"use strict";var WOe=Ku(),h9=$u(),p9=Gb();_x.exports=E9;async function E9(e){let t=await p9(e),r=global.hdb_schema[e.schema][e.table];return h9.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(E9,"lmdbSearchByHash")});var ai=M((QOe,Sx)=>{"use strict";var Vb=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};Sx.exports=Vb});var W_=M((XOe,Ix)=>{"use strict";var nn=$u(),_9=Tt(),g9=ie(),$e=Vt(),ol=(k(),v(W)),S9=No(),Tx=tn().LMDB_ERRORS_ENUM,{getSchemaPath:T9}=It(),Po=ol.SEARCH_WILDCARDS;async function R9(e,t,r){let n;e.schema===ol.SYSTEM_SCHEMA_NAME?n=S9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=bx(e,n.hash_attribute,r,t);return yx(e,s,n.hash_attribute,r)}o(R9,"prepSearch");async function yx(e,t,r,n){let s=T9(e.schema,e.table),i=await _9.openEnvironment(s,e.table),a=Ax(i,e,t,r),c=a.transaction||i;if([$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,$e.SEARCH_TYPES.SEARCH_ALL,$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(y9(e,r)===!1){let d=e.search_attribute;if(d===r)return n?Rx(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?Rx(a,f):a.map(f)}let u=e.search_attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?nn.batchSearchByHashToMap(c,r,e.get_attributes,u):nn.batchSearchByHash(c,r,e.get_attributes,u)}o(yx,"executeSearch");function Ax(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case $e.SEARCH_TYPES.EQUALS:s=nn.equals(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.CONTAINS:s=nn.contains(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.ENDS_WITH:case $e.SEARCH_TYPES._ENDS_WITH:s=nn.endsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.STARTS_WITH:case $e.SEARCH_TYPES._STARTS_WITH:s=nn.startsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return nn.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return nn.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.SEARCH_ALL:return nn.searchAll(e,n,t.get_attributes,a,c,l);case $e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return nn.searchAllToMap(e,n,t.get_attributes,a,c,l);case $e.SEARCH_TYPES.BETWEEN:s=nn.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN:case $e.SEARCH_TYPES._GREATER_THAN:s=nn.greaterThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN_EQUAL:case $e.SEARCH_TYPES._GREATER_THAN_EQUAL:s=nn.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.LESS_THAN:case $e.SEARCH_TYPES._LESS_THAN:s=nn.lessThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.LESS_THAN_EQUAL:case $e.SEARCH_TYPES._LESS_THAN_EQUAL:s=nn.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;default:return Object.create(null)}return s}o(Ax,"searchByType");function Rx(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(Rx,"createMapFromIterable");function y9(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}o(y9,"checkToFetchMore");function bx(e,t,r,n){if(g9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Po.indexOf(s)>-1)return r===!0?$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:$e.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Po[0])<0&&s.indexOf(Po[1])<0)return c===!0?r===!0?$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:$e.SEARCH_TYPES.EQUALS;if(Po.indexOf(i)>=0&&Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),$e.SEARCH_TYPES.CONTAINS;if(Po.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),$e.SEARCH_TYPES.ENDS_WITH;if(Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),$e.SEARCH_TYPES.STARTS_WITH;if(s.includes(Po[0])||s.includes(Po[1]))return $e.SEARCH_TYPES.EQUALS;throw new Error(Tx.UNKNOWN_SEARCH_TYPE)}else switch(n){case ol.VALUE_SEARCH_COMPARATORS.BETWEEN:return $e.SEARCH_TYPES.BETWEEN;case ol.VALUE_SEARCH_COMPARATORS.GREATER:return $e.SEARCH_TYPES.GREATER_THAN;case ol.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return $e.SEARCH_TYPES.GREATER_THAN_EQUAL;case ol.VALUE_SEARCH_COMPARATORS.LESS:return $e.SEARCH_TYPES.LESS_THAN;case ol.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return $e.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Tx.UNKNOWN_SEARCH_TYPE)}}o(bx,"createSearchTypeFromSearchObject");Ix.exports={executeSearch:yx,createSearchTypeFromSearchObject:bx,prepSearch:R9,searchByType:Ax}});var wx=M((tCe,Nx)=>{"use strict";var eCe=ai(),A9=Vu(),b9=ie(),I9=(k(),v(W)),N9=W_();Nx.exports=w9;function w9(e,t){if(!b9.isEmpty(t)&&I9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A9(e,"value");if(n)throw n;return N9.prepSearch(e,t,!0)}o(w9,"lmdbGetDataByValue")});var Fm=M((sCe,Ox)=>{"use strict";var nCe=ai(),O9=Vu(),C9=ie(),P9=(k(),v(W)),L9=W_();Ox.exports=D9;async function D9(e,t){if(!C9.isEmpty(t)&&P9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=O9(e,"value");if(n)throw n;return L9.prepSearch(e,t,!1)}o(D9,"lmdbSearchByValue")});var Px=M((aCe,Cx)=>{"use strict";var oCe=Vt(),Kb=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},Yb=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Wb=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Cx.exports={SearchByConditionsObject:Kb,SearchCondition:Yb,SortAttribute:Wb}});var Ux=M((dCe,vx)=>{"use strict";var lCe=Px().SearchByConditionsObject,M9=ai(),v9=Vu(),zb=$u(),z_=Vt(),{Resource:uCe}=(Pa(),v(dU)),Mx=W_(),U9=kb(),x9=require("lodash"),{getSchemaPath:B9}=It(),Lx=Tt(),{handleHDBError:F9,hdbErrors:H9}=ge(),{HTTP_STATUS_CODES:k9}=H9,G9=1e8;vx.exports=q9;async function q9(e){let t=v9(e,"conditions");if(t)throw F9(t,t.message,k9.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=B9(e.schema,e.table),n=await Lx.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Lx.openDBI(n,u.search_attribute);let i=x9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===z_.SEARCH_TYPES.EQUALS?u.estimated_count=zb.count(n,u.search_attribute,u.search_value):d===z_.SEARCH_TYPES.CONTAINS||d===z_.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=G9}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await Dx(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(Mx.filterByType),f=d.length,m=zb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:a,lazy:!0})),f>0&&(l=l.filter(h=>{for(let p=0;p<f;p++)if(!d[p](h))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(h=>U9.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await Dx(a,e,m,s.hash_attribute);c=c.concat(h)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=zb.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(q9,"lmdbSearchByConditions");async function Dx(e,t,r,n){let s=new M9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===z_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Mx.searchByType(e,s,i,n).map(a=>a.value)}o(Dx,"executeConditionSearch")});var Hm=M((mCe,xx)=>{"use strict";var $9=(k(),v(W)).OPERATIONS_ENUM,jb=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=$9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};xx.exports=jb});var Qb=M((pCe,Vx)=>{"use strict";var kx=ai(),Gx=Hm(),qx=Fm(),$x=vm(),Cn=(k(),v(W)),Bx=ie(),Fx=Tt(),{getTransactionAuditStorePath:V9,getSchemaPath:K9}=It(),Hx=Q();Vx.exports=Y9;async function Y9(e){try{if(Bx.isEmpty(global.hdb_schema[e.schema])||Bx.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await W9(e),await z9(e);let t=K9(e.schema,e.table);try{await Fx.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Hx.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=V9(e.schema,e.table);await Fx.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Hx.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Y9,"lmdbDropTable");async function W9(e){let t=new kx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await qx(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new Gx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $x(s)}o(W9,"deleteAttributesFromSystem");async function z9(e){let t=new kx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await qx(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Gx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $x(s)}catch(i){throw i}}o(z9,"dropTableFromSystem")});var Yx=M((_Ce,Kx)=>{"use strict";var j9=require("fs-extra"),Q9=ai(),J9=Ku(),X9=Hm(),Z9=Qb(),e7=vm(),t7=qb(),r7=Fm(),Lo=(k(),v(W)),{getSchemaPath:n7}=It(),{handleHDBError:s7,hdbErrors:i7}=ge(),{HDB_ERROR_MSGS:o7,HTTP_STATUS_CODES:a7}=i7;Kx.exports=c7;async function c7(e){let t;try{t=await l7(e.schema);let r=new Q9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await r7(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Z9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new X9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await e7(s);let i=n7(t);await j9.remove(i)}catch(r){throw r}}o(c7,"lmdbDropSchema");async function l7(e){let t=new J9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await t7(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw s7(new Error,o7.SCHEMA_NOT_FOUND(e),a7.NOT_FOUND,void 0,void 0,!0);return n}o(l7,"validateDropSchema")});var km=M((SCe,Wx)=>{"use strict";var Jb=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Wx.exports=Jb});var Zb=M((yCe,zx)=>{"use strict";var u7=require("fs-extra"),j_=Tt(),{getTransactionAuditStorePath:d7}=It(),Xb=Vt(),RCe=km();zx.exports=f7;async function f7(e){let t;try{let r=d7(e.schema,e.table);await u7.mkdirp(r),t=await j_.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{j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(f7,"createTransactionsAuditEnvironment")});var Jx=M((ICe,Qx)=>{"use strict";var eI=(k(),v(W)),jx=Tt(),m7=rl(),{getSystemSchemaPath:h7,getSchemaPath:p7}=It(),bCe=No(),E7=k_(),tI=H_(),_7=Q(),g7=Zb();Qx.exports=S7;async function S7(e,t){let r=p7(t.schema,t.table),n=new tI(t.schema,t.table,eI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new tI(t.schema,t.table,eI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new tI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jx.createEnvironment(r,t.table),e!==void 0){let a=await jx.openEnvironment(h7(),eI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await m7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await rI(n),await rI(s),await rI(i)}await g7(t)}catch(a){throw a}}o(S7,"lmdbCreateTable");async function rI(e){try{await E7(e)}catch(t){_7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(rI,"createAttribute")});var Zx=M((wCe,Xx)=>{"use strict";var T7=Lm(),R7=em(),y7=G_(),Gm=(k(),v(W)),A7=rl().updateRecords,b7=Tt(),{getSchemaPath:I7}=It(),N7=Dm(),w7=Q();Xx.exports=O7;async function O7(e){try{let{schemaTable:t,attributes:r}=T7(e);R7(e,r,t.hash_attribute),e.schema!==Gm.SYSTEM_SCHEMA_NAME&&(r.includes(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await y7(e.hdb_auth_header,t,r),s=I7(e.schema,e.table),i=await b7.openEnvironment(s,e.table),a=await A7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await N7(e,a)}catch(c){w7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(O7,"lmdbUpdateRecords")});var tB=M((CCe,eB)=>{"use strict";var C7=(k(),v(W)).OPERATIONS_ENUM,nI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=C7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};eB.exports=nI});var nB=M((DCe,rB)=>{"use strict";var LCe=tB(),P7=Lm(),L7=em(),D7=G_(),qm=(k(),v(W)),M7=rl().upsertRecords,v7=Tt(),{getSchemaPath:U7}=It(),x7=Dm(),B7=Q(),{handleHDBError:F7,hdbErrors:H7}=ge();rB.exports=k7;async function k7(e){let t;try{t=P7(e)}catch(l){throw F7(l,l.message,H7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;L7(e,n,r.hash_attribute),e.schema!==qm.SYSTEM_SCHEMA_NAME&&(n.includes(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await D7(e.hdb_auth_header,r,n),i=U7(e.schema,e.table),a=await v7.openEnvironment(i,e.table),c=await M7(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await x7(e,c)}catch(l){B7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(k7,"lmdbUpsertRecords")});var iB=M((vCe,sB)=>{"use strict";var sI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};sB.exports=sI});var aB=M((xCe,oB)=>{"use strict";var iI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};oB.exports=iI});var uB=M((HCe,lB)=>{"use strict";var oI=Tt(),{getTransactionAuditStorePath:G7}=It(),FCe=iB(),$m=Vt(),q7=ie(),cB=aB(),$7=require("util").promisify,V7=$7(setTimeout),K7=1e4,Y7=100;lB.exports=W7;async function W7(e){let t=G7(e.schema,e.table),r=await oI.openEnvironment(t,e.table,!0),n=oI.listDBIs(r);oI.initializeDBIs(r,$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new cB;do s=await z7(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 V7(Y7);while(s.transactions_deleted>0);return i}o(W7,"deleteAuditLogsBefore");async function z7(e,t){let r=new cB;try{let n=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];q7.isEmpty(c)||(s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>K7)break}return await s,r}catch(n){throw n}}o(z7,"deleteTransactions")});var fB=M((GCe,dB)=>{"use strict";var aI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};dB.exports=aI});var hB=M((VCe,mB)=>{"use strict";var j7=ai(),Q7=Hm(),$Ce=fB(),ki=(k(),v(W)),J7=ie(),cI=Tt(),X7=No(),Z7=Fm(),eee=vm(),{getSchemaPath:tee}=It();mB.exports=ree;async function ree(e,t=!0){let r;e.schema===ki.SYSTEM_SCHEMA_NAME?r=X7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await see(e),s=tee(e.schema,e.table),i=await cI.openEnvironment(s,e.table);return t===!0&&await nee(e,i,r.hash_attribute),cI.dropDBI(i,e.attribute),n}o(ree,"lmdbDropAttribute");async function nee(e,t,r){let n=cI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(nee,"removeAttributeFromAllObjects");async function see(e){let t=new j7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Z7(t)).filter(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(J7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Q7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return eee(i)}o(see,"dropAttributeFromSystem")});var TB=M((WCe,SB)=>{"use strict";var lI=Tt(),Yu=Vt(),YCe=yn(),uI=(k(),v(W)),pB=ie(),{getTransactionAuditStorePath:iee}=It(),oee=$u(),Q_=ku(),aee=Q();SB.exports=cee;async function cee(e){let t=iee(e.schema,e.table),r=await lI.openEnvironment(t,e.table,!0),n=lI.listDBIs(r);lI.initializeDBIs(r,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return EB(r,e.search_values);case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,uee(r,e.search_values,s);case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lee(r,e.search_values);default:return EB(r)}}o(cee,"readAuditLog");function EB(e,t=[0,Date.now()]){pB.isEmpty(t[0])&&(t[0]=0),pB.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Yu.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 Q_,s))}o(EB,"searchTransactionsByTimestamp");function lee(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,gB(e,i))}return Object.fromEntries(r)}o(lee,"searchTransactionsByUsername");function uee(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=oee.equals(e,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=gB(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);_B(l,"records",r,d,a),_B(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(uee,"searchTransactionsByHashValues");function _B(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Q_(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Q_(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(_B,"loopRecords");function gB(e,t){let r=[];try{let n=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new Q_,i);r.push(a)}}catch(i){aee.warn(i)}return r}catch(n){throw n}}o(gB,"batchSearchTransactions")});var yB=M((JCe,RB)=>{"use strict";var{getSchemaPath:jCe}=It(),QCe=Tt(),{database:dee}=(Me(),v(Et));RB.exports={writeTransaction:fee};async function fee(e,t,r){return dee({database:e,table:t}).transaction(r)}o(fee,"writeTransaction")});var NB=M((ZCe,IB)=>{"use strict";var{getSchemaPath:AB}=It(),bB=Tt();IB.exports={flush:mee,resetReadTxn:hee};async function mee(e,t){return(await bB.openEnvironment(AB(e,t),t.toString())).flushed}o(mee,"flush");async function hee(e,t){try{(await bB.openEnvironment(AB(e,t),t.toString())).resetReadTxn()}catch{}}o(hee,"resetReadTxn")});var PB=M((tPe,CB)=>{"use strict";var{Readable:pee}=require("stream"),{getDatabases:Eee}=(Me(),v(Et)),{readSync:_ee,openSync:gee,createReadStream:wB}=require("fs"),{open:See}=require("lmdb"),OB=Im(),Tee=Nm(),{AUDIT_STORE_OPTIONS:Ree}=(Li(),v(Qv)),{INTERNAL_DBIS_NAME:yee,AUDIT_STORE_NAME:Aee}=Vt();CB.exports=Iee;var dI=32768,bee=100;async function Iee(e){let t=e.database||e.schema||"data",r=Eee()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=See({noSync:!0,maxDbs:Tee.MAX_DBS}),m,h=f.openDB(yee,new OB(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,y){y.encoding="binary",y.encoder=void 0;let N=f.openDB(T,y),O=d.openDB(T,y);for(let{key:F,version:Z,value:G}of O.getRange({start:null,transaction:p,versions:O.useVersions}))m=N.put(F,G,Z),_++%bee===0&&(await new Promise(Y=>setTimeout(Y,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:T,value:y}of d.getRange({transaction:p,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){h.put(T,y);let[,N]=T.split("/"),O=!N,F=new OB(!O,O);await g(T,F)}e.include_audit&&await g(Aee,{...Ree}),await m;let R=wB(f.path);return R.headers=l(),R.on("close",()=>{p.done(),f.close()}),R}let a=r[Object.keys(r)[0]].primaryStore,c=gee(a.path);return a.transaction(()=>{let u=Buffer.alloc(dI);_ee(c,u,0,dI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=wB(null,{fd:c,start:dI}),m=new pee.from((async function*(){yield u;for await(let h of f)d.openTimer&&(d.openTimer=0),yield h;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(Iee,"getBackup")});var MB=M((nPe,DB)=>{"use strict";var Nee=Q(),{handleHDBError:wee}=ge(),Oee=n0(),Cee=k_(),Pee=Ub(),Lee=Y0(),Dee=vm(),Mee=qb(),vee=gx(),Uee=wx(),xee=Fm(),Bee=Ux(),Fee=Yx(),Hee=Jx(),kee=Zx(),Gee=nB(),qee=uB(),$ee=Qb(),Vee=hB(),Kee=TB(),Yee=yB(),LB=NB(),Wee=PB(),fI=class extends Oee{static{o(this,"LMDBBridge")}async searchByConditions(t){return Bee(t)}async getDataByHash(t){return await Mee(t)}async searchByHash(t){return await vee(t)}async getDataByValue(t,r){return await Uee(t,r)}async searchByValue(t){return await xee(t)}async createSchema(t){return await Lee(t)}async dropSchema(t){return await Fee(t)}async createTable(t,r){return await Hee(t,r)}async dropTable(t){return await $ee(t)}async createAttribute(t){return await Cee(t)}async createRecords(t){return await Pee(t)}async updateRecords(t){return await kee(t)}async upsertRecords(t){try{return await Gee(t)}catch(r){throw wee(r,null,null,Nee.ERR,r)}}async deleteRecords(t){return await Dee(t)}async dropAttribute(t){return await Vee(t)}async deleteAuditLogsBefore(t){return await qee(t)}async readAuditLog(t){return await Kee(t)}writeTransaction(t,r,n){return Yee.writeTransaction(t,r,n)}flush(t,r){return LB.flush(t,r)}resetReadTxn(t,r){return LB.resetReadTxn(t,r)}getBackup(t){return Wee(t)}};DB.exports=fI});function Pn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Km(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(h=>typeof h=="string")||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="number"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a number, attempt to assign ${h}`);Pn(this)[u]=m},"set");break;case"Int":d=o(function(m){let h=m?.__op__?m.value:m;if(!(h>>0===h||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Long":d=o(function(m){let h=m?.__op__?m.value:m;if(!(Math.round(h)===m&&Math.abs(h)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="bigint"||m==null&&l.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be a number, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new Qn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Rs||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Pn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be an object, attempt to assign ${m}`);Pn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let p=m[u];if(p?.__op__){let _=this.getRecord()?.[u];return p.update(_)}return p}let h=this.getRecord()?.[u];if(h&&typeof h=="object"){let p=mI(h,l);if(p)return m||this._setChanges(m=Object.create(null)),m[u]=p}return h},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");Pn(this)[l]=u}),a("deleteProperty",function(l){Pn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let h=u[f];m=m.update(h)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?xB:UB);break}c=l}while(c&&c!==UB&&c!==xB)}function BB(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(vB[t])return vB[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=mI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function zee(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function mI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends cl{static{o(this,"TrackedObject")}},Km(r,t)),new r(e)):new cl(e);case Array:let n=new X_(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=mI(a,t?.elements)),n[s]=a}return n;default:return e}}function Z_(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=Z_(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 ll(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=ll(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=fA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ll(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)jee.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function J_(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[al]||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(J_(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(J_(s))return!0}else return!0}else return!0}}return!1}var Qn,vB,UB,xB,cl,jee,al,X_,Vm,hI=ce(()=>{Qn=w(ge());zE();Kn();o(Pn,"getChanges");o(Km,"assignTrackedAccessors");vB=Object.prototype,UB=new Proxy({},{get:BB}),xB=new Proxy({},{get:BB,set:zee});o(BB,"getProxiedProperty");o(zee,"setProxiedProperty");o(mI,"trackObject");cl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Km(cl,{},!0);o(Z_,"collapseData");jee=Object.prototype.hasOwnProperty;o(ll,"updateAndFreeze");o(J_,"hasChanges");al=Symbol.for("has-array-changes"),X_=class extends Array{static{o(this,"TrackedArray")}#e;[al];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[al]=!0,super.splice(...t)}push(...t){return this[al]=!0,super.push(...t)}pop(){return this[al]=!0,super.pop()}unshift(...t){return this[al]=!0,super.unshift(...t)}shift(){return this[al]=!0,super.shift()}};X_.prototype.constructor=Array;Vm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var KB={};we(KB,{ResourceBridge:()=>_I});function gI({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 FB(e,t){let r=Gi(e),n=gI(e,r);if(!r)throw new ci.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;Ft(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Z_(d)}catch(f){d={message:(0,VB.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Gi(e){let t=e.database||e.schema||Jee,r=st()[t];if(!r)throw(0,ci.handleHDBError)(new Error,Qee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function HB(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*kB(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var GB,eg,ci,qB,pI,EI,$B,VB,Qee,Jee,Xee,Zee,_I,YB=ce(()=>{GB=w(MB()),eg=w(Vu()),ci=w(ge());Me();qB=w(Lm());k();pI=w(Co()),EI=w(oi()),$B=w(ie());Bc();hI();VB=w(Q()),{HDB_ERROR_MSGS:Qee}=ci.hdbErrors,Jee="data",Xee=1e4,Zee=10,_I=class extends GB.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let a of t.conditions||[])a?.attribute!==void 0&&(a.search_attribute=a.attribute),a?.comparator!==void 0&&(a.search_type=a.comparator),a?.value!==void 0&&(a.search_value=a.value);let r=(0,eg.default)(t,"conditions");if(r)throw(0,ci.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Gi(t);if(!n)throw new ci.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(a){if("conditions"in a&&a.conditions)return a.conditions=a.conditions.map(i),a;{let c=a;return{attribute:c.search_attribute??c.attribute,comparator:c.search_type??c.comparator,value:c.search_value!==void 0?c.search_value:c.value}}}return o(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:gI(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 a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ci.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Gi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Gi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Gi(t).dropTable()}createSchema(t){return Wu({database:t.schema,table:null}),pI.signalSchemaChange(new EI.SchemaEventMsg(process.pid,q.CREATE_SCHEMA,t.schema))}async dropSchema(t){await SI(t.schema),pI.signalSchemaChange(new EI.SchemaEventMsg(process.pid,q.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,qB.default)(t),s,i=st()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),Ft(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Z_(m));for(let h in d)if(Object.prototype.hasOwnProperty.call(d,h)){let p=d[h];if(typeof p=="function")try{let _=p([[m]]);Array.isArray(_)&&(p=_[0].func_val,d[h]=p)}catch(_){throw _.message+="Trying to set key "+h+" on object"+JSON.stringify(d),_}}if(m)for(let h in m)Object.prototype.hasOwnProperty.call(d,h)||(d[h]=m[h]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=st()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Ft(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return HB(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=st()[t.schema][t.table];if(!r.createdTimeProperty)throw new ci.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:UE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,$B.asyncSetTimeout)(Zee),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Xee===0&&await u();return l.length>0&&await u(),s?HB(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,eg.default)(t,"hashes");if(r)throw r;return FB(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of FB(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Xy[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=t.attribute),t.value!==void 0&&(t.search_value=t.value);let n=(0,eg.default)(t,"value");if(n)throw n;let s=Gi(t);if(!s)throw new ci.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===UE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:gI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Gi(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){Gi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Gi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Gi(t),n={};switch(t.search_type){case xE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case xE.USERNAME:{let s=t.search_values;for await(let i of kB(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return kB(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(gI,"getSelect");o(FB,"getRecords");o(Gi,"getTable");o(HB,"createDeleteResponse");o(kB,"groupRecordsInHistory")});var Jn=M((hPe,WB)=>{"use strict";var{ResourceBridge:ete}=(YB(),v(KB)),tte=oe();tte.initSync();var tg;function rte(){return tg||(tg=new ete,tg)}o(rte,"getBridge");WB.exports=rte()});var JB=M((EPe,QB)=>{"use strict";var zB=require("lodash"),Ym=require("mathjs"),nte=require("jsonata"),jB=ie();QB.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?zB.uniqWith(e,zB.isEqual):e,"distinct_array"),searchJSON:ste,mad:Wm.bind(null,Ym.mad),mean:Wm.bind(null,Ym.mean),mode:Wm.bind(null,Ym.mode),prod:Wm.bind(null,Ym.prod),median:Wm.bind(null,Ym.median)};function Wm(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Wm,"aggregateFunction");function ste(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(jB.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),jB.isEmpty(this.__ala__.res[r])){let n=nte(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(ste,"searchJSON")});var ZB=M((gPe,XB)=>{"use strict";var lr=require("moment"),TI="YYYY-MM-DDTHH:mm:ss.SSSZZ";lr.suppressDeprecationWarnings=!0;XB.exports={current_date:o(()=>lr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>lr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return lr(e).utc().format("YYYY");case"month":return lr(e).utc().format("MM");case"day":return lr(e).utc().format("DD");case"hour":return lr(e).utc().format("HH");case"minute":return lr(e).utc().format("mm");case"second":return lr(e).utc().format("ss");case"millisecond":return lr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>lr(e).utc().format(TI),"date"),date_format:o((e,t)=>lr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>lr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>lr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=lr(e).utc(),s=lr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>lr().utc().valueOf(),"now"),get_server_time:o(()=>lr().format(TI),"get_server_time"),offset_utc:o((e,t)=>lr(e).utc().utcOffset(t).format(TI),"offset_utc")}});var nF=M((TPe,rF)=>{"use strict";var ite=require("@turf/area"),ote=require("@turf/length"),ate=require("@turf/circle"),cte=require("@turf/difference"),lte=require("@turf/distance"),ute=require("@turf/boolean-contains"),dte=require("@turf/boolean-equal"),fte=require("@turf/boolean-disjoint"),mte=require("@turf/helpers"),eF=(k(),v(W)),Ke=ie(),Do=Q();rF.exports={geoArea:hte,geoLength:pte,geoCircle:Ete,geoDifference:_te,geoDistance:tF,geoNear:gte,geoContains:Ste,geoEqual:Tte,geoCrosses:Rte,geoConvert:yte};function hte(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return ite.default(e)}catch(t){return Do.trace(t,e),NaN}}o(hte,"geoArea");function pte(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return ote.default(e,{units:t||"kilometers"})}catch(r){return Do.trace(r,e),NaN}}o(pte,"geoLength");function Ete(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return ate.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(Ete,"geoCircle");function _te(e,t){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return cte(e,t)}catch(r){return Do.trace(r,e,t),NaN}}o(_te,"geoDifference");function tF(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return lte.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(tF,"geoDistance");function gte(e,t,r,n){if(Ke.isEmpty(e)||Ke.isEmpty(t))return!1;if(Ke.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return tF(e,t,n)<=r}catch(s){return Do.trace(s,e,t),!1}}o(gte,"geoNear");function Ste(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return ute.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Ste,"geoContains");function Tte(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return dte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Tte,"geoEqual");function Rte(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return!fte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Rte,"geoCrosses");function yte(e,t,r){if(Ke.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ke.isEmpty(t))throw new Error("geo_type is required");if(Ke.isEmpty(eF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(eF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),mte[t](e,r)}o(yte,"geoConvert")});var rg=M((yPe,sF)=>{var ul=JB(),Xn=ZB(),qi=nF();sF.exports=e=>{e.aggr.mad=e.aggr.MAD=ul.mad,e.aggr.mean=e.aggr.MEAN=ul.mean,e.aggr.mode=e.aggr.MODE=ul.mode,e.aggr.prod=e.aggr.PROD=ul.prod,e.aggr.median=e.aggr.MEDIAN=ul.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ul.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ul.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Xn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Xn.current_time,e.fn.extract=e.fn.EXTRACT=Xn.extract,e.fn.date=e.fn.DATE=Xn.date,e.fn.date_format=e.fn.DATE_FORMAT=Xn.date_format,e.fn.date_add=e.fn.DATE_ADD=Xn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Xn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Xn.date_diff,e.fn.now=e.fn.NOW=Xn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Xn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Xn.get_server_time,e.fn.getdate=e.fn.GETDATE=Xn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Xn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=qi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qi.geoNear}});var cF=M((APe,aF)=>{"use strict";var zm=require("lodash"),Ln=require("alasql");Ln.options.cache=!1;var Ate=rg(),iF=require("clone"),ng=require("recursive-iterator"),Fe=Q(),Xe=ie(),zu=Jn(),bte=(k(),v(W)),{hdbErrors:Ite}=ge(),{getDatabases:oF}=(Me(),v(Et)),Nte="IS NULL",li="There was a problem performing this search. Please check the logs and try again.";Ate(Ln);var RI=class{static{o(this,"SQLSearch")}constructor(t,r){if(Xe.isEmpty(t))throw Fe.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 Fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Fe.error(n),new Error(li)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Fe.error(n),new Error(li)}if(Object.keys(this.data).length===0)return Fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Fe.error("Error thrown from processJoins in SQLSearch class method search."),Fe.error(n),new Error(li)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Fe.error(n),new Error(li)}try{return t=await this._finalSQL(),t}catch(n){throw Fe.error("Error thrown from finalSQL in SQLSearch class method search."),Fe.error(n),new Error(li)}}_getColumns(){let t=new ng(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(iF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=zm.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=oF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(Xe.isEmpty(this.statement.where)){Fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ng(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 Ln.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 Ln.yy.LogicValue({value:i}):n instanceof Ln.yy.StringValue&&Xe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ln.yy.NumValue({value:i}))});if(t){Fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ng(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Xe.isEmpty(bte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Xe.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(Xe.isEmptyOrZeroLength(r.left.columnid)||Xe.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Xe.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!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[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(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&&zm.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 Ln.promise(r)}catch(r){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Fe.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(iF(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(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(Nte)>-1&&this.tables.forEach(s=>{let i={columnid:oF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=zm.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!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 d=await zu.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Fe.error(d),new Error(li)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.search_value=d;let m=await zu.getDataByValue(f);for(let[h,p]of m)this.data[i].__mergedData[h]?this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]):(this.data[i].__mergedData[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(d){throw Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Fe.error(d),new Error(li)}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 d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let h=d[f];c.search_attribute=h.attribute,c.search_value=h.search_value;let p=await zu.getDataByValue(c,h.operation);if(l)for(let[_]of p)this.data[i].__mergedData[_]||(this.data[i].__mergedData[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,g]of p)this.data[i].__mergedData[_]?this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]):(this.data[i].__mergedData[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,_))}}catch(d){throw Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Fe.error(d),new Error(li)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await zu.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Fe.error(d),new Error(li)}}}_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 Ln.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Ln.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ln.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 Ln.yy.FuncValue:new Ln.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let p=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(p+=" ON "+h.on.toString()),i.push(p),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(h=>{let p=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hashName,_=h.as?h.as_orig:h.tableid_orig;a.push({key:`'${_}.${p}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${p}\` AS "${_}.${p}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,p=this._convertColumnsToIndexes(h,s);m=await Ln.promise(p,t),t=null}catch(h){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Fe.error(h),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let h=0,p=m.length;h<p;h++){let _=m[h];a.forEach(g=>{_[g.key]!==null&&_[g.key]!==void 0&&g.keys.add(_[g.key])})}a.forEach(h=>{let p=Object.keys(this.data[`${h.schema}_${h.table}`].__mergedData),_=zm.difference(p,[...h.keys].map(g=>g.toString()));for(let g=0,R=_.length;g<R;g++){let T=_[g];delete this.data[`${h.schema}_${h.table}`].__mergedData[T]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new ng(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=zm.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 Fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Fe.error(i),new Error(li)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await zu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],h=l.get(m);for(let p=0;p<u;p++){let _=s.columns[p],g=h[_]===void 0?null:h[_];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Fe.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Fe.trace(`Final SQL: ${s}`),n=await Ln.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Fe.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 Fe.error(Ite.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let a=await zu.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw Fe.error("There was an error when processing this SQL operation. Check your logs"),Fe.error(a),new Error(li)}}return Object.values(Object.values(this.data)[0].__mergedData)}};aF.exports=RI});var sn=M((IPe,lF)=>{"use strict";var wte=t0();lF.exports={searchByConditions:Cte,searchByHash:Pte,searchByValue:Lte,search:Dte};var yI=Jn(),{transformReq:AI}=ie(),Ote=cF();async function Cte(e){return AI(e),yI.searchByConditions(e)}o(Cte,"searchByConditions");async function Pte(e){AI(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of yI.searchByHash(e))r&&t.push(r);return t}o(Pte,"searchByHash");async function Lte(e){AI(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of yI.searchByValue(e))t.push(r);return t}o(Lte,"searchByValue");function Dte(e,t){try{let r=new wte(e);r.validate(),new Ote(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Dte,"search")});var $i=M((wPe,mF)=>{"use strict";var jm=require("crypto"),Mte=oe(),{CONFIG_PARAMS:vte}=(k(),v(W)),dF="aes-256-cbc",Ute=32,xte=16,bI=64,fF=32,Bte=bI+fF,uF=new Map;mF.exports={encrypt:Fte,decrypt:Hte,createNatsTableStreamName:kte};function Fte(e){let t=jm.randomBytes(Ute),r=jm.randomBytes(xte),n=jm.createCipheriv(dF,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Fte,"encrypt");function Hte(e){let t=e.substr(0,bI),r=e.substr(bI,fF),n=e.substr(Bte,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=jm.createDecipheriv(dF,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Hte,"decrypt");function kte(e,t){let r=Mte.get(vte.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=uF.get(r);return n||(n=jm.createHash("md5").update(r).digest("hex"),uF.set(r,n)),n}o(kte,"createNatsTableStreamName")});var Ua=M((PPe,_F)=>{"use strict";var CPe=sn(),Qm=Q(),{validateBySchema:hF}=ut(),dl=require("joi"),Gte=$i(),sg=ie(),{handleHDBError:ig,hdbErrors:qte,ClientError:pF}=ge(),{HDB_ERROR_MSGS:og,HTTP_STATUS_CODES:II}=qte,EF=oe();EF.initSync();var{getDatabases:NI}=(Me(),v(Et)),$te=require("fs-extra"),Vte=(k(),v(W));_F.exports={describeAll:Kte,describeTable:ag,describeSchema:Yte};async function Kte(e={}){try{let t=sg.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=NI(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let h in m)try{let p;if(t||s||r)p=await ag({schema:f,table:h,exactCount:u});else if(n&&n[f].describe&&n[f].tables[h].describe){let _=n[f].tables[h].attribute_permissions;p=await ag({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){Qm.error(p)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return Qm.error("Got an error in describeAll"),Qm.error(t),ig(new Error,og.DESCRIBE_ALL_ERR)}}o(Kte,"describeAll");async function ag(e,t){sg.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=hF(e,dl.object({database:dl.string(),table:dl.string().required(),exact_count:dl.boolean().strict()}));if(i)throw new pF(i.message);let c=NI()[r];if(!c)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),II.NOT_FOUND);let l=c[n];if(!l)throw ig(new Error,og.TABLE_NOT_FOUND(e.schema,e.table),II.NOT_FOUND);function u(h){d.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(p=>({type:p.type,name:p.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let h={};s.forEach(p=>{p.describe&&(h[p.attribute_name]=!0)}),l.attributes.forEach(p=>{h[p.name]&&u(p)})}else l.attributes?.forEach(h=>u(h));let f;try{f=(await $te.stat(l.primaryStore.env.path)).size}catch(h){Qm.warn("unable to get database size",h)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),EF.get(Vte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Gte.createNatsTableStreamName(m.schema,m.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=h.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=h.estimatedRange;let p=l.auditStore;if(p)for(let _ of p.getKeys({reverse:!0,limit:1}))m.last_updated_record=_[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let _ of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=_}catch(h){Qm.warn(`unable to stat table dbi due to ${h}`)}return m}o(ag,"descTable");async function Yte(e){sg.transformReq(e);let t=hF(e,dl.object({database:dl.string(),exact_count:dl.boolean().strict()}));if(t)throw new pF(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=NI()[n];if(!i)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),II.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),sg.isEmpty(l)||l.describe){let u=await ag({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Yte,"describeSchema")});var Dn=M((DPe,RF)=>{"use strict";var lg=Cb(),Kr=ie(),Wte=require("util"),ug=Jn(),zte=ii(),gF=Q(),{handleHDBError:fl,hdbErrors:jte}=ge(),{HTTP_STATUS_CODES:ml}=jte,Qte=Wte.promisify(zte.getTableSchema),Jte="updated",SF="inserted",TF="upserted";RF.exports={insert:Zte,update:ere,upsert:tre,validation:Xte,flush:rre};async function Xte(e){if(Kr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Kr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Qte(e.schema,e.table),r=lg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Kr.isEmptyOrZeroLength(c[n]))throw gF.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(!Kr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw gF.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Kr.isEmpty(c[n])&&c[n]!==""&&s.has(Kr.autoCast(c[n]))&&(c.skip=!0),s.add(Kr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Xte,"validation");async function Zte(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.createRecords(e);return cg(SF,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Zte,"insertData");async function ere(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.updateRecords(e);return Kr.isEmpty(n.existing_rows)?cg(Jte,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):cg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(ere,"updateData");async function tre(e){if(e.operation!=="upsert")throw fl(new Error,"invalid operation, must be upsert",ml.INTERNAL_SERVER_ERROR);let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.upsertRecords(e);return cg(TF,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(tre,"upsertData");function cg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===SF?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===TF?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(cg,"returnObject");function rre(e){return Kr.transformReq(e),ug.flush(e.schema,e.table)}o(rre,"flush")});var OI=M((vPe,bF)=>{var nre=ut(),wI=require("joi"),{hdbTable:sre,hdbDatabase:yF}=Hi(),AF={schema:yF,database:yF,table:sre},ire={date:wI.date().iso().required()},ore={timestamp:wI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};bF.exports=function(e,t){let r=t==="timestamp"?{...AF,...ore}:{...AF,...ire},n=wI.object(r);return nre.validateBySchema(e,n)}});var wF=M((UPe,NF)=>{var are=ut(),CI=require("joi"),{hdbTable:cre,hdbDatabase:IF}=Hi(),lre=CI.object({schema:IF,database:IF,table:cre,hash_values:CI.array().required(),ids:CI.array()});NF.exports=function(e){return are.validateBySchema(e,lre)}});var MI=M((xPe,OF)=>{"use strict";var PI=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},LI=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=a}},DI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};OF.exports={InsertObject:PI,NoSQLSeachObject:LI,DeleteResponseObject:DI}});var El=M((FPe,MF)=>{"use strict";var PF=OI(),ure=wF(),hl=ie(),CF=require("moment"),LF=Q(),{promisify:dre,callbackify:fre}=require("util"),pl=(k(),v(W)),mre=ii(),vI=dre(mre.getTableSchema),UI=Jn(),{DeleteResponseObject:hre}=MI(),{handleHDBError:xa,hdbErrors:pre}=ge(),{HDB_ERROR_MSGS:dg,HTTP_STATUS_CODES:Ba}=pre,Ere="records successfully deleted",_re=fre(DF);MF.exports={delete:_re,deleteRecord:DF,deleteFilesBefore:gre,deleteAuditLogsBefore:Sre};async function gre(e){let t=PF(e,"date");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),!CF(e.date,CF.ISO_8601).isValid())throw xa(new Error,dg.INVALID_DATE,Ba.BAD_REQUEST,pl.LOG_LEVELS.ERROR,dg.INVALID_DATE,!0);let n=hl.checkSchemaTableExist(e.schema,e.table);if(n)throw xa(new Error,n,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,n,!0);let s=await UI.deleteRecordsBefore(e);if(await vI(e.schema,e.table),LF.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(gre,"deleteFilesBefore");async function Sre(e){let t=PF(e,"timestamp");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),isNaN(e.timestamp))throw xa(new Error,dg.INVALID_VALUE("Timestamp"),Ba.BAD_REQUEST,pl.LOG_LEVELS.ERROR,dg.INVALID_VALUE("Timestamp"),!0);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,r,!0);let n=await UI.deleteAuditLogsBefore(e);return await vI(e.schema,e.table),LF.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Sre,"deleteAuditLogsBefore");async function DF(e){e.ids&&(e.hash_values=e.ids);let t=ure(e);if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);hl.transformReq(e);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,r,!0);try{await vI(e.schema,e.table);let n=await UI.deleteRecords(e);return hl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Ere}`),n}catch(n){if(n.message===pl.SEARCH_NOT_FOUND_MESSAGE){let s=new hre;return s.message=pl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(DF,"deleteRecord")});var fg={};we(fg,{HASH_FUNCTION:()=>xr,hash:()=>FI,validate:()=>HI});function xI(e=Xm){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Jm.randomBytes(e)).map(r=>t[r%t.length]).join("")}function FI(e,t=xr[UF?.toUpperCase()]??xr.SHA256){return BI[t](e)}function HI(e,t,r=xr[UF?.toUpperCase()]??xr.SHA256){return e?Tre[r](e,t):!1}var Jm,ju,vF,UF,Xm,xF,xr,BI,Tre,mg=ce(()=>{Jm=w(require("node:crypto")),ju=w(require("argon2")),vF=w(oe());k();UF=(0,vF.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Xm=16,xF=9,xr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(xI,"generateSalt");BI={[xr.MD5]:(e,t=void 0)=>{t=t??xI(xF);let r=Jm.createHash(xr.MD5).update(e+t).digest("hex");return t+r},[xr.SHA256]:(e,t=void 0)=>{t=t??xI(Xm);let r=Jm.createHash(xr.SHA256).update(e+t).digest("hex");return t+r},[xr.ARGON2ID]:async e=>{let t=xI(Xm),r=await ju.hash(e,{type:ju.argon2id,salt:Buffer.from(t)});return t+r}},Tre={[xr.MD5]:(e,t)=>{let r=e.slice(0,xF);return e===BI[xr.MD5](t,r)},[xr.SHA256]:(e,t)=>{let r=e.slice(0,Xm);return e===BI[xr.SHA256](t,r)},[xr.ARGON2ID]:async(e,t)=>await ju.verify(e.slice(Xm),t)};o(FI,"hash");o(HI,"validate")});var FF=M((qPe,BF)=>{var kI=ut(),on={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 Rre(e){return on.password.presence=!0,on.username.presence=!0,on.role.presence=!0,on.active.presence=!0,kI.validateObject(e,on)}o(Rre,"addUserValidation");function yre(e){return on.password.presence=!1,on.username.presence=!0,on.role.presence=!1,on.active.presence=!1,kI.validateObject(e,on)}o(yre,"alterUserValidation");function Are(e){return on.password.presence=!1,on.username.presence=!0,on.role.presence=!1,on.active.presence=!1,kI.validateObject(e,on)}o(Are,"dropUserValidation");BF.exports={addUserValidation:Rre,alterUserValidation:yre,dropUserValidation:Are}});var Ot=M((KPe,kF)=>{"use strict";var{platform:VPe}=require("os"),bre="nats-server.zip",GI="nats-server",Ire=process.platform==="win32"?`${GI}.exe`:GI,Nre=/^[^\s.,*>]+$/,HF="__request__",wre=o(e=>`${e}.${HF}`,"REQUEST_SUBJECT"),Ore={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Cre={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Pre={HUB:"hub.pid",LEAF:"leaf.pid"},Lre={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Dre={SUCCESS:"success",ERROR:"error"},Mre={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},vre={TXN:"txn",MSGID:"msgid"},Qu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Ure={[Qu.ERR]:1,[Qu.WRN]:2,[Qu.INF]:3,[Qu.DBG]:4,[Qu.TRC]:5},xre={debug:"-D",trace:"-DVV"};kF.exports={NATS_SERVER_ZIP:bre,NATS_SERVER_NAME:GI,NATS_BINARY_NAME:Ire,PID_FILES:Pre,NATS_CONFIG_FILES:Cre,SERVER_SUFFIX:Lre,NATS_TERM_CONSTRAINTS_RX:Nre,REQUEST_SUFFIX:HF,UPDATE_REMOTE_RESPONSE_STATUSES:Dre,CLUSTER_STATUS_STATUSES:Mre,REQUEST_SUBJECT:wre,SUBJECT_PREFIXES:vre,MSG_HEADERS:Ore,LOG_LEVELS:Qu,LOG_LEVEL_FLAGS:xre,LOG_LEVEL_HIERARCHY:Ure}});var qI=M(an=>{"use strict";var Bre={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
12
12
  `),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
13
- `)},Bre="certificate.pem",Fre="privateKey.pem",Hre="caCertificate.pem",kre="natsCertificate.pem",Gre="natsCaCertificate.pem",Nt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},qre={tls_certificate:Nt.SERVER,tlsCertificateAuthority:Nt.CA,customFunctions_tls_certificate:Nt.SERVER,customFunctionsTlsCertificateAuthority:Nt.CA,operationsApi_tls_certificate:Nt["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Nt["OPERATIONS-CA"]},$re={[Nt.SERVER]:2,[Nt.DEFAULT]:1},Vre={[Nt["OPERATIONS-API"]]:3,[Nt.SERVER]:2,[Nt.DEFAULT]:1},Kre={[Nt["OPERATIONS-API"]]:3,[Nt.SERVER]:2,[Nt.DEFAULT]:1},Yre={[Nt["OPERATIONS-CA"]]:3,[Nt.CA]:2,[Nt["DEFAULT-CA"]]:1},Wre={[Nt["OPERATIONS-CA"]]:3,[Nt.CA]:2,[Nt["DEFAULT-CA"]]:1},zre={[Nt.CA]:2,[Nt["DEFAULT-CA"]]:1};cn.CERTIFICATE_PEM_NAME=Bre;cn.PRIVATEKEY_PEM_NAME=Fre;cn.CA_PEM_NAME=Hre;cn.CERT_NAME=Nt;cn.CERT_CONFIG_NAME_MAP=qre;cn.CERT_PREFERENCE_APP=$re;cn.CERT_PREFERENCE_OPS=Vre;cn.CERT_PREFERENCE_REP=Kre;cn.CA_CERT_PREFERENCE_REP=Yre;cn.CA_CERT_PREFERENCE_OPS=Wre;cn.CA_CERT_PREFERENCE_APP=zre;cn.CERTIFICATE_VALUES=xre;cn.NATS_CERTIFICATE_PEM_NAME=kre;cn.NATS_CA_PEM_NAME=Gre});var VI=M((zPe,YF)=>{"use strict";var VF=require("fs-extra"),Re=require("joi"),jre=require("os"),{boolean:Ge,string:gt,number:ur,array:Fa}=Re.types(),{totalmem:GF}=require("os"),El=require("path"),Qre=Q(),$I=ie(),WPe=qI(),qF=(k(),v(W)),Jre=lt(),$F="log",Xre="components",Zre="Invalid logging.rotation.maxSize unit. Available units are G, M or K",ene="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",tne="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",rne="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",nne="rootPath config parameter is undefined",vn=Re.alternatives([ur.min(0),gt]).optional().empty(null),hg=Re.alternatives([Fa.items(gt,{host:gt.required(),port:vn},{hostname:gt.required(),port:vn}).empty(null),Fa.items(gt)]),Vi,KF=!1;YF.exports={configValidator:sne,routesValidator:une,routeConstraints:hg};function sne(e,t=!1){if(KF=t,Vi=e.rootPath,$I.isEmpty(Vi))throw nne;let r=Ge.optional(),n=ur.min(0).max(1e3).empty(null).default(lne),s=gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zm),i=gt.optional().empty(null),a=gt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Re.string().empty(null).default(Zm),l=Re.custom(one).empty(null).default(Zm),u=e.clustering?.enabled,d=Re.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Re.object({enabled:r,hubServer:Re.object({cluster:Re.object({name:Re.required().empty(null),network:Re.object({port:vn,routes:hg}).required()}).required(),leafNodes:Re.object({network:Re.object({port:vn}).required()}).required(),network:Re.object({port:vn}).required()}).required(),leafServer:Re.object({network:Re.object({port:vn,routes:hg}).required(),streams:Re.object({maxAge:ur.min(120).allow(null).optional(),maxBytes:ur.min(1).allow(null).optional(),maxMsgs:ur.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Re.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ge.optional(),databaseLevel:Ge.optional(),tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ge.required(),verify:Ge.optional()}),user:gt.optional().empty(null)}).optional():f=Re.object({enabled:r,tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ge.optional()})}).optional(),Re.object({authentication:Re.alternatives(Re.object({authorizeLocal:Ge,cacheTTL:ur.required(),cookie:Re.object({domains:Fa.items(gt).optional(),expires:gt.optional()}),enableSessions:Ge,hashFunction:gt.valid("md5","sha256","argon2id").optional().empty(null)}),Ge).optional(),analytics:Re.object({aggregatePeriod:ur,replicate:Ge.optional()}),replication:Re.object({hostname:Re.alternatives(gt,ur).optional().empty(null),url:gt.optional().empty(null),port:vn,securePort:vn,routes:Fa.optional().empty(null),databases:Re.alternatives(gt,Fa),enableRootCAs:Ge.optional(),copyTablesToCatchUp:Ge.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Re.object({enabled:r}).required(),logging:Re.object({auditAuthEvents:Re.object({logFailed:Ge,logSuccessful:Ge}),file:Ge.required(),level:Re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Re.object({enabled:Ge.optional(),compress:Ge.optional(),interval:gt.custom(cne).optional().empty(null),maxSize:gt.custom(ane).optional().empty(null),path:gt.optional().empty(null).default(Zm)}).required(),root:s,stdStreams:Ge.required(),auditLog:Ge.required()}).required(),operationsApi:Re.object({network:Re.object({cors:Ge.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),keepAliveTimeout:ur.min(1).optional(),port:vn,domainSocket:Re.optional().empty("hdb/operations-server").default(Zm),securePort:vn,timeout:ur.min(1).optional()}).optional(),tls:Re.alternatives([Re.array().items(d),d])}).required(),rootPath:gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Re.object({network:Re.object({port:vn,securePort:vn,mtls:Re.alternatives([Ge.optional(),Re.object({user:gt.optional(),certificateAuthority:i,required:Ge.optional()})])}).required(),webSocket:Ge.optional(),requireAuthentication:Ge.optional()}),http:Re.object({compressionThreshold:ur.optional(),cors:Ge.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),port:vn,securePort:vn,maxHeaderSize:ur.optional(),mtls:Re.alternatives([Ge.optional(),Re.object({user:gt.optional(),certificateAuthority:i,required:Ge.optional()})]),threadRange:Re.alternatives([Fa.optional(),gt.optional()])}).required(),threads:Re.alternatives(n.optional(),Re.object({count:n.optional(),debug:Re.alternatives(Ge.optional(),Re.object({startingPort:ur.min(1).optional(),host:gt.optional(),waitForDebugger:Ge.optional()})),maxHeapMemory:ur.min(0).optional()})),storage:Re.object({writeAsync:Ge.required(),overlappingSync:Ge.optional(),caching:Ge.optional(),compression:Re.alternatives([Ge.optional(),Re.object({dictionary:gt.optional(),threshold:ur.optional()})]),compactOnStart:Ge.optional(),compactOnStartKeepBackup:Ge.optional(),noReadAhead:Ge.optional(),path:l,prefetchWrites:Ge.optional(),maxFreeSpaceToLoad:ur.optional(),maxFreeSpaceToRetain:ur.optional()}).required(),ignoreScripts:Ge.optional(),tls:Re.alternatives([Re.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(sne,"configValidator");function ine(e){return KF||VF.existsSync(e)?null:`Specified path ${e} does not exist.`}o(ine,"doesPathExist");function one(e,t){Re.assert(e,gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=ine(e);if(r)return t.message(r)}o(one,"validatePath");function ane(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Zre);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(tne):e}o(ane,"validateRotationMaxSize");function cne(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(ene);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(rne):e}o(cne,"validateRotationInterval");function lne(e,t){let r=t.state.path.join("."),n=jre.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||GF();return i=Math.round(Math.min(i,GF())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Qre.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(lne,"setDefaultThreads");function Zm(e,t){let r=t.state.path.join(".");if(!$I.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if($I.isEmpty(Vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return El.join(Vi,Xre);case"logging.root":return El.join(Vi,$F);case"clustering.leafServer.streams.path":return El.join(Vi,"clustering","leaf");case"storage.path":let n=El.join(Vi,qF.LEGACY_DATABASES_DIR_NAME);return VF.existsSync(n)?n:El.join(Vi,qF.DATABASES_DIR_NAME);case"logging.rotation.path":return El.join(Vi,$F);case"operationsApi.network.domainSocket":return r==null?null:El.join(Vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(Zm,"setDefaultRoot");function une(e){let t=Re.object({routes:hg});return Jre.validateBySchema({routes:e},t)}o(une,"routesValidator")});var bt=M(er=>{"use strict";var ws=(k(),v(W)),br=ie(),dr=Q(),{configValidator:dne,routesValidator:WF}=VI(),ln=require("fs-extra"),jF=require("yaml"),es=require("path"),fne=require("is-number"),QF=require("properties-reader"),mne=require("lodash"),{handleHDBError:hne}=ge(),{HTTP_STATUS_CODES:pne,HDB_ERROR_MSGS:Qu}=rn(),{server:Ene}=(Mr(),v($f)),{PACKAGE_ROOT:JF}=Rt(),{DATABASES_PARAM_CONFIG:eh,CONFIG_PARAMS:Zn,CONFIG_PARAM_MAP:ui}=ws,_ne="Unable to get config value because config is uninitialized",gne="Config successfully initialized",Sne="Error backing up config file",Tne="Empty parameter sent to getConfigValue",XF=es.join(JF,"config","yaml",ws.HDB_DEFAULT_CONFIG_FILE),Rne=es.join(JF,"config","yaml","defaultNatsConfig.yaml"),yne="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",zF={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"},pg,Ft,Eg;er.createConfigFile=Ane;er.getDefaultConfig=bne;er.getConfigValue=eH;er.initConfig=_g;er.flattenConfig=Ju;er.updateConfigValue=tH;er.updateConfigObject=Nne;er.getConfiguration=Cne;er.setConfiguration=Pne;er.readConfigFile=zI;er.getClusteringRoutes=Lne;er.initOldConfig=rH;er.getConfigFromFile=Dne;er.getConfigFilePath=_l;er.addConfig=Mne;er.deleteConfigFromFile=vne;er.getConfigObj=Une;er.resolvePath=KI;er.getFlatConfigObj=xne;function KI(e){if(e?.startsWith("~/"))return es.join(br.getHomeDir(),e.slice(1));let t=oe();try{return es.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(KI,"resolvePath");function Ane(e,t=!1){let r=Ha(XF);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=jF.parseDocument(ln.readFileSync(Rne,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}pg=Ju(r.toJSON());let n;for(let c in e){let l=ui[c.toLowerCase()];if(l===Zn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=YI(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){dr.error(f)}}}n&&ZF(r,n),WI(r,t);let s=r.toJSON();Ft=Ju(s);let i=r.getIn(["rootPath"]),a=es.join(i,ws.HDB_CONFIG_FILE);if(ln.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);ln.writeFileSync(a,String(r)),dr.trace(`Config file written to ${a}`)}o(Ane,"createConfigFile");function ZF(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!br.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(eh.TABLES))for(let i in n[s][eh.TABLES])for(let a in n[s][eh.TABLES][i]){let c=n[s][eh.TABLES][i][a],l=[Zn.DATABASES,s,eh.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Zn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){dr.error("Error parsing schemas CLI/env config arguments",n)}}o(ZF,"setSchemasConfig");function bne(e){if(pg===void 0){let r=Ha(XF);pg=Ju(r.toJSON())}let t=ui[e.toLowerCase()];if(t!==void 0)return pg[t.toLowerCase()]}o(bne,"getDefaultConfig");function eH(e){if(e==null){dr.info(Tne);return}if(Ft===void 0){dr.trace(_ne);return}let t=ui[e.toLowerCase()];if(t!==void 0)return Ft[t.toLowerCase()]}o(eH,"getConfigValue");function _l(e=br.getPropsFilePath()){let t=br.getEnvCliRootPath();if(t)return KI(es.join(t,ws.HDB_CONFIG_FILE));let r=QF(e);return KI(r.get(ws.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(_l,"getConfigFilePath");function _g(e=!1){if(Ft===void 0||e){let t;if(!br.noBootFile()){t=br.getPropsFilePath();try{ln.accessSync(t,ln.constants.F_OK|ln.constants.R_OK)}catch(i){throw dr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=_l(t),n;if(r.includes("config/settings.js"))try{rH(r);return}catch(i){if(i.code!==ws.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ha(r)}catch(i){if(i.code===ws.NODE_ERROR_CODES.ENOENT){dr.trace(`HarperDB config file not found at ${r}.
14
- This can occur during early stages of install where the config file has not yet been created`);return}else throw dr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Ine(n,r),WI(n);let s=n.toJSON();if(Ene.config=s,Ft=Ju(s),Ft.logging_rotation_rotate)for(let i in zF)Ft[i]&&dr.error(`Config ${zF[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);dr.trace(gne)}}o(_g,"initConfig");function Ine(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],es.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],es.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(dr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);ln.writeFileSync(t,String(e))}}o(Ine,"checkForUpdatedConfig");function WI(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 Qu.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 Qu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=dne(r,t);if(n.error)throw Qu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(WI,"validateConfig");function Nne(e,t){Ft===void 0&&(Ft={});let r=ui[e.toLowerCase()];if(r===void 0){dr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ft[r.toLowerCase()]=t}o(Nne,"updateConfigObject");function tH(e,t,r=void 0,n=!1,s=!1,i=!1){Ft===void 0&&_g();let a=eH(ui.hdb_root),c=es.join(a,ws.HDB_CONFIG_FILE),l=Ha(c),u;if(r&&Ft){let m=!1;for(let h in r)if(r[h]!=Ft[h.toLowerCase()]){m=!0;break}if(!m){dr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Zn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ui[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=YI(m,t);l.setIn([...h],p)}else for(let m in r){let h=ui[m.toLowerCase()];if(h===Zn.HTTP_SECUREPORT&&r[m]===Ft[Zn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===Zn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ft[Zn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===Zn.DATABASES){u=r[m];continue}if(h?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!h&&(m.endsWith("_package")||m.endsWith("_port"))&&(h=m),h!==void 0){let p=h.split("_"),_=ws.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=YI(h,r[m]);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(y){dr.error(y)}}}u&&ZF(l,u),WI(l);let d=l.getIn(["rootPath"]),f=es.join(d,ws.HDB_CONFIG_FILE);if(n===!0&&wne(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);ln.writeFileSync(f,String(l)),s&&(Ft=Ju(l.toJSON())),dr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(tH,"updateConfigValue");function wne(e,t){try{let r=es.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ws.HDB_CONFIG_FILE}.bak`);ln.copySync(e,r),dr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){dr.error(Sne),dr.error(r)}}o(wne,"backupConfigFile");var One=["databases"];function Ju(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}),Eg=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])&&!One.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Zn[l.toUpperCase()]&&ui[l]&&(s[ui[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Ju,"flattenConfig");function YI(e,t){if(e===Zn.CLUSTERING_NODENAME||e===Zn.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(fne(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||br.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 br.autoCast(t)}o(YI,"castConfigValue");function Cne(){let e=br.getPropsFilePath(),t=_l(e);return Ha(t).toJSON()}o(Cne,"getConfiguration");async function Pne(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return tH(void 0,void 0,s,!0),yne}catch(i){throw typeof i=="string"||i instanceof String?hne(i,i,pne.BAD_REQUEST,void 0,void 0,!0):i}}o(Pne,"setConfiguration");function zI(){let e=br.getPropsFilePath();try{ln.accessSync(e,ln.constants.F_OK|ln.constants.R_OK)}catch(n){if(!br.noBootFile())throw dr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=_l(e);return Ha(t).toJSON()}o(zI,"readConfigFile");function Ha(e){return jF.parseDocument(ln.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ha,"parseYamlDoc");function Lne(){let e=zI(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=br.isEmptyOrZeroLength(t)?[]:t;let r=WF(t);if(r)throw Qu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=br.isEmptyOrZeroLength(n)?[]:n;let s=WF(n);if(s)throw Qu.CONFIG_VALIDATION(s.message);if(!br.isEmptyOrZeroLength(n)&&!br.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!br.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Qu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Lne,"getClusteringRoutes");function rH(e){let t=QF(e);Ft={};for(let r in ui){let n=t.get(r.toUpperCase());if(br.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ui[r].toLowerCase();s===Zn.LOGGING_ROOT?Ft[s]=es.dirname(n):Ft[s]=n}return Ft}o(rH,"initOldConfig");function Dne(e){let t=zI();return mne.get(t,e.replaceAll("_","."))}o(Dne,"getConfigFromFile");async function Mne(e,t){let r=Ha(_l());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 ln.writeFile(_l(),String(r))}o(Mne,"addConfig");function vne(e){let t=_l(br.getPropsFilePath()),r=Ha(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=es.join(n,ws.HDB_CONFIG_FILE);ln.writeFileSync(s,String(r))}o(vne,"deleteConfigFromFile");function Une(){return Eg||(_g(),Eg)}o(Une,"getConfigObj");function xne(){return Ft||_g(),Ft}o(xne,"getFlatConfigObj")});var ts=M((XPe,Fr)=>{"use strict";var iH="username is required",oH="nothing to update, must supply active, role or password to update",aH="password cannot be an empty string",cH="If role is specified, it cannot be empty.",lH="active must be true or false";Fr.exports.addUser=Kne;Fr.exports.alterUser=Yne;Fr.exports.dropUser=zne;Fr.exports.getSuperUser=Zne;Fr.exports.userInfo=jne;Fr.exports.listUsers=Sg;Fr.exports.listUsersExternal=Qne;Fr.exports.setUsersWithRolesCache=gl;Fr.exports.findAndValidateUser=nN;Fr.exports.getClusterUser=ese;Fr.exports.getUsersWithRolesCache=Xne;Fr.exports.USERNAME_REQUIRED=iH;Fr.exports.ALTERUSER_NOTHING_TO_UPDATE=oH;Fr.exports.EMPTY_PASSWORD=aH;Fr.exports.EMPTY_ROLE=cH;Fr.exports.ACTIVE_BOOLEAN=lH;var uH=Mn(),Bne=pl(),th=(mg(),v(fg)),dH=FF(),rh=on(),ZI=Co(),Ki=ie(),fH=require("validate.js"),eN=Q(),{promisify:Fne}=require("util"),tN=$i(),QI=(k(),v(W)),nH=It(),Hne=bt(),kne=oe(),Gne=No(),{hdbErrors:qne,ClientError:di}=ge(),{HTTP_STATUS_CODES:Mo,AUTHENTICATION_ERROR_MSGS:jI,HDB_ERROR_MSGS:Xu}=qne,{UserEventMsg:rN}=oi(),JI=require("lodash"),{server:gg}=(Mr(),v($f)),$ne=Q();gg.getUser=(e,t)=>nN(e,t,t!=null);gg.authenticateUser=(e,t)=>nN(e,t);var mH={username:!0,active:!0,role:!0,password:!0},sH=new Map,Vne=Fne(Bne.delete),XI=kne.get(QI.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??th.HASH_FUNCTION.SHA256,Yi;async function Kne(e){let t=fH.cleanAttributes(e,mH),r=dH.addUserValidation(t);if(r)throw new di(r.message);let n=await rh.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 di(Xu.ROLE_NAME_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Xu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=tN.encrypt(t.password)),t.password=await th.hash(t.password,XI),t.hash_function=XI,t.role=n[0].id;let s=await uH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(eN.debug(s),await gl(),s.skipped_hashes.length===1)throw new di(Xu.USER_ALREADY_EXISTS(t.username),Mo.CONFLICT);return ZI.signalUserChange(new rN(process.pid)),`${t.username} successfully added`}o(Kne,"addUser");async function Yne(e){let t=fH.cleanAttributes(e,mH);if(Ki.isEmptyOrZeroLength(t.username))throw new Error(iH);if(Ki.isEmptyOrZeroLength(t.password)&&Ki.isEmptyOrZeroLength(t.role)&&Ki.isEmptyOrZeroLength(t.active))throw new Error(oH);if(!Ki.isEmpty(t.password)&&Ki.isEmptyOrZeroLength(t.password.trim()))throw new Error(aH);if(!Ki.isEmpty(t.active)&&!Ki.isBoolean(t.active))throw new Error(lH);if(!Ki.isEmpty(t.password)&&!Ki.isEmptyOrZeroLength(t.password.trim())&&(Wne(t.username)&&(t.hash=tN.encrypt(t.password)),t.password=await th.hash(t.password,XI)),t.role==="")throw new Error(cH);if(t.role){let n=await rh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new di(Xu.ALTER_USER_ROLE_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Xu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);t.role=n[0].id}let r=await uH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await gl(),ZI.signalUserChange(new rN(process.pid)),r}o(Yne,"alterUser");function Wne(e){let t=!1,r=Yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Wne,"isClusterUser");async function zne(e){let t=dH.dropUserValidation(e);if(t)throw new di(t.message);if(Yi.get(e.username)===void 0)throw new di(Xu.USER_NOT_EXIST(e.username),Mo.NOT_FOUND);let r=await Vne({table:"hdb_user",schema:"system",hash_values:[e.username]});return eN.debug(r),await gl(),ZI.signalUserChange(new rN(process.pid)),`${e.username} successfully deleted`}o(zne,"dropUser");async function jne(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=JI.cloneDeep(e.hdb_user);let r=await rh.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(jne,"userInfo");async function Qne(){let e=await Sg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Qne,"listUsersExternal");async function Sg(){let e=await rh.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=JI.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await rh.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=JI.cloneDeep(s),s.role=t[s.role],Jne(s.role),n.set(s.username,s);return n}o(Sg,"listUsers");function Jne(e){if(!e){eN.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(Gne)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Jne,"appendSystemTablesToRole");async function gl(e=void 0){e?Yi=e:Yi=await Sg()}o(gl,"setUsersWithRolesCache");async function Xne(){return Yi||await gl(),Yi}o(Xne,"getUsersWithRolesCache");async function nN(e,t,r=!0){Yi||await gl();let n=Yi.get(e);if(!n){if(!r)return{username:e};throw new di(jI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}if(n&&!n.active)throw new di(jI.USER_INACTIVE,Mo.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(sH.get(t)===n.password)return s;{let i=th.validate(n.password,t,n.hash_function||th.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)sH.set(t,n.password);else throw new di(jI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}}return s}o(nN,"findAndValidateUser");async function Zne(){Yi||await gl();for(let[,e]of Yi)if(e.role.role==="super_user")return e}o(Zne,"getSuperUser");async function ese(){let e=await Sg(),t=Hne.getConfigFromFile(QI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==QI.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=tN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+nH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+nH.SERVER_SUFFIX.ADMIN,r}o(ese,"getClusterUser");var hH=[];gg.invalidateUser=function(e){for(let t of hH)try{t(e)}catch(r){$ne.error("Error invalidating user",r)}};gg.onInvalidatedUser=function(e){hH.push(e)}});var sh=M((rLe,gH)=>{"use strict";var Sl=Q(),rs=(k(),v(W)),tse=HU(),eLe=ii(),tLe=Ua(),rse=ts(),{validateEvent:pH}=oi(),nh=Jn(),nse=require("process"),{resetDatabases:sse}=(De(),v(mt)),ise={[rs.ITC_EVENT_TYPES.SCHEMA]:ose,[rs.ITC_EVENT_TYPES.USER]:_H};async function ose(e){let t=pH(e);if(t){Sl.error(t);return}Sl.trace("ITC schemaHandler received schema event:",e),await tse(e.message),await ase(e.message)}o(ose,"schemaHandler");async function ase(e){try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=sse();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Sl.error(t)}}o(ase,"syncSchemaMetadata");var EH=[];async function _H(e){try{try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Sl.warn(r)}let t=pH(e);if(t){Sl.error(t);return}Sl.trace(`ITC userHandler ${rs.HDB_ITC_CLIENT_PREFIX}${nse.pid} received user event:`,e),await rse.setUsersWithRolesCache();for(let r of EH)r()}catch(t){Sl.error(t)}}o(_H,"userHandler");_H.addListener=function(e){EH.push(e)};gH.exports=ise});var oi=M((cLe,TH)=>{"use strict";var sLe=Q(),sN=ie(),cse=(k(),v(W)),{ITC_ERRORS:ih}=rn(),{parentPort:iLe,threadId:lse,isMainThread:use,workerData:oLe}=require("worker_threads"),{onMessageFromWorkers:dse,broadcast:aLe,broadcastWithAcknowledgement:fse}=rt();TH.exports={sendItcEvent:mse,validateEvent:SH,SchemaEventMsg:hse,UserEventMsg:pse};var Tg;dse(async(e,t)=>{Tg=Tg||sh(),SH(e),Tg[e.type]&&await Tg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mse(e){return!use&&e.message&&(e.message.originator=lse),fse(e)}o(mse,"sendItcEvent");function SH(e){if(typeof e!="object")return ih.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||sN.isEmpty(e.type))return ih.MISSING_TYPE;if(!e.hasOwnProperty("message")||sN.isEmpty(e.message))return ih.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||sN.isEmpty(e.message.originator))return ih.MISSING_ORIGIN;if(cse.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ih.INVALID_EVENT(e.type)}o(SH,"validateEvent");function hse(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(hse,"SchemaEventMsg");function pse(e){this.originator=e}o(pse,"UserEventMsg")});var Co=M((dLe,bH)=>{"use strict";var RH=(k(),v(W)),uLe=ie(),Rg=Q(),yH=RU(),Zu,{sendItcEvent:AH}=oi();function Ese(e){try{Rg.info("signalSchemaChange called with message:",e),Zu=Zu||sh();let t=new yH(RH.ITC_EVENT_TYPES.SCHEMA,e);return Zu.schema(t),AH(t)}catch(t){Rg.error(t)}}o(Ese,"signalSchemaChange");function _se(e){try{Rg.trace("signalUserChange called with message:",e),Zu=Zu||sh();let t=new yH(RH.ITC_EVENT_TYPES.USER,e);return Zu.user(t),AH(t)}catch(t){Rg.error(t)}}o(_se,"signalUserChange");bH.exports={signalSchemaChange:Ese,signalUserChange:_se}});function yg(){return iN||(iN=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),iN}function Sse(e){return e=e.replace(gse,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function Tse(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function aN(e){let t=IH.default.createHash("shake128",{outputLength:4}),r;return(0,NH.isIPv6)(e)?r=Sse(e):r=e.toLowerCase(),Tse(Uint8Array.from(t.update(r).digest()))}var IH,NH,oN,iN,gse,cN=ue(()=>{De();IH=w(require("crypto")),NH=require("node:net"),oN=new Map;o(yg,"getAnalyticsHostnameTable");gse=/(\d{1,3}\.){3}\d{1,3}$/;o(Sse,"normalizeIPv6");o(Tse,"nodeHashToNumber");o(aN,"stableNodeId")});var vo,lN=ue(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var wg={};Oe(wg,{addAnalyticsListener:()=>ch,calculateCPUUtilization:()=>$H,diffResourceUsage:()=>VH,recordAction:()=>st,recordActionBinary:()=>zr,recordHostname:()=>fN,setAnalyticsEnabled:()=>Rse});function Rse(e){FH=e}function yse(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 Ase(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Ig.set(e,a)}function st(e,t,r,n,s){if(!FH)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Ig.get(i);a?yse(e,a):Ase(i,e,t,r,n,s),bg||bse()}function zr(e,t,r,n,s){st(!!e,t,r,n,s)}function ch(e){GH.push(e)}function bse(){bg=performance.now(),setTimeout(async()=>{let e=performance.now()-bg;bg=0;let t=[],r={time:Date.now(),period:e,threadId:Tl.threadId,metrics:t};for(let[s,i]of Ig){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of qH){let m=Math.floor(c*f),h=a[m-1];if(m>l){let p=m-l;if(h===d){let _=u[u.length-1];typeof _=="number"?u[u.length-1]={value:_,count:1+p}:_.count+=p}else u.push(p>1?{value:h,count:p}:h),d=h;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await KH()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Tl.threadId,byThread:!0,...n});for(let s of GH)s(t);Ig=new Map,Tl.parentPort?Tl.parentPort.postMessage({type:kH,report:r}):zH({report:r})},HH).unref()}async function fN(){let e=Le.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=aN(e);Wr.trace?.("recordHostname nodeId:",t);let r=yg();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function ed(e,t){let r=Le.hostname,n=oN.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=aN(r),Wr.trace?.("storeMetric new nodeId:",n),oN.set(r,n));let s={id:[(0,dN.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function $H(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function VH(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Ise(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),ed(e,l),n+=c}return n}function wH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=BH.statSync(s.primaryStore.env.path).size,c=Ise(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};ed(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function OH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};ed(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function Nse(e,t=6e4){let r=mN(),n=YH(),s=new Promise(R=>{let N=performance.now();setImmediate(()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-N)+"ms"),R(O-N)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:F}=N;for(let Z of O||[]){let{path:G,method:Y,type:q,metric:K,count:ce,total:le,distribution:se,threads:pe,...Ne}=Z;ce||(ce=1);let Ue=K+(G?"-"+G:"");Y!==void 0&&(Ue+="-"+Y),q!==void 0&&(Ue+="-"+q);let xe=c.get(Ue);if(xe){if(xe.threads){let Jt=xe.threads[F];if(Jt)xe=Jt;else{xe.threads[F]={...Ne};continue}}xe.count||(xe.count=1);let Rr=xe.count;for(let Jt in Ne){let Mt=Ne[Jt];typeof Mt=="number"&&(xe[Jt]=(xe[Jt]*Rr+Mt*ce)/(Rr+ce))}xe.count+=ce,le>=0&&(xe.total+=le,xe.ratio=xe.total/xe.count)}else xe={period:t,...Z},delete xe.distribution,c.set(Ue,xe),xe.byThread&&(xe.threads=[],xe.threads[F]={...Ne},u.push(xe));if(se){se=se.map(Jt=>typeof Jt=="number"?{value:Jt,count:1}:Jt);let Rr=l.get(Ue);Rr?Rr.push(...se):l.set(Ue,se)}}await KH()}for(let R of u){let{path:N,method:O,type:F,metric:Z,count:G,total:Y,distribution:q,threads:K,...ce}=R;K=K.filter(le=>le);for(let le in ce){if(typeof R[le]!="number")continue;let se=0;for(let pe of K){let Ne=pe[le];typeof Ne=="number"&&(se+=Ne)}R[le]=se}R.count=K.length,delete R.threads,delete R.byThread}for(let[R,N]of l){let O=c.get(R);N.sort((Jt,Mt)=>Jt.value>Mt.value?1:-1);let F=O.count-1,Z=[],G=0,Y=0,q;for(let Jt of qH){let Mt=F*Jt;for(;G<Mt;)q=N[Y++],G+=q.count,Y===1&&G--;let Xt=N[Y>1?Y-2:0];q||(q=N[0]),Z.push(q.value-(q.value-Xt.value)*(G-Mt)/q.count)}let[K,ce,le,se,pe,Ne,Ue,xe,Rr]=Z;Object.assign(O,{p1:K,p10:ce,p25:le,median:se,p75:pe,p90:Ne,p95:Ue,p99:xe,p999:Rr})}let f;for(let[,R]of c)R.time=d,ed(n,R),f=!0;let m=Date.now(),{idle:h,active:p}=performance.eventLoopUtilization();if(f||p*10>h){let R={metric:vo.MAIN_THREAD_UTILIZATION,idle:h-CH,active:p-PH,taskQueueLatency:await s,time:m,...process.memoryUsage()};ed(n,R)}CH=h,PH=p;let _=process.resourceUsage();_.time=m,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let g=VH(Ag,_);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=Ag.time?m-Ag.time:t,g.cpuUtilization=$H(g,g.period);let y={metric:vo.RESOURCE_USAGE,...g};ed(n,y),Ag=_;let T=nt();wH(n,T),wH(n,{system:T.system}),OH(n,T),OH(n,{system:T.system})}async function LH(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function mN(){return DH||(DH=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function YH(){return MH||(MH=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Cse(){WH=!0;let e=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Nse(HH,e),await LH(mN(),wse),await LH(YH(),Ose)},Math.min(e/2,2147483647)).unref()}function zH(e,t){let r=e.report;r.threadId=t?.threadId||Tl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(vH+=n.mean*n.count);r.totalBytesProcessed=vH,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(UH.get(t))}),UH.set(t,t.performance.eventLoopUtilization())),r.id=(0,dN.getNextMonotonicTime)(),mN().primaryStore.put(r.id,r),WH||Cse(),Pse&&(jH=Dse(r))}async function Dse(e){if(await jH,!ka){let r=(0,oh.dirname)((0,Ng.getLogFilePath)());try{ka=await(0,uN.open)((0,oh.join)(r,"analytics.log"),"r+")}catch{ka=await(0,uN.open)((0,oh.join)(r,"analytics.log"),"w+")}}let t=(await ka.stat()).size;if(t>Lse){let r=Buffer.alloc(t);await ka.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ka.write(r,{position:0}),await ka.truncate(r.length),t=r.length}await ka.write(JSON.stringify(e)+`
15
- `,t)}var Tl,xH,Ng,oh,uN,dN,ah,BH,Wr,Ig,FH,bg,HH,kH,GH,qH,CH,PH,Ag,KH,wse,Ose,DH,MH,WH,vH,UH,Pse,jH,ka,Lse,Wi=ue(()=>{Tl=require("worker_threads"),xH=w(rt());De();Ng=w(Q()),oh=require("path"),uN=require("fs/promises"),dN=w(An()),ah=w(oe());k();Mr();BH=w(require("node:fs"));cN();lN();Wr=(0,Ng.forComponent)("analytics").conditional;(0,ah.initSync)();Ig=new Map,FH=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(Rse,"setAnalyticsEnabled");o(yse,"recordExistingAction");o(Ase,"recordNewAction");o(st,"recordAction");Le.recordAnalytics=st;o(zr,"recordActionBinary");bg=0,HH=1e3,kH="analytics-report",GH=[];o(ch,"addAnalyticsListener");qH=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(bse,"sendAnalytics");o(fN,"recordHostname");o(ed,"storeMetric");o($H,"calculateCPUUtilization");o(VH,"diffResourceUsage");o(Ise,"storeTableSizeMetrics");o(wH,"storeDBSizeMetrics");o(OH,"storeVolumeMetrics");o(Nse,"aggregation");CH=0,PH=0,Ag={userCPUTime:0,systemCPUTime:0},KH=o(()=>new Promise(setImmediate),"rest");o(LH,"cleanup");wse=36e5,Ose=31536e6;o(mN,"getRawAnalyticsTable");o(YH,"getAnalyticsTable");(0,xH.setChildListenerByType)(kH,zH);o(Cse,"startScheduledTasks");vH=0,UH=new Map,Pse=!1;o(zH,"recordAnalytics");Lse=1e6;o(Dse,"logAnalytics")});function lh(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 QH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Os(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 Os,uh=ue(()=>{Os=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(lh,"appendHeader");o(QH,"mergeHeaders")});function Og(e,t,r=vse){let n;return function(...i){return n?n.length*hN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();hN=(hN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var ZH,Mse,vse,JH,Use,pN,XH,hN,EN=ue(()=>{ZH=w(ei()),Mse=3e3,vse=2e4,JH=0,Use=3e4,pN=3e3,XH=performance.now()+pN,hN=0;o(Og,"throttle");setInterval(()=>{let e=performance.now();e-XH-pN>Mse&&JH+Use<e&&(ZH.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),JH=e),XH=e},pN).unref()});var lk={};Oe(lk,{EVICTED:()=>Jc,INVALIDATED:()=>Nn,coerceType:()=>Pg,makeTable:()=>Dg});function Dg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:h}=e,{expirationMS:p,evictionMS:_,audit:g,trackDeletes:y}=e;_??=0;let{attributes:T}=e;T||(T=[]);let R=KA(i,n,l),N,O,F={},Z=Promise.resolve(),G,Y,q;for(let V of T)(V.assignCreatedTime||V.name==="__createdtime__")&&(G=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&(Y=V),V.expiresAt&&(q=V),V.isPrimaryKey&&(F=V);let K,ce=[],le=[],se=1,pe=2,Ne={},Ue={},xe=864e5,Rr=0,Jt,Mt,Xt,Mf=!1,Cc,Gt,vf,Uf=yl.get(U.REPLICATION_DATABASES);if(Array.isArray(Uf)){for(let V of Uf)if(V.name===c&&V.replicateTo>=0){vf=V.replicateTo;break}}let IE=i.getRange({start:!1,end:!1}).constructor,NE=10,Fy=6;g&&Hf(),mm(i.env.path,V=>{if(O)return Ta(V)});class xf extends al{static{o(this,"Updatable")}getUpdatedTime(){return Oa.get(this.getRecord())?.version}getExpiresAt(){return Oa.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new Vm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Pe extends xr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=T;static replicate=h;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=Y;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=d;static schemaDefined=u;static sourcedFrom(E,S){if(S&&(this.sourceOptions=S,(S.expiration||S.eviction||S.scanInterval)&&this.setTTLExpiration(S)),S?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}O=O||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),N=N||E.load;let A=o(L=>{let D=this.sources;if(D=D.filter(H=>H.intermediateSource&&H[L]&&(!H[L].reliesOnPrototype||H.prototype[L])),D.length>0)if(D.length===1){let H=D[0];return(C,x,z)=>{if(C?.source!==H)return H[L](x,z,C)}}else return(H,C,x)=>{let z=[];for(let ne of D){if(H?.source===ne)break;z.push(ne[L](C,x,H))}return Promise.all(z)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1];b.intermediateSource&&(b={});let I=o(L=>{if(b[L]&&(!b[L].reliesOnPrototype||b.prototype[L]))return(D,H,C)=>{if(!D?.source)return b[L](H,C,D)}},"getApplyToCanonicalSource");Ne={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},Ue={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let P=b.shouldRevalidateEvents;return(async()=>{let L=!1,D,H=o(async(C,x)=>{let z=C.value,ne=C.table?ke[c][C.table]:Pe;if(c===Kf&&(C.table===_u.ROLE_TABLE_NAME||C.table===_u.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=z[ne.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=E;let re={residencyId:Dc(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},B=C.id,de=await ne.getResource(B,x,re);switch(C.finished&&await C.finished,C.type){case"put":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!0,re);case"patch":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!1,re);case"delete":return de._writeDelete(B,re);case"publish":case"message":return de._writePublish(B,z,re);case"invalidate":return de._writeInvalidate(B,z,re);case"relocate":return de._writeRelocate(B,re);default:Me.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=E.subscribe;C&&y==null&&(y=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},z=E.subscribeOnThisThread?E.subscribeOnThisThread((0,Rl.getWorkerIndex)(),x):(0,Rl.getWorkerIndex)()===0,ne=C&&z&&await E.subscribe?.(x);if(ne){let re;for await(let B of ne)try{if(!(B.type==="transaction"?B.writes[0]:B)){Me.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(re?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let Se=[Symbol.for("seq"),B.remoteNodeIds[0]],ee=d.get(Se),j=ee?.nodes;j||(j=[]);for(let Te of B.remoteNodeIds.slice(1)){let fe=j.find(We=>We.id===Te);j=j.filter(We=>We.id!==Te||We===fe),fe||(fe={id:Te,seqId:0},j.push(fe)),fe.seqId=Math.max(ee?.seqId??1,B.localTime),Te===re?.nodeId&&(fe.lastTxnTime=B.timestamp)}let he=Math.max(ee?.seqId??1,B.localTime);Me.default.trace?.("Received txn",c,he,new Date(he),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(Se,{seqId:he,nodes:j})}D=B.localTime}B.onCommit&&re?.committed.then(B.onCommit);continue}if(re)if(B.beginTxn)re.resolve();else{re.write_promises.push(H(B,re));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let me=xt(B,()=>{if(B.type==="transaction"){let Se=[];for(let ee of B.writes)try{Se.push(H(ee,B))}catch(j){throw j.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(B),j}return Promise.all(Se)}else if(B.type==="define_schema"){let Se=this.attributes.slice(0),ee=!1;for(let j of B.attributes)Se.find(he=>he.name===j.name)||(Se.push(j),ee=!0);ee&&(ze({table:s,database:c,attributes:Se,origin:"cluster"}),fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,$.CREATE_TABLE,c,s)))}else return B.beginTxn?(re=B,re.write_promises=[H(B,B)],new Promise(Se=>{re.resolve=()=>Se(Promise.all(re.write_promises))})):H(B,B)});re&&(re.committed=me),L&&me&&!me?.waitingForUserChange&&(me.then(()=>fh.signalUserChange(new mh.UserEventMsg(process.pid))),me.waitingForUserChange=!0),B.onCommit&&(me?me.then(B.onCommit):B.onCommit())}catch(de){Me.default.error?.("error in subscription handler",de)}}}catch(C){Me.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(E,S,A){let b=super.getResource(E,S,A);if(this.loadAsInstance===!1&&(S._freezeRecords=!0),E!=null&&this.loadAsInstance!==!1){Lr(E);try{if(b.getRecord?.())return b;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let I=!A?.async||i.cache?.get?.(E),P=Dr(S),L=P.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ea(E,S,{transaction:L,ensureLoaded:A?.ensureLoaded},I,D=>{if(D?Pe._updateResource(b,D):b.#e=null,S.onlyIfCached){if(!b.doesExist())throw new it.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let H=Pc(E,D,S,b);if(H)return P?.disregardReadTxn(),b.#i=!0,S.loadedFromSource=!0,Cs(H,C=>(Pe._updateResource(b,C),b))}return b})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(E)),I}}return b}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#r=S?.version}ensureLoaded(){let E=Pc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,Cs(E,S=>{this.#n=S,this.#e=S.value,this.#r=S.version})}static getNewId(){let E=F?.type;if(E==="String"||E==="ID")return super.getNewId();if(!Gt){let I=i.getEntry(Symbol.for("id_allocation")),P=I?.value,L;if(P&&P.nodeName===server.hostname&&(!Yse(i)||P.pid===process.pid)){let D=P.start,H=P.end;L=D;for(let C of i.getKeys({start:H,end:D,limit:1,reverse:!0}))L=C}else P=b(I?.version??null),L=P.start;Gt=new BigInt64Array([BigInt(L)+1n]),Gt=new BigInt64Array(i.getUserSharedBuffer("id",Gt.buffer)),Gt.maxSafeId=P.end}let S=Number(Atomics.add(Gt,0,1n)),A=E==="Int"?512:1048576;if(S+A>=Gt.maxSafeId){let I=o(P=>{Gt.maxSafeId=S+(E==="Int"?1023:4194303);let L=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=P?void 0:i.useReadTransaction(),H=Number(Gt[0]);for(let z of i.getKeys({start:H+1,end:L,limit:1,transaction:D}))L=z;D?.done();let{value:C,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Gt.maxSafeId<L){if(C.end>Gt.maxSafeId-100)return;Me.default.info?.("New id allocation",S,Gt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:C.start,end:Gt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{Me.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Gt.maxSafeId}, but id of ${L} detected`);let z=b(x);z.alreadyUpdated||Atomics.store(Gt,0,BigInt(z.start+1)),Gt.maxSafeId=z.end}},"updateEnd");S+A===Gt.maxSafeId?setImmediate(I):S+100>=Gt.maxSafeId&&(Me.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return S;function b(I){let P=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=P/4,D,H,C=!1,x,z;do{x=Math.floor(Math.random()*P),z={start:x,end:x+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let ne of i.getKeys({start:x,limit:1,reverse:!0}))D=ne;H=P;for(let ne of i.getKeys({start:x+1,end:P,limit:1}))H=ne;L*=.875,L<1e3&&!C&&(C=!0,Me.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,D,H,L))}while(!(L<H-x&&(L<x-D||D===0)));return i.transactionSync(()=>{let ne=i.getEntry(Symbol.for("id_allocation"));return(ne?.version??null)==I?(Me.default.info?.("Allocated new id range",z),i.put(Symbol.for("id_allocation"),z,Date.now()),z):(Me.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...ne.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,_||(_=0);else if(E&&typeof E=="object")p=E.expiration*1e3,_=(E.eviction||0)*1e3,xe=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");xe=xe||(p+_)/4,Ta()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Pe.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(b){throw b.message+=` in residency function for table ${s}`,b}})}static setResidencyById(E){Pe.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Pe.getResidencyById)return Pe.getResidencyById(E[t]);let A=vf;if(S.replicateTo!=null){if(Array.isArray(S.replicateTo))return S.replicateTo.includes(server.hostname)?S.replicateTo:[server.hostname,...S.replicateTo];S.replicateTo>=0&&(A=S.replicateTo)}if(A>=0&&server.nodes){let b=[server.hostname];if(S.previousResidency)b.push(...S.previousResidency.slice(0,A));else{let I=server.nodes.map(D=>D.name),P=Math.floor(I.length*Math.random());b.push(...I.slice(P,P+A));let L=P+A-I.length;L>0&&b.push(...I.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Hf(),Pe.audit=E}static coerceId(E){return E===""?null:Pg(E,F)}static async dropTable(){delete ke[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&Vr&&E.value&&Na(E.value);if(c===a){for(let E of T)d.remove(Pe.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Pe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),gN.default.unlinkSync(i.env.path);fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,$.DROP_TABLE,c,s))}get(E){let S=this.constructor;if(typeof E=="string"&&S.loadAsInstance!==!1)return this.getProperty(E);if(Ff(E))return this.search(E);if(E&&E.id===void 0&&!E.toString()){let A={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:T,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Pe.getRecordCount().then(b=>(A.recordCount=b.recordCount,A.estimatedRecordRange=b.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),b=Dr(A),I=b.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=yr(E);Lr(P);let L=!0;return E.checkPermission&&(L=this.allowRead(A.user,E)),Cs(Cs(L,D=>{if(!D)throw new it.AccessViolation(A.user);let H=!0;return Ea(P,A,{transaction:I,ensureLoaded:H},!1,C=>{if(A.onlyIfCached){if(!C?.value)throw new it.ServerError("Entry is not cached",504)}else if(H){let x=Pc(P,C,A);if(x)return b?.disregardReadTxn(),A.loadedFromSource=!0,x.then(z=>z?.value)}return C?.value})}),D=>{let H=E?.select;return H&&D!=null?Uu(H,this.constructor)(D):D})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=_a(E,S);if(A?.read){if(A.isSuperUser)return!0;let b=A.attribute_permissions,I=S?.select;if(b?.length>0||Mf&&I){if(S||(S={}),I){let P=Array.isArray(I)?I:[I],L=b?.length>0&&_N(b,"read");S.select=P.map(D=>{let H=D.name||D;if(!L||L[H]){let C=Xt[H]?.definition?.tableClass;if(C){if(D.name||(D={name:D}),!D.checkPermission&&S.checkPermission&&(D.checkPermission=S.checkPermission),!C.prototype.allowRead.call(null,E,D))return!1;if(!D.select)return D.name}return D}}).filter(Boolean)}else S.select=b.filter(P=>P.read&&!Xt[P.attribute_name]).map(P=>P.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let b=_a(E,A);if(b?.update){let I=b.attribute_permissions;if(I?.length>0){let P=_N(I,"update");for(let L in S)if(!P[L])return!1;for(let L of I){let D=L.attribute_name;!L.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return Sa(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let b=_a(E,A);if(b?.insert){let I=b.attribute_permissions;if(I?.length>0){let P=_N(I,"insert");for(let L in S)if(!P[L])return!1;return Sa(this.getContext())}else return Sa(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return _a(E,S)?.delete&&Sa(this.getContext())}update(E,S){let A,b=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),I=!1;b?(I=S,S=E,A=this.getId()):A=yr(E);let P=this.getContext();if(!Dr(P))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(I)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#t=S;else if(b){let D=this.#t;D&&(S=Object.assign(D,S)),this.#t=S}else{let D=!0;if(E==null)throw new TypeError("Can not put a record without a target");return E.checkPermission&&(D=this.allowUpdate(P.user,S,E)),Cs(D,H=>{if(!H)throw new it.AccessViolation(P.user);return Cs(i.get(yr(E)),C=>{let x=new xf(C);return x._setChanges(S),this._writeUpdate(A,x.getChanges(),!1),x})})}return this._writeUpdate(A,this.#t,I),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===tk?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new Vm(S)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,S){if(typeof S=="number")return this.addTo(E,-S);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(E){this.#t=E}setRecord(E){this.#e=E}invalidate(E){let S=!0,A=this.getContext();return E?.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new it.AccessViolation(A.user);this._writeInvalidate(E?yr(E):this.getId())})}_writeInvalidate(E,S,A){let b=this.getContext();Lr(E),Dr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Ne.invalidate?.bind(this,b,E),beforeIntermediate:Ra(S,Ue.invalidate?.bind(this,b,E)),commit:o((P,L)=>{if(!(ga(P,L,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));Me.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(P).toISOString()}`),R(E,S,L,P,Nn,g,{user:b?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Lr(E),Dr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Ne.relocate?.bind(this,A,E),beforeIntermediate:Ue.relocate?.bind(this,A,E),commit:o((I,P)=>{if(ga(I,P,S?.nodeId)<=0)return;let L=Pe.getResidencyRecord(S.residencyId),D=0,H=null,C=P?.value;if(L&&!L.includes(server.hostname)){for(let x in r)H||(H={}),H[x]=C[x];D=Nn}else H=C;Me.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(I).toISOString()}`),R(E,H,P,I,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){if(this.getResidencyById)return!1;let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},b=Lc(this.getResidency(S.value,A)),I;if(b){if(!b.includes(server.hostname))return!1;I=Dc(b)}let P=0;Me.default.debug?.("Performing a relocate of an entry",E.key,S.value,b);let L=R(E.key,S.value,E,E.version,P,!0,{residencyId:I,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let b=this.Source,I;if(!((O||g)&&(!S||(I=i.getEntry(E),!I||!S)||I.version!==A))){if(O){if(i.hasLock(E,I.version))return;let P;for(let L in r)P||(P={}),P[L]=S[L];if(P)return R(E,P,I,A,Jc,null,null,null,!0)}return i.ifVersion(E,A,()=>{po(E,S,null)}),Qc(i,I??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,global.operation(E,S)}put(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!0);else{let A=!0;if(E==null)throw new TypeError("Can not put a record without a target");let b=this.getContext();return E.checkPermission&&(A=this.allowUpdate(b.user,S,E)),Cs(A,I=>{if(!I)throw new it.AccessViolation(b.user);if(Array.isArray(S))for(let P of S){let L=P[t];this._writeUpdate(L,P,!0)}else{let P=yr(E);this._writeUpdate(P,S,!0)}})}}create(E,S){let A=!0,b=this.getContext();if(!S&&!(E instanceof URLSearchParams)&&(S=E,E=void 0),!S||typeof S!="object"||Array.isArray(S))throw new TypeError("Can not create a record without an object");return E?.checkPermission&&(A=this.allowCreate(b.user,S,E)),Cs(A,I=>{if(!I)throw new it.AccessViolation(b.user);let P=yr(E)??S[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new it.ClientError("Record already exists",409);return this._writeUpdate(P,S,!0),S})}patch(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!1);else{let A=this.update(E,S);if(A?.then)return A.then(()=>{})}}_writeUpdate(E,S,A,b){let I=this.getContext(),P=Dr(I);Lr(E);let L=this.#n??i.getEntry(E);this.#s=A?tk:qse;let D=o(C=>A?C.put?()=>C.put(I,E,S):null:C.patch?()=>C.patch(I,E,S):C.put?()=>C.put(I,E,cl(this)):null,"writeToSources"),H={key:E,store:i,entry:L,nodeName:I?.nodeName,validate:o(C=>{S||(S=this.#t),A||S&&J_(this.#t===S?this:S)?I?.source||(P.checkOverloaded(),this.validate(S,!A),Y&&(S[Y.name]=Y.type==="Date"?new Date(C):Y.type==="String"?new Date(C).toISOString():C),A&&(t&&S[t]!==E&&(S[t]=E),G&&(L?.value?S[G.name]=L?.value[G.name]:S[G.name]=G.type==="Date"?new Date(C):G.type==="String"?new Date(C).toISOString():C),S=cl(S))):P.removeWrite(H)},"validate"),before:D(Ne),beforeIntermediate:Ra(S,D(Ue)),commit:o((C,x,z)=>{if(z){if(I&&x?.version>(I.lastModified||0)&&(I.lastModified=x.version),this.#n=x,x?.value&&x.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=x?.value??null)}this.#t=void 0,this.#r=C;let ne=x?.value,re=S;this.#s=0;let B=!1,de=ga(C,x,b?.nodeId),me,Se=A?"put":"patch",ee;b?.residencyId!=null&&(ee=b.residencyId);let j=I?.expiresAt??(p?p+Date.now():-1);if(de<=0){if(g){let fe=x.localTime,We=x.version;Me.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(C),"applying later update from:",new Date(We),"local recorded time",new Date(fe));let Et=[];for(;fe>C||We>=C&&fe>0;){let ut=l.get(fe);if(!ut)break;let Ee=At(ut);if(We=Ee.version,We>=C){if(We===C){if(de=ga(C,{version:We,localTime:fe},b?.nodeId),de===0)return Te(!1);if(de>0)continue}if(Ee.type==="patch")Et.push(Ee),me=S;else if(Ee.type==="put"||Ee.type==="delete")return Te(!1)}fe=Ee.previousLocalTime}fe||Me.default.debug?.("No further audit history, applying incremental updates based on available history",E,"existing version preserved",x),Et.sort((ut,Ee)=>ut.version-Ee.version);for(let ut of Et){let Ee=ut.getValue(i);if(Me.default.debug?.("Rebuilding update with future patch:",new Date(ut.version),Ee,ut),re=WE(re,Ee,A),!re)return Te(!1)}}else{if(A)return Te(!1);re=WE(re,ne,A),Me.default.debug?.("Rebuilding update without audit:",re)}Me.default.trace?.("Rebuilt record to save:",re," is full update:",A)}let he;if(A?he=re:this.constructor.loadAsInstance===!1?he=cl(ne,re):(this.#e=ne,he=cl(this,re)),this.#e=he,he&&he.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(ee==null){L?.residencyId&&(I.previousResidency=Pe.getResidencyRecord(L.residencyId));let fe=Lc(Pe.getResidency(he,I));if(fe&&!fe.includes(server.hostname))if(me??=he,B=!0,Pe.getResidencyById)he=void 0;else{he=null;for(let We in r)he||(he={}),he[We]=me[We]}ee=Dc(fe)}A||(me=S),Me.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(C).toISOString()}${j?", expires at: "+new Date(j).toISOString():""}${x?", replaces entry from: "+new Date(x.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(he).slice(0,100)}catch{return""}})()),po(E,ne,he),Te(!0),I.expiresAt&&Ta();function Te(fe){R(E,fe?he:void 0,fe?x:{...x,value:void 0},C,B?Nn:0,g,{omitLocalRecord:B,user:I?.user,residencyId:ee,expiresAt:j,nodeId:b?.nodeId,originatingOperation:I?.originatingOperation},Se,!1,fe?me:me??S)}o(Te,"writeCommit")},"commit")};P.addWrite(H)}async delete(E){if(Ff(E)){E.select=["$id"];for await(let S of this.search(E))this._writeDelete(S.$id);return!0}if(E){let S=!0,A=this.getContext();return E.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new it.AccessViolation(A.user);let I=yr(E);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Dr(this.getContext());Lr(E);let b=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,before:Ne.delete?.bind(this,b,E),beforeIntermediate:Ue.delete?.bind(this,b,E),commit:o((I,P,L)=>{let D=P?.value;L&&(b&&P?.version>(b.lastModified||0)&&(b.lastModified=P.version),Pe._updateResource(this,P)),!(ga(I,P,S?.nodeId)<=0)&&(po(this.getId(),D),Me.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(I).toISOString()}`),g||y?(R(E,null,P,I,0,g,{user:b?.user,nodeId:S?.nodeId},"delete"),g||Ta()):Qc(i,P))},"commit")}),!0}search(E){let S=this.getContext(),A=Dr(S);if(!E)throw new Error("No query provided");if(E.parseError)throw E.parseError;if(E.checkPermission&&!this.allowRead(S.user,E))throw new it.AccessViolation(S.user);let b=E.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let I=E.id??this.getId();I&&(b=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(b));let P,L={};function D(j,he){let Te;switch(he){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');Te=!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 "+he)}for(let fe of j){if(fe.conditions){fe.conditions=D(fe.conditions,fe.operator);continue}let We=fe[0]??fe.attribute,Et=We==null?F:xi(T,We);if(Et)(Et.type||WA[fe.comparator])&&(fe[1]===void 0?fe.value=C(fe.value,Et):fe[1]=C(fe[1],Et));else if(We!=null&&!E.allowConditionsOnDynamicAttributes)throw(0,it.handleHDBError)(new Error,`${We} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let ut=fe.chainedConditions[0],Ee,ft;if(ut.comparator==="gt"||ut.comparator==="greater_than"||ut.comparator==="ge"||ut.comparator==="greater_than_equal"?(Ee=fe,ft=ut):(Ee=ut,ft=fe),Ee.comparator!=="lt"&&Ee.comparator!=="less_than"&&Ee.comparator!=="le"&&Ee.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let tt=ft.comparator==="ge"||ft.comparator==="greater_than_equal",cr=Ee.comparator==="le"||Ee.comparator==="less_than_equal";fe.comparator=(tt?"ge":"gt")+(cr?"le":"lt"),fe.value=[ft.value,Ee.value]}else throw new Error("Multiple chained conditions are not currently supported")}return j}o(D,"prepareConditions");function H(j,he){if(E.enforceExecutionOrder)return j;for(let Te of j)Te.conditions&&(Te.conditions=H(Te.conditions,Te.operator));return j.length>1&&he!=="or"?xse(j,b_(Pe)):j}o(H,"orderConditions");function C(j,he){return Array.isArray(j)?j.map(Te=>Pg(Te,he)):Pg(j,he)}o(C,"coerceTypedValues");let x=E.operator;(b.length>0||x)&&(b=D(b,x));let z=typeof E.sort=="object"&&E.sort,ne;if(z&&x!=="or"){let j=z.attribute;if(j==null)throw new it.ClientError("Sort requires an attribute");if(P=b.find(he=>Du(he.attribute)===Du(j)),!P){let he=xi(T,j);if(!he)throw(0,it.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);if(he.indexed)P={...z,comparator:"sort"},b.push(P);else if(b.length===0&&!E.allowFullScan)throw(0,it.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!z.descending)}b=H(b,x),z&&(P&&b[0]===P?z.next&&(ne={dbOrderedAttribute:z.attribute,attribute:z.next.attribute,descending:z.next.descending,next:z.next.next}):(P&&b.splice(b.indexOf(P),1),ne=z));let re=E.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:b,operator:x,postOrdering:ne,selectApplied:!!re};let B=A.useReadTxn(),de=zA(b,x,Pe,B,E,S,(j,he)=>hu(j,re,S,B,he),L),me=E.ensureLoaded!==!1,Se=Pe.transformEntryForSelect(re,S,B,L,me,!0),ee=Pe.transformToOrderedSelect(de,re,ne,S,B,Se);return(E.offset||E.limit!==void 0)&&(ee=ee.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0)),ee.onDone=()=>{ee.onDone=null,A.doneReadTxn()},ee.selectApplied=!0,ee.getColumns=()=>{if(re){let j=[];for(let he of re)he==="*"?j.push(...T.map(Te=>Te.name)):j.push(he.name||he);return j}return T.filter(j=>!j.computed&&!j.relationship).map(j=>j.name)},ee}static transformToOrderedSelect(E,S,A,b,I,P){let L=new IE;if(A){E=hu(E,S,b,I,null);let D;L.iterate=function(){let C,x=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),z,ne=A.dbOrderedAttribute,re,B,de=!0;function me(ee){let j=ee.next&&me(ee.next),he=ee.descending;return b.sort=ee,(Te,fe)=>{let We=mu(Te,ee.attribute,b),Et=mu(fe,ee.attribute,b),ut=he?(0,Al.compareKeys)(Et,We):(0,Al.compareKeys)(We,Et);return ut===0?j?.(Te,fe)||0:ut}}o(me,"createComparator");let Se=me(A);return{async next(){let ee;if(C)if(ee=C.next(),ee.done){if(z)return L.onDone&&L.onDone(),ee}else return{value:await P.call(this,ee.value)};D=[],re&&D.push(re);do if(ee=await x.next(),ee.done){if(z=!0,D.length)break;return L.onDone&&L.onDone(),ee}else{let j=ee.value;if(j?.then&&(j=await j),ne){let he=mu(j,ne,b);if(de)de=!1,B=he;else if(he!==B){B=he,re=j;break}}D.push(j)}while(!0);return A.isGrouped,D.sort(Se),C=D[Symbol.iterator](),ee=C.next(),ee.done?(L.onDone&&L.onDone(),ee):{value:await P.call(this,ee.value)}},return(){L.onDone&&L.onDone(),x.return()},throw(){L.onDone&&L.onDone(),x.throw()}}};let H=o(C=>{if(typeof S=="object"&&Array.isArray(C.attribute))for(let x=0;x<S.length;x++){let z=S[x],ne;if(z.name===C.attribute[0]){for(ne=z.sort||(z.sort={});ne.next;)ne=ne.next;ne.attribute=C.attribute.slice(1),ne.descending=C.descending}else z===C.attribute[0]&&(S[x]=ne={name:z,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&H(C.next)},"applySortingOnSelect");H(A)}else L.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),L=L.map(function(D){try{let H=P.call(this,D);return typeof H?.catch=="function"?H.catch(C=>{throw C.partialObject={[t]:D.key},C}):H}catch(H){throw H.partialObject={[t]:D.key},H}});return L}static transformEntryForSelect(E,S,A,b,I,P){let L;I&&O&&!(typeof E=="string"?[E]:E)?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(L=!0);let D,H=o(function(C){let x;if(S?.transaction?.stale&&(S.transaction.stale=!1),C!=null){if(x=C.deref?C.deref():C.value,!x&&(C.key===void 0||C.deref)||C.metadataFlags&Nn){if(C.metadataFlags&Nn&&S.replicateFrom===!1&&P&&C.residencyId)return qa.SKIP;if(C=Ea(C.key??C,S,{transaction:A,lazy:E?.length<4,ensureLoaded:I},this?.isSync,z=>z),C?.then)return C.then(H.bind(this));x=C?.value}if(L&&C?.metadataFlags&(Nn|Jc)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let z=Pc(C.key??C,C,S);if(z?.then)return z.then(H)}}if(x==null)return P?qa.SKIP:x;if(E&&!(E[0]==="*"&&E.length===1)){let z,ne=o((B,de)=>{let me;typeof B=="object"?me=B.name:me=B;let Se=Xt?.[me],ee;if(Se){let j=b?.[me];if(j)if(j.hasMappings){let Te=Se.from?x[Se.from]:Du(C.key);ee=j.get(Te),ee||(ee=[])}else ee=j.fromRecord?.(x);else ee=Se(x,S,C,!0);let he=o(Te=>{if(Se.directReturn)return de(Te,me);if(Te&&typeof Te=="object"){let fe=Se.definition?.tableClass||Pe;D||(D={});let We=D[me]||(D[me]=fe.transformEntryForSelect(me===B?null:B.select||(Array.isArray(B)?B:null),S,A,j,I));if(Array.isArray(Te)){let Et=[],ut=fe.transformToOrderedSelect(Te,B.select,typeof B.sort=="object"&&B.sort,S,A,We)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ee=o(tt=>{for(;!tt.done;){if(tt?.then)return tt.then(Ee);Et.push(tt.value),tt=ut.next()}de(Et,me)},"nextValue"),ft=Ee(ut.next());ft&&(z||(z=[]),z.push(ft));return}else if(Te=We.call(this,Te),Te?.then){z||(z=[]),z.push(Te.then(Et=>de(Et,me)));return}}de(Te,me)},"handleResolvedValue");ee?.then?(z||(z=[]),z.push(ee.then(he))):he(ee);return}else ee=x[me],ee&&typeof ee=="object"&&me!==B&&(ee=Pe.transformEntryForSelect(B.select||B,S,A,null)({value:ee}));de(ee,me)},"selectAttribute"),re;if(typeof E=="string")ne(E,B=>{re=B});else if(Array.isArray(E))if(E.asArray)re=[],E.forEach((B,de)=>{B==="*"?E[de]=x:ne(B,me=>re[de]=me)});else{re={};let B=E.forceNulls;for(let de of E)if(de==="*")for(let me in x)re[me]=x[me];else ne(de,(me,Se)=>{me===void 0&&B&&(me=null),re[Se]=me})}else throw new it.ClientError("Invalid select"+E);return z?Promise.all(z).then(()=>re):re}return x},"transform");return H}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ze({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],b=this,I=eb(Pe,this.getId()??null,function(L,D,H,C){try{let x=D.getValue?.(i,S),z=D.type;if(!x&&z==="patch"&&S){let re=i.getEntry(L);re?.version===D.version?x=re.value:x=D.getValue?.(i,!0,H),z="put"}let ne={id:L,localTime:H,value:x,version:D.version,type:z,beginTxn:C};A?A.push(ne):this.send(ne)}catch(x){Me.default.error?.(x)}},E.startTime||0,E),P=(async()=>{this.isCollection&&(I.includeDescendants=!0,E.onlyChildren&&(I.onlyChildren=!0)),E.supportsTransactions&&(I.supportsTransactions=!0);let L=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let H=E.startTime;if(this.isCollection){if(H){if(D)throw new it.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:x}of l.getRange({start:H,exclusiveStart:!0,snapshot:!1})){let z=At(x);if(z.tableId!==n)continue;let ne=z.recordId;if(L==null||ik(L,ne)){let re=z.getValue(i,S,C);if(I.send({id:ne,localTime:C,value:re,version:z.version,type:z.type}),I.queue?.length>nk&&await I.waitForDrain()===!1)return}I.startTime=C}}else if(D){let C=[];for(let{key:x,value:z}of l.getRange({start:"z",end:!1,reverse:!0}))try{let ne=At(z);if(ne.tableId!==n)continue;let re=ne.recordId;if(L==null||ik(L,re)){let B=ne.getValue(i,S,x);if(C.push({id:re,localTime:x,value:B,version:ne.version,type:ne.type}),--D<=0)break}}catch(ne){Me.default.error("Error getting history entry",x,ne)}for(let x=C.length;x>0;)I.send(C[--x]);C[0]&&(I.startTime=C[0].localTime)}else if(!E.omitCurrent){for(let{key:C,value:x,version:z,localTime:ne}of i.getRange({start:L??!1,end:L==null?void 0:[L,Al.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(I.send({id:C,localTime:ne,value:x,version:z,type:"put"}),I.queue?.length>nk&&await I.waitForDrain()===!1))return}}else{D&&!H&&(H=0);let C=this.#n?.localTime;if(C===VA&&(i.cache?.delete(L),this.#n=i.getEntry(L),Me.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),Me.default.trace?.("Subscription from",H,"from",L,C),H<C){let x=[],z=C;do{let ne=l.get(z);if(ne){E.omitCurrent=!0;let re=At(ne),B=re.getValue(i,S,z);S&&(re.type="put"),x.push({id:L,value:B,localTime:z,...re}),z=re.previousLocalTime}else break;D&&D--}while(z>H&&D!==0);for(let ne=x.length;ne>0;)I.send(x[--ne]);I.startTime=C}!E.omitCurrent&&this.doesExist()&&I.send({id:L,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of A)I.send(C);A=null})();return E.listener&&I.on("data",E.listener),I}static subscribeOnThisThread(E,S){return E===0||S?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,S,A){if(S===void 0||S instanceof URLSearchParams)this._writePublish(this.getId(),E,S);else{let b=!0,I=this.getContext();return E.checkPermission&&(b=this.allowCreate(I.user,E,I)),Cs(b,P=>{if(!P)throw new it.AccessViolation(I.user);let L=yr(E);this._writePublish(L,S,A)})}}_writePublish(E,S,A){let b=Dr(this.getContext());E??=null,E!==null&&Lr(E);let I=this.getContext();b.addWrite({key:E,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(b.checkOverloaded(),this.validate(S))},"validate"),before:Ne.publish?.bind(this,I,E,S),beforeIntermediate:Ra(S,Ue.publish?.bind(this,I,E,S)),commit:o((P,L,D)=>{L===void 0&&y&&!g&&Ta(),Me.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(P).toISOString()}`),R(E,L?.value??null,L,L?.version||P,0,!0,{user:I?.user,residencyId:A?.residencyId,expiresAt:I?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,b=o((I,P,L)=>{if(P.type&&I!=null)if(S&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an object${P.type?" ("+P.type+")":""}`);let D=P.properties;for(let H=0,C=D.length;H<C;H++){let x=D[H];if(x.relationship||x.computed){E.hasOwnProperty(x.name)&&(A||(A=[])).push(`Computed property ${L}.${x.name} may not be directly assigned a value`);continue}let z=b(I[x.name],x,L+"."+x.name);z&&(I[x.name]=z)}if(P.sealed&&I!=null&&typeof I=="object")for(let H in I)D.find(C=>C.name===H)||(A||(A=[])).push(`Property ${H} is not allowed within object in property ${L}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string`);break;case"Boolean":typeof I!="boolean"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof Rs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(P.elements)for(let D=0,H=I.length;D<H;D++){let C=I[D],x=b(C,P.elements,L+"[*]");x&&(I[D]=x)}}else(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an Array`);break}P.nullable===!1&&I==null&&(A||(A=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=T.length;I<P;I++){let L=T[I];if(L.relationship||L.computed){Object.hasOwn(E,L.name)&&(A||(A=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!S||L.name in E){let D=b(E[L.name],L,L.name);D!==void 0&&(E[L.name]=D)}}if(f)for(let I in E)T.find(P=>P.name===I)||(A||(A=[])).push(`Property ${I} is not allowed`);if(A)throw new it.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new it.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new it.ClientError("Attribute names cannot include backticks or forward slashes");Bse(A.name),S.push(A)}return ze({table:s,database:c,schemaDefined:u,attributes:S}),Pe.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return ze({table:s,database:c,schemaDefined:u,attributes:S}),Pe.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,S=gN.default.statfsSync?.(E)??{};return{available:S.bavail*S.bsize,free:S.bfree*S.bsize,size:S.blocks*S.bsize}}static async getRecordCount(E){let S=i.getStats().entryCount,A=1e3/2,b=performance.now(),I=Math.floor(S/2),P=E?.exactCount,L=0,D=0,H;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&L++,D++,await Ga(),!P&&D<I&&performance.now()-b>A){H=D;break}if(H){let C=L;L=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:H,snapshot:!1}))ee!=null&&L++,await Ga();let x=H*2,z=(L+C)/x,ne=Math.pow((L-C+1)/H/2,2)+z*(1-z)/x,re=Math.max(Math.sqrt(ne)*S,1),B=Math.round(z*S),de=Math.max(B-1.96*re,L+C),me=Math.min(B+1.96*re,S),Se=Math.pow(10,Math.round(Math.log10(re)));return Se>B&&(Se=Se/10),L=Math.round(B/Se)*Se,{recordCount:L,estimatedRange:[Math.round(de),Math.round(me)]}}return{recordCount:L}}static updatedAttributes(){Xt=this.propertyResolvers={$id:o((E,S,A)=>({value:A.key}),"$id"),$updatedtime:o((E,S,A)=>A.version,"$updatedtime"),$updatedTime:o((E,S,A)=>A.version,"$updatedTime"),$expiresAt:o((E,S,A)=>A.expiresAt,"$expiresAt"),$record:o((E,S,A)=>A?{value:E}:E,"$record"),$distance:o((E,S,A)=>A&&(A.distance??S?.vectorDistances?.get(A)),"$distance")};for(let E of this.attributes){E.isPrimaryKey&&(F=E),E.resolve=null;let S=E.relationship,A=E.computed;if(S)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),A&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Mf=!0,S.to)E.elements?.definition?(Xt[E.name]=E.resolve=(b,I,P,L)=>{let D=b[S.from?S.from:t],H=E.elements.definition.tableClass;return L?Lu({attribute:S.to,value:D},Dr(I).getReadTxn(),!1,H,!1).map(C=>C&&C.key!==void 0?C:H.primaryStore.getEntry(C,{transaction:Dr(I).getReadTxn()})).asArray:H.search([{attribute:S.to,value:D}],I).asArray},E.set=()=>{},E.resolve.definition=E.elements.definition,E.resolve.to=S.to,S.from&&(E.resolve.from=S.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(S.from){let b=E.definition||E.elements?.definition;b?(Xt[E.name]=E.resolve=(I,P,L,D)=>{let H=I[S.from];if(H===void 0)return;if(E.elements){let x,z=H?.map(ne=>{let re=b.tableClass.primaryStore[D?"getEntry":"get"](ne,{transaction:Dr(P).getReadTxn()});return re?.then&&(x=!0),Pe.loadAsInstance===!1&&Object.freeze(D?re?.value:re),re});return S.filterMissing?x?Promise.all(z).then(ne=>ne.filter(ok)):z.filter(ok):x?Promise.all(z):z}let C=b.tableClass.primaryStore[D?"getEntry":"get"](H,{transaction:Dr(P).getReadTxn()});return Pe.loadAsInstance===!1&&Object.freeze(D?C?.value:C),C},E.set=(I,P)=>{if(Array.isArray(P)){let L=P.map(D=>D.getId?.()||D[b.tableClass.primaryKey]);I[S.from]=L}else{let L=P.getId?.()||P[b.tableClass.primaryKey];I[S.from]=L}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=S.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else if(A)typeof A.from=="function"&&this.setComputedAttribute(E.name,A.from),Xt[E.name]=E.resolve=(b,I,P)=>{let L=typeof A.from=="string"?b[A.from]:b,D=this.userResolvers[E.name];if(D)return D(L,I,P);Me.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}},E.resolve.directReturn=!0;else if(r[E.name]?.customIndex?.propertyResolver){let b=r[E.name].customIndex;Xt[E.name]=(I,P,L)=>{let D=I[E.name];return b.propertyResolver(D,P,L)},Xt[E.name].directReturn=!0}}Km(this,this),Km(xf,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,vu.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=xi(T,E);if(!A){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!A.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=S}static async deleteHistory(E=0,S=!1){let A;for(let{key:b,value:I}of l.getRange({start:0,end:E}))await Ga(),At(I).tableId===n&&(A=h_(l,b,I));if(S)for(let b of i.getRange({start:0,versions:!0})){let{key:I,value:P,localTime:L}=b;await Ga(),P===null&&L<E&&(A=Qc(i,b))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:b}of l.getRange({start:E||1,end:S})){await Ga();let I=At(b);I.tableId===n&&(yield{id:I.recordId,localTime:A,version:I.version,type:I.type,value:I.getValue(i,!0,A),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(E){let S=[];if(E==null)throw new Error("An id is required");let A=i.getEntry(E);if(!A)return S;let b=A.localTime;if(!b)throw new Error("The entry does not have a local audit time");let I=0;do{await Ga();let P=l.get(b);if(P){let L=At(P);S.push({id:L.recordId,localTime:b,version:L.version,type:L.type,value:L.getValue(i,!0,b),user:L.user}),b=L.previousLocalTime}else break}while(I<1e3&&b);return S.reverse()}static cleanup(){K?.remove()}}let wE=Og(async(V,E,S)=>{for(let A of Pe.sources)if(A.get&&(!A.get.reliesOnPrototype||A.prototype.get)){if(A.available?.(S)===!1)continue;E.source=A;let b=await A.get(V,E);if(b)return b}},()=>{throw new it.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Pe.updatedAttributes();let Bf=Pe.prototype;return p&&Pe.setTTLExpiration(p/1e3),q&&pu(),Pe;function po(V,E,S){let A;for(let b in r){let I=r[b],P=I.isIndexing,L=Xt[b],D=S&&(L?L(S):S[b]),H=E&&(L?L(E):E[b]);if(D===H&&!P)continue;if(I.customIndex){I.customIndex.index(V,D,H);continue}A=!0;let C=I.indexNulls,x=(0,dh.getIndexedValues)(D,C),z=(0,dh.getIndexedValues)(H,C);if(s==="OrganizationRole"&&Me.default.error?.({tableName:s,id:V,key:b,valuesToAdd:x,valuesToRemove:z}),z?.length>0){let ne=new Set(z);if(x=x?x.filter(re=>{if(ne.has(re))ne.delete(re);else return!0}):[],z=Array.from(ne),(z.length>0||x.length>0)&&ek){let re=z.concat(x).map(B=>({key:B,value:V}));I.prefetch(re,sk)}for(let re=0,B=z.length;re<B;re++)I.remove(z[re],V)}else x?.length>0&&ek&&I.prefetch(x.map(ne=>({key:ne,value:V})),sk);if(x)for(let ne=0,re=x.length;ne<re;ne++)I.put(x[ne],V)}return A}o(po,"updateIndices");function Lr(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>rk)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)throw new Error("Invalid primary key of null");break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,Al.writeKey)(V,$se,0)>rk)throw new Error("Primary key size is too large: "+V.length);return!0}o(Lr,"checkValidId");function yr(V){return typeof V=="object"&&V?V.id:V}o(yr,"requestTargetToId");function Ff(V){return typeof V=="object"&&V&&V.isCollection}o(Ff,"isSearchTarget");function Ss(V){}o(Ss,"isRequestTarget");function Ea(V,E,S,A,b){if(Pe.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let P=Lc(Pe.getResidencyById(V));if(P&&!P.includes(server.hostname)&&N)return N({key:V,residency:P}).then(b)}let I=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return b(null,V);let P=i.getEntry(V,S);return E?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Nn&&N&&S.ensureLoaded&&E?.replicateFrom!==!1?N(P).then(L=>b(L,V),L=>(Me.default.error?.("Error loading remote record",V,P,S,L),b(null,V))):(P&&E&&(P?.version>(E.lastModified||0)&&(E.lastModified=P.version),P?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=P.localTime)),b(P,V))},"whenPrefetched");return A?I():se>0?(se--,I()):new Promise((P,L)=>{se===0?(se--,i.prefetch([V],()=>{D(),H()})):(ce.push(V),le.push(H),ce.length>Fy&&(se--,D()));function D(){if(ce.length>0){let C=le;i.prefetch(ce,()=>{se===-1?D():se++;for(let x of C)x()}),ce=[],le=[],pe>2&&pe--}else se=pe,pe<NE&&pe++}o(D,"prefetch");function H(){try{P(I())}catch(C){L(C)}}o(H,"load")})}o(Ea,"loadLocalRecord");function _a(V,E){let S=E?.checkPermission;if(typeof S!="object"){if(!V?.role)return;S=V.role.permission}if(S.super_user)return Vse;let A=S[c],b,I=A?.tables;if(I)return I[s];if(c==="data"&&(b=S[s])&&!b.tables)return b}o(_a,"getTablePermissions");function Pc(V,E,S,A){if(O){let b=!1;if(S.noCache?b=!0:(E?(!E.value||E.metadataFlags&(Nn|Jc)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(b=!0):b=!0,zr(!b,"cache-hit",s)),b){let I=OE(V,E,S).then(P=>(P?.value&&P?.value.getRecord?.()&&Me.default.error?.("Can not assign a record that is already a resource"),S&&(P?.version>(S.lastModified||0)&&(S.lastModified=P.version),S.lastRefreshed=Date.now()),P));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,V)){if(I.catch(P=>Me.default.warn?.(P)),S?.onlyIfCached&&!A.doesExist())throw new it.ServerError("Entry is not cached",504);return}else return I}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Pe.evict(E.key,E.value,E.version),E.value=null,{then(b){return b(E)}}}o(Pc,"ensureLoadedFromSource");function Dr(V){let E=V?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let S=E.next;if(!S)return E=E.next=new _o,E.lmdbDb=i,E;E=S}while(!0)}else return new KE}o(Dr,"txnForContext");function mu(V,E,S){if(!V)return;let A=(V.deref?V.deref():V.value)??i.getEntry(V.key)?.value;if(typeof E=="object"){let I=Xt,P=A;for(let L=0,D=E.length;L<D;L++){let H=E[L],C=I?.[H];P=C&&P?C(P,S,V):P?.[H],V=null,I=C?.definition?.tableClass?.propertyResolvers}return P}let b=Xt[E];return b?b(A,S,V):A[E]}o(mu,"getAttributeValue");function hu(V,E,S,A,b){let I=b?.length,P={transaction:A,lazy:I>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},L;function D(H,C){let x=H?.value;if(!x)return qa.SKIP;for(let z=0;z<I;z++)if(!L?.includes(z)&&!b[z](x,H))return qa.SKIP;return C!==void 0&&(H.key=C),H}if(o(D,"processEntry"),I>0||!V.hasEntries){let H=V.map(C=>{if(L=null,typeof C=="object"&&C?.key!==void 0)return I>0?D(C):C;if(C==null)return qa.SKIP;for(let x=0;x<I;x++){let ne=b[x].idFilter;if(ne){if(!ne(C))return qa.SKIP;L||(L=[]),L.push(x)}}return Ea(C,S,P,!1,D)});return Array.isArray(V)&&(H=H.filter(C=>C!==qa.SKIP)),H.hasEntries=!0,H}return V}o(hu,"transformToEntries");function ga(V,E,S=server.replication?.getThisNodeId(l)){if(V<=E?.version){if(E?.version===V&&S!==void 0){let A=server.replication?.exportIdMapping(l),b=E.localTime,I=b&&l.get(b);if(I){let P,L,D=At(I);for(let H in A)A[H]===S&&(P=H),A[H]===D.nodeId&&(L=H);if(P>L)return 1;if(P===L)return 0}}return-1}return 1}o(ga,"precedesExistingVersion");async function OE(V,E,S){let A=E?.metadataFlags,b=E?.version,I,P;if(!i.attemptLock(V,b,()=>{clearTimeout(P);let C=i.getEntry(V);!C||!C.value||C.metadataFlags&(Nn|Jc)?I(OE(V,i.getEntry(V),S)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(V,b)},Gse)});let L=E?.value,D={requestContext:S,replacingRecord:L,replacingEntry:E,replacingVersion:b,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},H=S?.responseHeaders;return new Promise((C,x)=>{let z;Cs(xt(D,async ne=>{let re=performance.now(),B,de,me;try{B=await wE(V,D,E),me=A&Nn;let ee=D.lastModified||me&&b;ee||(ee=(0,dh.getNextMonotonicTime)()),de=me||ee>b||!L;let j=performance.now()-re;if(st(j,"cache-resolution",s,null,"success"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),ne.timestamp=ee,p&&D.expiresAt==null&&(D.expiresAt=Date.now()+p),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ee=b;else throw new it.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==V&&(B[t]=V)}z=!0,C({key:V,version:ee,value:B})}catch(ee){ee.message+=` while resolving record ${V} for ${s}`,L&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(C({key:V,version:b,value:L}),Me.default.trace?.(ee.message,"(returned stale record)")):x(ee);let j=performance.now()-re;st(j,"cache-resolution",s,null,"fail"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Dr(D).addWrite({key:V,store:i,entry:E,nodeName:"source",before:Ra(B),commit:o((ee,j)=>{if(j?.version!==b)return;let he=po(V,L,B);if(B){Ue.put?.(D,V,B),j&&(S.previousResidency=Pe.getResidencyRecord(j.residencyId));let Te,fe=!1,We,Et=Lc(Pe.getResidency(B,S));if(Et){if(!Et.includes(server.hostname))if(Te=B,fe=!0,Pe.getResidencyById)B=void 0;else{B=null;for(let ut in r)B||(B={}),B[ut]=Te[ut]}We=Dc(Et)}Me.default.trace?.(`Writing resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),R(V,B,j,ee,fe?Nn:0,g&&(de||fe)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:We},"put",!!me,Te)}else j&&(Ue.delete?.(D,V),Me.default.trace?.(`Deleting resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),g||y?R(V,null,j,ee,0,g&&de||null,{user:D?.user},"delete",!!me):Qc(i,j,b))},"commit")})}),()=>{i.unlock(V,b)},ne=>{i.unlock(V,b),z&&Me.default.error?.("Error committing cache update",ne)})})}o(OE,"getFromSource");function Sa(V){if(!V||V.user?.role?.permission?.super_user)return!0;if(V.replicateTo)throw new it.ClientError("Can not specify replication parameters without super user permissions",403);if(V.replicatedConfirmation)throw new it.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Sa,"checkContextPermissions");function Ta(V){let E=!1;if(V&&(V-Rr>1&&(E=!0),Rr=V),!(xe===Jt&&!E)&&(Jt=xe,(0,Rl.getWorkerIndex)()===(0,Rl.getWorkerCount)()-1))return Mt&&clearTimeout(Mt),xe?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let b=xe/(1+Rr),I=E?Date.now():Math.ceil((Date.now()-A.getTime())/b)*b+A.getTime(),P=o(L=>{Me.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),Mt=setTimeout(()=>Z=Z.then(async()=>{if(P(Math.max(L+xe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Mt);return}let D=50,H=new Array(D),C=0,x=Math.pow(Rr,8)*(yl.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),z=_/Math.pow(Math.max(Rr,1),4);Me.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${z}ms`);function ne(re,B,de,me){let Se=re+z-Date.now();if(Se<0)return!0;if(Rr){let ee=i.lastSize;return de&Vr&&kc(me,j=>{j.size&&(ee+=j.size)}),Me.default.trace?.(`shouldEvict adjusted ${Se} ${ee}, ${Se*(re-B)/ee} < ${x}`),Se*(re-B)/ee<x}return!1}o(ne,"shouldEvict");try{let re=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:de,value:me,version:Se,expiresAt:ee,metadataFlags:j}=B,he;me===null&&!g&&Se+kse<Date.now()?he=Qc(i,B,Se):ee!=null&&ne(ee,Se,j,me)&&(he=Pe.evict(de,me,Se),re++),he&&(await H[C],H[C]=he.catch(Te=>{Me.default.error?.("Cleanup error",Te)}),++C>=D&&(C=0)),await Ga()}Me.default.info?.(`Finished cleanup scan for ${s}, evicted ${re} entries`)}catch(re){Me.default.warn?.(`Error in cleanup scan for ${s}:`,re)}S(void 0),Rr=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");P(I)}):void 0}o(Ta,"scheduleCleanup");function Hf(){K=l?.addDeleteRemovalCallback(n,i,(V,E)=>{i.remove(V,E)})}o(Hf,"addDeleteRemoval");function pu(){(0,Rl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Cc){Cc=!0;try{let V=q.name,E=r[V];if(!E)throw new Error(`expiresAt attribute ${q} must be indexed`);for(let S of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let A of E.getValues(S)){let b=i.getEntry(A);b?.value?b.value[V]<Date.now()&&Pe.evict(A,b.value,b.version):i.ifVersion(A,b?.version,()=>E.remove(S,A))}await Ga()}}catch(V){Me.default.error?.("Error in evicting old records",V)}finally{Cc=!1}}},Hse).unref()}o(pu,"runRecordExpirationEviction");function Lc(V){if(V!=null){if(Array.isArray(V))return V;if(typeof V=="number"){if(V>=65536)throw new Error(`Shard id ${V} must be below 65536`);let E=server.shards?.get?.(V);if(E)return Me.default.trace?.(`Shard ${V} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${V} is not defined`)}throw new Error(`Shard or residency list ${V} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Lc,"residencyFromFunction");function Dc(V){if(V){let E=V.join(","),S=d.get([Symbol.for("residency_by_set"),E]);return S||(d.put([Symbol.for("residency_by_set"),E],S=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),S],V),S)}}o(Dc,"getResidencyId");function Ra(V,E){let S=OA(V,i.rootStore);if(S){let A=E;return A?async()=>{await A(),await S}:()=>S}return E}o(Ra,"preCommitBlobsForRecordBefore")}function _N(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 sk(){}function Pg(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 Cg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Cg(+e);case"Float":return e==="null"?null:Cg(+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;Kse.test(e)||(e+="Z");let n=new Date(e);return Cg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Lg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Cg(e){if(isNaN(e))throw new SyntaxError;return e}function ik(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 Cs(e,t,r){return e?.then?e.then(t,r):t(e)}function ok(e){return e!=null}function Ps(e){try{return JSON.stringify(e)}catch{return e}}function Yse(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var qa,dh,ak,ck,yl,it,fh,mh,Me,Al,Rl,Lg,gN,xse,Bse,Fse,Hse,kse,ek,Gse,tk,qse,Nn,Jc,$se,rk,nk,Vse,VLe,Kse,Ga,w_=ue(()=>{k();qa=require("lmdb"),dh=w(An()),ak=w(require("lodash")),ck=w(em());Pa();rm();yl=w(oe());tb();it=w(ge()),fh=w(Co()),mh=w(oi());De();N_();Me=w(ei());hI();xc();Al=require("ordered-binary"),Rl=w(rt());Li();Lg=w(ie());Wc();Wi();zE();uh();gN=w(require("node:fs"));Kn();u_();EN();({sortBy:xse}=ak.default),{validateAttribute:Bse}=ck.default,Fse=new Uint8Array(9);Fse[8]=192;Hse=6e4,kse=864e5;yl.initSync();ek=yl.get(U.STORAGE_PREFETCHWRITES),Gse=1e4,tk=1,qse=2,Nn=1,Jc=8,$se=Buffer.allocUnsafeSlow(8192),rk=1978,nk=100,Vse={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},VLe=(0,Lg.convertToMS)(yl.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Dg,"makeTable");o(_N,"attributesAsObject");o(sk,"noop");Kse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Pg,"coerceType");o(Cg,"rejectNaN");o(ik,"isDescendantId");Ga=o(()=>new Promise(setImmediate),"rest");o(Cs,"when");o(ok,"exists");o(Ps,"stringify");o(Yse,"hasOtherProcesses")});function Mg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function vg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var uk=ue(()=>{o(Mg,"euclideanDistance");o(vg,"cosineDistance")});var dk,fk,rd,zi,td,Wse,zse,Ug,mk=ue(()=>{uk();dk=require("msgpackr"),fk=w(ei()),rd=w(ge()),zi=(0,fk.loggerWithTag)("HNSW"),td=Symbol.for("entryPoint"),Wse=Symbol.for("key"),zse=10,Ug=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=dk.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Mg:vg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[Wse,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(td);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let _=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:_,primaryKey:t};for(let y=0;y<=_;y++)g[y]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(td,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),zse),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(td,i)}for(;h>m;){let _=this.searchLayer(r,l,f,this.efConstruction,h);_.length>0&&(l=_[0].id,f=_[0].node),h--}let p=new Array(m+1);for(let _=0;_<=m;_++)p[_]=[];for(let _=Math.min(m,h);_>=0;_--){let g=this.searchLayer(r,l,f,this.efConstruction,_);g=g.slice(0,this.M<<1),g.length===0&&_===0&&zi.info?.("should not have zero connections for",l);let y=p[_];for(let T=0;T<g.length;T++){let{id:R,distance:N,node:O}=g[T];if(R===i)continue;let F=[];if(this.optimizeRouting){let Y=!1,q=O[_],K=1+this.optimizeRouting*(1+.5*T/this.M);for(let ce=0;ce<q.length;ce++){let{id:le,distance:se}=q[ce],pe=1+this.optimizeRouting*(1+.5*ce/this.M);for(let Ne=0;Ne<y.length;Ne++){let{id:Ue,distance:xe}=y[Ne];if(Ue===le){N*K>xe+se?Y=!0:se*pe>N+xe&&(F.push({fromId:Ue,toId:R}),F.push({fromId:R,toId:Ue}));break}}if(Y)break}if(Y)continue}else if(T>=(_>0?this.M:this.M<<1))continue;y.push({id:R,distance:N});for(let{fromId:Y,toId:q}of F){let K=d(Y);K||(K=d(Y,this.indexStore.get(Y)));for(let ce=0;ce<K[_].length;ce++)if(K[_][ce].id===q){Object.isFrozen(K[_])&&(K[_]=K[_].slice()),K[_].splice(ce,1);break}}let Z=c[_],G=Z?.find(({id:Y})=>Y===R);if(G){let Y=Z?.indexOf(G);Z.copied||(Z=[...Z],Z.copied=!0,c[_]=Z),Z.splice(Y,1)}else this.addConnection(R,d(R,O),i,_,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...p})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:h,value:p}of this.indexStore.getRange({start:0,end:1/0}))if(p.level>m){if(l=h,p.level===f)break;m=p.level}}if(l===void 0)this.indexStore.remove(td);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);zi.debug?.("setting entry point to",l),this.indexStore.put(td,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:h}of m){let p=d(h,this.indexStore.get(h));for(let _=0;_<=f;_++)p[_]=p[_]?.filter(({id:g})=>g!==i),p[_].length===0&&(zi.info?.("node was left orphaned, will reindex",h),u.set(p.primaryKey,p.vector))}}function d(f,m){let h=a.get(f);return!h&&m&&(h={...m},a.set(f,h)),h}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(td);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((h,p)=>h.distance-p.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:h}of m[i]||[]){if(c.has(h)||h===void 0)continue;c.add(h);let p=this.indexStore.get(h);if(!p)continue;this.nodesVisitedCount++;let _=a(t,p.vector);if(_<f||u.length<s){let g={id:h,distance:_,node:p};l.push(g),u.push(g)}}u.sort((h,p)=>h.distance-p.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new rd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new rd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=vg;else if(s==="euclidean")c=Mg;else{if(s)throw new rd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new rd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new rd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){zi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||zi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){zi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&zi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?zi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Mg:vg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var SN,hk=ue(()=>{mk();SN={HNSW:Ug}});var mt={};Oe(mt,{database:()=>Yu,databaseEnvs:()=>Uo,databases:()=>ke,dropDatabase:()=>SI,dropTableMeta:()=>Zse,getDatabases:()=>nt,getDefaultCompression:()=>Gg,getTables:()=>jse,onRemovedDB:()=>Sh,onUpdatedTable:()=>bl,readMetaDb:()=>hh,resetDatabases:()=>cd,table:()=>ze,tables:()=>un});function jse(){return Hg||nt(),un||{}}function nt(){if(Hg)return ke;Hg=!0,id=new Map;let e=(0,Vt.getHdbBasePath)()&&(0,Ht.join)((0,Vt.getHdbBasePath)(),vc),t=(0,Vt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Vt.get)(U.STORAGE_PATH)||e&&((0,ns.existsSync)(e)?e:(0,Ht.join)((0,Vt.getHdbBasePath)(),vE)),!e)return;if((0,ns.existsSync)(e))for(let n of(0,ns.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ht.basename)(n.name,".mdb");n.isFile()&&(0,Ht.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&hh((0,Ht.join)(e,n.name),null,s)}if((0,ns.existsSync)((0,sd.getBaseSchemaPath)())){for(let n of(0,ns.readdirSync)((0,sd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ht.join)((0,sd.getBaseSchemaPath)(),n.name),i=(0,Ht.join)((0,sd.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ns.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Ht.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Ht.join)(i,a.name);hh((0,Ht.join)(s,a.name),(0,Ht.basename)(a.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,Ht.extname)(c.name).toLowerCase()===".mdb"&&hh((0,Ht.join)(i,c.name),(0,Ht.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Ht.join)(l.path,(0,Ht.basename)(c+".mdb"));(0,ns.existsSync)(u)&&hh(u,c,n,null,!0)}}for(let n in ke){let s=id.get(n);if(s){let i=ke[n];n.includes("delete")&&Ir.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Ir.trace(`delete table class ${a}`),delete i[a])}else if(delete ke[n],n==="data"){for(let i in un)delete un[i];delete un[kg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,Vt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(ke.system?.hdb_analytics?.enableAuditing(),ke.system?.hdb_analytics_hostname?.enableAuditing()),ke.system)for(let n of r)ke.system[n]&&(ke.system[n].replicate=!1);return id=null,ke}function cd(){Hg=!1;for(let[,e]of Uo)e.needsDeletion=!0;nt();for(let[e,t]of Uo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Uo.delete(e);let r=ke[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete ke[t.databaseName],Eh.forEach(i=>i(t.databaseName));break}}return ke}function hh(e,t,r=yN,n,s){let i=new TN.default(e,!1);try{let a=Uo.get(e);a?a.needsDeletion=!1:(a=(0,od.open)(i),Uo.set(e,a));let c=new ad.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(xg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ns.existsSync)(n)&&(i.path=n,u=(0,od.open)(i),u.isLegacy=!0):u=m_(a));let d=Sk(r),f=d[kg],m=new Map;for(let{key:h,value:p}of l.getRange({start:!1})){let[_,g]=h.toString().split("/");g===""?g=p.name:g||(g=_,_=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),f?.add(_);let y=m.get(_);y||m.set(_,y={attributes:[]}),(g==null||p.is_hash_attribute)&&(y.primary=p),g!=null&&y.attributes.push(p),Object.defineProperty(p,"key",{value:h,configurable:!0})}for(let[h,p]of m){let{attributes:_,primary:g}=p;if(!g){for(let se of _)if(se.is_hash_attribute||se.isPrimaryKey){g=se;break}if(!g){Ir.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let y=d[h],T={},R=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Vt.get)(U.LOGGING_AUDITLOG),Z=g.trackDeletes,G=g.expiration,Y=g.eviction,q=g.sealed,K=g.splitSegments,ce=g.replicate;if(y)T=y.indices,R=y.attributes,y.schemaVersion++;else{N=g.tableId,N?N>=(l.get(nd)||0)&&(l.putSync(nd,N+1),Ir.info(`Updating next table id (it was out of sync) to ${N+1} for ${h}`)):(g.tableId=N=l.get(nd),N||(N=1),Ir.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(nd,N+1),l.putSync(g.key,g));let se=new ad.default(!g.is_hash_attribute,g.is_hash_attribute);if(se.compression=g.compression,se.compression){let pe=(0,Vt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||gk;se.compression.threshold=pe}O=y_(a.openDB(g.key,se),a),a.databaseName=r,O.tableId=N}let le;for(let se of _){se.attribute=se.name;try{if(!se.is_hash_attribute&&(se.indexed||se.attribute&&!se.name)){if(!T[se.name]){let Ne=Rk(se.key,a,se);T[se.name]=Ne,T[se.name].indexNulls=se.indexNulls}let pe=R.find(Ne=>Ne.name===se.name);pe?R.splice(R.indexOf(pe),1,se):R.push(se),le=!0}}catch(pe){Ir.error("Error trying to update attribute",se,R,T,pe)}}for(let se of R)if(!_.find(Ne=>Ne.name===se.name)){if(se.is_hash_attribute){Ir.error("Unable to remove existing primary key attribute",se);continue}se.indexed&&(R.splice(R.indexOf(se),1),le=!0)}if(y)le&&(y.schemaVersion++,y.updatedAttributes());else{y=Tk(d,h,Dg({primaryStore:O,auditStore:u,audit:F,sealed:q,splitSegments:K,replicate:ce,expirationMS:G&&G*1e3,evictionMS:Y&&Y*1e3,trackDeletes:Z,tableName:h,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),y.schemaVersion=1;for(let se of ph)se(y)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function Sk(e){let t=ke[e];if(t||(e==="data"?t=ke[e]=un:e==="system"?Object.defineProperty(ke,"system",{value:t=Object.create(null),configurable:!0}):t=ke[e]=Object.create(null)),id&&!id.has(e)){let r=new Set;t[kg]=r,id.set(e,r)}return t}function Tk(e,t,r){return e[t]=r,r}function Yu({database:e,table:t}){e||(e=yN),nt();let r=Sk(e),n=(0,Ht.join)((0,Vt.getHdbBasePath)(),vc),s=(0,Vt.get)(U.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,Vt.get)(U.STORAGE_PATH)||((0,ns.existsSync)(n)?n:(0,Ht.join)((0,Vt.getHdbBasePath)(),vE));let a=(0,Ht.join)(n,(i?t:e)+".mdb"),c=Uo.get(a);if(!c||c.status==="closed"){let l=new TN.default(a,!1);c=(0,od.open)(l),Uo.set(a,c)}return c.auditStore||(c.auditStore=m_(c)),c}async function SI(e){if(!ke[e])throw new Error("Schema does not exist");let t=ke[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Uo.delete(r.path),r.status==="open"&&(await r.close(),await _h.remove(r.path));if(r||(r=Yu({database:e,table:null}),r.status==="open"&&(await r.close(),await _h.remove(r.path))),e==="data"){for(let n in un)delete un[n];delete un[kg]}delete ke[e],Eh.forEach(n=>n(e)),await wA(r)}function Rk(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&SN[r.indexed.type]?.useObjectStore,s=new ad.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=SN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Ir.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:h}=e;r||(r=yN);let p=Yu({database:r,table:t}),_=ke[r];Ir.trace(`Defining ${t} in ${r}`);let g=_?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let y,T,R;m==null&&(m=!0);let N=new ad.default(!1);for(let K of a)K.attribute&&!K.name?(K.name=K.attribute,K.indexed=!0):K.attribute=K.name,K.expiresAt&&(K.indexed=!0);let O,F;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,...a)}else{let K=p.auditStore;T=a.find(pe=>pe.isPrimaryKey)||{},y=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Gg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,Vt.get)(U.LOGGING_AUDITLOG),n&&(T.expiration=n),s&&(T.eviction=s),u??=!1,T.splitSegments=u,typeof l=="boolean"&&(T.sealed=l),typeof d=="boolean"&&(T.replicate=d),h&&(T.origins?T.origins.includes(h)||T.origins.push(h):T.origins=[h]),Ir.trace(`${t} table loading, opening primary store`);let ce=new ad.default(!1,!0);ce.compression=T.compression;let le=t+"/";if(R=p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N),q(),R.get(le))return F&&F(),cd(),ze(e);let se=y_(p.openDB(le,ce),p);p.databaseName=r,se.tableId=R.get(nd),Ir.trace(`Assigning new table id ${se.tableId} for ${t}`),se.tableId||(se.tableId=1),R.put(nd,se.tableId+1),T.tableId=se.tableId,g=Tk(_,t,Dg({primaryStore:se,auditStore:K,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:y,tableName:t,tableId:se.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(le,T)}let Z=g.indices;R=R||(p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let G=[];for(let{key:K,value:ce}of R.getRange({start:!0})){let[le,se]=K.toString().split("/");if(se===""&&(se=ce.name),se){if(le!==t)continue}else continue;let pe=a.find(Ue=>Ue.name===se),Ne=!pe?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!pe||Ne)&&(q(),O=!0,pe||R.remove(K),Ne)){let Ue=g.indices[le];Ue&&G.push(Ue)}}let Y=[];try{for(let K of a||[]){if((K.relationship||K.computed)&&(O=!0,K.relationship))continue;let ce=t+"/"+(K.name||"");Object.defineProperty(K,"key",{value:ce,configurable:!0});let le=R.get(ce);if(K.isPrimaryKey){if(le=le||R.get(ce=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+le.expiration||void 0)||(+s||void 0)!==(+le.eviction||void 0)||K.type!==le.type){let pe={...le};typeof c=="boolean"&&(c&&g.enableAuditing(c),pe.audit=c),n&&(pe.expiration=+n),s&&(pe.eviction=+s),l!==void 0&&(pe.sealed=l),d!==void 0&&(pe.replicate=d),K.type&&(pe.type=K.type),O=!0,q(),R.put(ce,pe)}continue}le?.attribute&&!le.name&&(le.indexed=!0);let se=!le||le.type!==K.type||JSON.stringify(le.indexed)!==JSON.stringify(K.indexed)||le.nullable!==K.nullable||le.version!==K.version||JSON.stringify(le.properties)!==JSON.stringify(K.properties)||JSON.stringify(le.elements)!==JSON.stringify(K.elements);if(K.indexed){let pe=Rk(ce,p,K);(se||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<gh.workerData?.restartNumber)&&(O=!0,q(),le=R.get(ce),(se||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<gh.workerData?.restartNumber)&&(O=!0,K.indexNulls===void 0&&(K.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(K.lastIndexedKey=le?.lastIndexedKey??void 0,K.indexingPID=process.pid,pe.isIndexing=!0,Object.defineProperty(K,"dbi",{value:pe}),Y.push(K))),R.put(ce,K)),le?.indexNulls&&K.indexNulls===void 0&&(K.indexNulls=!0),pe.indexNulls=K.indexNulls,Z[K.name]=pe}else se&&(O=!0,q(),R.put(ce,K))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Ir.trace(`${t} table loading, running index`),Y.length>0||G.length>0?g.indexingOperation=Xse(g,Y,G):O&&Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,O)for(let K of ph)K(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Ir.trace(`${t} table loaded`),g;function q(){F||p.transactionSync(()=>({then(K){F=K}}))}o(q,"startTxn")}async function Xse(e,t,r){try{Ir.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,od.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:h}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,h,()=>{for(let p=0;p<l;p++){let _=t[p],g=_.name,y=_.dbi;try{let T=_.resolve,R=m&&(T?T(m):m[g]);if(y.customIndex){y.customIndex.index(f,R);continue}let N=(0,pk.getIndexedValues)(R);if(N)for(let O=0,F=N.length;O<F;O++)y.put(N[O],f)}catch(T){a[g]||(a[g]=!0,Ir.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,Ir.error(p)}),gh.workerData&&gh.workerData.restartNumber!==_k.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=f,e.dbisDB.put(p.key,p);if(i)return}d>Qse?await s:d>Jse&&await new Promise(p=>setImmediate(p))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Ir.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Ir.error("Error in indexing",n)}}function Zse({table:e,database:t}){let r=Yu({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 bl(e){return ph.push(e),{remove(){let t=ph.indexOf(e);t>-1&&ph.splice(t,1)}}}function Sh(e){return Eh.push(e),{remove(){let t=Eh.indexOf(e);t>-1&&Eh.splice(t,1)}}}function Gg(){let e=(0,Vt.get)(U.STORAGE_COMPRESSION),t=(0,Vt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Vt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||gk,n={startingOffset:32};return t&&(n.dictionary=_h.readFileSync(t)),r&&(n.threshold=r),e&&n}var Vt,xg,od,Ht,ns,sd,ad,TN,_h,RN,pk,Bg,Fg,gh,Ek,_k,Ir,yN,kg,gk,un,ke,nd,ph,Eh,Hg,Uo,id,Qse,Jse,De=ue(()=>{Vt=w(oe()),xg=w(qt()),od=require("lmdb"),Ht=require("path"),ns=require("fs"),sd=w(yt());w_();ad=w(Im()),TN=w(Nm());k();_h=w(require("fs-extra")),RN=w(Xs()),pk=w(An()),Bg=w(Co()),Fg=w(oi()),gh=require("worker_threads"),Ek=w(Q()),_k=w(rt());Li();Wc();Kn();hk();Ir=(0,Ek.forComponent)("storage"),yN="data",kg=Symbol("defined-tables"),gk=((0,Vt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Vt.initSync)();un=Object.create(null),ke=Object.create(null);(0,RN._assignPackageExport)("databases",ke);(0,RN._assignPackageExport)("tables",un);nd=Symbol.for("next-table-id"),ph=[],Eh=[],Uo=new Map;o(jse,"getTables");o(nt,"getDatabases");o(cd,"resetDatabases");o(hh,"readMetaDb");o(Sk,"ensureDB");o(Tk,"setTable");o(Yu,"database");o(SI,"dropDatabase");o(Rk,"openIndex");o(ze,"table");Qse=1e3,Jse=10;o(Xse,"runIndexing");o(Zse,"dropTableMeta");o(bl,"onUpdatedTable");o(Sh,"onRemovedDB");o(Gg,"getDefaultCompression")});var ie=M(be=>{"use strict";var $a=require("path"),Nk=require("fs-extra"),Un=Q(),yk=require("fs-extra"),qg=require("os"),eie=require("net"),tie=require("recursive-iterator"),Nr=(k(),v(W)),{PACKAGE_ROOT:rie}=Rt(),nie=tA(),Ak=require("papaparse"),$g=require("moment"),{inspect:sie}=require("util"),bk=require("is-number"),iie=require("minimist"),oie=require("https"),aie=require("http"),cie=/^((\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)))$/,wk=require("util").promisify(setTimeout),lie=100,uie=5,die="",fie=4,Ik={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=ss;be.isEmptyOrZeroLength=ji;be.arrayHasEmptyValues=pie;be.arrayHasEmptyOrZeroLengthValues=Eie;be.buildFolderPath=_ie;be.isBoolean=Ok;be.errorizeMessage=mie;be.stripFileExtension=Sie;be.autoCast=Tie;be.autoCastJSON=Ck;be.autoCastJSONDeep=bN;be.removeDir=Rie;be.compareVersions=yie;be.isCompatibleDataVersion=Aie;be.escapeRawValue=bie;be.unescapeValue=Iie;be.stringifyProps=Nie;be.timeoutPromise=Oie;be.isClusterOperation=Pie;be.getClusterUser=Die;be.checkGlobalSchemaTable=Lie;be.getHomeDir=Lk;be.getPropsFilePath=wie;be.promisifyPapaParse=Mie;be.removeBOM=Dk;be.createEventPromise=vie;be.checkProcessRunning=Uie;be.checkSchemaTableExist=xie;be.checkSchemaExists=Mk;be.checkTableExists=vk;be.getStartOfTomorrowInSeconds=Bie;be.getLimitKey=Fie;be.isObject=gie;be.isNotEmptyAndHasValue=hie;be.autoCasterIsNumberCheck=Pk;be.backtickASTSchemaItems=Hie;be.isPortTaken=Cie;be.createForkArgs=kie;be.autoCastBoolean=Gie;be.asyncSetTimeout=wk;be.getTableHashAttribute=qie;be.doesSchemaExist=$ie;be.doesTableExist=Vie;be.stringifyObj=Kie;be.ms_to_time=Yie;be.changeExtension=Wie;be.getEnvCliRootPath=IN;be.noBootFile=zie;be.httpRequest=jie;be.transformReq=Qie;be.convertToMS=Jie;be.PACKAGE_ROOT=rie;function mie(e){return e instanceof Error?e:new Error(e)}o(mie,"errorizeMessage");function ss(e){return e==null}o(ss,"isEmpty");function hie(e){return!ss(e)&&(e||e===0||e===""||Ok(e))}o(hie,"isNotEmptyAndHasValue");function ji(e){return ss(e)||e.length===0||e.size===0}o(ji,"isEmptyOrZeroLength");function pie(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}o(pie,"arrayHasEmptyValues");function Eie(e){if(ji(e))return!0;for(let t=0;t<e.length;t++)if(ji(e[t]))return!0;return!1}o(Eie,"arrayHasEmptyOrZeroLengthValues");function _ie(...e){try{return e.join($a.sep)}catch{console.error(e)}}o(_ie,"buildFolderPath");function Ok(e){return ss(e)?!1:e===!0||e===!1}o(Ok,"isBoolean");function gie(e){return ss(e)?!1:typeof e=="object"}o(gie,"isObject");function Sie(e){return ji(e)?die:e.slice(0,-fie)}o(Sie,"stripFileExtension");function Tie(e){return ss(e)||e===""||typeof e!="string"?e:Ik[e]!==void 0?Ik[e]:Pk(e)===!0?Number(e):cie.test(e)?new Date(e):e}o(Tie,"autoCast");function Ck(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Ck,"autoCastJSON");function bN(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=bN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=bN(r);n!==r&&(e[t]=n)}return e}else return Ck(e)}o(bN,"autoCastJSONDeep");function Pk(e){if(e.startsWith("0.")&&bk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&bk(e))}o(Pk,"autoCasterIsNumberCheck");async function Rie(e){if(ji(e))throw new Error(`Directory path: ${e} does not exist`);try{await yk.emptyDir(e),await yk.remove(e)}catch(t){throw Un.error(`Error removing files in ${e} -- ${t}`),t}}o(Rie,"removeDir");function yie(e,t){if(ji(e)){Un.info("Invalid current version sent as parameter.");return}if(ji(t)){Un.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(yie,"compareVersions");function Aie(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(Aie,"isCompatibleDataVersion");function bie(e){if(ss(e))return e;let t=String(e);return t==="."?Nr.UNICODE_PERIOD:t===".."?Nr.UNICODE_PERIOD+Nr.UNICODE_PERIOD:t.replace(Nr.FORWARD_SLASH_REGEX,Nr.UNICODE_FORWARD_SLASH)}o(bie,"escapeRawValue");function Iie(e){if(ss(e))return e;let t=String(e);return t===Nr.UNICODE_PERIOD?".":t===Nr.UNICODE_PERIOD+Nr.UNICODE_PERIOD?"..":String(e).replace(Nr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Iie,"unescapeValue");function Nie(e,t){if(ss(e))return Un.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+qg.EOL}!ji(n)&&n[0]===";"?r+=" "+n+s+qg.EOL:ji(n)||(r+=n+"="+s+qg.EOL)}catch{Un.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(Nie,"stringifyProps");function Lk(){let e;try{e=qg.homedir()}catch{e=process.env.HOME}return e}o(Lk,"getHomeDir");function wie(){let e=$a.join(Lk(),Nr.HDB_HOME_DIR_NAME,Nr.BOOT_PROPS_FILE_NAME);return Nk.existsSync(e)||(e=$a.join(__dirname,"../","hdb_boot_properties.file")),e}o(wie,"getPropsFilePath");function Oie(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Oie,"timeoutPromise");async function Cie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=eie.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(Cie,"isPortTaken");function Pie(e){try{return Nr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Un.error(`Error checking operation against cluster ops ${t}`)}return!1}o(Pie,"isClusterOperation");function Lie(e,t){let r=(De(),v(mt)).getDatabases();if(!r[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Lie,"checkGlobalSchemaTable");function Die(e,t){if(ss(t)){Un.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ss(e)||ji(e)){Un.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){Un.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Un.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(Die,"getClusterUser");function Mie(){Ak.parsePromise=function(e,t,r){return new Promise(function(n,s){Ak.parse(e,{header:!0,transformHeader:Dk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(Mie,"promisifyPapaParse");function Dk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Dk,"removeBOM");function vie(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Un.info(`Got cluster status event response: ${sie(s)}`);try{i.cancel()}catch{Un.error("Error trying to cancel timeout.")}n(s)})})}o(vie,"createEventPromise");async function Uie(e){let t=!0,r=0;do await wk(lie*r++),(await nie.findPs(e)).length>0&&(t=!1);while(t&&r<uie);if(t)throw new Error(`process ${e} was not started`)}o(Uie,"checkProcessRunning");function xie(e,t){let r=Mk(e);if(r)return r;let n=vk(e,t);if(n)return n}o(xie,"checkSchemaTableExist");function Mk(e){let{getDatabases:t}=(De(),v(mt));if(!t()[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Mk,"checkSchemaExists");function vk(e,t){let{getDatabases:r}=(De(),v(mt));if(!r()[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(vk,"checkTableExists");function Bie(){let e=$g().utc().add(1,"d").startOf("d").unix(),t=$g().utc().unix();return e-t}o(Bie,"getStartOfTomorrowInSeconds");function Fie(){return $g().utc().format("DD-MM-YYYY")}o(Fie,"getLimitKey");function Hie(e){try{let t=new tie(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){Un.error("Got an error back ticking items."),Un.error(t)}}o(Hie,"backtickASTSchemaItems");function kie(e){return[e]}o(kie,"createForkArgs");function Gie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Gie,"autoCastBoolean");function qie(e,t){let{getDatabases:r}=(De(),v(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(qie,"getTableHashAttribute");function $ie(e){let{getDatabases:t}=(De(),v(mt));return t()[e]!==void 0}o($ie,"doesSchemaExist");function Vie(e,t){let{getDatabases:r}=(De(),v(mt));return r()[e]?.[t]!==void 0}o(Vie,"doesTableExist");function Kie(e){try{return JSON.stringify(e)}catch{return e}}o(Kie,"stringifyObj");function Yie(e){let t=$g.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(Yie,"ms_to_time");function Wie(e,t){let r=$a.basename(e,$a.extname(e));return $a.join($a.dirname(e),r+t)}o(Wie,"changeExtension");function IN(){if(process.env[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=iie(process.argv);if(e[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(IN,"getEnvCliRootPath");var AN;function zie(){if(AN)return AN;let e=IN();if(IN()&&Nk.pathExistsSync($a.join(e,Nr.HDB_CONFIG_FILE)))return AN=!0,!0}o(zie,"noBootFile");function jie(e,t){let r;return e.protocol==="http:"?r=aie:r=oie,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(jie,"httpRequest");function Qie(e){if(!e.schema&&!e.database){e.schema=Nr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Qie,"transformReq");function Jie(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(Jie,"convertToMS");var Vg=rn()});var kk=M((fDe,Hk)=>{"use strict";var{promises:ld,createReadStream:Xie,createWriteStream:Zie}=require("fs"),{createGzip:eoe}=require("zlib"),{promisify:toe}=require("util"),{pipeline:roe}=require("stream"),noe=toe(roe),wN=require("path"),Fk=oe();Fk.initSync();var Kg=Q(),{CONFIG_PARAMS:soe,ITC_EVENT_TYPES:uDe}=(k(),v(W)),{onMessageFromWorkers:dDe}=rt(),{convertToMS:Uk}=ie(),{onStorageReclamation:ioe}=(u_(),v(Bv)),ooe=6e4,aoe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",coe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",NN,xk;Hk.exports=loe;function loe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(ioe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(aoe);if(!i)throw new Error(coe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=Uk(r));let d;return NN=Date.now(),Kg.trace("Log rotate enabled, maxSize:",t,"interval:",r),xk=setInterval(async()=>{if(l){let f;f=await ld.stat(e.path),f.size>=l&&(d=await Bk(e.path,i))}if(u&&Date.now()-NN>=u&&(d=await Bk(e.path,i),NN=Date.now()),n||c){let f=Uk(n??"1M")/(1+c);c=0;let m=await ld.readdir(i);for(let h of m)try{let p=await ld.stat(wN.join(i,h));Date.now()-p.mtimeMs>f&&await ld.unlink(wN.join(i,h))}catch(p){Kg.error("Error trying to remove log",h,p)}}},a??ooe).unref(),{end(){clearInterval(xk)},getLastRotatedLogPath(){return d}}}o(loe,"logRotator");async function Bk(e,t){let r=Fk.get(soe.LOGGING_ROTATION_COMPRESS),n=wN.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await ld.rename(e,n),r&&(e=n,n+=".gz",await noe(Xie(e),eoe(),Zie(n)),await ld.unlink(e)),Kg.closeLogFile(),Kg.notify(`hdb.log rotated, old log moved to ${n}`),n}o(Bk,"moveLogFile")});var Kk={};Oe(Kk,{RootConfigWatcher:()=>ON});var Gk,qk,$k,Yg,Vk,ON,Yk=ue(()=>{Gk=w(require("chokidar")),qk=require("node:fs/promises"),$k=w(bt()),Yg=require("node:stream"),Vk=require("yaml"),ON=class extends Yg.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;constructor(){super(),this.#e=(0,$k.getConfigFilePath)(),this.#t=Gk.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,qk.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,Vk.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}ready(){return(0,Yg.once)(this,"ready")}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((_De,eS)=>{"use strict";var xo=require("fs-extra"),{workerData:uoe,threadId:doe,isMainThread:Zk}=require("worker_threads"),yh=require("path"),eG=require("yaml"),tG=require("properties-reader"),Hr=(k(),v(W)),Wk=Uc(),foe=require("os"),{PACKAGE_ROOT:UN}=Rt(),{_assignPackageExport:moe}=Xs(),{Console:hoe}=require("console"),zk=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),jk=new Map,{join:Bo}=yh,Qk=1e4,tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},poe={STDOUT:"stdOut",STDERR:"stdErr"},EDe=Bo(UN,"logs"),Eoe=Bo(UN,"config/yaml/",Hr.HDB_DEFAULT_CONFIG_FILE),_oe=1e4,Ah,bh,Wg,Qi,PN,CN,jg,wt,xn,Qg,Jg,ud,Rh,Th;function zg(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=yh.dirname(n)):t.root?n=Bo(t.root,PN):(n=wt.path,t.root||(t.root=yh.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=tr[t.level]??wt?.level??tr.info,rG(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(wt.path===e.path&&r)}o(zg,"updateLogger");function rG(e){let t=e.conditional??(e.conditional={});t.notify=tr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=tr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=tr.error>=e.level?e.error.bind(e):void 0,t.warn=tr.warn>=e.level?e.warn.bind(e):void 0,t.info=tr.info>=e.level?e.info.bind(e):void 0,t.debug=tr.debug>=e.level?e.debug.bind(e):void 0,t.trace=tr.trace>=e.level?e.trace.bind(e):void 0}o(rG,"updateConditional");async function LN(){Th||(Th=new xoe,await Th.ready(),Th.on("change",LN));let e=Th.config,t=e.logging??{};zg(wt,t),jg=wt.path,Ah=t.console??!1,t.external&&zg(xn,t.external);for(let r in e){let n=e[r];n.logging?zg(wt.forComponent(r),n.logging,r):wt.hasComponent(r)&&zg(wt.forComponent(r),t,r)}}o(LN,"updateLogSettings");var DN=class extends hoe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){dn="trace",this.level<=tr.trace&&super.info(...t),dn="info"}debug(...t){dn="debug",this.level<=tr.debug&&super.info(...t),dn="info"}info(...t){dn="info",this.level<=tr.info&&super.info(...t),dn="info"}warn(...t){dn="warn",this.level<=tr.warn&&super.warn(...t),dn="info"}error(...t){dn="error",this.level<=tr.error&&super.error(...t),dn="info"}fatal(...t){ud=!0;try{dn="fatal",this.level<=tr.fatal&&super.error(...t),dn="info"}finally{ud=!1}}notify(...t){ud=!0;try{dn="notify",this.level<=tr.notify&&super.info(...t),dn="info"}finally{ud=!1}}withTag(t){return sG(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};Rh===void 0&&nG();eS.exports={notify:Ioe,fatal:Noe,error:vN,warn:woe,info:yoe,debug:boe,trace:Aoe,logLevel:Qi,loggerWithTag:sG,suppressLogging:Toe,initLogSettings:nG,logCustomLevel:Ooe,closeLogFile:iG,createLogger:Zg,logsAtLevel:goe,getLogFilePath:o(()=>jg,"getLogFilePath"),forComponent:o(e=>wt.forComponent(e),"forComponent"),setMainLogger:voe,setLogLevel:Poe,OUTPUTS:poe,AuthAuditLog:Uoe,start:LN,startOnMainThread:LN,errorToString:Moe};eS.exports.externalLogger={notify(...e){xn.notify(...e)},fatal(...e){xn.fatal(...e)},error(...e){xn.error(...e)},warn(...e){xn.warn(...e)},info(...e){xn.info(...e)},debug(...e){xn.debug(...e)},trace(...e){xn.trace(...e)},withTag(e){return xn.withTag(e)},loggerWithTag(e){return xn.withTag(e)}};moe("logger",eS.exports.externalLogger);function goe(e){return tr[Qi]<=tr[e]}o(goe,"logsAtLevel");function nG(e=!1){try{if(Rh===void 0||e){iG();let t=Coe(),r=Wk(["ROOTPATH"]);try{Rh=tG(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!xo.pathExistsSync(Bo(r.ROOTPATH,Hr.HDB_CONFIG_FILE)))throw s}let n;if({level:Qi,configLogPath:CN,toFile:bh,logConsole:Ah,rotation:n,toStream:Wg}=Loe(r.ROOTPATH?Bo(r.ROOTPATH,Hr.HDB_CONFIG_FILE):Rh.get("settings_path")),PN=Hr.LOG_NAMES.HDB,jg=Bo(CN,PN),wt=Zg({path:jg,level:Qi,stdStreams:Wg,rotation:n}),xn=wt.forComponent("external"),xn.tag=null,Zk)try{require("segfault-handler").registerHandler(Bo(CN,"crash.log"))}catch{}}}catch(t){if(Rh=void 0,t.code===Hr.NODE_ERROR_CODES.ENOENT||t.code===Hr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Wk(Object.keys(Hr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Hr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Hr.CONFIG_PARAMS.LOGGING_LEVEL){Qi=a;continue}i===Hr.CONFIG_PARAMS.LOGGING_CONSOLE&&(Ah=i)}let{defaultLevel:n}=Doe();bh=!1,Wg=!0,Qi=Qi===void 0?n:Qi,wt=Zg({level:Qi}),xn=wt.forComponent("external"),xn.tag=null;return}throw vN("Error initializing log settings"),vN(t),t}process.env.DEV_MODE&&(Wg=!0),Soe()}o(nG,"initLogSettings");var Va=!0;function Soe(){bh&&(process.stdout.write=function(e){return typeof e=="string"&&Va&&Ah&&(e=e.toString(),e[e.length-1]===`
16
- `&&(e=e.slice(0,-1)),Jg(e)),zk.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Va&&Ah&&(e[e.length-1]===`
17
- `&&(e=e.slice(0,-1)),Jg(e)),zk.apply(process.stderr,arguments)})}o(Soe,"stdioLogging");function sG(e,t,r=wt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=tr[i]?function(...a){Xg=e;try{return s.call(r,...a)}finally{Xg=void 0}}:null}o(n,"logWithTag")}o(sG,"loggerWithTag");function Toe(e){try{Va=!1,e()}finally{Va=!0}}o(Toe,"suppressLogging");var Roe=uoe?.name?.replace(/ /g,"-")||"main",dn="info",MN,Xg;function Zg({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=tr[t],l;function u(h){if(bh)if(l.logToStdstreams){f(h.replace(/\x1b\[[0-9;]*m/g,"")),Va=!1;try{process.stdout.write(h)}finally{Va=!0}}else f(h);else r&&process.stdout.write(h)}o(u,"logStdOut");function d(h){if(bh){if(f(h),r){Va=!1;try{process.stderr.write(h)}finally{Va=!0}}}else r&&process.stderr.write(h)}o(d,"logStdErr");let f=e&&Xk(e,n,s);function m(h){return{write(p){let _=[dn];_.unshift(MN||Roe+"/"+doe),Xg&&_.push(Xg),l.tag&&_.push(l.tag),h(`[${_.join("] [")}]: ${p}`)}}}if(o(m,"logPrepend"),s&&(Jg=f),l=new DN({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),rG(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(h){e=h,f=Xk(e,l.rotation,s),s&&(Jg=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let h=new Map;l.forComponent=function(p){let _=h.get(p);return _||(_=Zg({path:e,level:t,stdStreams:r,isExternalInstance:p==="external",rotation:n,writeToLog:i,component:!0}),h.set(p,_)),_},l.hasComponent=function(p){return h.has(p)}}return l}o(Zg,"createLogger");var Jk=100;function Xk(e,t,r){let n=jk.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,jk.set(e,n)),Zk&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=kk();try{n.rotator=p({logger:n,...t})}catch(_){n("Error initializing log rotator",_)}},100));let u=0;return n;function d(p){u++;let _=`${new Date().toISOString()} ${p}${p.endsWith(`
13
+ `)},Fre="certificate.pem",Hre="privateKey.pem",kre="caCertificate.pem",Gre="natsCertificate.pem",qre="natsCaCertificate.pem",Ct={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},$re={tls_certificate:Ct.SERVER,tlsCertificateAuthority:Ct.CA,customFunctions_tls_certificate:Ct.SERVER,customFunctionsTlsCertificateAuthority:Ct.CA,operationsApi_tls_certificate:Ct["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ct["OPERATIONS-CA"]},Vre={[Ct.SERVER]:2,[Ct.DEFAULT]:1},Kre={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Yre={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Wre={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},zre={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},jre={[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=Fre;an.PRIVATEKEY_PEM_NAME=Hre;an.CA_PEM_NAME=kre;an.CERT_NAME=Ct;an.CERT_CONFIG_NAME_MAP=$re;an.CERT_PREFERENCE_APP=Vre;an.CERT_PREFERENCE_OPS=Kre;an.CERT_PREFERENCE_REP=Yre;an.CA_CERT_PREFERENCE_REP=Wre;an.CA_CERT_PREFERENCE_OPS=zre;an.CA_CERT_PREFERENCE_APP=jre;an.CERTIFICATE_VALUES=Bre;an.NATS_CERTIFICATE_PEM_NAME=Gre;an.NATS_CA_PEM_NAME=qre});var VI=M((jPe,YF)=>{"use strict";var VF=require("fs-extra"),Re=require("joi"),Qre=require("os"),{boolean:ke,string:Rt,number:ur,array:Fa}=Re.types(),{totalmem:GF}=require("os"),_l=require("path"),Jre=Q(),$I=ie(),zPe=qI(),qF=(k(),v(W)),Xre=ut(),$F="log",Zre="components",ene="Invalid logging.rotation.maxSize unit. Available units are G, M or K",tne="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",rne="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",nne="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",sne="rootPath config parameter is undefined",Mn=Re.alternatives([ur.min(0),Rt]).optional().empty(null),hg=Re.alternatives([Fa.items(Rt,{host:Rt.required(),port:Mn},{hostname:Rt.required(),port:Mn}).empty(null),Fa.items(Rt)]),Vi,KF=!1;YF.exports={configValidator:ine,routesValidator:dne,routeConstraints:hg};function ine(e,t=!1){if(KF=t,Vi=e.rootPath,$I.isEmpty(Vi))throw sne;let r=ke.optional(),n=ur.min(0).max(1e3).empty(null).default(une),s=Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zm),i=Rt.optional().empty(null),a=Rt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Re.string().empty(null).default(Zm),l=Re.custom(ane).empty(null).default(Zm),u=e.clustering?.enabled,d=Re.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Re.object({enabled:r,hubServer:Re.object({cluster:Re.object({name:Re.required().empty(null),network:Re.object({port:Mn,routes:hg}).required()}).required(),leafNodes:Re.object({network:Re.object({port:Mn}).required()}).required(),network:Re.object({port:Mn}).required()}).required(),leafServer:Re.object({network:Re.object({port:Mn,routes:hg}).required(),streams:Re.object({maxAge:ur.min(120).allow(null).optional(),maxBytes:ur.min(1).allow(null).optional(),maxMsgs:ur.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Re.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:ke.optional(),databaseLevel:ke.optional(),tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.required(),verify:ke.optional()}),user:Rt.optional().empty(null)}).optional():f=Re.object({enabled:r,tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.optional()})}).optional(),Re.object({authentication:Re.alternatives(Re.object({authorizeLocal:ke,cacheTTL:ur.required(),cookie:Re.object({domains:Fa.items(Rt).optional(),expires:Rt.optional()}),enableSessions:ke,hashFunction:Rt.valid("md5","sha256","argon2id").optional().empty(null)}),ke).optional(),analytics:Re.object({aggregatePeriod:ur,replicate:ke.optional()}),replication:Re.object({hostname:Re.alternatives(Rt,ur).optional().empty(null),url:Rt.optional().empty(null),port:Mn,securePort:Mn,routes:Fa.optional().empty(null),databases:Re.alternatives(Rt,Fa),enableRootCAs:ke.optional(),copyTablesToCatchUp:ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Re.object({enabled:r}).required(),logging:Re.object({auditAuthEvents:Re.object({logFailed:ke,logSuccessful:ke}),file:ke.required(),level:Re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Re.object({enabled:ke.optional(),compress:ke.optional(),interval:Rt.custom(lne).optional().empty(null),maxSize:Rt.custom(cne).optional().empty(null),path:Rt.optional().empty(null).default(Zm)}).required(),root:s,stdStreams:ke.required(),auditLog:ke.required()}).required(),operationsApi:Re.object({network:Re.object({cors:ke.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),keepAliveTimeout:ur.min(1).optional(),port:Mn,domainSocket:Re.optional().empty("hdb/operations-server").default(Zm),securePort:Mn,timeout:ur.min(1).optional()}).optional(),tls:Re.alternatives([Re.array().items(d),d])}).required(),rootPath:Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Re.object({network:Re.object({port:Mn,securePort:Mn,mtls:Re.alternatives([ke.optional(),Re.object({user:Rt.optional(),certificateAuthority:i,required:ke.optional()})])}).required(),webSocket:ke.optional(),requireAuthentication:ke.optional()}),http:Re.object({compressionThreshold:ur.optional(),cors:ke.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),port:Mn,securePort:Mn,maxHeaderSize:ur.optional(),mtls:Re.alternatives([ke.optional(),Re.object({user:Rt.optional(),certificateAuthority:i,required:ke.optional()})]),threadRange:Re.alternatives([Fa.optional(),Rt.optional()])}).required(),threads:Re.alternatives(n.optional(),Re.object({count:n.optional(),debug:Re.alternatives(ke.optional(),Re.object({startingPort:ur.min(1).optional(),host:Rt.optional(),waitForDebugger:ke.optional()})),maxHeapMemory:ur.min(0).optional()})),storage:Re.object({writeAsync:ke.required(),overlappingSync:ke.optional(),caching:ke.optional(),compression:Re.alternatives([ke.optional(),Re.object({dictionary:Rt.optional(),threshold:ur.optional()})]),compactOnStart:ke.optional(),compactOnStartKeepBackup:ke.optional(),noReadAhead:ke.optional(),path:l,prefetchWrites:ke.optional(),maxFreeSpaceToLoad:ur.optional(),maxFreeSpaceToRetain:ur.optional()}).required(),ignoreScripts:ke.optional(),tls:Re.alternatives([Re.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(ine,"configValidator");function one(e){return KF||VF.existsSync(e)?null:`Specified path ${e} does not exist.`}o(one,"doesPathExist");function ane(e,t){Re.assert(e,Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=one(e);if(r)return t.message(r)}o(ane,"validatePath");function cne(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ene);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(rne):e}o(cne,"validateRotationMaxSize");function lne(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(tne);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(nne):e}o(lne,"validateRotationInterval");function une(e,t){let r=t.state.path.join("."),n=Qre.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||GF();return i=Math.round(Math.min(i,GF())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Jre.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(une,"setDefaultThreads");function Zm(e,t){let r=t.state.path.join(".");if(!$I.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if($I.isEmpty(Vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return _l.join(Vi,Zre);case"logging.root":return _l.join(Vi,$F);case"clustering.leafServer.streams.path":return _l.join(Vi,"clustering","leaf");case"storage.path":let n=_l.join(Vi,qF.LEGACY_DATABASES_DIR_NAME);return VF.existsSync(n)?n:_l.join(Vi,qF.DATABASES_DIR_NAME);case"logging.rotation.path":return _l.join(Vi,$F);case"operationsApi.network.domainSocket":return r==null?null:_l.join(Vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(Zm,"setDefaultRoot");function dne(e){let t=Re.object({routes:hg});return Xre.validateBySchema({routes:e},t)}o(dne,"routesValidator")});var wt=M(er=>{"use strict";var ws=(k(),v(W)),Ar=ie(),dr=Q(),{configValidator:fne,routesValidator:WF}=VI(),cn=require("fs-extra"),jF=require("yaml"),es=require("path"),mne=require("is-number"),QF=require("properties-reader"),hne=require("lodash"),{handleHDBError:pne}=ge(),{HTTP_STATUS_CODES:Ene,HDB_ERROR_MSGS:Ju}=tn(),{server:_ne}=(Dr(),v($f)),{PACKAGE_ROOT:JF}=bt(),{DATABASES_PARAM_CONFIG:eh,CONFIG_PARAMS:Zn,CONFIG_PARAM_MAP:ui}=ws,gne="Unable to get config value because config is uninitialized",Sne="Config successfully initialized",Tne="Error backing up config file",Rne="Empty parameter sent to getConfigValue",XF=es.join(JF,"config","yaml",ws.HDB_DEFAULT_CONFIG_FILE),yne=es.join(JF,"config","yaml","defaultNatsConfig.yaml"),Ane="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",zF={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"},pg,kt,Eg;er.createConfigFile=bne;er.getDefaultConfig=Ine;er.getConfigValue=eH;er.initConfig=_g;er.flattenConfig=Xu;er.updateConfigValue=tH;er.updateConfigObject=wne;er.getConfiguration=Pne;er.setConfiguration=Lne;er.readConfigFile=zI;er.getClusteringRoutes=Dne;er.initOldConfig=rH;er.getConfigFromFile=Mne;er.getConfigFilePath=gl;er.addConfig=vne;er.deleteConfigFromFile=Une;er.getConfigObj=xne;er.resolvePath=KI;er.getFlatConfigObj=Bne;function KI(e){if(e?.startsWith("~/"))return es.join(Ar.getHomeDir(),e.slice(1));let t=oe();try{return es.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(KI,"resolvePath");function bne(e,t=!1){let r=Ha(XF);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=jF.parseDocument(cn.readFileSync(yne,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}pg=Xu(r.toJSON());let n;for(let c in e){let l=ui[c.toLowerCase()];if(l===Zn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=YI(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){dr.error(f)}}}n&&ZF(r,n),WI(r,t);let s=r.toJSON();kt=Xu(s);let i=r.getIn(["rootPath"]),a=es.join(i,ws.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),dr.trace(`Config file written to ${a}`)}o(bne,"createConfigFile");function ZF(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ar.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(eh.TABLES))for(let i in n[s][eh.TABLES])for(let a in n[s][eh.TABLES][i]){let c=n[s][eh.TABLES][i][a],l=[Zn.DATABASES,s,eh.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Zn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){dr.error("Error parsing schemas CLI/env config arguments",n)}}o(ZF,"setSchemasConfig");function Ine(e){if(pg===void 0){let r=Ha(XF);pg=Xu(r.toJSON())}let t=ui[e.toLowerCase()];if(t!==void 0)return pg[t.toLowerCase()]}o(Ine,"getDefaultConfig");function eH(e){if(e==null){dr.info(Rne);return}if(kt===void 0){dr.trace(gne);return}let t=ui[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}o(eH,"getConfigValue");function gl(e=Ar.getPropsFilePath()){let t=Ar.getEnvCliRootPath();if(t)return KI(es.join(t,ws.HDB_CONFIG_FILE));let r=QF(e);return KI(r.get(ws.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(gl,"getConfigFilePath");function _g(e=!1){if(kt===void 0||e){let t;if(!Ar.noBootFile()){t=Ar.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw dr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=gl(t),n;if(r.includes("config/settings.js"))try{rH(r);return}catch(i){if(i.code!==ws.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ha(r)}catch(i){if(i.code===ws.NODE_ERROR_CODES.ENOENT){dr.trace(`HarperDB config file not found at ${r}.
14
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw dr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Nne(n,r),WI(n);let s=n.toJSON();if(_ne.config=s,kt=Xu(s),kt.logging_rotation_rotate)for(let i in zF)kt[i]&&dr.error(`Config ${zF[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);dr.trace(Sne)}}o(_g,"initConfig");function Nne(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],es.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],es.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(dr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(Nne,"checkForUpdatedConfig");function WI(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 Ju.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 Ju.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=fne(r,t);if(n.error)throw Ju.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(WI,"validateConfig");function wne(e,t){kt===void 0&&(kt={});let r=ui[e.toLowerCase()];if(r===void 0){dr.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}o(wne,"updateConfigObject");function tH(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&_g();let a=eH(ui.hdb_root),c=es.join(a,ws.HDB_CONFIG_FILE),l=Ha(c),u;if(r&&kt){let m=!1;for(let h in r)if(r[h]!=kt[h.toLowerCase()]){m=!0;break}if(!m){dr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Zn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ui[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=YI(m,t);l.setIn([...h],p)}else for(let m in r){let h=ui[m.toLowerCase()];if(h===Zn.HTTP_SECUREPORT&&r[m]===kt[Zn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===Zn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[Zn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===Zn.DATABASES){u=r[m];continue}if(h?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!h&&(m.endsWith("_package")||m.endsWith("_port"))&&(h=m),h!==void 0){let p=h.split("_"),_=ws.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=YI(h,r[m]);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){dr.error(R)}}}u&&ZF(l,u),WI(l);let d=l.getIn(["rootPath"]),f=es.join(d,ws.HDB_CONFIG_FILE);if(n===!0&&One(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(kt=Xu(l.toJSON())),dr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(tH,"updateConfigValue");function One(e,t){try{let r=es.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ws.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),dr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){dr.error(Tne),dr.error(r)}}o(One,"backupConfigFile");var Cne=["databases"];function Xu(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}),Eg=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])&&!Cne.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Zn[l.toUpperCase()]&&ui[l]&&(s[ui[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Xu,"flattenConfig");function YI(e,t){if(e===Zn.CLUSTERING_NODENAME||e===Zn.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(mne(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ar.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 Ar.autoCast(t)}o(YI,"castConfigValue");function Pne(){let e=Ar.getPropsFilePath(),t=gl(e);return Ha(t).toJSON()}o(Pne,"getConfiguration");async function Lne(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return tH(void 0,void 0,s,!0),Ane}catch(i){throw typeof i=="string"||i instanceof String?pne(i,i,Ene.BAD_REQUEST,void 0,void 0,!0):i}}o(Lne,"setConfiguration");function zI(){let e=Ar.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ar.noBootFile())throw dr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=gl(e);return Ha(t).toJSON()}o(zI,"readConfigFile");function Ha(e){return jF.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ha,"parseYamlDoc");function Dne(){let e=zI(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ar.isEmptyOrZeroLength(t)?[]:t;let r=WF(t);if(r)throw Ju.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ar.isEmptyOrZeroLength(n)?[]:n;let s=WF(n);if(s)throw Ju.CONFIG_VALIDATION(s.message);if(!Ar.isEmptyOrZeroLength(n)&&!Ar.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Ar.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ju.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Dne,"getClusteringRoutes");function rH(e){let t=QF(e);kt={};for(let r in ui){let n=t.get(r.toUpperCase());if(Ar.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ui[r].toLowerCase();s===Zn.LOGGING_ROOT?kt[s]=es.dirname(n):kt[s]=n}return kt}o(rH,"initOldConfig");function Mne(e){let t=zI();return hne.get(t,e.replaceAll("_","."))}o(Mne,"getConfigFromFile");async function vne(e,t){let r=Ha(gl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await cn.writeFile(gl(),String(r))}o(vne,"addConfig");function Une(e){let t=gl(Ar.getPropsFilePath()),r=Ha(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=es.join(n,ws.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(Une,"deleteConfigFromFile");function xne(){return Eg||(_g(),Eg)}o(xne,"getConfigObj");function Bne(){return kt||_g(),kt}o(Bne,"getFlatConfigObj")});var ts=M((ZPe,Br)=>{"use strict";var iH="username is required",oH="nothing to update, must supply active, role or password to update",aH="password cannot be an empty string",cH="If role is specified, it cannot be empty.",lH="active must be true or false";Br.exports.addUser=Yne;Br.exports.alterUser=Wne;Br.exports.dropUser=jne;Br.exports.getSuperUser=ese;Br.exports.userInfo=Qne;Br.exports.listUsers=Sg;Br.exports.listUsersExternal=Jne;Br.exports.setUsersWithRolesCache=Sl;Br.exports.findAndValidateUser=nN;Br.exports.getClusterUser=tse;Br.exports.getUsersWithRolesCache=Zne;Br.exports.USERNAME_REQUIRED=iH;Br.exports.ALTERUSER_NOTHING_TO_UPDATE=oH;Br.exports.EMPTY_PASSWORD=aH;Br.exports.EMPTY_ROLE=cH;Br.exports.ACTIVE_BOOLEAN=lH;var uH=Dn(),Fne=El(),th=(mg(),v(fg)),dH=FF(),rh=sn(),ZI=Co(),Ki=ie(),fH=require("validate.js"),eN=Q(),{promisify:Hne}=require("util"),tN=$i(),QI=(k(),v(W)),nH=Ot(),kne=wt(),Gne=oe(),qne=No(),{hdbErrors:$ne,ClientError:di}=ge(),{HTTP_STATUS_CODES:Mo,AUTHENTICATION_ERROR_MSGS:jI,HDB_ERROR_MSGS:Zu}=$ne,{UserEventMsg:rN}=oi(),JI=require("lodash"),{server:gg}=(Dr(),v($f)),Vne=Q();gg.getUser=(e,t)=>nN(e,t,t!=null);gg.authenticateUser=(e,t)=>nN(e,t);var mH={username:!0,active:!0,role:!0,password:!0},sH=new Map,Kne=Hne(Fne.delete),XI=Gne.get(QI.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??th.HASH_FUNCTION.SHA256,Yi;async function Yne(e){let t=fH.cleanAttributes(e,mH),r=dH.addUserValidation(t);if(r)throw new di(r.message);let n=await rh.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 di(Zu.ROLE_NAME_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Zu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=tN.encrypt(t.password)),t.password=await th.hash(t.password,XI),t.hash_function=XI,t.role=n[0].id;let s=await uH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(eN.debug(s),await Sl(),s.skipped_hashes.length===1)throw new di(Zu.USER_ALREADY_EXISTS(t.username),Mo.CONFLICT);return ZI.signalUserChange(new rN(process.pid)),`${t.username} successfully added`}o(Yne,"addUser");async function Wne(e){let t=fH.cleanAttributes(e,mH);if(Ki.isEmptyOrZeroLength(t.username))throw new Error(iH);if(Ki.isEmptyOrZeroLength(t.password)&&Ki.isEmptyOrZeroLength(t.role)&&Ki.isEmptyOrZeroLength(t.active))throw new Error(oH);if(!Ki.isEmpty(t.password)&&Ki.isEmptyOrZeroLength(t.password.trim()))throw new Error(aH);if(!Ki.isEmpty(t.active)&&!Ki.isBoolean(t.active))throw new Error(lH);if(!Ki.isEmpty(t.password)&&!Ki.isEmptyOrZeroLength(t.password.trim())&&(zne(t.username)&&(t.hash=tN.encrypt(t.password)),t.password=await th.hash(t.password,XI)),t.role==="")throw new Error(cH);if(t.role){let n=await rh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new di(Zu.ALTER_USER_ROLE_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Zu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);t.role=n[0].id}let r=await uH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Sl(),ZI.signalUserChange(new rN(process.pid)),r}o(Wne,"alterUser");function zne(e){let t=!1,r=Yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(zne,"isClusterUser");async function jne(e){let t=dH.dropUserValidation(e);if(t)throw new di(t.message);if(Yi.get(e.username)===void 0)throw new di(Zu.USER_NOT_EXIST(e.username),Mo.NOT_FOUND);let r=await Kne({table:"hdb_user",schema:"system",hash_values:[e.username]});return eN.debug(r),await Sl(),ZI.signalUserChange(new rN(process.pid)),`${e.username} successfully deleted`}o(jne,"dropUser");async function Qne(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=JI.cloneDeep(e.hdb_user);let r=await rh.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(Qne,"userInfo");async function Jne(){let e=await Sg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Jne,"listUsersExternal");async function Sg(){let e=await rh.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=JI.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await rh.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=JI.cloneDeep(s),s.role=t[s.role],Xne(s.role),n.set(s.username,s);return n}o(Sg,"listUsers");function Xne(e){if(!e){eN.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(qne)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Xne,"appendSystemTablesToRole");async function Sl(e=void 0){e?Yi=e:Yi=await Sg()}o(Sl,"setUsersWithRolesCache");async function Zne(){return Yi||await Sl(),Yi}o(Zne,"getUsersWithRolesCache");async function nN(e,t,r=!0){Yi||await Sl();let n=Yi.get(e);if(!n){if(!r)return{username:e};throw new di(jI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}if(n&&!n.active)throw new di(jI.USER_INACTIVE,Mo.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(sH.get(t)===n.password)return s;{let i=th.validate(n.password,t,n.hash_function||th.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)sH.set(t,n.password);else throw new di(jI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}}return s}o(nN,"findAndValidateUser");async function ese(){Yi||await Sl();for(let[,e]of Yi)if(e.role.role==="super_user")return e}o(ese,"getSuperUser");async function tse(){let e=await Sg(),t=kne.getConfigFromFile(QI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==QI.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=tN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+nH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+nH.SERVER_SUFFIX.ADMIN,r}o(tse,"getClusterUser");var hH=[];gg.invalidateUser=function(e){for(let t of hH)try{t(e)}catch(r){Vne.error("Error invalidating user",r)}};gg.onInvalidatedUser=function(e){hH.push(e)}});var sh=M((nLe,gH)=>{"use strict";var Tl=Q(),rs=(k(),v(W)),rse=HU(),tLe=ii(),rLe=Ua(),nse=ts(),{validateEvent:pH}=oi(),nh=Jn(),sse=require("process"),{resetDatabases:ise}=(Me(),v(Et)),ose={[rs.ITC_EVENT_TYPES.SCHEMA]:ase,[rs.ITC_EVENT_TYPES.USER]:_H};async function ase(e){let t=pH(e);if(t){Tl.error(t);return}Tl.trace("ITC schemaHandler received schema event:",e),await rse(e.message),await cse(e.message)}o(ase,"schemaHandler");async function cse(e){try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=ise();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Tl.error(t)}}o(cse,"syncSchemaMetadata");var EH=[];async function _H(e){try{try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Tl.warn(r)}let t=pH(e);if(t){Tl.error(t);return}Tl.trace(`ITC userHandler ${rs.HDB_ITC_CLIENT_PREFIX}${sse.pid} received user event:`,e),await nse.setUsersWithRolesCache();for(let r of EH)r()}catch(t){Tl.error(t)}}o(_H,"userHandler");_H.addListener=function(e){EH.push(e)};gH.exports=ose});var oi=M((lLe,TH)=>{"use strict";var iLe=Q(),sN=ie(),lse=(k(),v(W)),{ITC_ERRORS:ih}=tn(),{parentPort:oLe,threadId:use,isMainThread:dse,workerData:aLe}=require("worker_threads"),{onMessageFromWorkers:fse,broadcast:cLe,broadcastWithAcknowledgement:mse}=nt();TH.exports={sendItcEvent:hse,validateEvent:SH,SchemaEventMsg:pse,UserEventMsg:Ese};var Tg;fse(async(e,t)=>{Tg=Tg||sh(),SH(e),Tg[e.type]&&await Tg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function hse(e){return!dse&&e.message&&(e.message.originator=use),mse(e)}o(hse,"sendItcEvent");function SH(e){if(typeof e!="object")return ih.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||sN.isEmpty(e.type))return ih.MISSING_TYPE;if(!e.hasOwnProperty("message")||sN.isEmpty(e.message))return ih.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||sN.isEmpty(e.message.originator))return ih.MISSING_ORIGIN;if(lse.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ih.INVALID_EVENT(e.type)}o(SH,"validateEvent");function pse(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(pse,"SchemaEventMsg");function Ese(e){this.originator=e}o(Ese,"UserEventMsg")});var Co=M((fLe,bH)=>{"use strict";var RH=(k(),v(W)),dLe=ie(),Rg=Q(),yH=RU(),ed,{sendItcEvent:AH}=oi();function _se(e){try{Rg.info("signalSchemaChange called with message:",e),ed=ed||sh();let t=new yH(RH.ITC_EVENT_TYPES.SCHEMA,e);return ed.schema(t),AH(t)}catch(t){Rg.error(t)}}o(_se,"signalSchemaChange");function gse(e){try{Rg.trace("signalUserChange called with message:",e),ed=ed||sh();let t=new yH(RH.ITC_EVENT_TYPES.USER,e);return ed.user(t),AH(t)}catch(t){Rg.error(t)}}o(gse,"signalUserChange");bH.exports={signalSchemaChange:_se,signalUserChange:gse}});function yg(){return iN||(iN=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),iN}function Tse(e){return e=e.replace(Sse,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function Rse(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function aN(e){let t=IH.default.createHash("shake128",{outputLength:4}),r;return(0,NH.isIPv6)(e)?r=Tse(e):r=e.toLowerCase(),Rse(Uint8Array.from(t.update(r).digest()))}var IH,NH,oN,iN,Sse,cN=ce(()=>{Me();IH=w(require("crypto")),NH=require("node:net"),oN=new Map;o(yg,"getAnalyticsHostnameTable");Sse=/(\d{1,3}\.){3}\d{1,3}$/;o(Tse,"normalizeIPv6");o(Rse,"nodeHashToNumber");o(aN,"stableNodeId")});var vo,lN=ce(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var wg={};we(wg,{addAnalyticsListener:()=>ch,calculateCPUUtilization:()=>VH,diffResourceUsage:()=>KH,recordAction:()=>it,recordActionBinary:()=>Wr,recordHostname:()=>fN,setAnalyticsEnabled:()=>yse});function yse(e){FH=e}function Ase(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 bse(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Ig.set(e,a)}function it(e,t,r,n,s){if(!FH)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Ig.get(i);a?Ase(e,a):bse(i,e,t,r,n,s),bg||Ise()}function Wr(e,t,r,n,s){it(!!e,t,r,n,s)}function ch(e){GH.push(e)}function Ise(){bg=performance.now(),setTimeout(async()=>{let e=performance.now()-bg;bg=0;let t=[],r={time:Date.now(),period:e,threadId:Rl.threadId,metrics:t};for(let[s,i]of Ig){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of qH){let m=Math.floor(c*f),h=a[m-1];if(m>l){let p=m-l;if(h===d){let _=u[u.length-1];typeof _=="number"?u[u.length-1]={value:_,count:1+p}:_.count+=p}else u.push(p>1?{value:h,count:p}:h),d=h;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await YH()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Rl.threadId,byThread:!0,...n});for(let s of GH)s(t);Ig=new Map,Rl.parentPort?Rl.parentPort.postMessage({type:kH,report:r}):jH({report:r})},HH).unref()}async function fN(){let e=Le.hostname;Yr.trace?.("recordHostname server.hostname:",e);let t=aN(e);Yr.trace?.("recordHostname nodeId:",t);let r=yg();if(!await r.get(t)){let s={id:t,hostname:e};Yr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function $H(e){let t=oN.get(e);return t?(Yr.trace?.("storeMetric cached nodeId:",t),t):(t=aN(e),Yr.trace?.("storeMetric new nodeId:",t),oN.set(e,t),t)}function td(e,t){let r=$H(Le.hostname),n={id:[(0,dN.getNextMonotonicTime)(),r],...t};Yr.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function VH(e,t){let r=e.userCPUTime+e.systemCPUTime;return Yr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function KH(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Nse(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Yr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),td(e,l),n+=c}return n}function wH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=BH.statSync(s.primaryStore.env.path).size,c=Nse(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};td(e,u),Yr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Yr.warn?.("Error getting DB size metrics",s)}}function OH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};td(e,a),Yr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Yr.warn?.("Error getting DB volume metrics",s)}}async function wse(e,t=6e4){let r=mN(),n=WH(),s=new Promise(N=>{let O=performance.now();setImmediate(()=>{let F=performance.now();F-O>5e3&&Yr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(F-O)+"ms"),O=performance.now()}),n.primaryStore.prefetch([1],()=>{let F=performance.now();F-O>5e3&&Yr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(F-O)+"ms"),N(F-O)})}),i,a=$H(Le.hostname);for(let N of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(!(!N.value?.time||N.value?.id[1]!==a)){i=N.value.time;break}if(Date.now()-t<i)return;let c,l=new Map,u=new Map,d=[],f;for(let{key:N,value:O}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!O)continue;if(c){if(N>c+t)break}else c=N;f=N;let{metrics:F,threadId:Z}=O;for(let G of F||[]){let{path:Y,method:K,type:$,metric:le,count:ue,total:se,distribution:me,threads:Pe,...De}=G;ue||(ue=1);let dt=le+(Y?"-"+Y:"");K!==void 0&&(dt+="-"+K),$!==void 0&&(dt+="-"+$);let Ye=l.get(dt);if(Ye){if(Ye.threads){let rt=Ye.threads[Z];if(rt)Ye=rt;else{Ye.threads[Z]={...De};continue}}Ye.count||(Ye.count=1);let qn=Ye.count;for(let rt in De){let ht=De[rt];typeof ht=="number"&&(Ye[rt]=(Ye[rt]*qn+ht*ue)/(qn+ue))}Ye.count+=ue,se>=0&&(Ye.total+=se,Ye.ratio=Ye.total/Ye.count)}else Ye={period:t,...G},delete Ye.distribution,l.set(dt,Ye),Ye.byThread&&(Ye.threads=[],Ye.threads[Z]={...De},d.push(Ye));if(me){me=me.map(rt=>typeof rt=="number"?{value:rt,count:1}:rt);let qn=u.get(dt);qn?qn.push(...me):u.set(dt,me)}}await YH()}for(let N of d){let{path:O,method:F,type:Z,metric:G,count:Y,total:K,distribution:$,threads:le,...ue}=N;le=le.filter(se=>se);for(let se in ue){if(typeof N[se]!="number")continue;let me=0;for(let Pe of le){let De=Pe[se];typeof De=="number"&&(me+=De)}N[se]=me}N.count=le.length,delete N.threads,delete N.byThread}for(let[N,O]of u){let F=l.get(N);O.sort((rt,ht)=>rt.value>ht.value?1:-1);let Z=F.count-1,G=[],Y=0,K=0,$;for(let rt of qH){let ht=Z*rt;for(;Y<ht;)$=O[K++],Y+=$.count,K===1&&Y--;let Cc=O[K>1?K-2:0];$||($=O[0]),G.push($.value-($.value-Cc.value)*(Y-ht)/$.count)}let[le,ue,se,me,Pe,De,dt,Ye,qn]=G;Object.assign(F,{p1:le,p10:ue,p25:se,median:me,p75:Pe,p90:De,p95:dt,p99:Ye,p999:qn})}let m;for(let[,N]of l)N.time=f,td(n,N),m=!0;let h=Date.now(),{idle:p,active:_}=performance.eventLoopUtilization();if(m||_*10>p){let N={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-CH,active:_-PH,taskQueueLatency:await s,time:h,...process.memoryUsage()};td(n,N)}CH=p,PH=_;let g=process.resourceUsage();g.time=h,g.userCPUTime=g.userCPUTime/1e3,g.systemCPUTime=g.systemCPUTime/1e3,Yr.trace?.(`process.resourceUsage: ${JSON.stringify(g)}`);let R=KH(Ag,g);Yr.trace?.(`diffed resourceUsage: ${JSON.stringify(R)}`),R.time=h,R.period=Ag.time?h-Ag.time:t,R.cpuUtilization=VH(R,R.period);let T={metric:vo.RESOURCE_USAGE,...R};td(n,T),Ag=g;let y=st();wH(n,y),wH(n,{system:y.system}),OH(n,y),OH(n,{system:y.system})}async function LH(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function mN(){return DH||(DH=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function WH(){return MH||(MH=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Pse(){zH=!0;let e=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await wse(HH,e),await LH(mN(),Ose),await LH(WH(),Cse)},Math.min(e/2,2147483647)).unref()}function jH(e,t){let r=e.report;r.threadId=t?.threadId||Rl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(vH+=n.mean*n.count);r.totalBytesProcessed=vH,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(UH.get(t))}),UH.set(t,t.performance.eventLoopUtilization())),r.id=(0,dN.getNextMonotonicTime)(),mN().primaryStore.put(r.id,r),zH||Pse(),Lse&&(QH=Mse(r))}async function Mse(e){if(await QH,!ka){let r=(0,oh.dirname)((0,Ng.getLogFilePath)());try{ka=await(0,uN.open)((0,oh.join)(r,"analytics.log"),"r+")}catch{ka=await(0,uN.open)((0,oh.join)(r,"analytics.log"),"w+")}}let t=(await ka.stat()).size;if(t>Dse){let r=Buffer.alloc(t);await ka.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ka.write(r,{position:0}),await ka.truncate(r.length),t=r.length}await ka.write(JSON.stringify(e)+`
15
+ `,t)}var Rl,xH,Ng,oh,uN,dN,ah,BH,Yr,Ig,FH,bg,HH,kH,GH,qH,CH,PH,Ag,YH,Ose,Cse,DH,MH,zH,vH,UH,Lse,QH,ka,Dse,Wi=ce(()=>{Rl=require("worker_threads"),xH=w(nt());Me();Ng=w(Q()),oh=require("path"),uN=require("fs/promises"),dN=w(yn()),ah=w(oe());k();Dr();BH=w(require("node:fs"));cN();lN();Yr=(0,Ng.forComponent)("analytics").conditional;(0,ah.initSync)();Ig=new Map,FH=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(yse,"setAnalyticsEnabled");o(Ase,"recordExistingAction");o(bse,"recordNewAction");o(it,"recordAction");Le.recordAnalytics=it;o(Wr,"recordActionBinary");bg=0,HH=1e3,kH="analytics-report",GH=[];o(ch,"addAnalyticsListener");qH=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(Ise,"sendAnalytics");o(fN,"recordHostname");o($H,"getHostNodeId");o(td,"storeMetric");o(VH,"calculateCPUUtilization");o(KH,"diffResourceUsage");o(Nse,"storeTableSizeMetrics");o(wH,"storeDBSizeMetrics");o(OH,"storeVolumeMetrics");o(wse,"aggregation");CH=0,PH=0,Ag={userCPUTime:0,systemCPUTime:0},YH=o(()=>new Promise(setImmediate),"rest");o(LH,"cleanup");Ose=36e5,Cse=31536e6;o(mN,"getRawAnalyticsTable");o(WH,"getAnalyticsTable");(0,xH.setChildListenerByType)(kH,jH);o(Pse,"startScheduledTasks");vH=0,UH=new Map,Lse=!1;o(jH,"recordAnalytics");Dse=1e6;o(Mse,"logAnalytics")});function lh(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 JH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Os(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 Os,uh=ce(()=>{Os=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(lh,"appendHeader");o(JH,"mergeHeaders")});function Og(e,t,r=Use){let n;return function(...i){return n?n.length*hN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();hN=(hN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var ek,vse,Use,XH,xse,pN,ZH,hN,EN=ce(()=>{ek=w(ei()),vse=3e3,Use=2e4,XH=0,xse=3e4,pN=3e3,ZH=performance.now()+pN,hN=0;o(Og,"throttle");setInterval(()=>{let e=performance.now();e-ZH-pN>vse&&XH+xse<e&&(ek.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),XH=e),ZH=e},pN).unref()});var uk={};we(uk,{EVICTED:()=>Xc,INVALIDATED:()=>In,coerceType:()=>Pg,makeTable:()=>Dg});function Dg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:h}=e,{expirationMS:p,evictionMS:_,audit:g,trackDeletes:R}=e;_??=0;let{attributes:T}=e;T||(T=[]);let y=KA(i,n,l),N,O,F={},Z=Promise.resolve(),G,Y,K;for(let V of T)(V.assignCreatedTime||V.name==="__createdtime__")&&(G=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&(Y=V),V.expiresAt&&(K=V),V.isPrimaryKey&&(F=V);let $,le=[],ue=[],se=1,me=2,Pe={},De={},dt=864e5,Ye=0,qn,rt,ht,Cc=!1,Pc,$t,vf,Uf=Al.get(U.REPLICATION_DATABASES);if(Array.isArray(Uf)){for(let V of Uf)if(V.name===c&&V.replicateTo>=0){vf=V.replicateTo;break}}let IE=i.getRange({start:!1,end:!1}).constructor,NE=10,Fy=6;g&&Hf(),mm(i.env.path,V=>{if(O)return Ta(V)});class xf extends cl{static{o(this,"Updatable")}getUpdatedTime(){return Oa.get(this.getRecord())?.version}getExpiresAt(){return Oa.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new Vm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Ce extends Ur{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=T;static replicate=h;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=Y;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=d;static schemaDefined=u;static sourcedFrom(E,S){if(S&&(this.sourceOptions=S,(S.expiration||S.eviction||S.scanInterval)&&this.setTTLExpiration(S)),S?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}O=O||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),N=N||E.load;let A=o(L=>{let D=this.sources;if(D=D.filter(H=>H.intermediateSource&&H[L]&&(!H[L].reliesOnPrototype||H.prototype[L])),D.length>0)if(D.length===1){let H=D[0];return(C,x,z)=>{if(C?.source!==H)return H[L](x,z,C)}}else return(H,C,x)=>{let z=[];for(let ne of D){if(H?.source===ne)break;z.push(ne[L](C,x,H))}return Promise.all(z)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1];b.intermediateSource&&(b={});let I=o(L=>{if(b[L]&&(!b[L].reliesOnPrototype||b.prototype[L]))return(D,H,C)=>{if(!D?.source)return b[L](H,C,D)}},"getApplyToCanonicalSource");Pe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},De={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let P=b.shouldRevalidateEvents;return(async()=>{let L=!1,D,H=o(async(C,x)=>{let z=C.value,ne=C.table?He[c][C.table]:Ce;if(c===Kf&&(C.table===gu.ROLE_TABLE_NAME||C.table===gu.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=z[ne.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=E;let re={residencyId:Mc(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},B=C.id,de=await ne.getResource(B,x,re);switch(C.finished&&await C.finished,C.type){case"put":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!0,re);case"patch":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!1,re);case"delete":return de._writeDelete(B,re);case"publish":case"message":return de._writePublish(B,z,re);case"invalidate":return de._writeInvalidate(B,z,re);case"relocate":return de._writeRelocate(B,re);default:ve.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=E.subscribe;C&&R==null&&(R=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},z=E.subscribeOnThisThread?E.subscribeOnThisThread((0,yl.getWorkerIndex)(),x):(0,yl.getWorkerIndex)()===0,ne=C&&z&&await E.subscribe?.(x);if(ne){let re;for await(let B of ne)try{if(!(B.type==="transaction"?B.writes[0]:B)){ve.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(re?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let Se=[Symbol.for("seq"),B.remoteNodeIds[0]],ee=d.get(Se),j=ee?.nodes;j||(j=[]);for(let Te of B.remoteNodeIds.slice(1)){let fe=j.find(We=>We.id===Te);j=j.filter(We=>We.id!==Te||We===fe),fe||(fe={id:Te,seqId:0},j.push(fe)),fe.seqId=Math.max(ee?.seqId??1,B.localTime),Te===re?.nodeId&&(fe.lastTxnTime=B.timestamp)}let pe=Math.max(ee?.seqId??1,B.localTime);ve.default.trace?.("Received txn",c,pe,new Date(pe),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(Se,{seqId:pe,nodes:j})}D=B.localTime}B.onCommit&&re?.committed.then(B.onCommit);continue}if(re)if(B.beginTxn)re.resolve();else{re.write_promises.push(H(B,re));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let he=Ft(B,()=>{if(B.type==="transaction"){let Se=[];for(let ee of B.writes)try{Se.push(H(ee,B))}catch(j){throw j.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(B),j}return Promise.all(Se)}else if(B.type==="define_schema"){let Se=this.attributes.slice(0),ee=!1;for(let j of B.attributes)Se.find(pe=>pe.name===j.name)||(Se.push(j),ee=!0);ee&&(ze({table:s,database:c,attributes:Se,origin:"cluster"}),fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,q.CREATE_TABLE,c,s)))}else return B.beginTxn?(re=B,re.write_promises=[H(B,B)],new Promise(Se=>{re.resolve=()=>Se(Promise.all(re.write_promises))})):H(B,B)});re&&(re.committed=he),L&&he&&!he?.waitingForUserChange&&(he.then(()=>fh.signalUserChange(new mh.UserEventMsg(process.pid))),he.waitingForUserChange=!0),B.onCommit&&(he?he.then(B.onCommit):B.onCommit())}catch(de){ve.default.error?.("error in subscription handler",de)}}}catch(C){ve.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Ce.prototype.get}static getResource(E,S,A){let b=super.getResource(E,S,A);if(this.loadAsInstance===!1&&(S._freezeRecords=!0),E!=null&&this.loadAsInstance!==!1){Pr(E);try{if(b.getRecord?.())return b;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let I=!A?.async||i.cache?.get?.(E),P=Lr(S),L=P.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ea(E,S,{transaction:L,ensureLoaded:A?.ensureLoaded},I,D=>{if(D?Ce._updateResource(b,D):b.#e=null,S.onlyIfCached){if(!b.doesExist())throw new ot.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let H=Lc(E,D,S,b);if(H)return P?.disregardReadTxn(),b.#i=!0,S.loadedFromSource=!0,Cs(H,C=>(Ce._updateResource(b,C),b))}return b})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(E)),I}}return b}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#r=S?.version}ensureLoaded(){let E=Lc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,Cs(E,S=>{this.#n=S,this.#e=S.value,this.#r=S.version})}static getNewId(){let E=F?.type;if(E==="String"||E==="ID")return super.getNewId();if(!$t){let I=i.getEntry(Symbol.for("id_allocation")),P=I?.value,L;if(P&&P.nodeName===server.hostname&&(!Wse(i)||P.pid===process.pid)){let D=P.start,H=P.end;L=D;for(let C of i.getKeys({start:H,end:D,limit:1,reverse:!0}))L=C}else P=b(I?.version??null),L=P.start;$t=new BigInt64Array([BigInt(L)+1n]),$t=new BigInt64Array(i.getUserSharedBuffer("id",$t.buffer)),$t.maxSafeId=P.end}let S=Number(Atomics.add($t,0,1n)),A=E==="Int"?512:1048576;if(S+A>=$t.maxSafeId){let I=o(P=>{$t.maxSafeId=S+(E==="Int"?1023:4194303);let L=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=P?void 0:i.useReadTransaction(),H=Number($t[0]);for(let z of i.getKeys({start:H+1,end:L,limit:1,transaction:D}))L=z;D?.done();let{value:C,version:x}=i.getEntry(Symbol.for("id_allocation"));if($t.maxSafeId<L){if(C.end>$t.maxSafeId-100)return;ve.default.info?.("New id allocation",S,$t.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:C.start,end:$t.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{ve.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${$t.maxSafeId}, but id of ${L} detected`);let z=b(x);z.alreadyUpdated||Atomics.store($t,0,BigInt(z.start+1)),$t.maxSafeId=z.end}},"updateEnd");S+A===$t.maxSafeId?setImmediate(I):S+100>=$t.maxSafeId&&(ve.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return S;function b(I){let P=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=P/4,D,H,C=!1,x,z;do{x=Math.floor(Math.random()*P),z={start:x,end:x+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let ne of i.getKeys({start:x,limit:1,reverse:!0}))D=ne;H=P;for(let ne of i.getKeys({start:x+1,end:P,limit:1}))H=ne;L*=.875,L<1e3&&!C&&(C=!0,ve.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,D,H,L))}while(!(L<H-x&&(L<x-D||D===0)));return i.transactionSync(()=>{let ne=i.getEntry(Symbol.for("id_allocation"));return(ne?.version??null)==I?(ve.default.info?.("Allocated new id range",z),i.put(Symbol.for("id_allocation"),z,Date.now()),z):(ve.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...ne.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,_||(_=0);else if(E&&typeof E=="object")p=E.expiration*1e3,_=(E.eviction||0)*1e3,dt=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");dt=dt||(p+_)/4,Ta()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Ce.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(b){throw b.message+=` in residency function for table ${s}`,b}})}static setResidencyById(E){Ce.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Ce.getResidencyById)return Ce.getResidencyById(E[t]);let A=vf;if(S.replicateTo!=null){if(Array.isArray(S.replicateTo))return S.replicateTo.includes(server.hostname)?S.replicateTo:[server.hostname,...S.replicateTo];S.replicateTo>=0&&(A=S.replicateTo)}if(A>=0&&server.nodes){let b=[server.hostname];if(S.previousResidency)b.push(...S.previousResidency.slice(0,A));else{let I=server.nodes.map(D=>D.name),P=Math.floor(I.length*Math.random());b.push(...I.slice(P,P+A));let L=P+A-I.length;L>0&&b.push(...I.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Hf(),Ce.audit=E}static coerceId(E){return E===""?null:Pg(E,F)}static async dropTable(){delete He[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&$r&&E.value&&Na(E.value);if(c===a){for(let E of T)d.remove(Ce.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Ce.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),gN.default.unlinkSync(i.env.path);fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,q.DROP_TABLE,c,s))}get(E){let S=this.constructor;if(typeof E=="string"&&S.loadAsInstance!==!1)return this.getProperty(E);if(Ff(E))return this.search(E);if(E&&E.id===void 0&&!E.toString()){let A={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:T,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Ce.getRecordCount().then(b=>(A.recordCount=b.recordCount,A.estimatedRecordRange=b.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),b=Lr(A),I=b.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Rr(E);Pr(P);let L=!0;return E.checkPermission&&(L=this.allowRead(A.user,E)),Cs(Cs(L,D=>{if(!D)throw new ot.AccessViolation(A.user);let H=!0;return Ea(P,A,{transaction:I,ensureLoaded:H},!1,C=>{if(A.onlyIfCached){if(!C?.value)throw new ot.ServerError("Entry is not cached",504)}else if(H){let x=Lc(P,C,A);if(x)return b?.disregardReadTxn(),A.loadedFromSource=!0,x.then(z=>z?.value)}return C?.value})}),D=>{let H=E?.select;return H&&D!=null?xu(H,this.constructor)(D):D})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=_a(E,S);if(A?.read){if(A.isSuperUser)return!0;let b=A.attribute_permissions,I=S?.select;if(b?.length>0||Cc&&I){if(S||(S={}),I){let P=Array.isArray(I)?I:[I],L=b?.length>0&&_N(b,"read");S.select=P.map(D=>{let H=D.name||D;if(!L||L[H]){let C=ht[H]?.definition?.tableClass;if(C){if(D.name||(D={name:D}),!D.checkPermission&&S.checkPermission&&(D.checkPermission=S.checkPermission),!C.prototype.allowRead.call(null,E,D))return!1;if(!D.select)return D.name}return D}}).filter(Boolean)}else S.select=b.filter(P=>P.read&&!ht[P.attribute_name]).map(P=>P.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let b=_a(E,A);if(b?.update){let I=b.attribute_permissions;if(I?.length>0){let P=_N(I,"update");for(let L in S)if(!P[L])return!1;for(let L of I){let D=L.attribute_name;!L.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return Sa(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let b=_a(E,A);if(b?.insert){let I=b.attribute_permissions;if(I?.length>0){let P=_N(I,"insert");for(let L in S)if(!P[L])return!1;return Sa(this.getContext())}else return Sa(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return _a(E,S)?.delete&&Sa(this.getContext())}update(E,S){let A,b=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),I=!1;b?(I=S,S=E,A=this.getId()):A=Rr(E);let P=this.getContext();if(!Lr(P))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(I)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#t=S;else if(b){let D=this.#t;D&&(S=Object.assign(D,S)),this.#t=S}else{let D=!0;if(E==null)throw new TypeError("Can not put a record without a target");return E.checkPermission&&(D=this.allowUpdate(P.user,S,E)),Cs(D,H=>{if(!H)throw new ot.AccessViolation(P.user);return Cs(i.get(Rr(E)),C=>{let x=new xf(C);return x._setChanges(S),this._writeUpdate(A,x.getChanges(),!1),x})})}return this._writeUpdate(A,this.#t,I),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===rk?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new Vm(S)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,S){if(typeof S=="number")return this.addTo(E,-S);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(E){this.#t=E}setRecord(E){this.#e=E}invalidate(E){let S=!0,A=this.getContext();return E?.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new ot.AccessViolation(A.user);this._writeInvalidate(E?Rr(E):this.getId())})}_writeInvalidate(E,S,A){let b=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.invalidate?.bind(this,b,E),beforeIntermediate:Ra(S,De.invalidate?.bind(this,b,E)),commit:o((P,L)=>{if(!(ga(P,L,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));ve.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(P).toISOString()}`),y(E,S,L,P,In,g,{user:b?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.relocate?.bind(this,A,E),beforeIntermediate:De.relocate?.bind(this,A,E),commit:o((I,P)=>{if(ga(I,P,S?.nodeId)<=0)return;let L=Ce.getResidencyRecord(S.residencyId),D=0,H=null,C=P?.value;if(L&&!L.includes(server.hostname)){for(let x in r)H||(H={}),H[x]=C[x];D=In}else H=C;ve.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(I).toISOString()}`),y(E,H,P,I,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){if(this.getResidencyById)return!1;let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},b=Dc(this.getResidency(S.value,A)),I;if(b){if(!b.includes(server.hostname))return!1;I=Mc(b)}let P=0;ve.default.debug?.("Performing a relocate of an entry",E.key,S.value,b);let L=y(E.key,S.value,E,E.version,P,!0,{residencyId:I,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let b=this.Source,I;if(!((O||g)&&(!S||(I=i.getEntry(E),!I||!S)||I.version!==A))){if(O){if(i.hasLock(E,I.version))return;let P;for(let L in r)P||(P={}),P[L]=S[L];if(P)return y(E,P,I,A,Xc,null,null,null,!0)}return i.ifVersion(E,A,()=>{po(E,S,null)}),Jc(i,I??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,global.operation(E,S)}put(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!0);else{let A=!0;if(E==null)throw new TypeError("Can not put a record without a target");let b=this.getContext();return E.checkPermission&&(A=this.allowUpdate(b.user,S,E)),Cs(A,I=>{if(!I)throw new ot.AccessViolation(b.user);if(Array.isArray(S))for(let P of S){let L=P[t];this._writeUpdate(L,P,!0)}else{let P=Rr(E);this._writeUpdate(P,S,!0)}})}}create(E,S){let A=!0,b=this.getContext();if(!S&&!(E instanceof URLSearchParams)&&(S=E,E=void 0),!S||typeof S!="object"||Array.isArray(S))throw new TypeError("Can not create a record without an object");return E?.checkPermission&&(A=this.allowCreate(b.user,S,E)),Cs(A,I=>{if(!I)throw new ot.AccessViolation(b.user);let P=Rr(E)??S[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new ot.ClientError("Record already exists",409);return this._writeUpdate(P,S,!0),S})}patch(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!1);else{let A=this.update(E,S);if(A?.then)return A.then(()=>{})}}_writeUpdate(E,S,A,b){let I=this.getContext(),P=Lr(I);Pr(E);let L=this.#n??i.getEntry(E);this.#s=A?rk:$se;let D=o(C=>A?C.put?()=>C.put(I,E,S):null:C.patch?()=>C.patch(I,E,S):C.put?()=>C.put(I,E,ll(this)):null,"writeToSources"),H={key:E,store:i,entry:L,nodeName:I?.nodeName,validate:o(C=>{S||(S=this.#t),A||S&&J_(this.#t===S?this:S)?I?.source||(P.checkOverloaded(),this.validate(S,!A),Y&&(S[Y.name]=Y.type==="Date"?new Date(C):Y.type==="String"?new Date(C).toISOString():C),A&&(t&&S[t]!==E&&(S[t]=E),G&&(L?.value?S[G.name]=L?.value[G.name]:S[G.name]=G.type==="Date"?new Date(C):G.type==="String"?new Date(C).toISOString():C),S=ll(S))):P.removeWrite(H)},"validate"),before:D(Pe),beforeIntermediate:Ra(S,D(De)),commit:o((C,x,z)=>{if(z){if(I&&x?.version>(I.lastModified||0)&&(I.lastModified=x.version),this.#n=x,x?.value&&x.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=x?.value??null)}this.#t=void 0,this.#r=C;let ne=x?.value,re=S;this.#s=0;let B=!1,de=ga(C,x,b?.nodeId),he,Se=A?"put":"patch",ee;b?.residencyId!=null&&(ee=b.residencyId);let j=I?.expiresAt??(p?p+Date.now():-1);if(de<=0){if(g){let fe=x.localTime,We=x.version;ve.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(C),"applying later update from:",new Date(We),"local recorded time",new Date(fe));let St=[];for(;fe>C||We>=C&&fe>0;){let ft=l.get(fe);if(!ft)break;let Ee=Nt(ft);if(We=Ee.version,We>=C){if(We===C){if(de=ga(C,{version:We,localTime:fe},b?.nodeId),de===0)return Te(!1);if(de>0)continue}if(Ee.type==="patch")St.push(Ee),he=S;else if(Ee.type==="put"||Ee.type==="delete")return Te(!1)}fe=Ee.previousLocalTime}fe||ve.default.debug?.("No further audit history, applying incremental updates based on available history",E,"existing version preserved",x),St.sort((ft,Ee)=>ft.version-Ee.version);for(let ft of St){let Ee=ft.getValue(i);if(ve.default.debug?.("Rebuilding update with future patch:",new Date(ft.version),Ee,ft),re=WE(re,Ee,A),!re)return Te(!1)}}else{if(A)return Te(!1);re=WE(re,ne,A),ve.default.debug?.("Rebuilding update without audit:",re)}ve.default.trace?.("Rebuilt record to save:",re," is full update:",A)}let pe;if(A?pe=re:this.constructor.loadAsInstance===!1?pe=ll(ne,re):(this.#e=ne,pe=ll(this,re)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(ee==null){L?.residencyId&&(I.previousResidency=Ce.getResidencyRecord(L.residencyId));let fe=Dc(Ce.getResidency(pe,I));if(fe&&!fe.includes(server.hostname))if(he??=pe,B=!0,Ce.getResidencyById)pe=void 0;else{pe=null;for(let We in r)pe||(pe={}),pe[We]=he[We]}ee=Mc(fe)}A||(he=S),ve.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(C).toISOString()}${j?", expires at: "+new Date(j).toISOString():""}${x?", replaces entry from: "+new Date(x.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),po(E,ne,pe),Te(!0),I.expiresAt&&Ta();function Te(fe){y(E,fe?pe:void 0,fe?x:{...x,value:void 0},C,B?In:0,g,{omitLocalRecord:B,user:I?.user,residencyId:ee,expiresAt:j,nodeId:b?.nodeId,originatingOperation:I?.originatingOperation},Se,!1,fe?he:he??S)}o(Te,"writeCommit")},"commit")};P.addWrite(H)}async delete(E){if(Ff(E)){E.select=["$id"];for await(let S of this.search(E))this._writeDelete(S.$id);return!0}if(E){let S=!0,A=this.getContext();return E.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new ot.AccessViolation(A.user);let I=Rr(E);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Lr(this.getContext());Pr(E);let b=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,before:Pe.delete?.bind(this,b,E),beforeIntermediate:De.delete?.bind(this,b,E),commit:o((I,P,L)=>{let D=P?.value;L&&(b&&P?.version>(b.lastModified||0)&&(b.lastModified=P.version),Ce._updateResource(this,P)),!(ga(I,P,S?.nodeId)<=0)&&(po(this.getId(),D),ve.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(I).toISOString()}`),g||R?(y(E,null,P,I,0,g,{user:b?.user,nodeId:S?.nodeId},"delete"),g||Ta()):Jc(i,P))},"commit")}),!0}search(E){let S=this.getContext(),A=Lr(S);if(!E)throw new Error("No query provided");if(E.parseError)throw E.parseError;if(E.checkPermission&&!this.allowRead(S.user,E))throw new ot.AccessViolation(S.user);let b=E.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let I=E.id??this.getId();I&&(b=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(b));let P,L={};function D(j,pe){let Te;switch(pe){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');Te=!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 "+pe)}for(let fe of j){if(fe.conditions){fe.conditions=D(fe.conditions,fe.operator);continue}let We=fe[0]??fe.attribute,St=We==null?F:xi(T,We);if(St)(St.type||WA[fe.comparator])&&(fe[1]===void 0?fe.value=C(fe.value,St):fe[1]=C(fe[1],St));else if(We!=null&&!E.allowConditionsOnDynamicAttributes)throw(0,ot.handleHDBError)(new Error,`${We} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let ft=fe.chainedConditions[0],Ee,pt;if(ft.comparator==="gt"||ft.comparator==="greater_than"||ft.comparator==="ge"||ft.comparator==="greater_than_equal"?(Ee=fe,pt=ft):(Ee=ft,pt=fe),Ee.comparator!=="lt"&&Ee.comparator!=="less_than"&&Ee.comparator!=="le"&&Ee.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let tt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",cr=Ee.comparator==="le"||Ee.comparator==="less_than_equal";fe.comparator=(tt?"ge":"gt")+(cr?"le":"lt"),fe.value=[pt.value,Ee.value]}else throw new Error("Multiple chained conditions are not currently supported")}return j}o(D,"prepareConditions");function H(j,pe){if(E.enforceExecutionOrder)return j;for(let Te of j)Te.conditions&&(Te.conditions=H(Te.conditions,Te.operator));return j.length>1&&pe!=="or"?Bse(j,b_(Ce)):j}o(H,"orderConditions");function C(j,pe){return Array.isArray(j)?j.map(Te=>Pg(Te,pe)):Pg(j,pe)}o(C,"coerceTypedValues");let x=E.operator;(b.length>0||x)&&(b=D(b,x));let z=typeof E.sort=="object"&&E.sort,ne;if(z&&x!=="or"){let j=z.attribute;if(j==null)throw new ot.ClientError("Sort requires an attribute");if(P=b.find(pe=>Mu(pe.attribute)===Mu(j)),!P){let pe=xi(T,j);if(!pe)throw(0,ot.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);if(pe.indexed)P={...z,comparator:"sort"},b.push(P);else if(b.length===0&&!E.allowFullScan)throw(0,ot.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!z.descending)}b=H(b,x),z&&(P&&b[0]===P?z.next&&(ne={dbOrderedAttribute:z.attribute,attribute:z.next.attribute,descending:z.next.descending,next:z.next.next}):(P&&b.splice(b.indexOf(P),1),ne=z));let re=E.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:b,operator:x,postOrdering:ne,selectApplied:!!re};let B=A.useReadTxn(),de=zA(b,x,Ce,B,E,S,(j,pe)=>pu(j,re,S,B,pe),L),he=E.ensureLoaded!==!1,Se=Ce.transformEntryForSelect(re,S,B,L,he,!0),ee=Ce.transformToOrderedSelect(de,re,ne,S,B,Se);return(E.offset||E.limit!==void 0)&&(ee=ee.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0)),ee.onDone=()=>{ee.onDone=null,A.doneReadTxn()},ee.selectApplied=!0,ee.getColumns=()=>{if(re){let j=[];for(let pe of re)pe==="*"?j.push(...T.map(Te=>Te.name)):j.push(pe.name||pe);return j}return T.filter(j=>!j.computed&&!j.relationship).map(j=>j.name)},ee}static transformToOrderedSelect(E,S,A,b,I,P){let L=new IE;if(A){E=pu(E,S,b,I,null);let D;L.iterate=function(){let C,x=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),z,ne=A.dbOrderedAttribute,re,B,de=!0;function he(ee){let j=ee.next&&he(ee.next),pe=ee.descending;return b.sort=ee,(Te,fe)=>{let We=hu(Te,ee.attribute,b),St=hu(fe,ee.attribute,b),ft=pe?(0,bl.compareKeys)(St,We):(0,bl.compareKeys)(We,St);return ft===0?j?.(Te,fe)||0:ft}}o(he,"createComparator");let Se=he(A);return{async next(){let ee;if(C)if(ee=C.next(),ee.done){if(z)return L.onDone&&L.onDone(),ee}else return{value:await P.call(this,ee.value)};D=[],re&&D.push(re);do if(ee=await x.next(),ee.done){if(z=!0,D.length)break;return L.onDone&&L.onDone(),ee}else{let j=ee.value;if(j?.then&&(j=await j),ne){let pe=hu(j,ne,b);if(de)de=!1,B=pe;else if(pe!==B){B=pe,re=j;break}}D.push(j)}while(!0);return A.isGrouped,D.sort(Se),C=D[Symbol.iterator](),ee=C.next(),ee.done?(L.onDone&&L.onDone(),ee):{value:await P.call(this,ee.value)}},return(){L.onDone&&L.onDone(),x.return()},throw(){L.onDone&&L.onDone(),x.throw()}}};let H=o(C=>{if(typeof S=="object"&&Array.isArray(C.attribute))for(let x=0;x<S.length;x++){let z=S[x],ne;if(z.name===C.attribute[0]){for(ne=z.sort||(z.sort={});ne.next;)ne=ne.next;ne.attribute=C.attribute.slice(1),ne.descending=C.descending}else z===C.attribute[0]&&(S[x]=ne={name:z,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&H(C.next)},"applySortingOnSelect");H(A)}else L.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),L=L.map(function(D){try{let H=P.call(this,D);return typeof H?.catch=="function"?H.catch(C=>{throw C.partialObject={[t]:D.key},C}):H}catch(H){throw H.partialObject={[t]:D.key},H}});return L}static transformEntryForSelect(E,S,A,b,I,P){let L;I&&O&&!(typeof E=="string"?[E]:E)?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(L=!0);let D,H=o(function(C){let x;if(S?.transaction?.stale&&(S.transaction.stale=!1),C!=null){if(x=C.deref?C.deref():C.value,!x&&(C.key===void 0||C.deref)||C.metadataFlags&In){if(C.metadataFlags&In&&S.replicateFrom===!1&&P&&C.residencyId)return qa.SKIP;if(C=Ea(C.key??C,S,{transaction:A,lazy:E?.length<4,ensureLoaded:I},this?.isSync,z=>z),C?.then)return C.then(H.bind(this));x=C?.value}if(L&&C?.metadataFlags&(In|Xc)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let z=Lc(C.key??C,C,S);if(z?.then)return z.then(H)}}if(x==null)return P?qa.SKIP:x;if(E&&!(E[0]==="*"&&E.length===1)){let z,ne=o((B,de)=>{let he;typeof B=="object"?he=B.name:he=B;let Se=ht?.[he],ee;if(Se){let j=b?.[he];if(j)if(j.hasMappings){let Te=Se.from?x[Se.from]:Mu(C.key);ee=j.get(Te),ee||(ee=[])}else ee=j.fromRecord?.(x);else ee=Se(x,S,C,!0);let pe=o(Te=>{if(Se.directReturn)return de(Te,he);if(Te&&typeof Te=="object"){let fe=Se.definition?.tableClass||Ce;D||(D={});let We=D[he]||(D[he]=fe.transformEntryForSelect(he===B?null:B.select||(Array.isArray(B)?B:null),S,A,j,I));if(Array.isArray(Te)){let St=[],ft=fe.transformToOrderedSelect(Te,B.select,typeof B.sort=="object"&&B.sort,S,A,We)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ee=o(tt=>{for(;!tt.done;){if(tt?.then)return tt.then(Ee);St.push(tt.value),tt=ft.next()}de(St,he)},"nextValue"),pt=Ee(ft.next());pt&&(z||(z=[]),z.push(pt));return}else if(Te=We.call(this,Te),Te?.then){z||(z=[]),z.push(Te.then(St=>de(St,he)));return}}de(Te,he)},"handleResolvedValue");ee?.then?(z||(z=[]),z.push(ee.then(pe))):pe(ee);return}else ee=x[he],ee&&typeof ee=="object"&&he!==B&&(ee=Ce.transformEntryForSelect(B.select||B,S,A,null)({value:ee}));de(ee,he)},"selectAttribute"),re;if(typeof E=="string")ne(E,B=>{re=B});else if(Array.isArray(E))if(E.asArray)re=[],E.forEach((B,de)=>{B==="*"?E[de]=x:ne(B,he=>re[de]=he)});else{re={};let B=E.forceNulls;for(let de of E)if(de==="*")for(let he in x)re[he]=x[he];else ne(de,(he,Se)=>{he===void 0&&B&&(he=null),re[Se]=he})}else throw new ot.ClientError("Invalid select"+E);return z?Promise.all(z).then(()=>re):re}return x},"transform");return H}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ze({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],b=this,I=eb(Ce,this.getId()??null,function(L,D,H,C){try{let x=D.getValue?.(i,S),z=D.type;if(!x&&z==="patch"&&S){let re=i.getEntry(L);re?.version===D.version?x=re.value:x=D.getValue?.(i,!0,H),z="put"}let ne={id:L,localTime:H,value:x,version:D.version,type:z,beginTxn:C};A?A.push(ne):this.send(ne)}catch(x){ve.default.error?.(x)}},E.startTime||0,E),P=(async()=>{this.isCollection&&(I.includeDescendants=!0,E.onlyChildren&&(I.onlyChildren=!0)),E.supportsTransactions&&(I.supportsTransactions=!0);let L=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let H=E.startTime;if(this.isCollection){if(H){if(D)throw new ot.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:x}of l.getRange({start:H,exclusiveStart:!0,snapshot:!1})){let z=Nt(x);if(z.tableId!==n)continue;let ne=z.recordId;if(L==null||ok(L,ne)){let re=z.getValue(i,S,C);if(I.send({id:ne,localTime:C,value:re,version:z.version,type:z.type}),I.queue?.length>sk&&await I.waitForDrain()===!1)return}I.startTime=C}}else if(D){let C=[];for(let{key:x,value:z}of l.getRange({start:"z",end:!1,reverse:!0}))try{let ne=Nt(z);if(ne.tableId!==n)continue;let re=ne.recordId;if(L==null||ok(L,re)){let B=ne.getValue(i,S,x);if(C.push({id:re,localTime:x,value:B,version:ne.version,type:ne.type}),--D<=0)break}}catch(ne){ve.default.error("Error getting history entry",x,ne)}for(let x=C.length;x>0;)I.send(C[--x]);C[0]&&(I.startTime=C[0].localTime)}else if(!E.omitCurrent){for(let{key:C,value:x,version:z,localTime:ne}of i.getRange({start:L??!1,end:L==null?void 0:[L,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(I.send({id:C,localTime:ne,value:x,version:z,type:"put"}),I.queue?.length>sk&&await I.waitForDrain()===!1))return}}else{D&&!H&&(H=0);let C=this.#n?.localTime;if(C===VA&&(i.cache?.delete(L),this.#n=i.getEntry(L),ve.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),ve.default.trace?.("Subscription from",H,"from",L,C),H<C){let x=[],z=C;do{let ne=l.get(z);if(ne){E.omitCurrent=!0;let re=Nt(ne),B=re.getValue(i,S,z);S&&(re.type="put"),x.push({id:L,value:B,localTime:z,...re}),z=re.previousLocalTime}else break;D&&D--}while(z>H&&D!==0);for(let ne=x.length;ne>0;)I.send(x[--ne]);I.startTime=C}!E.omitCurrent&&this.doesExist()&&I.send({id:L,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of A)I.send(C);A=null})();return E.listener&&I.on("data",E.listener),I}static subscribeOnThisThread(E,S){return E===0||S?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,S,A){if(S===void 0||S instanceof URLSearchParams)this._writePublish(this.getId(),E,S);else{let b=!0,I=this.getContext();return E.checkPermission&&(b=this.allowCreate(I.user,E,I)),Cs(b,P=>{if(!P)throw new ot.AccessViolation(I.user);let L=Rr(E);this._writePublish(L,S,A)})}}_writePublish(E,S,A){let b=Lr(this.getContext());E??=null,E!==null&&Pr(E);let I=this.getContext();b.addWrite({key:E,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(b.checkOverloaded(),this.validate(S))},"validate"),before:Pe.publish?.bind(this,I,E,S),beforeIntermediate:Ra(S,De.publish?.bind(this,I,E,S)),commit:o((P,L,D)=>{L===void 0&&R&&!g&&Ta(),ve.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(P).toISOString()}`),y(E,L?.value??null,L,L?.version||P,0,!0,{user:I?.user,residencyId:A?.residencyId,expiresAt:I?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,b=o((I,P,L)=>{if(P.type&&I!=null)if(S&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an object${P.type?" ("+P.type+")":""}`);let D=P.properties;for(let H=0,C=D.length;H<C;H++){let x=D[H];if(x.relationship||x.computed){E.hasOwnProperty(x.name)&&(A||(A=[])).push(`Computed property ${L}.${x.name} may not be directly assigned a value`);continue}let z=b(I[x.name],x,L+"."+x.name);z&&(I[x.name]=z)}if(P.sealed&&I!=null&&typeof I=="object")for(let H in I)D.find(C=>C.name===H)||(A||(A=[])).push(`Property ${H} is not allowed within object in property ${L}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string`);break;case"Boolean":typeof I!="boolean"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof Rs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(P.elements)for(let D=0,H=I.length;D<H;D++){let C=I[D],x=b(C,P.elements,L+"[*]");x&&(I[D]=x)}}else(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an Array`);break}P.nullable===!1&&I==null&&(A||(A=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=T.length;I<P;I++){let L=T[I];if(L.relationship||L.computed){Object.hasOwn(E,L.name)&&(A||(A=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!S||L.name in E){let D=b(E[L.name],L,L.name);D!==void 0&&(E[L.name]=D)}}if(f)for(let I in E)T.find(P=>P.name===I)||(A||(A=[])).push(`Property ${I} is not allowed`);if(A)throw new ot.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new ot.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new ot.ClientError("Attribute names cannot include backticks or forward slashes");Fse(A.name),S.push(A)}return ze({table:s,database:c,schemaDefined:u,attributes:S}),Ce.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return ze({table:s,database:c,schemaDefined:u,attributes:S}),Ce.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,S=gN.default.statfsSync?.(E)??{};return{available:S.bavail*S.bsize,free:S.bfree*S.bsize,size:S.blocks*S.bsize}}static async getRecordCount(E){let S=i.getStats().entryCount,A=1e3/2,b=performance.now(),I=Math.floor(S/2),P=E?.exactCount,L=0,D=0,H;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&L++,D++,await Ga(),!P&&D<I&&performance.now()-b>A){H=D;break}if(H){let C=L;L=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:H,snapshot:!1}))ee!=null&&L++,await Ga();let x=H*2,z=(L+C)/x,ne=Math.pow((L-C+1)/H/2,2)+z*(1-z)/x,re=Math.max(Math.sqrt(ne)*S,1),B=Math.round(z*S),de=Math.max(B-1.96*re,L+C),he=Math.min(B+1.96*re,S),Se=Math.pow(10,Math.round(Math.log10(re)));return Se>B&&(Se=Se/10),L=Math.round(B/Se)*Se,{recordCount:L,estimatedRange:[Math.round(de),Math.round(he)]}}return{recordCount:L}}static updatedAttributes(){ht=this.propertyResolvers={$id:o((E,S,A)=>({value:A.key}),"$id"),$updatedtime:o((E,S,A)=>A.version,"$updatedtime"),$updatedTime:o((E,S,A)=>A.version,"$updatedTime"),$expiresAt:o((E,S,A)=>A.expiresAt,"$expiresAt"),$record:o((E,S,A)=>A?{value:E}:E,"$record"),$distance:o((E,S,A)=>A&&(A.distance??S?.vectorDistances?.get(A)),"$distance")};for(let E of this.attributes){E.isPrimaryKey&&(F=E),E.resolve=null;let S=E.relationship,A=E.computed;if(S)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),A&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Cc=!0,S.to)E.elements?.definition?(ht[E.name]=E.resolve=(b,I,P,L)=>{let D=b[S.from?S.from:t],H=E.elements.definition.tableClass;return L?Du({attribute:S.to,value:D},Lr(I).getReadTxn(),!1,H,!1).map(C=>C&&C.key!==void 0?C:H.primaryStore.getEntry(C,{transaction:Lr(I).getReadTxn()})).asArray:H.search([{attribute:S.to,value:D}],I).asArray},E.set=()=>{},E.resolve.definition=E.elements.definition,E.resolve.to=S.to,S.from&&(E.resolve.from=S.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(S.from){let b=E.definition||E.elements?.definition;b?(ht[E.name]=E.resolve=(I,P,L,D)=>{let H=I[S.from];if(H===void 0)return;if(E.elements){let x,z=H?.map(ne=>{let re=b.tableClass.primaryStore[D?"getEntry":"get"](ne,{transaction:Lr(P).getReadTxn()});return re?.then&&(x=!0),Ce.loadAsInstance===!1&&Object.freeze(D?re?.value:re),re});return S.filterMissing?x?Promise.all(z).then(ne=>ne.filter(ak)):z.filter(ak):x?Promise.all(z):z}let C=b.tableClass.primaryStore[D?"getEntry":"get"](H,{transaction:Lr(P).getReadTxn()});return Ce.loadAsInstance===!1&&Object.freeze(D?C?.value:C),C},E.set=(I,P)=>{if(Array.isArray(P)){let L=P.map(D=>D.getId?.()||D[b.tableClass.primaryKey]);I[S.from]=L}else{let L=P.getId?.()||P[b.tableClass.primaryKey];I[S.from]=L}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=S.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else if(A)typeof A.from=="function"&&this.setComputedAttribute(E.name,A.from),ht[E.name]=E.resolve=(b,I,P)=>{let L=typeof A.from=="string"?b[A.from]:b,D=this.userResolvers[E.name];if(D)return D(L,I,P);ve.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}},E.resolve.directReturn=!0;else if(r[E.name]?.customIndex?.propertyResolver){let b=r[E.name].customIndex;ht[E.name]=(I,P,L)=>{let D=I[E.name];return b.propertyResolver(D,P,L)},ht[E.name].directReturn=!0}}Km(this,this),Km(xf,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,Uu.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=xi(T,E);if(!A){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!A.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=S}static async deleteHistory(E=0,S=!1){let A;for(let{key:b,value:I}of l.getRange({start:0,end:E}))await Ga(),Nt(I).tableId===n&&(A=h_(l,b,I));if(S)for(let b of i.getRange({start:0,versions:!0})){let{key:I,value:P,localTime:L}=b;await Ga(),P===null&&L<E&&(A=Jc(i,b))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:b}of l.getRange({start:E||1,end:S})){await Ga();let I=Nt(b);I.tableId===n&&(yield{id:I.recordId,localTime:A,version:I.version,type:I.type,value:I.getValue(i,!0,A),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(E){let S=[];if(E==null)throw new Error("An id is required");let A=i.getEntry(E);if(!A)return S;let b=A.localTime;if(!b)throw new Error("The entry does not have a local audit time");let I=0;do{await Ga();let P=l.get(b);if(P){let L=Nt(P);S.push({id:L.recordId,localTime:b,version:L.version,type:L.type,value:L.getValue(i,!0,b),user:L.user}),b=L.previousLocalTime}else break}while(I<1e3&&b);return S.reverse()}static cleanup(){$?.remove()}}let wE=Og(async(V,E,S)=>{for(let A of Ce.sources)if(A.get&&(!A.get.reliesOnPrototype||A.prototype.get)){if(A.available?.(S)===!1)continue;E.source=A;let b=await A.get(V,E);if(b)return b}},()=>{throw new ot.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Ce.updatedAttributes();let Bf=Ce.prototype;return p&&Ce.setTTLExpiration(p/1e3),K&&Eu(),Ce;function po(V,E,S){let A;for(let b in r){let I=r[b],P=I.isIndexing,L=ht[b],D=S&&(L?L(S):S[b]),H=E&&(L?L(E):E[b]);if(D===H&&!P)continue;if(I.customIndex){I.customIndex.index(V,D,H);continue}A=!0;let C=I.indexNulls,x=(0,dh.getIndexedValues)(D,C),z=(0,dh.getIndexedValues)(H,C);if(s==="OrganizationRole"&&ve.default.error?.({tableName:s,id:V,key:b,valuesToAdd:x,valuesToRemove:z}),z?.length>0){let ne=new Set(z);if(x=x?x.filter(re=>{if(ne.has(re))ne.delete(re);else return!0}):[],z=Array.from(ne),(z.length>0||x.length>0)&&tk){let re=z.concat(x).map(B=>({key:B,value:V}));I.prefetch(re,ik)}for(let re=0,B=z.length;re<B;re++)I.remove(z[re],V)}else x?.length>0&&tk&&I.prefetch(x.map(ne=>({key:ne,value:V})),ik);if(x)for(let ne=0,re=x.length;ne<re;ne++)I.put(x[ne],V)}return A}o(po,"updateIndices");function Pr(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>nk)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)throw new Error("Invalid primary key of null");break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,bl.writeKey)(V,Vse,0)>nk)throw new Error("Primary key size is too large: "+V.length);return!0}o(Pr,"checkValidId");function Rr(V){return typeof V=="object"&&V?V.id:V}o(Rr,"requestTargetToId");function Ff(V){return typeof V=="object"&&V&&V.isCollection}o(Ff,"isSearchTarget");function Ss(V){}o(Ss,"isRequestTarget");function Ea(V,E,S,A,b){if(Ce.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let P=Dc(Ce.getResidencyById(V));if(P&&!P.includes(server.hostname)&&N)return N({key:V,residency:P}).then(b)}let I=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return b(null,V);let P=i.getEntry(V,S);return E?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&In&&N&&S.ensureLoaded&&E?.replicateFrom!==!1?N(P).then(L=>b(L,V),L=>(ve.default.error?.("Error loading remote record",V,P,S,L),b(null,V))):(P&&E&&(P?.version>(E.lastModified||0)&&(E.lastModified=P.version),P?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=P.localTime)),b(P,V))},"whenPrefetched");return A?I():se>0?(se--,I()):new Promise((P,L)=>{se===0?(se--,i.prefetch([V],()=>{D(),H()})):(le.push(V),ue.push(H),le.length>Fy&&(se--,D()));function D(){if(le.length>0){let C=ue;i.prefetch(le,()=>{se===-1?D():se++;for(let x of C)x()}),le=[],ue=[],me>2&&me--}else se=me,me<NE&&me++}o(D,"prefetch");function H(){try{P(I())}catch(C){L(C)}}o(H,"load")})}o(Ea,"loadLocalRecord");function _a(V,E){let S=E?.checkPermission;if(typeof S!="object"){if(!V?.role)return;S=V.role.permission}if(S.super_user)return Kse;let A=S[c],b,I=A?.tables;if(I)return I[s];if(c==="data"&&(b=S[s])&&!b.tables)return b}o(_a,"getTablePermissions");function Lc(V,E,S,A){if(O){let b=!1;if(S.noCache?b=!0:(E?(!E.value||E.metadataFlags&(In|Xc)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(b=!0):b=!0,Wr(!b,"cache-hit",s)),b){let I=OE(V,E,S).then(P=>(P?.value&&P?.value.getRecord?.()&&ve.default.error?.("Can not assign a record that is already a resource"),S&&(P?.version>(S.lastModified||0)&&(S.lastModified=P.version),S.lastRefreshed=Date.now()),P));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,V)){if(I.catch(P=>ve.default.warn?.(P)),S?.onlyIfCached&&!A.doesExist())throw new ot.ServerError("Entry is not cached",504);return}else return I}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Ce.evict(E.key,E.value,E.version),E.value=null,{then(b){return b(E)}}}o(Lc,"ensureLoadedFromSource");function Lr(V){let E=V?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let S=E.next;if(!S)return E=E.next=new _o,E.lmdbDb=i,E;E=S}while(!0)}else return new KE}o(Lr,"txnForContext");function hu(V,E,S){if(!V)return;let A=(V.deref?V.deref():V.value)??i.getEntry(V.key)?.value;if(typeof E=="object"){let I=ht,P=A;for(let L=0,D=E.length;L<D;L++){let H=E[L],C=I?.[H];P=C&&P?C(P,S,V):P?.[H],V=null,I=C?.definition?.tableClass?.propertyResolvers}return P}let b=ht[E];return b?b(A,S,V):A[E]}o(hu,"getAttributeValue");function pu(V,E,S,A,b){let I=b?.length,P={transaction:A,lazy:I>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},L;function D(H,C){let x=H?.value;if(!x)return qa.SKIP;for(let z=0;z<I;z++)if(!L?.includes(z)&&!b[z](x,H))return qa.SKIP;return C!==void 0&&(H.key=C),H}if(o(D,"processEntry"),I>0||!V.hasEntries){let H=V.map(C=>{if(L=null,typeof C=="object"&&C?.key!==void 0)return I>0?D(C):C;if(C==null)return qa.SKIP;for(let x=0;x<I;x++){let ne=b[x].idFilter;if(ne){if(!ne(C))return qa.SKIP;L||(L=[]),L.push(x)}}return Ea(C,S,P,!1,D)});return Array.isArray(V)&&(H=H.filter(C=>C!==qa.SKIP)),H.hasEntries=!0,H}return V}o(pu,"transformToEntries");function ga(V,E,S=server.replication?.getThisNodeId(l)){if(V<=E?.version){if(E?.version===V&&S!==void 0){let A=server.replication?.exportIdMapping(l),b=E.localTime,I=b&&l.get(b);if(I){let P,L,D=Nt(I);for(let H in A)A[H]===S&&(P=H),A[H]===D.nodeId&&(L=H);if(P>L)return 1;if(P===L)return 0}}return-1}return 1}o(ga,"precedesExistingVersion");async function OE(V,E,S){let A=E?.metadataFlags,b=E?.version,I,P;if(!i.attemptLock(V,b,()=>{clearTimeout(P);let C=i.getEntry(V);!C||!C.value||C.metadataFlags&(In|Xc)?I(OE(V,i.getEntry(V),S)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(V,b)},qse)});let L=E?.value,D={requestContext:S,replacingRecord:L,replacingEntry:E,replacingVersion:b,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},H=S?.responseHeaders;return new Promise((C,x)=>{let z;Cs(Ft(D,async ne=>{let re=performance.now(),B,de,he;try{B=await wE(V,D,E),he=A&In;let ee=D.lastModified||he&&b;ee||(ee=(0,dh.getNextMonotonicTime)()),de=he||ee>b||!L;let j=performance.now()-re;if(it(j,"cache-resolution",s,null,"success"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),ne.timestamp=ee,p&&D.expiresAt==null&&(D.expiresAt=Date.now()+p),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ee=b;else throw new ot.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==V&&(B[t]=V)}z=!0,C({key:V,version:ee,value:B})}catch(ee){ee.message+=` while resolving record ${V} for ${s}`,L&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(C({key:V,version:b,value:L}),ve.default.trace?.(ee.message,"(returned stale record)")):x(ee);let j=performance.now()-re;it(j,"cache-resolution",s,null,"fail"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Lr(D).addWrite({key:V,store:i,entry:E,nodeName:"source",before:Ra(B),commit:o((ee,j)=>{if(j?.version!==b)return;let pe=po(V,L,B);if(B){De.put?.(D,V,B),j&&(S.previousResidency=Ce.getResidencyRecord(j.residencyId));let Te,fe=!1,We,St=Dc(Ce.getResidency(B,S));if(St){if(!St.includes(server.hostname))if(Te=B,fe=!0,Ce.getResidencyById)B=void 0;else{B=null;for(let ft in r)B||(B={}),B[ft]=Te[ft]}We=Mc(St)}ve.default.trace?.(`Writing resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),y(V,B,j,ee,fe?In:0,g&&(de||fe)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:We},"put",!!he,Te)}else j&&(De.delete?.(D,V),ve.default.trace?.(`Deleting resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),g||R?y(V,null,j,ee,0,g&&de||null,{user:D?.user},"delete",!!he):Jc(i,j,b))},"commit")})}),()=>{i.unlock(V,b)},ne=>{i.unlock(V,b),z&&ve.default.error?.("Error committing cache update",ne)})})}o(OE,"getFromSource");function Sa(V){if(!V||V.user?.role?.permission?.super_user)return!0;if(V.replicateTo)throw new ot.ClientError("Can not specify replication parameters without super user permissions",403);if(V.replicatedConfirmation)throw new ot.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Sa,"checkContextPermissions");function Ta(V){let E=!1;if(V&&(V-Ye>1&&(E=!0),Ye=V),!(dt===qn&&!E)&&(qn=dt,(0,yl.getWorkerIndex)()===(0,yl.getWorkerCount)()-1))return rt&&clearTimeout(rt),dt?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let b=dt/(1+Ye),I=E?Date.now():Math.ceil((Date.now()-A.getTime())/b)*b+A.getTime(),P=o(L=>{ve.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),rt=setTimeout(()=>Z=Z.then(async()=>{if(P(Math.max(L+dt,Date.now())),i.rootStore.status!=="open"){clearTimeout(rt);return}let D=50,H=new Array(D),C=0,x=Math.pow(Ye,8)*(Al.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),z=_/Math.pow(Math.max(Ye,1),4);ve.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${z}ms`);function ne(re,B,de,he){let Se=re+z-Date.now();if(Se<0)return!0;if(Ye){let ee=i.lastSize;return de&$r&&Gc(he,j=>{j.size&&(ee+=j.size)}),ve.default.trace?.(`shouldEvict adjusted ${Se} ${ee}, ${Se*(re-B)/ee} < ${x}`),Se*(re-B)/ee<x}return!1}o(ne,"shouldEvict");try{let re=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:de,value:he,version:Se,expiresAt:ee,metadataFlags:j}=B,pe;he===null&&!g&&Se+Gse<Date.now()?pe=Jc(i,B,Se):ee!=null&&ne(ee,Se,j,he)&&(pe=Ce.evict(de,he,Se),re++),pe&&(await H[C],H[C]=pe.catch(Te=>{ve.default.error?.("Cleanup error",Te)}),++C>=D&&(C=0)),await Ga()}ve.default.info?.(`Finished cleanup scan for ${s}, evicted ${re} entries`)}catch(re){ve.default.warn?.(`Error in cleanup scan for ${s}:`,re)}S(void 0),Ye=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");P(I)}):void 0}o(Ta,"scheduleCleanup");function Hf(){$=l?.addDeleteRemovalCallback(n,i,(V,E)=>{i.remove(V,E)})}o(Hf,"addDeleteRemoval");function Eu(){(0,yl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Pc){Pc=!0;try{let V=K.name,E=r[V];if(!E)throw new Error(`expiresAt attribute ${K} must be indexed`);for(let S of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let A of E.getValues(S)){let b=i.getEntry(A);b?.value?b.value[V]<Date.now()&&Ce.evict(A,b.value,b.version):i.ifVersion(A,b?.version,()=>E.remove(S,A))}await Ga()}}catch(V){ve.default.error?.("Error in evicting old records",V)}finally{Pc=!1}}},kse).unref()}o(Eu,"runRecordExpirationEviction");function Dc(V){if(V!=null){if(Array.isArray(V))return V;if(typeof V=="number"){if(V>=65536)throw new Error(`Shard id ${V} must be below 65536`);let E=server.shards?.get?.(V);if(E)return ve.default.trace?.(`Shard ${V} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${V} is not defined`)}throw new Error(`Shard or residency list ${V} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Dc,"residencyFromFunction");function Mc(V){if(V){let E=V.join(","),S=d.get([Symbol.for("residency_by_set"),E]);return S||(d.put([Symbol.for("residency_by_set"),E],S=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),S],V),S)}}o(Mc,"getResidencyId");function Ra(V,E){let S=OA(V,i.rootStore);if(S){let A=E;return A?async()=>{await A(),await S()}:()=>S()}return E}o(Ra,"preCommitBlobsForRecordBefore")}function _N(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 ik(){}function Pg(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 Cg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Cg(+e);case"Float":return e==="null"?null:Cg(+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;Yse.test(e)||(e+="Z");let n=new Date(e);return Cg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Lg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Cg(e){if(isNaN(e))throw new SyntaxError;return e}function ok(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 Cs(e,t,r){return e?.then?e.then(t,r):t(e)}function ak(e){return e!=null}function Ps(e){try{return JSON.stringify(e)}catch{return e}}function Wse(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var qa,dh,ck,lk,Al,ot,fh,mh,ve,bl,yl,Lg,gN,Bse,Fse,Hse,kse,Gse,tk,qse,rk,$se,In,Xc,Vse,nk,sk,Kse,KLe,Yse,Ga,w_=ce(()=>{k();qa=require("lmdb"),dh=w(yn()),ck=w(require("lodash")),lk=w(em());Pa();rm();Al=w(oe());tb();ot=w(ge()),fh=w(Co()),mh=w(oi());Me();N_();ve=w(ei());hI();Bc();bl=require("ordered-binary"),yl=w(nt());Li();Lg=w(ie());zc();Wi();zE();uh();gN=w(require("node:fs"));Kn();u_();EN();({sortBy:Bse}=ck.default),{validateAttribute:Fse}=lk.default,Hse=new Uint8Array(9);Hse[8]=192;kse=6e4,Gse=864e5;Al.initSync();tk=Al.get(U.STORAGE_PREFETCHWRITES),qse=1e4,rk=1,$se=2,In=1,Xc=8,Vse=Buffer.allocUnsafeSlow(8192),nk=1978,sk=100,Kse={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},KLe=(0,Lg.convertToMS)(Al.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Dg,"makeTable");o(_N,"attributesAsObject");o(ik,"noop");Yse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Pg,"coerceType");o(Cg,"rejectNaN");o(ok,"isDescendantId");Ga=o(()=>new Promise(setImmediate),"rest");o(Cs,"when");o(ak,"exists");o(Ps,"stringify");o(Wse,"hasOtherProcesses")});function Mg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function vg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var dk=ce(()=>{o(Mg,"euclideanDistance");o(vg,"cosineDistance")});var fk,mk,nd,zi,rd,zse,jse,Ug,hk=ce(()=>{dk();fk=require("msgpackr"),mk=w(ei()),nd=w(ge()),zi=(0,mk.loggerWithTag)("HNSW"),rd=Symbol.for("entryPoint"),zse=Symbol.for("key"),jse=10,Ug=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=fk.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Mg:vg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[zse,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(rd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let _=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:_,primaryKey:t};for(let R=0;R<=_;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(rd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),jse),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(rd,i)}for(;h>m;){let _=this.searchLayer(r,l,f,this.efConstruction,h);_.length>0&&(l=_[0].id,f=_[0].node),h--}let p=new Array(m+1);for(let _=0;_<=m;_++)p[_]=[];for(let _=Math.min(m,h);_>=0;_--){let g=this.searchLayer(r,l,f,this.efConstruction,_);g=g.slice(0,this.M<<1),g.length===0&&_===0&&zi.info?.("should not have zero connections for",l);let R=p[_];for(let T=0;T<g.length;T++){let{id:y,distance:N,node:O}=g[T];if(y===i)continue;let F=[];if(this.optimizeRouting){let Y=!1,K=O[_],$=1+this.optimizeRouting*(1+.5*T/this.M);for(let le=0;le<K.length;le++){let{id:ue,distance:se}=K[le],me=1+this.optimizeRouting*(1+.5*le/this.M);for(let Pe=0;Pe<R.length;Pe++){let{id:De,distance:dt}=R[Pe];if(De===ue){N*$>dt+se?Y=!0:se*me>N+dt&&(F.push({fromId:De,toId:y}),F.push({fromId:y,toId:De}));break}}if(Y)break}if(Y)continue}else if(T>=(_>0?this.M:this.M<<1))continue;R.push({id:y,distance:N});for(let{fromId:Y,toId:K}of F){let $=d(Y);$||($=d(Y,this.indexStore.get(Y)));for(let le=0;le<$[_].length;le++)if($[_][le].id===K){Object.isFrozen($[_])&&($[_]=$[_].slice()),$[_].splice(le,1);break}}let Z=c[_],G=Z?.find(({id:Y})=>Y===y);if(G){let Y=Z?.indexOf(G);Z.copied||(Z=[...Z],Z.copied=!0,c[_]=Z),Z.splice(Y,1)}else this.addConnection(y,d(y,O),i,_,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...p})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:h,value:p}of this.indexStore.getRange({start:0,end:1/0}))if(p.level>m){if(l=h,p.level===f)break;m=p.level}}if(l===void 0)this.indexStore.remove(rd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);zi.debug?.("setting entry point to",l),this.indexStore.put(rd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:h}of m){let p=d(h,this.indexStore.get(h));for(let _=0;_<=f;_++)p[_]=p[_]?.filter(({id:g})=>g!==i),p[_].length===0&&(zi.info?.("node was left orphaned, will reindex",h),u.set(p.primaryKey,p.vector))}}function d(f,m){let h=a.get(f);return!h&&m&&(h={...m},a.set(f,h)),h}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(rd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((h,p)=>h.distance-p.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:h}of m[i]||[]){if(c.has(h)||h===void 0)continue;c.add(h);let p=this.indexStore.get(h);if(!p)continue;this.nodesVisitedCount++;let _=a(t,p.vector);if(_<f||u.length<s){let g={id:h,distance:_,node:p};l.push(g),u.push(g)}}u.sort((h,p)=>h.distance-p.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new nd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new nd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=vg;else if(s==="euclidean")c=Mg;else{if(s)throw new nd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new nd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new nd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){zi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||zi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){zi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&zi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?zi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Mg:vg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var SN,pk=ce(()=>{hk();SN={HNSW:Ug}});var Et={};we(Et,{database:()=>Wu,databaseEnvs:()=>Uo,databases:()=>He,dropDatabase:()=>SI,dropTableMeta:()=>eie,getDatabases:()=>st,getDefaultCompression:()=>Gg,getTables:()=>Qse,onRemovedDB:()=>Sh,onUpdatedTable:()=>Il,readMetaDb:()=>hh,resetDatabases:()=>ld,table:()=>ze,tables:()=>ln});function Qse(){return Hg||st(),ln||{}}function st(){if(Hg)return He;Hg=!0,od=new Map;let e=(0,Yt.getHdbBasePath)()&&(0,Gt.join)((0,Yt.getHdbBasePath)(),Uc),t=(0,Yt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Yt.get)(U.STORAGE_PATH)||e&&((0,ns.existsSync)(e)?e:(0,Gt.join)((0,Yt.getHdbBasePath)(),vE)),!e)return;if((0,ns.existsSync)(e))for(let n of(0,ns.readdirSync)(e,{withFileTypes:!0})){let s=(0,Gt.basename)(n.name,".mdb");n.isFile()&&(0,Gt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&hh((0,Gt.join)(e,n.name),null,s)}if((0,ns.existsSync)((0,id.getBaseSchemaPath)())){for(let n of(0,ns.readdirSync)((0,id.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Gt.join)((0,id.getBaseSchemaPath)(),n.name),i=(0,Gt.join)((0,id.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ns.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Gt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Gt.join)(i,a.name);hh((0,Gt.join)(s,a.name),(0,Gt.basename)(a.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,Gt.extname)(c.name).toLowerCase()===".mdb"&&hh((0,Gt.join)(i,c.name),(0,Gt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Gt.join)(l.path,(0,Gt.basename)(c+".mdb"));(0,ns.existsSync)(u)&&hh(u,c,n,null,!0)}}for(let n in He){let s=od.get(n);if(s){let i=He[n];n.includes("delete")&&br.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(br.trace(`delete table class ${a}`),delete i[a])}else if(delete He[n],n==="data"){for(let i in ln)delete ln[i];delete ln[kg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,Yt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(He.system?.hdb_analytics?.enableAuditing(),He.system?.hdb_analytics_hostname?.enableAuditing()),He.system)for(let n of r)He.system[n]&&(He.system[n].replicate=!1);return od=null,He}function ld(){Hg=!1;for(let[,e]of Uo)e.needsDeletion=!0;st();for(let[e,t]of Uo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Uo.delete(e);let r=He[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete He[t.databaseName],Eh.forEach(i=>i(t.databaseName));break}}return He}function hh(e,t,r=yN,n,s){let i=new TN.default(e,!1);try{let a=Uo.get(e);a?a.needsDeletion=!1:(a=(0,ad.open)(i),Uo.set(e,a));let c=new cd.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(xg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ns.existsSync)(n)&&(i.path=n,u=(0,ad.open)(i),u.isLegacy=!0):u=m_(a));let d=Tk(r),f=d[kg],m=new Map;for(let{key:h,value:p}of l.getRange({start:!1})){let[_,g]=h.toString().split("/");g===""?g=p.name:g||(g=_,_=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),f?.add(_);let R=m.get(_);R||m.set(_,R={attributes:[]}),(g==null||p.is_hash_attribute)&&(R.primary=p),g!=null&&R.attributes.push(p),Object.defineProperty(p,"key",{value:h,configurable:!0})}for(let[h,p]of m){let{attributes:_,primary:g}=p;if(!g){for(let se of _)if(se.is_hash_attribute||se.isPrimaryKey){g=se;break}if(!g){br.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let R=d[h],T={},y=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Yt.get)(U.LOGGING_AUDITLOG),Z=g.trackDeletes,G=g.expiration,Y=g.eviction,K=g.sealed,$=g.splitSegments,le=g.replicate;if(R)T=R.indices,y=R.attributes,R.schemaVersion++;else{N=g.tableId,N?N>=(l.get(sd)||0)&&(l.putSync(sd,N+1),br.info(`Updating next table id (it was out of sync) to ${N+1} for ${h}`)):(g.tableId=N=l.get(sd),N||(N=1),br.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(sd,N+1),l.putSync(g.key,g));let se=new cd.default(!g.is_hash_attribute,g.is_hash_attribute);if(se.compression=g.compression,se.compression){let me=(0,Yt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Sk;se.compression.threshold=me}O=y_(a.openDB(g.key,se),a),a.databaseName=r,O.tableId=N}let ue;for(let se of _){se.attribute=se.name;try{if(!se.is_hash_attribute&&(se.indexed||se.attribute&&!se.name)){if(!T[se.name]){let Pe=yk(se.key,a,se);T[se.name]=Pe,T[se.name].indexNulls=se.indexNulls}let me=y.find(Pe=>Pe.name===se.name);me?y.splice(y.indexOf(me),1,se):y.push(se),ue=!0}}catch(me){br.error("Error trying to update attribute",se,y,T,me)}}for(let se of y)if(!_.find(Pe=>Pe.name===se.name)){if(se.is_hash_attribute){br.error("Unable to remove existing primary key attribute",se);continue}se.indexed&&(y.splice(y.indexOf(se),1),ue=!0)}if(R)ue&&(R.schemaVersion++,R.updatedAttributes());else{R=Rk(d,h,Dg({primaryStore:O,auditStore:u,audit:F,sealed:K,splitSegments:$,replicate:le,expirationMS:G&&G*1e3,evictionMS:Y&&Y*1e3,trackDeletes:Z,tableName:h,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let se of ph)se(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function Tk(e){let t=He[e];if(t||(e==="data"?t=He[e]=ln:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),od&&!od.has(e)){let r=new Set;t[kg]=r,od.set(e,r)}return t}function Rk(e,t,r){return e[t]=r,r}function Wu({database:e,table:t}){e||(e=yN),st();let r=Tk(e),n=(0,Gt.join)((0,Yt.getHdbBasePath)(),Uc),s=(0,Yt.get)(U.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Yt.get)(U.STORAGE_PATH)||((0,ns.existsSync)(n)?n:(0,Gt.join)((0,Yt.getHdbBasePath)(),vE));let a=(0,Gt.join)(n,(i?t:e)+".mdb"),c=Uo.get(a);if(!c||c.status==="closed"){let l=new TN.default(a,!1);c=(0,ad.open)(l),Uo.set(a,c)}return c.auditStore||(c.auditStore=m_(c)),c}async function SI(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Uo.delete(r.path),r.status==="open"&&(await r.close(),await _h.remove(r.path));if(r||(r=Wu({database:e,table:null}),r.status==="open"&&(await r.close(),await _h.remove(r.path))),e==="data"){for(let n in ln)delete ln[n];delete ln[kg]}delete He[e],Eh.forEach(n=>n(e)),await wA(r)}function yk(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&SN[r.indexed.type]?.useObjectStore,s=new cd.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=SN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):br.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:h}=e;r||(r=yN);let p=Wu({database:r,table:t}),_=He[r];br.trace(`Defining ${t} in ${r}`);let g=_?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,T,y;m==null&&(m=!0);let N=new cd.default(!1);for(let $ of a)$.attribute&&!$.name?($.name=$.attribute,$.indexed=!0):$.attribute=$.name,$.expiresAt&&($.indexed=!0);let O,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,...a)}else{let $=p.auditStore;T=a.find(me=>me.isPrimaryKey)||{},R=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Gg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,Yt.get)(U.LOGGING_AUDITLOG),n&&(T.expiration=n),s&&(T.eviction=s),u??=!1,T.splitSegments=u,typeof l=="boolean"&&(T.sealed=l),typeof d=="boolean"&&(T.replicate=d),h&&(T.origins?T.origins.includes(h)||T.origins.push(h):T.origins=[h]),br.trace(`${t} table loading, opening primary store`);let le=new cd.default(!1,!0);le.compression=T.compression;let ue=t+"/";if(y=p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N),K(),y.get(ue))return F&&F(),ld(),ze(e);let se=y_(p.openDB(ue,le),p);p.databaseName=r,se.tableId=y.get(sd),br.trace(`Assigning new table id ${se.tableId} for ${t}`),se.tableId||(se.tableId=1),y.put(sd,se.tableId+1),T.tableId=se.tableId,g=Rk(_,t,Dg({primaryStore:se,auditStore:$,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:se.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,O=!0,y.put(ue,T)}let Z=g.indices;y=y||(p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N)),g.dbisDB=y;let G=[];for(let{key:$,value:le}of y.getRange({start:!0})){let[ue,se]=$.toString().split("/");if(se===""&&(se=le.name),se){if(ue!==t)continue}else continue;let me=a.find(De=>De.name===se),Pe=!me?.indexed&&le.indexed&&!le.isPrimaryKey;if((!me||Pe)&&(K(),O=!0,me||y.remove($),Pe)){let De=g.indices[ue];De&&G.push(De)}}let Y=[];try{for(let $ of a||[]){if(($.relationship||$.computed)&&(O=!0,$.relationship))continue;let le=t+"/"+($.name||"");Object.defineProperty($,"key",{value:le,configurable:!0});let ue=y.get(le);if($.isPrimaryKey){if(ue=ue||y.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ue.expiration||void 0)||(+s||void 0)!==(+ue.eviction||void 0)||$.type!==ue.type){let me={...ue};typeof c=="boolean"&&(c&&g.enableAuditing(c),me.audit=c),n&&(me.expiration=+n),s&&(me.eviction=+s),l!==void 0&&(me.sealed=l),d!==void 0&&(me.replicate=d),$.type&&(me.type=$.type),O=!0,K(),y.put(le,me)}continue}ue?.attribute&&!ue.name&&(ue.indexed=!0);let se=!ue||ue.type!==$.type||JSON.stringify(ue.indexed)!==JSON.stringify($.indexed)||ue.nullable!==$.nullable||ue.version!==$.version||JSON.stringify(ue.properties)!==JSON.stringify($.properties)||JSON.stringify(ue.elements)!==JSON.stringify($.elements);if($.indexed){let me=yk(le,p,$);(se||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<gh.workerData?.restartNumber)&&(O=!0,K(),ue=y.get(le),(se||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<gh.workerData?.restartNumber)&&(O=!0,$.indexNulls===void 0&&($.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&($.lastIndexedKey=ue?.lastIndexedKey??void 0,$.indexingPID=process.pid,me.isIndexing=!0,Object.defineProperty($,"dbi",{value:me}),Y.push($))),y.put(le,$)),ue?.indexNulls&&$.indexNulls===void 0&&($.indexNulls=!0),me.indexNulls=$.indexNulls,Z[$.name]=me}else se&&(O=!0,K(),y.put(le,$))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),br.trace(`${t} table loading, running index`),Y.length>0||G.length>0?g.indexingOperation=Zse(g,Y,G):O&&Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,O)for(let $ of ph)$(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),br.trace(`${t} table loaded`),g;function K(){F||p.transactionSync(()=>({then($){F=$}}))}o(K,"startTxn")}async function Zse(e,t,r){try{br.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,ad.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:h}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,h,()=>{for(let p=0;p<l;p++){let _=t[p],g=_.name,R=_.dbi;try{let T=_.resolve,y=m&&(T?T(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let N=(0,Ek.getIndexedValues)(y);if(N)for(let O=0,F=N.length;O<F;O++)R.put(N[O],f)}catch(T){a[g]||(a[g]=!0,br.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,br.error(p)}),gh.workerData&&gh.workerData.restartNumber!==gk.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=f,e.dbisDB.put(p.key,p);if(i)return}d>Jse?await s:d>Xse&&await new Promise(p=>setImmediate(p))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),br.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){br.error("Error in indexing",n)}}function eie({table:e,database:t}){let r=Wu({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 ph.push(e),{remove(){let t=ph.indexOf(e);t>-1&&ph.splice(t,1)}}}function Sh(e){return Eh.push(e),{remove(){let t=Eh.indexOf(e);t>-1&&Eh.splice(t,1)}}}function Gg(){let e=(0,Yt.get)(U.STORAGE_COMPRESSION),t=(0,Yt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Yt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Sk,n={startingOffset:32};return t&&(n.dictionary=_h.readFileSync(t)),r&&(n.threshold=r),e&&n}var Yt,xg,ad,Gt,ns,id,cd,TN,_h,RN,Ek,Bg,Fg,gh,_k,gk,br,yN,kg,Sk,ln,He,sd,ph,Eh,Hg,Uo,od,Jse,Xse,Me=ce(()=>{Yt=w(oe()),xg=w(Vt()),ad=require("lmdb"),Gt=require("path"),ns=require("fs"),id=w(It());w_();cd=w(Im()),TN=w(Nm());k();_h=w(require("fs-extra")),RN=w(Xs()),Ek=w(yn()),Bg=w(Co()),Fg=w(oi()),gh=require("worker_threads"),_k=w(Q()),gk=w(nt());Li();zc();Kn();pk();br=(0,_k.forComponent)("storage"),yN="data",kg=Symbol("defined-tables"),Sk=((0,Yt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Yt.initSync)();ln=Object.create(null),He=Object.create(null);(0,RN._assignPackageExport)("databases",He);(0,RN._assignPackageExport)("tables",ln);sd=Symbol.for("next-table-id"),ph=[],Eh=[],Uo=new Map;o(Qse,"getTables");o(st,"getDatabases");o(ld,"resetDatabases");o(hh,"readMetaDb");o(Tk,"ensureDB");o(Rk,"setTable");o(Wu,"database");o(SI,"dropDatabase");o(yk,"openIndex");o(ze,"table");Jse=1e3,Xse=10;o(Zse,"runIndexing");o(eie,"dropTableMeta");o(Il,"onUpdatedTable");o(Sh,"onRemovedDB");o(Gg,"getDefaultCompression")});var ie=M(be=>{"use strict";var $a=require("path"),wk=require("fs-extra"),vn=Q(),Ak=require("fs-extra"),qg=require("os"),tie=require("net"),rie=require("recursive-iterator"),Ir=(k(),v(W)),{PACKAGE_ROOT:nie}=bt(),sie=tA(),bk=require("papaparse"),$g=require("moment"),{inspect:iie}=require("util"),Ik=require("is-number"),oie=require("minimist"),aie=require("https"),cie=require("http"),lie=/^((\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)))$/,Ok=require("util").promisify(setTimeout),uie=100,die=5,fie="",mie=4,Nk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=ss;be.isEmptyOrZeroLength=ji;be.arrayHasEmptyValues=Eie;be.arrayHasEmptyOrZeroLengthValues=_ie;be.buildFolderPath=gie;be.isBoolean=Ck;be.errorizeMessage=hie;be.stripFileExtension=Tie;be.autoCast=Rie;be.autoCastJSON=Pk;be.autoCastJSONDeep=bN;be.removeDir=yie;be.compareVersions=Aie;be.isCompatibleDataVersion=bie;be.escapeRawValue=Iie;be.unescapeValue=Nie;be.stringifyProps=wie;be.timeoutPromise=Cie;be.isClusterOperation=Lie;be.getClusterUser=Mie;be.checkGlobalSchemaTable=Die;be.getHomeDir=Dk;be.getPropsFilePath=Oie;be.promisifyPapaParse=vie;be.removeBOM=Mk;be.createEventPromise=Uie;be.checkProcessRunning=xie;be.checkSchemaTableExist=Bie;be.checkSchemaExists=vk;be.checkTableExists=Uk;be.getStartOfTomorrowInSeconds=Fie;be.getLimitKey=Hie;be.isObject=Sie;be.isNotEmptyAndHasValue=pie;be.autoCasterIsNumberCheck=Lk;be.backtickASTSchemaItems=kie;be.isPortTaken=Pie;be.createForkArgs=Gie;be.autoCastBoolean=qie;be.asyncSetTimeout=Ok;be.getTableHashAttribute=$ie;be.doesSchemaExist=Vie;be.doesTableExist=Kie;be.stringifyObj=Yie;be.ms_to_time=Wie;be.changeExtension=zie;be.getEnvCliRootPath=IN;be.noBootFile=jie;be.httpRequest=Qie;be.transformReq=Jie;be.convertToMS=Xie;be.PACKAGE_ROOT=nie;function hie(e){return e instanceof Error?e:new Error(e)}o(hie,"errorizeMessage");function ss(e){return e==null}o(ss,"isEmpty");function pie(e){return!ss(e)&&(e||e===0||e===""||Ck(e))}o(pie,"isNotEmptyAndHasValue");function ji(e){return ss(e)||e.length===0||e.size===0}o(ji,"isEmptyOrZeroLength");function Eie(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}o(Eie,"arrayHasEmptyValues");function _ie(e){if(ji(e))return!0;for(let t=0;t<e.length;t++)if(ji(e[t]))return!0;return!1}o(_ie,"arrayHasEmptyOrZeroLengthValues");function gie(...e){try{return e.join($a.sep)}catch{console.error(e)}}o(gie,"buildFolderPath");function Ck(e){return ss(e)?!1:e===!0||e===!1}o(Ck,"isBoolean");function Sie(e){return ss(e)?!1:typeof e=="object"}o(Sie,"isObject");function Tie(e){return ji(e)?fie:e.slice(0,-mie)}o(Tie,"stripFileExtension");function Rie(e){return ss(e)||e===""||typeof e!="string"?e:Nk[e]!==void 0?Nk[e]:Lk(e)===!0?Number(e):lie.test(e)?new Date(e):e}o(Rie,"autoCast");function Pk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Pk,"autoCastJSON");function bN(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=bN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=bN(r);n!==r&&(e[t]=n)}return e}else return Pk(e)}o(bN,"autoCastJSONDeep");function Lk(e){if(e.startsWith("0.")&&Ik(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ik(e))}o(Lk,"autoCasterIsNumberCheck");async function yie(e){if(ji(e))throw new Error(`Directory path: ${e} does not exist`);try{await Ak.emptyDir(e),await Ak.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}o(yie,"removeDir");function Aie(e,t){if(ji(e)){vn.info("Invalid current version sent as parameter.");return}if(ji(t)){vn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(Aie,"compareVersions");function bie(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(bie,"isCompatibleDataVersion");function Iie(e){if(ss(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}o(Iie,"escapeRawValue");function Nie(e){if(ss(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Nie,"unescapeValue");function wie(e,t){if(ss(e))return vn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+qg.EOL}!ji(n)&&n[0]===";"?r+=" "+n+s+qg.EOL:ji(n)||(r+=n+"="+s+qg.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(wie,"stringifyProps");function Dk(){let e;try{e=qg.homedir()}catch{e=process.env.HOME}return e}o(Dk,"getHomeDir");function Oie(){let e=$a.join(Dk(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return wk.existsSync(e)||(e=$a.join(__dirname,"../","hdb_boot_properties.file")),e}o(Oie,"getPropsFilePath");function Cie(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Cie,"timeoutPromise");async function Pie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=tie.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(Pie,"isPortTaken");function Lie(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(Lie,"isClusterOperation");function Die(e,t){let r=(Me(),v(Et)).getDatabases();if(!r[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Die,"checkGlobalSchemaTable");function Mie(e,t){if(ss(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ss(e)||ji(e)){vn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(Mie,"getClusterUser");function vie(){bk.parsePromise=function(e,t,r){return new Promise(function(n,s){bk.parse(e,{header:!0,transformHeader:Mk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(vie,"promisifyPapaParse");function Mk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Mk,"removeBOM");function Uie(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${iie(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}o(Uie,"createEventPromise");async function xie(e){let t=!0,r=0;do await Ok(uie*r++),(await sie.findPs(e)).length>0&&(t=!1);while(t&&r<die);if(t)throw new Error(`process ${e} was not started`)}o(xie,"checkProcessRunning");function Bie(e,t){let r=vk(e);if(r)return r;let n=Uk(e,t);if(n)return n}o(Bie,"checkSchemaTableExist");function vk(e){let{getDatabases:t}=(Me(),v(Et));if(!t()[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(vk,"checkSchemaExists");function Uk(e,t){let{getDatabases:r}=(Me(),v(Et));if(!r()[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Uk,"checkTableExists");function Fie(){let e=$g().utc().add(1,"d").startOf("d").unix(),t=$g().utc().unix();return e-t}o(Fie,"getStartOfTomorrowInSeconds");function Hie(){return $g().utc().format("DD-MM-YYYY")}o(Hie,"getLimitKey");function kie(e){try{let t=new rie(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){vn.error("Got an error back ticking items."),vn.error(t)}}o(kie,"backtickASTSchemaItems");function Gie(e){return[e]}o(Gie,"createForkArgs");function qie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(qie,"autoCastBoolean");function $ie(e,t){let{getDatabases:r}=(Me(),v(Et)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o($ie,"getTableHashAttribute");function Vie(e){let{getDatabases:t}=(Me(),v(Et));return t()[e]!==void 0}o(Vie,"doesSchemaExist");function Kie(e,t){let{getDatabases:r}=(Me(),v(Et));return r()[e]?.[t]!==void 0}o(Kie,"doesTableExist");function Yie(e){try{return JSON.stringify(e)}catch{return e}}o(Yie,"stringifyObj");function Wie(e){let t=$g.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(Wie,"ms_to_time");function zie(e,t){let r=$a.basename(e,$a.extname(e));return $a.join($a.dirname(e),r+t)}o(zie,"changeExtension");function IN(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=oie(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(IN,"getEnvCliRootPath");var AN;function jie(){if(AN)return AN;let e=IN();if(IN()&&wk.pathExistsSync($a.join(e,Ir.HDB_CONFIG_FILE)))return AN=!0,!0}o(jie,"noBootFile");function Qie(e,t){let r;return e.protocol==="http:"?r=cie:r=aie,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(Qie,"httpRequest");function Jie(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Jie,"transformReq");function Xie(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(Xie,"convertToMS");var Vg=tn()});var Gk=M((mDe,kk)=>{"use strict";var{promises:ud,createReadStream:Zie,createWriteStream:eoe}=require("fs"),{createGzip:toe}=require("zlib"),{promisify:roe}=require("util"),{pipeline:noe}=require("stream"),soe=roe(noe),wN=require("path"),Hk=oe();Hk.initSync();var Kg=Q(),{CONFIG_PARAMS:ioe,ITC_EVENT_TYPES:dDe}=(k(),v(W)),{onMessageFromWorkers:fDe}=nt(),{convertToMS:xk}=ie(),{onStorageReclamation:ooe}=(u_(),v(Bv)),aoe=6e4,coe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",loe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",NN,Bk;kk.exports=uoe;function uoe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(ooe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(coe);if(!i)throw new Error(loe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=xk(r));let d;return NN=Date.now(),Kg.trace("Log rotate enabled, maxSize:",t,"interval:",r),Bk=setInterval(async()=>{if(l){let f;f=await ud.stat(e.path),f.size>=l&&(d=await Fk(e.path,i))}if(u&&Date.now()-NN>=u&&(d=await Fk(e.path,i),NN=Date.now()),n||c){let f=xk(n??"1M")/(1+c);c=0;let m=await ud.readdir(i);for(let h of m)try{let p=await ud.stat(wN.join(i,h));Date.now()-p.mtimeMs>f&&await ud.unlink(wN.join(i,h))}catch(p){Kg.error("Error trying to remove log",h,p)}}},a??aoe).unref(),{end(){clearInterval(Bk)},getLastRotatedLogPath(){return d}}}o(uoe,"logRotator");async function Fk(e,t){let r=Hk.get(ioe.LOGGING_ROTATION_COMPRESS),n=wN.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await ud.rename(e,n),r&&(e=n,n+=".gz",await soe(Zie(e),toe(),eoe(n)),await ud.unlink(e)),Kg.closeLogFile(),Kg.notify(`hdb.log rotated, old log moved to ${n}`),n}o(Fk,"moveLogFile")});var Yk={};we(Yk,{RootConfigWatcher:()=>ON});var qk,$k,Vk,Yg,Kk,ON,Wk=ce(()=>{qk=w(require("chokidar")),$k=require("node:fs/promises"),Vk=w(wt()),Yg=require("node:stream"),Kk=require("yaml"),ON=class extends Yg.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;constructor(){super(),this.#e=(0,Vk.getConfigFilePath)(),this.#t=qk.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,$k.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,Kk.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}ready(){return(0,Yg.once)(this,"ready")}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((gDe,eS)=>{"use strict";var xo=require("fs-extra"),{workerData:doe,threadId:foe,isMainThread:eG}=require("worker_threads"),yh=require("path"),tG=require("yaml"),rG=require("properties-reader"),Fr=(k(),v(W)),zk=xc(),moe=require("os"),{PACKAGE_ROOT:UN}=bt(),{_assignPackageExport:hoe}=Xs(),{Console:poe}=require("console"),jk=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),Qk=new Map,{join:Bo}=yh,Jk=1e4,tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Eoe={STDOUT:"stdOut",STDERR:"stdErr"},_De=Bo(UN,"logs"),_oe=Bo(UN,"config/yaml/",Fr.HDB_DEFAULT_CONFIG_FILE),goe=1e4,Ah,bh,Wg,Qi,PN,CN,jg,Pt,Un,Qg,Jg,dd,Rh,Th;function zg(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=yh.dirname(n)):t.root?n=Bo(t.root,PN):(n=Pt.path,t.root||(t.root=yh.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=tr[t.level]??Pt?.level??tr.info,nG(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Pt.path===e.path&&r)}o(zg,"updateLogger");function nG(e){let t=e.conditional??(e.conditional={});t.notify=tr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=tr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=tr.error>=e.level?e.error.bind(e):void 0,t.warn=tr.warn>=e.level?e.warn.bind(e):void 0,t.info=tr.info>=e.level?e.info.bind(e):void 0,t.debug=tr.debug>=e.level?e.debug.bind(e):void 0,t.trace=tr.trace>=e.level?e.trace.bind(e):void 0}o(nG,"updateConditional");async function LN(){Th||(Th=new Boe,await Th.ready(),Th.on("change",LN));let e=Th.config,t=e.logging??{};zg(Pt,t),jg=Pt.path,Ah=t.console??!1,t.external&&zg(Un,t.external);for(let r in e){let n=e[r];n.logging?zg(Pt.forComponent(r),n.logging,r):Pt.hasComponent(r)&&zg(Pt.forComponent(r),t,r)}}o(LN,"updateLogSettings");var DN=class extends poe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){un="trace",this.level<=tr.trace&&super.info(...t),un="info"}debug(...t){un="debug",this.level<=tr.debug&&super.info(...t),un="info"}info(...t){un="info",this.level<=tr.info&&super.info(...t),un="info"}warn(...t){un="warn",this.level<=tr.warn&&super.warn(...t),un="info"}error(...t){un="error",this.level<=tr.error&&super.error(...t),un="info"}fatal(...t){dd=!0;try{un="fatal",this.level<=tr.fatal&&super.error(...t),un="info"}finally{dd=!1}}notify(...t){dd=!0;try{un="notify",this.level<=tr.notify&&super.info(...t),un="info"}finally{dd=!1}}withTag(t){return iG(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};Rh===void 0&&sG();eS.exports={notify:Noe,fatal:woe,error:vN,warn:Ooe,info:Aoe,debug:Ioe,trace:boe,logLevel:Qi,loggerWithTag:iG,suppressLogging:Roe,initLogSettings:sG,logCustomLevel:Coe,closeLogFile:oG,createLogger:Zg,logsAtLevel:Soe,getLogFilePath:o(()=>jg,"getLogFilePath"),forComponent:o(e=>Pt.forComponent(e),"forComponent"),setMainLogger:Uoe,setLogLevel:Loe,OUTPUTS:Eoe,AuthAuditLog:xoe,start:LN,startOnMainThread:LN,errorToString:voe};eS.exports.externalLogger={notify(...e){Un.notify(...e)},fatal(...e){Un.fatal(...e)},error(...e){Un.error(...e)},warn(...e){Un.warn(...e)},info(...e){Un.info(...e)},debug(...e){Un.debug(...e)},trace(...e){Un.trace(...e)},withTag(e){return Un.withTag(e)},loggerWithTag(e){return Un.withTag(e)}};hoe("logger",eS.exports.externalLogger);function Soe(e){return tr[Qi]<=tr[e]}o(Soe,"logsAtLevel");function sG(e=!1){try{if(Rh===void 0||e){oG();let t=Poe(),r=zk(["ROOTPATH"]);try{Rh=rG(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!xo.pathExistsSync(Bo(r.ROOTPATH,Fr.HDB_CONFIG_FILE)))throw s}let n;if({level:Qi,configLogPath:CN,toFile:bh,logConsole:Ah,rotation:n,toStream:Wg}=Doe(r.ROOTPATH?Bo(r.ROOTPATH,Fr.HDB_CONFIG_FILE):Rh.get("settings_path")),PN=Fr.LOG_NAMES.HDB,jg=Bo(CN,PN),Pt=Zg({path:jg,level:Qi,stdStreams:Wg,rotation:n}),Un=Pt.forComponent("external"),Un.tag=null,eG)try{require("segfault-handler").registerHandler(Bo(CN,"crash.log"))}catch{}}}catch(t){if(Rh=void 0,t.code===Fr.NODE_ERROR_CODES.ENOENT||t.code===Fr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=zk(Object.keys(Fr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Fr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Fr.CONFIG_PARAMS.LOGGING_LEVEL){Qi=a;continue}i===Fr.CONFIG_PARAMS.LOGGING_CONSOLE&&(Ah=i)}let{defaultLevel:n}=Moe();bh=!1,Wg=!0,Qi=Qi===void 0?n:Qi,Pt=Zg({level:Qi}),Un=Pt.forComponent("external"),Un.tag=null;return}throw vN("Error initializing log settings"),vN(t),t}process.env.DEV_MODE&&(Wg=!0),Toe()}o(sG,"initLogSettings");var Va=!0;function Toe(){bh&&(process.stdout.write=function(e){return typeof e=="string"&&Va&&Ah&&(e=e.toString(),e[e.length-1]===`
16
+ `&&(e=e.slice(0,-1)),Jg(e)),jk.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Va&&Ah&&(e[e.length-1]===`
17
+ `&&(e=e.slice(0,-1)),Jg(e)),jk.apply(process.stderr,arguments)})}o(Toe,"stdioLogging");function iG(e,t,r=Pt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=tr[i]?function(...a){Xg=e;try{return s.call(r,...a)}finally{Xg=void 0}}:null}o(n,"logWithTag")}o(iG,"loggerWithTag");function Roe(e){try{Va=!1,e()}finally{Va=!0}}o(Roe,"suppressLogging");var yoe=doe?.name?.replace(/ /g,"-")||"main",un="info",MN,Xg;function Zg({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=tr[t],l;function u(h){if(bh)if(l.logToStdstreams){f(h.replace(/\x1b\[[0-9;]*m/g,"")),Va=!1;try{process.stdout.write(h)}finally{Va=!0}}else f(h);else r&&process.stdout.write(h)}o(u,"logStdOut");function d(h){if(bh){if(f(h),r){Va=!1;try{process.stderr.write(h)}finally{Va=!0}}}else r&&process.stderr.write(h)}o(d,"logStdErr");let f=e&&Zk(e,n,s);function m(h){return{write(p){let _=[un];_.unshift(MN||yoe+"/"+foe),Xg&&_.push(Xg),l.tag&&_.push(l.tag),h(`[${_.join("] [")}]: ${p}`)}}}if(o(m,"logPrepend"),s&&(Jg=f),l=new DN({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),nG(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(h){e=h,f=Zk(e,l.rotation,s),s&&(Jg=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let h=new Map;l.forComponent=function(p){let _=h.get(p);return _||(_=Zg({path:e,level:t,stdStreams:r,isExternalInstance:p==="external",rotation:n,writeToLog:i,component:!0}),h.set(p,_)),_},l.hasComponent=function(p){return h.has(p)}}return l}o(Zg,"createLogger");var Xk=100;function Zk(e,t,r){let n=Qk.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,Qk.set(e,n)),eG&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=Gk();try{n.rotator=p({logger:n,...t})}catch(_){n("Error initializing log rotator",_)}},100));let u=0;return n;function d(p){u++;let _=`${new Date().toISOString()} ${p}${p.endsWith(`
18
18
  `)?"":`
19
- `}`;c?(c.length<Qk?c.push(_):c.length===Qk&&c.push(`Maximum log buffer rate reached, logs will be throttled
20
- `),ud&&(clearTimeout(a),f())):ud||l<performance.now()+Jk?f(_):(l=Math.min(l,performance.now()+Jk),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();xo.appendFileSync(s,c?c.join(""):p);let g=performance.now();l=Math.max(g,l)+(g-_)*50}else i||console.log(c?c.join(""):p);c&&(c=null)}function m(){try{xo.closeSync(s)}catch{}s=null,r&&(Qg=null)}function h(p){if(!s){try{s=xo.openSync(e,"a"),r&&(Qg=s)}catch(_){if(_.code==="ENOENT"&&!p)return xo.mkdirpSync(yh.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},_oe).unref()}}}o(Xk,"getFileLogger");function yoe(...e){wt.info(...e)}o(yoe,"info");function Aoe(...e){wt.trace(...e)}o(Aoe,"trace");function vN(...e){wt.error(...e)}o(vN,"error");function boe(...e){wt.debug(...e)}o(boe,"debug");function Ioe(...e){wt.notify(...e)}o(Ioe,"notify");function Noe(...e){wt.fatal(...e)}o(Noe,"fatal");function woe(...e){wt.warn(...e)}o(woe,"warn");function Ooe(e,t,r,...n){MN=r.service_name;try{wt[e](...n)}finally{MN=void 0}}o(Ooe,"logCustomLevel");function Coe(){let e;try{e=foe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Bo(e,Hr.HDB_HOME_DIR_NAME,Hr.BOOT_PROPS_FILE_NAME);return xo.existsSync(t)||(t=Bo(UN,"utility/hdb_boot_properties.file")),t}o(Coe,"getPropsFilePath");function Poe(e){Qi=e}o(Poe,"setLogLevel");function Loe(e){try{if(e.includes("config/settings.js")){let l=tG(e);return{level:l.get(Hr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:yh.dirname(l.get(Hr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(Hr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(Hr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=eG.parseDocument(xo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===Hr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(Loe,"getLogConfig");function Doe(){try{let e=eG.parseDocument(xo.readFileSync(Eoe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(Doe,"getDefaultConfig");function Moe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(Moe,"errorToString");function voe(e){wt=e}o(voe,"setMainLogger");function iG(){try{xo.closeSync(Qg)}catch{}Qg=null}o(iG,"closeLogFile");function Uoe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(Uoe,"AuthAuditLog");var{RootConfigWatcher:xoe}=(Yk(),v(Kk))});var oe=M((lG,uG)=>{"use strict";var xN=require("fs-extra"),Il=require("path"),oG=require("os"),Boe=require("properties-reader"),Nh=Q(),Ih=ie(),Be=(k(),v(W)),tS=bt(),Foe="Error initializing environment manager",rS="BOOT_PROPS_FILE_PATH",aG=!1,Hoe={[Be.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Fo={};Object.assign(lG,uG.exports={BOOT_PROPS_FILE_PATH:rS,getHdbBasePath:koe,setHdbBasePath:Goe,get:cG,initSync:$oe,setProperty:je,initTestEnvironment:Voe});function koe(){return Fo[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(koe,"getHdbBasePath");function Goe(e){Fo[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(Goe,"setHdbBasePath");function cG(e){let t=tS.getConfigValue(e);return t===void 0?Fo[e]:t}o(cG,"get");function je(e,t){Hoe[e]&&(Fo[e]=t),tS.updateConfigObject(e,t)}o(je,"setProperty");function qoe(){let e;try{e=Ih.getPropsFilePath(),xN.accessSync(e,xN.constants.F_OK|xN.constants.R_OK),aG=!0;let t=Boe(e);return Fo[Be.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Be.HDB_SETTINGS_NAMES.INSTALL_USER),Fo[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Fo[rS]=e,!0}catch{return Nh.trace(`Environment manager found no properties file at ${e}`),!1}}o(qoe,"doesPropFileExist");function $oe(e=!1){try{(aG||qoe()||Ih.noBootFile()||e)&&(tS.initConfig(e),Fo[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tS.getConfigValue(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Nh.error(Foe),Nh.error(t),console.error(t),process.exit(1)}}o($oe,"initSync");function Voe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Il.join(__dirname,"../../","unitTests");Fo[rS]=Il.join(l,"hdb_boot_properties.file"),je(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Il.join(l,"settings.test")),je(Be.HDB_SETTINGS_NAMES.INSTALL_USER,oG.userInfo()?oG.userInfo().username:void 0),je(Be.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),je(Be.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Il.join(l,"envDir","log")),je(Be.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),je(Be.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),je(Be.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),je(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Il.join(l,"envDir")),je(Be.CONFIG_PARAMS.STORAGE_PATH,Il.join(l,"envDir")),s&&(je(Be.CONFIG_PARAMS.HTTP_SECUREPORT,cG(Be.CONFIG_PARAMS.HTTP_PORT)),je(Be.CONFIG_PARAMS.HTTP_PORT,null)),je(Be.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),je(Be.CONFIG_PARAMS.HTTP_PORT,9926),je(Be.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),je(Be.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),je(Be.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ih.isEmpty(i)?!1:i),je(Be.CONFIG_PARAMS.HTTP_CORS,Ih.isEmpty(i)?!1:i),je(Be.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),je(Be.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),je(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),je(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),je(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Il.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),je(Be.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ih.isEmpty(c)?!1:c),a&&(je("CORS_ACCESSLIST",a),je(Be.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(je(Be.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),je(Be.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(je(Be.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),je(Be.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(je(Be.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),je(Be.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rS}. Please check your boot props and settings files`;Nh.fatal(r),Nh.error(t)}}o(Voe,"initTestEnvironment")});var HN={};Oe(HN,{loadGQLSchema:()=>Woe,start:()=>FN,startOnMainThread:()=>Yoe});function FN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,h=[],p;for(let y of f.definitions)switch(y.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(G){if(G.kind==="NonNullType"){let K=F(G.type);return K.nullable=!1,K}if(G.kind==="ListType")return{type:"array",elements:F(G.type)};let q={type:G.name?.value};return Object.defineProperty(q,"location",{value:G.loc.startToken}),q};o(F,"getProperty");let T=y.name.value,R=[],N={table:null,database:null,properties:R};m.set(T,N);for(let G of y.directives){if(G.name.value==="table"){for(let q of G.arguments)N[q.name.value]=q.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,h.push(N)}if(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="splitSegments"&&(N.splitSegments=!0),G.name.value==="replicate"&&(N.replicate=!0),G.name.value==="export"){N.export=!0;for(let q of G.arguments)typeof N.export!="object"&&(N.export={}),N.export[q.name.value]=q.value.value}}let O=!1,Z={};for(let G of y.fields){let Y=F(G.type);Y.name=G.name.value,R.push(Y),Z[Y.name]=void 0;for(let q of G.directives){let K=q.name.value;if(K==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",q.loc):(Y.isPrimaryKey=!0,O=!0);else if(K==="indexed"){let ce={};for(let le of q.arguments||[])ce[le.name.value]=le.value.value;Y.indexed=ce}else if(K==="computed"){for(let ce of q.arguments||[])if(ce.name.value==="from"){let le=ce.value.value;Y.computed={from:g(le,ce,Z)},Y.version==null&&(Y.version=le)}else ce.name.value==="version"&&(Y.version=ce.value.value);Y.computed=Y.computed||!0}else if(K==="relationship"){let ce={};for(let le of q.arguments)ce[le.name.value]=le.value.value;Y.relationship=ce}else if(K==="createdTime")Y.assignCreatedTime=!0;else if(K==="updatedTime")Y.assignUpdatedTime=!0;else if(K==="expiresAt")Y.expiresAt=!0;else if(K==="allow"){let ce=Y.authorizedRoles=[];for(let le of q.arguments)le.name.value==="role"&&ce.push(le.value.value)}else server.knownGraphQLDirectives.includes(K)&&console.warn(`@${K} is an unknown directive, at`,q.loc)}}N.type=T,T==="Query"&&(p=N)}function _(y){let T=m.get(y.type);T?(Object.defineProperty(y,"properties",{value:T.properties}),Object.defineProperty(y,"definition",{value:T})):y.type==="array"?_(y.elements):Koe.includes(y.type)||(0,fG.getWorkerIndex)()===0&&console.error(`The type ${y.type} is unknown at line ${y.location.line}, column ${y.location.column}, in ${s}`)}o(_,"connectPropertyType");for(let y of m.values())for(let T of y.properties)_(T);for(let y of h)y.tableClass=e(y),y.export&&(y.export.name===""?i.set((0,BN.dirname)(n),y.tableClass):i.set((0,BN.dirname)(n)+"/"+(y.export.name||y.type),y.tableClass,y.export));function g(y,T,R){return new dG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${y}; } } } } computed;`,{filename:s,lineOffset:T.loc.startToken.line-1,columnOffset:T.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var BN,dG,fG,Koe,Yoe,Woe,mG=ue(()=>{BN=require("path"),dG=require("node:vm");De();fG=w(rt()),Koe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(FN,"start");Yoe=FN,Woe=FN({ensureTable:ze}).handleFile});var GN={};Oe(GN,{start:()=>rae});function zoe(e){if(e.kind!==Fe.Kind.OPERATION_DEFINITION&&e.kind!==Fe.Kind.FRAGMENT_DEFINITION)throw new kr(`Unexpected non-executable definition type ${e.kind}.`)}function hG(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function kN(e){return parseInt(e.value,10)}function EG(e){return parseFloat(e.value)}function _G(e,t,r){let n=r.get(e.name.value);return gG(n)?SG(n,t):{attribute:t,value:n}}function gG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function SG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],gG(n)?SG(n,t):{attribute:t,value:n}))}function joe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Fe.Kind.NULL:return{attribute:t,value:null};case Fe.Kind.INT:return{attribute:t,value:kN(e.value)};case Fe.Kind.FLOAT:return{attribute:t,value:EG(e.value)};case Fe.Kind.BOOLEAN:case Fe.Kind.STRING:return{attribute:t,value:e.value.value};case Fe.Kind.VARIABLE:return _G(e.value,t,r);case Fe.Kind.OBJECT:return TG(e.value,t,r);case Fe.Kind.LIST:case Fe.Kind.ENUM:default:throw new kr(`Value type, ${e.value.kind}, is not supported.`)}}function TG(e,t,r){return e.fields.flatMap(n=>joe(n,t,r))}function Qoe(e,t){switch(e.value.kind){case Fe.Kind.NULL:return{attribute:e.name.value,value:null};case Fe.Kind.INT:return{attribute:e.name.value,value:kN(e.value)};case Fe.Kind.FLOAT:return{attribute:e.name.value,value:EG(e.value)};case Fe.Kind.BOOLEAN:case Fe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Fe.Kind.VARIABLE:return _G(e.value,e.name.value,t);case Fe.Kind.OBJECT:return TG(e.value,[e.name.value],t);case Fe.Kind.LIST:case Fe.Kind.ENUM:default:throw new kr(`Argument type, ${e.value.kind}, is not supported.`)}}function Joe(e,t){return e.flatMap(r=>Qoe(r,t))}function nS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Fe.Kind.FIELD:return r;case Fe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new kr(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case Fe.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function RG(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:RG(r.selectionSet,t)}:r.name.value)}async function Xoe(e,t,r,n){let s=bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new kr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:RG(e.selectionSet,r),conditions:Joe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function yG(e){switch(e.kind){case Fe.Kind.NULL:return null;case Fe.Kind.INT:return kN(e);case Fe.Kind.FLOAT:return parseFloat(e.value);case Fe.Kind.STRING:case Fe.Kind.BOOLEAN:return e.value;case Fe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:yG(r.value),...t}),{});case Fe.Kind.LIST:case Fe.Kind.ENUM:default:throw new kr(`Value type, ${e.kind}, is not supported.`)}}function Zoe(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=yG(n.defaultValue)),n.type.kind===Fe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new kr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function eae(e,t,r,n){if(e.operation===Fe.OperationTypeNode.SUBSCRIPTION)throw new kr("Subscriptions are not supported.");if(e.operation===Fe.OperationTypeNode.MUTATION)throw new kr("Mutations are not supported yet.");let s=Zoe(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>Xoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function pG({query:e,variables:t={},operationName:r},n){let s=Fe.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(zoe(u),u.kind===Fe.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new kr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new kr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new kr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new kr(`Operation \`${r}\` not found.`);let l=await eae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function tae(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 hG(r),pG(r,e)}case"POST":{let r=await To(e.headers.get("content-type"),!0)(e._nodeRequest);return hG(r),pG(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function rae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await tae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Fe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof kr)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 Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Fe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof kr)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 Fe,kr,Ji,AG=ue(()=>{Fe=w(require("graphql"));Ro();Bu();o(zoe,"assertExecutableDefinitionNode");o(hG,"assertRequestParams");o(kN,"processIntValueNode");o(EG,"processFloatValueNode");o(_G,"processVariableNode");o(gG,"isObject");o(SG,"transformObjectIntoQueryCondition");o(joe,"processObjectFieldNode");o(TG,"processObjectValueNode");o(Qoe,"processArgumentNode");o(Joe,"buildConditionsQuery");o(nS,"fillInFragments");o(RG,"buildSelectQuery");o(Xoe,"processFieldNode");o(yG,"processConstValueNode");o(Zoe,"resolveVariables");o(eae,"executeOperation");o(pG,"resolver");kr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(tae,"graphqlQueryingHandler");o(rae,"start")});var CG=M((IDe,OG)=>{var dd=require("validate.js"),IG=lt(),fd=(k(),v(W)),{handleHDBError:nae,hdbErrors:sae}=ge(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:iae}=sae,qN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),oae={STRUCTURE_USER:"structure_user"},bG=Object.values(fd.ROLE_TYPES_ENUM),aae="attribute_permissions",cae="attribute_name",{PERMS_CRUD_ENUM:md}=fd,lae=[aae,...Object.values(md)],NG=[md.READ,md.INSERT,md.UPDATE],uae=[cae,...NG];function dae(e){let t=qN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,wG(e,t)}o(dae,"addRoleValidation");function fae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,wG(e,t)}o(fae,"alterRoleValidation");function mae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,IG.validateObject(e,t)}o(mae,"dropRoleValidation");var hae=["operation","role","id","permission","hdb_user","access"];function wG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)hae.includes(n[a])||s.push(n[a]);s.length>0&&fr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=IG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=pae(e);a&&fr(a,r),bG.forEach(c=>{e.permission[c]&&!dd.isBoolean(e.permission[c])&&fr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(bG.indexOf(a)<0){if(a===oae.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(rr.SCHEMA_NOT_FOUND(f),r)}continue}fr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(rr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{lae.includes(d)||fr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(md).forEach(d=>{dd.isDefined(u[d])?dd.isBoolean(u[d])||fr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(rr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let h=u.attribute_permissions[m];if(Object.keys(h).forEach(_=>{!uae.includes(_)&&_!==md.DELETE&&fr(rr.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!dd.isDefined(h.attribute_name)){fr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){fr(rr.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}NG.forEach(_=>{dd.isDefined(h[_])?dd.isBoolean(h[_])||fr(rr.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):fr(rr.ATTR_PERM_MISSING(_,p),r,a,l)}),!f.read&&h.read===!0&&(f.read=!0),!f.insert&&h.insert===!0&&(f.insert=!0),!f.update&&h.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Eae(r)}o(wG,"customValidate");OG.exports={addRoleValidation:dae,alterRoleValidation:fae,dropRoleValidation:mae};function pae(e){let{operation:t,permission:r}=e;if(t===fd.OPERATIONS_ENUM.ADD_ROLE||t===fd.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 rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?fd.ROLE_TYPES_ENUM.SUPER_USER:fd.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(pae,"validateNoSUPerms");function Eae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return nae(new Error,n,iae.BAD_REQUEST)}else return null}o(Eae,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var Oh=M((ODe,MG)=>{"use strict";var PG=Mn(),LG=on(),_ae=pl(),VN=CG(),KN=Co(),wDe=require("uuid").v4,gae=require("util"),sS=(k(),v(W)),Sae=ie(),YN=LG.searchByValue,Tae=LG.searchByHash,Rae=gae.promisify(_ae.delete),yae=ai(),Aae=Vu(),{hdbErrors:bae,handleHDBError:Nl}=ge(),{HDB_ERROR_MSGS:DG,HTTP_STATUS_CODES:wh}=bae,{UserEventMsg:WN}=oi();MG.exports={addRole:Iae,alterRole:Nae,dropRole:wae,listRoles:Oae};function $N(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o($N,"scrubRoleDetails");async function Iae(e){let t=VN.addRoleValidation(e);if(t)throw t;e=$N(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 YN(r)||[])}catch(i){throw Nl(i)}if(n&&n.length>0)throw Nl(new Error,DG.ROLE_ALREADY_EXISTS(e.role),wh.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 PG.insert(s),KN.signalUserChange(new WN(process.pid)),e=$N(e),e}o(Iae,"addRole");async function Nae(e){let t=VN.alterRoleValidation(e);if(t)throw t;e=$N(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await PG.update(r)}catch(s){throw Nl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Nl(new Error,"Invalid role id",wh.BAD_REQUEST,void 0,void 0,!0);return await KN.signalUserChange(new WN(process.pid)),e}o(Nae,"alterRole");async function wae(e){let t=VN.dropRoleValidation(e);if(t)throw Nl(new Error,t,wh.BAD_REQUEST,void 0,void 0,!0);let r=new Aae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Tae(r));if(n.length===0)throw Nl(new Error,DG.ROLE_NOT_FOUND,wh.NOT_FOUND,void 0,void 0,!0);let s=new yae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await YN(s)),a=!1;if(Sae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Nl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,wh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Rae(c),KN.signalUserChange(new WN(process.pid)),`${n[0].role} successfully deleted`}o(wae,"dropRole");async function Oae(){return YN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(Oae,"listRoles")});var zN={};Oe(zN,{start:()=>xG,startOnMainThread:()=>Lae});function xG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,vG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(Cae.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Pae(i)}}}async function Pae(e){let t=nt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,UG.isEqual)(i,e)?void 0:(e.id=r.id,(0,iS.alterRole)(e))}return(0,iS.addRole)(e)}var iS,vG,UG,Cae,Lae,BG=ue(()=>{De();iS=w(Oh()),vG=require("yaml"),UG=require("lodash"),Cae=["super_user","cluster_user","structure_user"];o(xG,"start");o(Pae,"ensureRole");Lae=xG});async function oS(e){let t=(0,kG.pathToFileURL)(e).toString();if(Dae)return Ch||(Ch=Mae(Uae)),(await(await Ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Mae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ch=new Compartment({console,Math,Date,fetch:vae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,HG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=xr,s.tables=un,s.databases=ke}};let n=await(0,FG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Ch}function vae(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 Uae(){return{Resource:xr,tables:un}}var FG,HG,kG,Dae,Ch,jN=ue(()=>{Pa();De();FG=require("fs/promises"),HG=require("path"),kG=require("url"),Dae=!1;o(oS,"secureImport");o(Mae,"getCompartment");o(vae,"secureOnlyFetch");o(Uae,"getGlobalVars")});var QN={};Oe(QN,{handleApplication:()=>xae,suppressHandleApplicationWarning:()=>Bae});function qG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function xae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}oS(t.absolutePath).then(r=>{let n=(0,GG.dirname)(t.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");qG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),$G(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function $G(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;qG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&$G(e,s,i)}}var GG,Bae,VG=ue(()=>{jN();GG=require("path");o(qG,"isResource");o(xae,"handleApplication");o($G,"recurseForResources");Bae=!0});var XN={};Oe(XN,{start:()=>Fae});function Fae({resources:e}){e.set("login",JN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var JN,KG=ue(()=>{Pa();o(Fae,"start");JN=class extends xr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function QG(e){let t={openapi:Hae,info:{title:"HarperDB HTTP REST interface",version:jG.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:a,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(a)for(let{type:R,name:N,elements:O,relationship:F,definition:Z}of a){if(F)R==="array"?u[N]={type:"array",items:{$ref:Ka+O.type}}:u[N]={$ref:Ka+R};else{let G=Z??O?.definition;if(G){if(!t.components.schemas[G.type]){let Y={};G.properties.forEach(q=>{Y[q.name]=new rw(ZN[q.type],q.type)}),t.components.schemas[G.type]=new zG(Y)}R==="array"?u[N]={type:"array",items:{$ref:Ka+G.type}}:u[N]={$ref:Ka+G.type}}else R==="array"?O.type==="Any"||O.type=="ID"?u[N]={type:"array",items:{format:O.type}}:u[N]={type:"array",items:new rw(ZN[O.type],O.type)}:R==="Any"||R=="ID"?u[N]={format:R}:u[N]=new rw(ZN[R],R)}d.push(new nw(N,"query",u[N]))}let f=Object.keys(u),m=new nw(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new nw("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new zG(u);let p=l.post!==Resource.prototype.post||l.update,_=typeof l.put=="function",g=typeof l.get=="function",y=typeof l.delete=="function",T="/"+s+"/";p&&(t.paths[T]={},t.paths[T].post=new kae(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new ew(d,r,{200:new tw({$ref:Ka+i})},"search for records by the specified property name and value pairs")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new WG(d,r,"delete all the records that match the provided query",{204:new YG})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new ew([m],r,{200:new tw({$ref:Ka+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Gae([m],r,i,"create or update the record with the URL path that maps to the record's primary key")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new WG([m],r,"delete a record with the given primary key",{204:new YG})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new ew([m,h],r,{200:new tw({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function kae(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ka+e}}}},this.security=t,this.responses={200:{description:sw,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function ew(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tw(e){this.description=sw,this.content={"application/json":{schema:e}}}function YG(){this.description="successfully processed request, no content returned to client"}function Gae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ka+r}}}},this.responses={200:{description:sw}}}function WG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function zG(e){this.type="object",this.properties=e}function rw(e,t){this.type=e,this.format=t}function nw(e,t,r){this.name=e,this.in=t,this.schema=r}var jG,Hae,ZN,Ka,sw,JG=ue(()=>{jG=w(Rt()),Hae="3.0.3",ZN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ka="#/components/schemas/",sw="successful operation";o(QG,"generateJsonApi");o(kae,"Post");o(ew,"Get");o(tw,"Response200");o(YG,"Response204");o(Gae,"Put");o(WG,"Delete");o(zG,"ResourceSchema");o(rw,"Type");o(nw,"Parameter")});var ZG={};Oe(ZG,{Request:()=>Ya,createReuseportFd:()=>aS});var XG,Ya,iw,ow,aS,Ph=ue(()=>{XG=require("os"),Ya=class{static{o(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 ow(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 iw(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},iw=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},ow=class{constructor(t){this.asObject=t}static{o(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,XG.platform)()!="win32"&&(aS=require("node-unix-socket").createReuseportFd)});var lS={};Oe(lS,{parseHeaderValue:()=>cw,start:()=>Vae});async function $ae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&I_(e);let i=new Os;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==eq){let g=cS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ri(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let y=cw(g);for(let T of y)switch(T.name){case"max-age":e.expiresAt=T.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=cw(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 f=await xt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=To(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new hd.ClientError(g,400)}if(e.authorize=!0,a===eq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return QG(cS);throw new hd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new hd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new hd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,aw.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=QH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=cm(f.data,e,f)),f}else if(h=e.lastModified){qae[0]=h;let g=String.fromCharCode(34,(jr[0]&63)+62,(jr[0]>>6)+(jr[1]<<2&63)+62,(jr[1]>>4)+(jr[2]<<4&63)+62,(jr[2]>>2)+62,(jr[3]&63)+62,(jr[3]>>6)+(jr[4]<<2&63)+62,(jr[4]>>4)+(jr[5]<<4&63)+62,(jr[5]>>2)+62,(jr[6]&63)+62,(jr[6]>>6)+(jr[7]<<2&63)+62,34),y=r["if-none-match"];y&&g==y?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),aw.lastModified&&i.setIfNone("Last-Modified",new Date(h).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:m,headers:i,body:void 0},_=e.loadedFromSource??f?.wasLoadedFromSource?.();return _!==void 0&&(p.wasCacheMiss=_,!_&&h&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||h))/1e3))),f!==void 0&&(p.body=cm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?fi.warn(a):fi.info(a):fi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=cm(a.contentType?a:nq(a),e,c),c}}function Vae(e){aw=e,e.includeExpensiveRecordCountEstimates&&(Ya.prototype.includeExpensiveRecordCountEstimates=!0),!tq&&(tq=!0,cS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return $ae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Lh++;let s=new Vn;rq||(rq=!0,ch(l=>{Lh>0&&l.push({metric:"ws-connections",connections:Lh,byThread:!0})}));let i;t.on("error",l=>{i=!0,fi.warn(l)});let a;t.on("message",o(function(u){a||(a=To(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);st(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Lh--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=cS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,st(p=>({count:p.count,total:Lh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ri(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await xt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await ba(h.value,r);t.send(p),st(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(_=>t._socket.once("drain",_))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?fi.warn(l):fi.info(l):fi.error(l),t.close(Kae[l.statusCode]||1011,nq(l))}t.close()},e))}function cw(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var fi,hd,nq,jr,qae,aw,eq,tq,cS,rq,Lh,Kae,sq=ue(()=>{Ro();Wi();fi=w(Q()),hd=w(ge());N_();Tu();xc();uh();JG();Ph();O_();({errorToString:nq}=fi),jr=new Uint8Array(8),qae=new Float64Array(jr.buffer,0,1),aw={},eq="openapi";o($ae,"http");Lh=0;o(Vae,"start");Kae={401:3e3,403:3003};o(cw,"parseHeaderValue")});var lw=M((eMe,oq)=>{var{recordAction:uS,recordActionBinary:iq}=(Wi(),v(wg)),Yae=require("fastify-plugin"),Wae=200;oq.exports=Yae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),uS(a,"duration",u,f,d),iq(s.raw.statusCode<400,"success",u,f,d),iq(1,"response_"+s.raw.statusCode,u,f,d);let m=Wae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{uS(performance.now()-c,"transfer",u,f,d),uS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,uS(m,"bytes-sent",u,f,d));let h=a.toFixed(3),p=s.getHeader("Server-Timing"),_=`db;dur=${h}`;s.header("Server-Timing",p?`${p}, ${_}`:_)}),r()},{name:"hdb-request-time"})});var cq=M((tMe,aq)=>{var zae=lt(),jae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aq.exports=function(e){return zae.validateObject(e,jae)}});var dS=M((rMe,lq)=>{"use strict";var Qae=(k(),v(W)).OPERATIONS_ENUM,uw=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Qae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};lq.exports=uw});var vh={};Oe(vh,{createTokens:()=>mw,getJWTRSAKeys:()=>ES,refreshOperationToken:()=>hw,validateOperationToken:()=>pw,validateRefreshToken:()=>_S});async function ES(){if(fS)return fS;try{let e=Dh.default.join(Mh.default.getHdbBasePath(),zy),t=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PASSPHRASE_NAME),"utf8"),r=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PRIVATE_KEY_NAME),"utf8");return fS={publicKey:await mS.default.readFile(Dh.default.join(e,Yf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},fS}catch(e){throw pS.default.error(e),new mi.ClientError(Ed.NO_ENCRYPTION_KEYS,pd.INTERNAL_SERVER_ERROR)}}async function mw(e){let t=(0,dw.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new mi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,fw.findAndValidateUser)(e.username,e.password,f)}catch(f){throw pS.default.error(f),new mi.ClientError(Ed.INVALID_CREDENTIALS,pd.UNAUTHORIZED)}if(!r)throw new mi.ClientError(Ed.INVALID_CREDENTIALS,pd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await ES(),c=await _d.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??hq,algorithm:hS,subject:gd.OPERATION}),l=await _d.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Jae,algorithm:hS,subject:gd.REFRESH}),u=FI(l,Br.SHA256);if((await(0,uq.update)(new dq.default(Kf,_u.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new mi.ClientError(Ed.REFRESH_TOKEN_SAVE_FAILED,pd.INTERNAL_SERVER_ERROR);return fq.default.signalUserChange(new mq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function hw(e){let t=(0,dw.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new mi.ClientError(t.message);let{refresh_token:r}=e;await _S(r);let n=await ES(),s=await _d.default.decode(r);return{operation_token:await _d.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:hq,algorithm:hS,subject:gd.OPERATION})}}async function pw(e){return pq(e,gd.OPERATION)}async function _S(e){return pq(e,gd.REFRESH)}async function pq(e,t){try{let r=await ES(),n=await _d.default.verify(e,r.publicKey,{algorithms:hS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,fw.findAndValidateUser)(n.username,void 0,!1);if(t===gd.REFRESH&&!HI(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw pS.default.warn(r),r?.name==="TokenExpiredError"?new mi.ClientError(Ed.TOKEN_EXPIRED,pd.FORBIDDEN):new mi.ClientError(Ed.INVALID_TOKEN,pd.UNAUTHORIZED)}}var _d,mS,Dh,Xi,dw,mi,pS,fw,uq,dq,fq,mq,Mh,pd,Ed,hq,Jae,hS,gd,fS,Sd=ue(()=>{_d=w(require("jsonwebtoken")),mS=w(require("fs-extra")),Dh=w(require("node:path")),Xi=w(require("joi")),dw=w(lt());k();mi=w(ge()),pS=w(Q());mg();fw=w(ts()),uq=w(Mn()),dq=w(dS()),fq=w(Co()),mq=w(oi()),Mh=w(oe()),{HTTP_STATUS_CODES:pd,AUTHENTICATION_ERROR_MSGS:Ed}=mi.hdbErrors;Mh.default.initSync();hq=Mh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Jae=Mh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",hS="RS256",gd={OPERATION:"operation",REFRESH:"refresh"};o(ES,"getJWTRSAKeys");o(mw,"createTokens");o(hw,"refreshOperationToken");o(pw,"validateOperationToken");o(_S,"validateRefreshToken");o(pq,"validateToken")});var Ew=M((aMe,gq)=>{"use strict";var Xae=cq(),Td=require("passport"),Zae=require("passport-local").Strategy,ece=require("passport-http").BasicStrategy,tce=require("util"),rce=ts(),_q=tce.callbackify(rce.findAndValidateUser),oMe=rn(),nce=(k(),v(W)),Eq=(Sd(),v(vh));Td.use(new Zae(function(e,t,r){_q(e,t,r)}));Td.use(new ece(function(e,t,r){_q(e,t,r)}));Td.serializeUser(function(e,t){t(null,e)});Td.deserializeUser(function(e,t){t(null,e)});function sce(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Td.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===nce.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Eq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Eq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Td.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(sce,"authorize");function ice(e,t){let r=Xae(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(ice,"checkPermissions");gq.exports={authorize:sce,checkPermissions:ice}});var gS=M((lMe,Sq)=>{"use strict";var oce=Jn();Sq.exports={writeTransaction:ace};function ace(e,t,r){return oce.writeTransaction(e,t,r)}o(ace,"writeTransaction")});var Aq=M((fMe,yq)=>{"use strict";var cce=on(),lce=ii(),Tq=Q(),uce=Mn(),dMe=gS(),dce=require("clone"),gw=require("alasql"),fce=rg(),Rq=require("util"),mce=Rq.promisify(lce.getTableSchema),hce=Rq.promisify(cce.search),pce=(k(),v(W)),_w=ie();fce(gw);yq.exports={update:_ce};var Ece="There was a problem performing this update. Please check the logs and try again.";async function _ce({statement:e,hdb_user:t}){let r=await mce(e.table.databaseid,e.table.tableid),n=gce(e.columns);_w.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=dce(s),c=_w.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=gw.parse(l).statements[0],d=await hce(u),f=Sce(n,d);return Tce(a,f,t)}o(_ce,"update");function gce(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=gw.compile(`SELECT ${r.expression.toString()} AS [${pce.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Tq.error(t),new Error(Ece)}}o(gce,"createUpdateRecord");function Sce(e,t){return _w.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Sce,"buildUpdateRecords");async function Tce(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await uce.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Tq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Tce,"updateRecords")});var Iq=M((EMe,bq)=>{var Rce=require("alasql"),yce=on(),Ace=Q(),bce=Jn(),Tw=require("util"),Sw=ie(),Ice=(k(),v(W)),Nce=ii(),hMe=gS(),pMe=Mn(),wce="record",Oce="successfully deleted",Cce=Tw.callbackify(Mce),Pce=Tw.promisify(yce.search),Lce=Tw.promisify(Nce.getTableSchema);bq.exports={convertDelete:Cce};function Dce(e){return`${e.deleted_hashes.length} ${wce}${e.deleted_hashes.length===1?"":"s"} ${Oce}`}o(Dce,"generateReturnMessage");async function Mce({statement:e,hdb_user:t}){let r=await Lce(e.table.databaseid,e.table.tableid);Sw.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Sw.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Rce.parse(a).statements[0],l={operation:Ice.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Pce(c);let u=await bce.deleteRecords(l);return Sw.isEmptyOrZeroLength(u.message)&&(u.message=Dce(u)),delete u.txn_time,u}catch(u){throw Ace.error(u),u.hdb_code?u.message:u}}o(Mce,"convertDelete")});var Pq=M((gMe,Cq)=>{"use strict";var vce=Ua(),{hdbErrors:Nq}=ge(),{getDatabases:wq}=(De(),v(mt));Cq.exports={checkSchemaExists:Oq,checkSchemaTableExists:Uce,schemaDescribe:vce};async function Oq(e){if(!wq()[e])return Nq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Oq,"checkSchemaExists");async function Uce(e,t){let r=await Oq(e);if(r)return r;if(!wq()[e][t])return Nq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Uce,"checkSchemaTableExists")});var Iw=M((AMe,qq)=>{"use strict";var{decode:xce}=require("msgpackr"),{isMainThread:TMe,parentPort:RMe,threadId:yMe}=require("worker_threads"),RS=mr(),Rd=It(),Aw=(k(),v(W)),fn=Q(),yw=oe(),Bce=(k(),v(W)),{onMessageByType:Fce}=rt(),vq=$i(),{recordAction:Lq,recordActionBinary:Hce}=(Wi(),v(wg)),{publishToStream:kce}=RS,{ConsumerEvents:Dq}=require("nats"),Gce=on(),{promisify:qce}=require("util"),{decodeBlobsWithWrites:$ce}=(Kn(),v(o_)),Uq=qce(setTimeout),yS=1e4,AS,TS,Vce,Kce,xq,Uh=new Map,yd=new Map;qq.exports={initialize:Bq,ingestConsumer:bw,setSubscription:Yce,setIgnoreOrigin:jce,getDatabaseSubscriptions:zce,updateConsumer:Fq};async function Bq(){Fce(Aw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await Fq(n)}),xq=!0,fn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await RS.getNATSReferences();AS=e,TS=e.info.server_name,Vce=t,Kce=r}o(Bq,"initialize");async function Fq(e){if(e.status==="start"){let{js:t,jsm:r}=await Hq(e.node_domain_name);bw(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Uh.get(e.stream_name+e.node_domain_name);t&&(fn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Uh.set(e.stream_name+e.node_domain_name,"close")),yd.get(e.node_domain_name)==="failed"&&yd.set(e.node_domain_name,"close")}}o(Fq,"updateConsumer");var bS=new Map;function Yce(e,t,r){let n=bS.get(e);n||bS.set(e,n=new Map),n.set(t,r),xq||Bq().then(Wce)}o(Yce,"setSubscription");async function Wce(){let e=await Gce.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Rd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await Hq(r),!n))break;let{schema:a,table:c}=i,l=vq.createNatsTableStreamName(a,c);bw(l,n,s,r)}}}o(Wce,"accessConsumers");async function Hq(e){let t,r,n=1;for(;!r;)try{t=await AS.jetstream({domain:e}),r=await AS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(yd.get(e)==="close")break;yd.set(e,"failed"),n%10===1&&fn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<yS?n++*100:yS;await Uq(i)}return{js:t,jsm:r}}o(Hq,"connectToRemoteJS");function zce(){return bS}o(zce,"getDatabaseSubscriptions");var kq;function jce(e){kq=e}o(jce,"setIgnoreOrigin");var Gq=100,Mq=new Array(Gq),SS=0;async function bw(e,t,r,n){let{connection:s}=await RS.getNATSReferences();AS=s,TS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,TS),fn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(yd.get(n)==="close")break;a%10===1&&fn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(fn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await RS.createConsumer(r,e,TS,new Date(Date.now()).toISOString()));let d=a++*100<yS?a++*100:yS;await Uq(d)}let c=!1,l;for(;!c;){if(Uh.get(e+n)==="close"||yd.get(n)==="close"){Uh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:yw.get(Aw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Uh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===Dq.ConsumerDeleted&&(await l.close(),c=!0),d.type===Dq.HeartbeatsMissed){let f=d.data;fn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(fn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await Mq[SS],Mq[SS]=Qce(d).catch(f=>{fn.error(f)}),++SS>=Gq&&(SS=0)}catch(d){d.message==="consumer deleted"?(fn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):fn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(bw,"ingestConsumer");async function Qce(e){let t;await $ce(()=>{t=xce(e.data)}),Lq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),fn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=yw.get(Aw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Rd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Rd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Rd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!kq),Hce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Rd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:h}=t;fn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),fn.trace(`messageProcessor nats msg id: ${e.headers.get(Rd.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(O=>p=O),{timestamp:g,user:y,node_name:T}=m||{},R=bS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=p,R.send(t);else if(d.length===1&&!l)R.send({type:Rw(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:y,nodeName:T});else{let O=d.map((F,Z)=>({type:Rw(a),value:F,expiresAt:h,id:f?.[Z],table:u}));for(;l;)O.push({type:Rw(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:p,user:y,nodeName:T})}yw.get(Bce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&kce(e.subject.split(".").slice(0,-1).join("."),vq.createNatsTableStreamName(c,u),e.headers,e.data),await _;let N=Date.now()-g;g&&Lq(N,"replication-latency",e.subject,a,"ingest")}catch(a){fn.error(a)}e.ack()}o(Qce,"messageProcessor");function Rw(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(Rw,"convertOperation")});var mr=M((PMe,i$)=>{"use strict";var Gr=oe();Gr.initSync();var Jce=require("fs-extra"),Xce=require("semver"),Fh=require("path"),{monotonicFactory:Zce}=require("ulidx"),Vq=Zce(),ele=require("util"),Kq=require("child_process"),tle=ele.promisify(Kq.exec),rle=Kq.spawn,Qr=It(),Qe=(k(),v(W)),{packageJson:nle,PACKAGE_ROOT:sle}=Rt(),IS=ie(),hi=Q(),NS=$i(),ile=gS(),xh=bt(),{broadcast:ole,onMessageByType:ale,getWorkerIndex:cle}=rt(),{isMainThread:Yq}=require("worker_threads"),{Encoder:lle,decode:Cw}=require("msgpackr"),Wq=new lle,{isEmpty:Pl}=IS,zq=ts(),IMe=48*36e11;Yq&&ale(Qe.ITC_EVENT_TYPES.RESTART,()=>{mn=void 0,Cl=void 0});var{connect:ule,StorageType:dle,RetentionPolicy:fle,AckPolicy:Pw,DeliverPolicy:Lw,DiscardPolicy:mle,NatsConnection:NMe,JetStreamManager:wMe,JetStreamClient:OMe,StringCodec:CMe,JSONCodec:hle,createInbox:Dw,headers:ple,ErrorCode:$q}=require("nats"),{recordAction:Ele}=(Wi(),v(wg)),{encodeBlobsAsBuffers:_le}=(Kn(),v(o_)),jq=hle(),gle="clustering",Sle=nle.engines[Qr.NATS_SERVER_NAME],Tle=Fh.join(sle,"dependencies"),Ow=Fh.join(Tle,`${process.platform}-${process.arch}`,Qr.NATS_BINARY_NAME),Nw,ww,Bh,wl,Ol;i$.exports={runCommand:Qq,checkNATSServerInstalled:Rle,createConnection:Mw,getConnection:Hh,getJetStreamManager:kh,getJetStream:Xq,getNATSReferences:Zi,getServerList:Ale,createLocalStream:vw,listStreams:Zq,deleteLocalStream:ble,getServerConfig:Ad,listRemoteStreams:Ile,viewStream:Nle,viewStreamIterator:wle,publishToStream:Ole,request:Lle,reloadNATS:Uw,reloadNATSHub:Dle,reloadNATSLeaf:Mle,extractServerName:Ple,requestErrorHandler:vle,createLocalTableStream:n$,createTableStreams:Ble,purgeTableStream:s$,purgeSchemaTableStreams:Fle,getStreamInfo:Hle,updateLocalStreams:Gle,closeConnection:yle,getJsmServerName:wS,addNatsMsgHeader:e$,clearClientCache:Jq,updateRemoteConsumer:Ule,createConsumer:t$,updateConsumerIterator:xle};async function Qq(e,t=void 0){let{stdout:r,stderr:n}=await tle(e,{cwd:t});if(n)throw new Error(n.replace(`
19
+ `}`;c?(c.length<Jk?c.push(_):c.length===Jk&&c.push(`Maximum log buffer rate reached, logs will be throttled
20
+ `),dd&&(clearTimeout(a),f())):dd||l<performance.now()+Xk?f(_):(l=Math.min(l,performance.now()+Xk),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();xo.appendFileSync(s,c?c.join(""):p);let g=performance.now();l=Math.max(g,l)+(g-_)*50}else i||console.log(c?c.join(""):p);c&&(c=null)}function m(){try{xo.closeSync(s)}catch{}s=null,r&&(Qg=null)}function h(p){if(!s){try{s=xo.openSync(e,"a"),r&&(Qg=s)}catch(_){if(_.code==="ENOENT"&&!p)return xo.mkdirpSync(yh.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},goe).unref()}}}o(Zk,"getFileLogger");function Aoe(...e){Pt.info(...e)}o(Aoe,"info");function boe(...e){Pt.trace(...e)}o(boe,"trace");function vN(...e){Pt.error(...e)}o(vN,"error");function Ioe(...e){Pt.debug(...e)}o(Ioe,"debug");function Noe(...e){Pt.notify(...e)}o(Noe,"notify");function woe(...e){Pt.fatal(...e)}o(woe,"fatal");function Ooe(...e){Pt.warn(...e)}o(Ooe,"warn");function Coe(e,t,r,...n){MN=r.service_name;try{Pt[e](...n)}finally{MN=void 0}}o(Coe,"logCustomLevel");function Poe(){let e;try{e=moe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Bo(e,Fr.HDB_HOME_DIR_NAME,Fr.BOOT_PROPS_FILE_NAME);return xo.existsSync(t)||(t=Bo(UN,"utility/hdb_boot_properties.file")),t}o(Poe,"getPropsFilePath");function Loe(e){Qi=e}o(Loe,"setLogLevel");function Doe(e){try{if(e.includes("config/settings.js")){let l=rG(e);return{level:l.get(Fr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:yh.dirname(l.get(Fr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(Fr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(Fr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=tG.parseDocument(xo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===Fr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(Doe,"getLogConfig");function Moe(){try{let e=tG.parseDocument(xo.readFileSync(_oe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(Moe,"getDefaultConfig");function voe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(voe,"errorToString");function Uoe(e){Pt=e}o(Uoe,"setMainLogger");function oG(){try{xo.closeSync(Qg)}catch{}Qg=null}o(oG,"closeLogFile");function xoe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(xoe,"AuthAuditLog");var{RootConfigWatcher:Boe}=(Wk(),v(Yk))});var oe=M((uG,dG)=>{"use strict";var xN=require("fs-extra"),Nl=require("path"),aG=require("os"),Foe=require("properties-reader"),Nh=Q(),Ih=ie(),xe=(k(),v(W)),tS=wt(),Hoe="Error initializing environment manager",rS="BOOT_PROPS_FILE_PATH",cG=!1,koe={[xe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Fo={};Object.assign(uG,dG.exports={BOOT_PROPS_FILE_PATH:rS,getHdbBasePath:Goe,setHdbBasePath:qoe,get:lG,initSync:Voe,setProperty:je,initTestEnvironment:Koe});function Goe(){return Fo[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(Goe,"getHdbBasePath");function qoe(e){Fo[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(qoe,"setHdbBasePath");function lG(e){let t=tS.getConfigValue(e);return t===void 0?Fo[e]:t}o(lG,"get");function je(e,t){koe[e]&&(Fo[e]=t),tS.updateConfigObject(e,t)}o(je,"setProperty");function $oe(){let e;try{e=Ih.getPropsFilePath(),xN.accessSync(e,xN.constants.F_OK|xN.constants.R_OK),cG=!0;let t=Foe(e);return Fo[xe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(xe.HDB_SETTINGS_NAMES.INSTALL_USER),Fo[xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Fo[rS]=e,!0}catch{return Nh.trace(`Environment manager found no properties file at ${e}`),!1}}o($oe,"doesPropFileExist");function Voe(e=!1){try{(cG||$oe()||Ih.noBootFile()||e)&&(tS.initConfig(e),Fo[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tS.getConfigValue(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Nh.error(Hoe),Nh.error(t),console.error(t),process.exit(1)}}o(Voe,"initSync");function Koe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Nl.join(__dirname,"../../","unitTests");Fo[rS]=Nl.join(l,"hdb_boot_properties.file"),je(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nl.join(l,"settings.test")),je(xe.HDB_SETTINGS_NAMES.INSTALL_USER,aG.userInfo()?aG.userInfo().username:void 0),je(xe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),je(xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nl.join(l,"envDir","log")),je(xe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),je(xe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),je(xe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),je(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nl.join(l,"envDir")),je(xe.CONFIG_PARAMS.STORAGE_PATH,Nl.join(l,"envDir")),s&&(je(xe.CONFIG_PARAMS.HTTP_SECUREPORT,lG(xe.CONFIG_PARAMS.HTTP_PORT)),je(xe.CONFIG_PARAMS.HTTP_PORT,null)),je(xe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),je(xe.CONFIG_PARAMS.HTTP_PORT,9926),je(xe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),je(xe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),je(xe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ih.isEmpty(i)?!1:i),je(xe.CONFIG_PARAMS.HTTP_CORS,Ih.isEmpty(i)?!1:i),je(xe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),je(xe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),je(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),je(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),je(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),je(xe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ih.isEmpty(c)?!1:c),a&&(je("CORS_ACCESSLIST",a),je(xe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(je(xe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),je(xe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(je(xe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),je(xe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(je(xe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),je(xe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rS}. Please check your boot props and settings files`;Nh.fatal(r),Nh.error(t)}}o(Koe,"initTestEnvironment")});var HN={};we(HN,{loadGQLSchema:()=>zoe,start:()=>FN,startOnMainThread:()=>Woe});function FN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,h=[],p;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(G){if(G.kind==="NonNullType"){let $=F(G.type);return $.nullable=!1,$}if(G.kind==="ListType")return{type:"array",elements:F(G.type)};let K={type:G.name?.value};return Object.defineProperty(K,"location",{value:G.loc.startToken}),K};o(F,"getProperty");let T=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(T,N);for(let G of R.directives){if(G.name.value==="table"){for(let K of G.arguments)N[K.name.value]=K.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,h.push(N)}if(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="splitSegments"&&(N.splitSegments=!0),G.name.value==="replicate"&&(N.replicate=!0),G.name.value==="export"){N.export=!0;for(let K of G.arguments)typeof N.export!="object"&&(N.export={}),N.export[K.name.value]=K.value.value}}let O=!1,Z={};for(let G of R.fields){let Y=F(G.type);Y.name=G.name.value,y.push(Y),Z[Y.name]=void 0;for(let K of G.directives){let $=K.name.value;if($==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",K.loc):(Y.isPrimaryKey=!0,O=!0);else if($==="indexed"){let le={};for(let ue of K.arguments||[])le[ue.name.value]=ue.value.value;Y.indexed=le}else if($==="computed"){for(let le of K.arguments||[])if(le.name.value==="from"){let ue=le.value.value;Y.computed={from:g(ue,le,Z)},Y.version==null&&(Y.version=ue)}else le.name.value==="version"&&(Y.version=le.value.value);Y.computed=Y.computed||!0}else if($==="relationship"){let le={};for(let ue of K.arguments)le[ue.name.value]=ue.value.value;Y.relationship=le}else if($==="createdTime")Y.assignCreatedTime=!0;else if($==="updatedTime")Y.assignUpdatedTime=!0;else if($==="expiresAt")Y.expiresAt=!0;else if($==="allow"){let le=Y.authorizedRoles=[];for(let ue of K.arguments)ue.name.value==="role"&&le.push(ue.value.value)}else server.knownGraphQLDirectives.includes($)&&console.warn(`@${$} is an unknown directive, at`,K.loc)}}N.type=T,T==="Query"&&(p=N)}function _(R){let T=m.get(R.type);T?(Object.defineProperty(R,"properties",{value:T.properties}),Object.defineProperty(R,"definition",{value:T})):R.type==="array"?_(R.elements):Yoe.includes(R.type)||(0,mG.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}o(_,"connectPropertyType");for(let R of m.values())for(let T of R.properties)_(T);for(let R of h)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,BN.dirname)(n),R.tableClass):i.set((0,BN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,T,y){return new fG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:T.loc.startToken.line-1,columnOffset:T.loc.startToken.column}).runInThisContext()(y)}o(g,"createComputedFrom")}}var BN,fG,mG,Yoe,Woe,zoe,hG=ce(()=>{BN=require("path"),fG=require("node:vm");Me();mG=w(nt()),Yoe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(FN,"start");Woe=FN,zoe=FN({ensureTable:ze}).handleFile});var GN={};we(GN,{start:()=>nae});function joe(e){if(e.kind!==Be.Kind.OPERATION_DEFINITION&&e.kind!==Be.Kind.FRAGMENT_DEFINITION)throw new Hr(`Unexpected non-executable definition type ${e.kind}.`)}function pG(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function kN(e){return parseInt(e.value,10)}function _G(e){return parseFloat(e.value)}function gG(e,t,r){let n=r.get(e.name.value);return SG(n)?TG(n,t):{attribute:t,value:n}}function SG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function TG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],SG(n)?TG(n,t):{attribute:t,value:n}))}function Qoe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Be.Kind.NULL:return{attribute:t,value:null};case Be.Kind.INT:return{attribute:t,value:kN(e.value)};case Be.Kind.FLOAT:return{attribute:t,value:_G(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:t,value:e.value.value};case Be.Kind.VARIABLE:return gG(e.value,t,r);case Be.Kind.OBJECT:return RG(e.value,t,r);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Hr(`Value type, ${e.value.kind}, is not supported.`)}}function RG(e,t,r){return e.fields.flatMap(n=>Qoe(n,t,r))}function Joe(e,t){switch(e.value.kind){case Be.Kind.NULL:return{attribute:e.name.value,value:null};case Be.Kind.INT:return{attribute:e.name.value,value:kN(e.value)};case Be.Kind.FLOAT:return{attribute:e.name.value,value:_G(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Be.Kind.VARIABLE:return gG(e.value,e.name.value,t);case Be.Kind.OBJECT:return RG(e.value,[e.name.value],t);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Hr(`Argument type, ${e.value.kind}, is not supported.`)}}function Xoe(e,t){return e.flatMap(r=>Joe(r,t))}function nS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Be.Kind.FIELD:return r;case Be.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Hr(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case Be.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function yG(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:yG(r.selectionSet,t)}:r.name.value)}async function Zoe(e,t,r,n){let s=bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Hr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:yG(e.selectionSet,r),conditions:Xoe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function AG(e){switch(e.kind){case Be.Kind.NULL:return null;case Be.Kind.INT:return kN(e);case Be.Kind.FLOAT:return parseFloat(e.value);case Be.Kind.STRING:case Be.Kind.BOOLEAN:return e.value;case Be.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:AG(r.value),...t}),{});case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Hr(`Value type, ${e.kind}, is not supported.`)}}function eae(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=AG(n.defaultValue)),n.type.kind===Be.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Hr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function tae(e,t,r,n){if(e.operation===Be.OperationTypeNode.SUBSCRIPTION)throw new Hr("Subscriptions are not supported.");if(e.operation===Be.OperationTypeNode.MUTATION)throw new Hr("Mutations are not supported yet.");let s=eae(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>Zoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function EG({query:e,variables:t={},operationName:r},n){let s=Be.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(joe(u),u.kind===Be.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Hr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Hr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Hr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Hr(`Operation \`${r}\` not found.`);let l=await tae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function rae(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 pG(r),EG(r,e)}case"POST":{let r=await To(e.headers.get("content-type"),!0)(e._nodeRequest);return pG(r),EG(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function nae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await rae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Hr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Hr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Be,Hr,Ji,bG=ce(()=>{Be=w(require("graphql"));Ro();Fu();o(joe,"assertExecutableDefinitionNode");o(pG,"assertRequestParams");o(kN,"processIntValueNode");o(_G,"processFloatValueNode");o(gG,"processVariableNode");o(SG,"isObject");o(TG,"transformObjectIntoQueryCondition");o(Qoe,"processObjectFieldNode");o(RG,"processObjectValueNode");o(Joe,"processArgumentNode");o(Xoe,"buildConditionsQuery");o(nS,"fillInFragments");o(yG,"buildSelectQuery");o(Zoe,"processFieldNode");o(AG,"processConstValueNode");o(eae,"resolveVariables");o(tae,"executeOperation");o(EG,"resolver");Hr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(rae,"graphqlQueryingHandler");o(nae,"start")});var PG=M((NDe,CG)=>{var fd=require("validate.js"),NG=ut(),md=(k(),v(W)),{handleHDBError:sae,hdbErrors:iae}=ge(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:oae}=iae,qN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),aae={STRUCTURE_USER:"structure_user"},IG=Object.values(md.ROLE_TYPES_ENUM),cae="attribute_permissions",lae="attribute_name",{PERMS_CRUD_ENUM:hd}=md,uae=[cae,...Object.values(hd)],wG=[hd.READ,hd.INSERT,hd.UPDATE],dae=[lae,...wG];function fae(e){let t=qN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,OG(e,t)}o(fae,"addRoleValidation");function mae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,OG(e,t)}o(mae,"alterRoleValidation");function hae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,NG.validateObject(e,t)}o(hae,"dropRoleValidation");var pae=["operation","role","id","permission","hdb_user","access"];function OG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)pae.includes(n[a])||s.push(n[a]);s.length>0&&fr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=NG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=Eae(e);a&&fr(a,r),IG.forEach(c=>{e.permission[c]&&!fd.isBoolean(e.permission[c])&&fr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(IG.indexOf(a)<0){if(a===aae.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(rr.SCHEMA_NOT_FOUND(f),r)}continue}fr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(rr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{uae.includes(d)||fr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(hd).forEach(d=>{fd.isDefined(u[d])?fd.isBoolean(u[d])||fr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(rr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let h=u.attribute_permissions[m];if(Object.keys(h).forEach(_=>{!dae.includes(_)&&_!==hd.DELETE&&fr(rr.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!fd.isDefined(h.attribute_name)){fr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){fr(rr.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}wG.forEach(_=>{fd.isDefined(h[_])?fd.isBoolean(h[_])||fr(rr.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):fr(rr.ATTR_PERM_MISSING(_,p),r,a,l)}),!f.read&&h.read===!0&&(f.read=!0),!f.insert&&h.insert===!0&&(f.insert=!0),!f.update&&h.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return _ae(r)}o(OG,"customValidate");CG.exports={addRoleValidation:fae,alterRoleValidation:mae,dropRoleValidation:hae};function Eae(e){let{operation:t,permission:r}=e;if(t===md.OPERATIONS_ENUM.ADD_ROLE||t===md.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 rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?md.ROLE_TYPES_ENUM.SUPER_USER:md.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Eae,"validateNoSUPerms");function _ae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return sae(new Error,n,oae.BAD_REQUEST)}else return null}o(_ae,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var Oh=M((CDe,vG)=>{"use strict";var LG=Dn(),DG=sn(),gae=El(),VN=PG(),KN=Co(),ODe=require("uuid").v4,Sae=require("util"),sS=(k(),v(W)),Tae=ie(),YN=DG.searchByValue,Rae=DG.searchByHash,yae=Sae.promisify(gae.delete),Aae=ai(),bae=Ku(),{hdbErrors:Iae,handleHDBError:wl}=ge(),{HDB_ERROR_MSGS:MG,HTTP_STATUS_CODES:wh}=Iae,{UserEventMsg:WN}=oi();vG.exports={addRole:Nae,alterRole:wae,dropRole:Oae,listRoles:Cae};function $N(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o($N,"scrubRoleDetails");async function Nae(e){let t=VN.addRoleValidation(e);if(t)throw t;e=$N(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 YN(r)||[])}catch(i){throw wl(i)}if(n&&n.length>0)throw wl(new Error,MG.ROLE_ALREADY_EXISTS(e.role),wh.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await LG.insert(s),KN.signalUserChange(new WN(process.pid)),e=$N(e),e}o(Nae,"addRole");async function wae(e){let t=VN.alterRoleValidation(e);if(t)throw t;e=$N(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await LG.update(r)}catch(s){throw wl(s)}if(n&&n?.message==="updated 0 of 1 records")throw wl(new Error,"Invalid role id",wh.BAD_REQUEST,void 0,void 0,!0);return await KN.signalUserChange(new WN(process.pid)),e}o(wae,"alterRole");async function Oae(e){let t=VN.dropRoleValidation(e);if(t)throw wl(new Error,t,wh.BAD_REQUEST,void 0,void 0,!0);let r=new bae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Rae(r));if(n.length===0)throw wl(new Error,MG.ROLE_NOT_FOUND,wh.NOT_FOUND,void 0,void 0,!0);let s=new Aae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await YN(s)),a=!1;if(Tae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw wl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,wh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await yae(c),KN.signalUserChange(new WN(process.pid)),`${n[0].role} successfully deleted`}o(Oae,"dropRole");async function Cae(){return YN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(Cae,"listRoles")});var zN={};we(zN,{start:()=>BG,startOnMainThread:()=>Dae});function BG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,UG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(Pae.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Lae(i)}}}async function Lae(e){let t=st().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,xG.isEqual)(i,e)?void 0:(e.id=r.id,(0,iS.alterRole)(e))}return(0,iS.addRole)(e)}var iS,UG,xG,Pae,Dae,FG=ce(()=>{Me();iS=w(Oh()),UG=require("yaml"),xG=require("lodash"),Pae=["super_user","cluster_user","structure_user"];o(BG,"start");o(Lae,"ensureRole");Dae=BG});async function oS(e){let t=(0,GG.pathToFileURL)(e).toString();if(Mae)return Ch||(Ch=vae(xae)),(await(await Ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function vae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ch=new Compartment({console,Math,Date,fetch:Uae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,kG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Ur,s.tables=ln,s.databases=He}};let n=await(0,HG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Ch}function Uae(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 xae(){return{Resource:Ur,tables:ln}}var HG,kG,GG,Mae,Ch,jN=ce(()=>{Pa();Me();HG=require("fs/promises"),kG=require("path"),GG=require("url"),Mae=!1;o(oS,"secureImport");o(vae,"getCompartment");o(Uae,"secureOnlyFetch");o(xae,"getGlobalVars")});var QN={};we(QN,{handleApplication:()=>Bae,suppressHandleApplicationWarning:()=>Fae});function $G(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Bae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}oS(t.absolutePath).then(r=>{let n=(0,qG.dirname)(t.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");$G(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),VG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function VG(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;$G(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&VG(e,s,i)}}var qG,Fae,KG=ce(()=>{jN();qG=require("path");o($G,"isResource");o(Bae,"handleApplication");o(VG,"recurseForResources");Fae=!0});var XN={};we(XN,{start:()=>Hae});function Hae({resources:e}){e.set("login",JN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var JN,YG=ce(()=>{Pa();o(Hae,"start");JN=class extends Ur{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function JG(e){let t={openapi:kae,info:{title:"HarperDB HTTP REST interface",version:QG.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:a,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(a)for(let{type:y,name:N,elements:O,relationship:F,definition:Z}of a){if(F)y==="array"?u[N]={type:"array",items:{$ref:Ka+O.type}}:u[N]={$ref:Ka+y};else{let G=Z??O?.definition;if(G){if(!t.components.schemas[G.type]){let Y={};G.properties.forEach(K=>{Y[K.name]=new rw(ZN[K.type],K.type)}),t.components.schemas[G.type]=new jG(Y)}y==="array"?u[N]={type:"array",items:{$ref:Ka+G.type}}:u[N]={$ref:Ka+G.type}}else y==="array"?O.type==="Any"||O.type=="ID"?u[N]={type:"array",items:{format:O.type}}:u[N]={type:"array",items:new rw(ZN[O.type],O.type)}:y==="Any"||y=="ID"?u[N]={format:y}:u[N]=new rw(ZN[y],y)}d.push(new nw(N,"query",u[N]))}let f=Object.keys(u),m=new nw(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new nw("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new jG(u);let p=l.post!==Resource.prototype.post||l.update,_=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",T="/"+s+"/";p&&(t.paths[T]={},t.paths[T].post=new Gae(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new ew(d,r,{200:new tw({$ref:Ka+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zG(d,r,"delete all the records that match the provided query",{204:new WG})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new ew([m],r,{200:new tw({$ref:Ka+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new qae([m],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zG([m],r,"delete a record with the given primary key",{204:new WG})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new ew([m,h],r,{200:new tw({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function Gae(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ka+e}}}},this.security=t,this.responses={200:{description:sw,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function ew(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tw(e){this.description=sw,this.content={"application/json":{schema:e}}}function WG(){this.description="successfully processed request, no content returned to client"}function qae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ka+r}}}},this.responses={200:{description:sw}}}function zG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function jG(e){this.type="object",this.properties=e}function rw(e,t){this.type=e,this.format=t}function nw(e,t,r){this.name=e,this.in=t,this.schema=r}var QG,kae,ZN,Ka,sw,XG=ce(()=>{QG=w(bt()),kae="3.0.3",ZN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ka="#/components/schemas/",sw="successful operation";o(JG,"generateJsonApi");o(Gae,"Post");o(ew,"Get");o(tw,"Response200");o(WG,"Response204");o(qae,"Put");o(zG,"Delete");o(jG,"ResourceSchema");o(rw,"Type");o(nw,"Parameter")});var eq={};we(eq,{Request:()=>Ya,createReuseportFd:()=>aS});var ZG,Ya,iw,ow,aS,Ph=ce(()=>{ZG=require("os"),Ya=class{static{o(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 ow(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 iw(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},iw=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},ow=class{constructor(t){this.asObject=t}static{o(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,ZG.platform)()!="win32"&&(aS=require("node-unix-socket").createReuseportFd)});var lS={};we(lS,{parseHeaderValue:()=>cw,start:()=>Kae});async function Vae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&I_(e);let i=new Os;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==tq){let g=cS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ri(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=cw(g);for(let T of R)switch(T.name){case"max-age":e.expiresAt=T.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=cw(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 f=await Ft(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=To(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new pd.ClientError(g,400)}if(e.authorize=!0,a===tq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return JG(cS);throw new pd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new pd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new pd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,aw.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=JH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=cm(f.data,e,f)),f}else if(h=e.lastModified){$ae[0]=h;let g=String.fromCharCode(34,(zr[0]&63)+62,(zr[0]>>6)+(zr[1]<<2&63)+62,(zr[1]>>4)+(zr[2]<<4&63)+62,(zr[2]>>2)+62,(zr[3]&63)+62,(zr[3]>>6)+(zr[4]<<2&63)+62,(zr[4]>>4)+(zr[5]<<4&63)+62,(zr[5]>>2)+62,(zr[6]&63)+62,(zr[6]>>6)+(zr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),aw.lastModified&&i.setIfNone("Last-Modified",new Date(h).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:m,headers:i,body:void 0},_=e.loadedFromSource??f?.wasLoadedFromSource?.();return _!==void 0&&(p.wasCacheMiss=_,!_&&h&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||h))/1e3))),f!==void 0&&(p.body=cm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?fi.warn(a):fi.info(a):fi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=cm(a.contentType?a:sq(a),e,c),c}}function Kae(e){aw=e,e.includeExpensiveRecordCountEstimates&&(Ya.prototype.includeExpensiveRecordCountEstimates=!0),!rq&&(rq=!0,cS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Vae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Lh++;let s=new Vn;nq||(nq=!0,ch(l=>{Lh>0&&l.push({metric:"ws-connections",connections:Lh,byThread:!0})}));let i;t.on("error",l=>{i=!0,fi.warn(l)});let a;t.on("message",o(function(u){a||(a=To(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);it(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Lh--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=cS.getMatch(l,"ws");if(Wr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,it(p=>({count:p.count,total:Lh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ri(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Ft(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await ba(h.value,r);t.send(p),it(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(_=>t._socket.once("drain",_))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?fi.warn(l):fi.info(l):fi.error(l),t.close(Yae[l.statusCode]||1011,sq(l))}t.close()},e))}function cw(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var fi,pd,sq,zr,$ae,aw,tq,rq,cS,nq,Lh,Yae,iq=ce(()=>{Ro();Wi();fi=w(Q()),pd=w(ge());N_();Ru();Bc();uh();XG();Ph();O_();({errorToString:sq}=fi),zr=new Uint8Array(8),$ae=new Float64Array(zr.buffer,0,1),aw={},tq="openapi";o(Vae,"http");Lh=0;o(Kae,"start");Yae={401:3e3,403:3003};o(cw,"parseHeaderValue")});var lw=M((tMe,aq)=>{var{recordAction:uS,recordActionBinary:oq}=(Wi(),v(wg)),Wae=require("fastify-plugin"),zae=200;aq.exports=Wae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),uS(a,"duration",u,f,d),oq(s.raw.statusCode<400,"success",u,f,d),oq(1,"response_"+s.raw.statusCode,u,f,d);let m=zae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{uS(performance.now()-c,"transfer",u,f,d),uS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,uS(m,"bytes-sent",u,f,d));let h=a.toFixed(3),p=s.getHeader("Server-Timing"),_=`db;dur=${h}`;s.header("Server-Timing",p?`${p}, ${_}`:_)}),r()},{name:"hdb-request-time"})});var lq=M((rMe,cq)=>{var jae=ut(),Qae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};cq.exports=function(e){return jae.validateObject(e,Qae)}});var dS=M((nMe,uq)=>{"use strict";var Jae=(k(),v(W)).OPERATIONS_ENUM,uw=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Jae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uq.exports=uw});var vh={};we(vh,{createTokens:()=>mw,getJWTRSAKeys:()=>ES,refreshOperationToken:()=>hw,validateOperationToken:()=>pw,validateRefreshToken:()=>_S});async function ES(){if(fS)return fS;try{let e=Dh.default.join(Mh.default.getHdbBasePath(),zy),t=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PASSPHRASE_NAME),"utf8"),r=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PRIVATE_KEY_NAME),"utf8");return fS={publicKey:await mS.default.readFile(Dh.default.join(e,Yf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},fS}catch(e){throw pS.default.error(e),new mi.ClientError(_d.NO_ENCRYPTION_KEYS,Ed.INTERNAL_SERVER_ERROR)}}async function mw(e){let t=(0,dw.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new mi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,fw.findAndValidateUser)(e.username,e.password,f)}catch(f){throw pS.default.error(f),new mi.ClientError(_d.INVALID_CREDENTIALS,Ed.UNAUTHORIZED)}if(!r)throw new mi.ClientError(_d.INVALID_CREDENTIALS,Ed.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await ES(),c=await gd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??pq,algorithm:hS,subject:Sd.OPERATION}),l=await gd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Xae,algorithm:hS,subject:Sd.REFRESH}),u=FI(l,xr.SHA256);if((await(0,dq.update)(new fq.default(Kf,gu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new mi.ClientError(_d.REFRESH_TOKEN_SAVE_FAILED,Ed.INTERNAL_SERVER_ERROR);return mq.default.signalUserChange(new hq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function hw(e){let t=(0,dw.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new mi.ClientError(t.message);let{refresh_token:r}=e;await _S(r);let n=await ES(),s=await gd.default.decode(r);return{operation_token:await gd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:pq,algorithm:hS,subject:Sd.OPERATION})}}async function pw(e){return Eq(e,Sd.OPERATION)}async function _S(e){return Eq(e,Sd.REFRESH)}async function Eq(e,t){try{let r=await ES(),n=await gd.default.verify(e,r.publicKey,{algorithms:hS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,fw.findAndValidateUser)(n.username,void 0,!1);if(t===Sd.REFRESH&&!HI(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw pS.default.warn(r),r?.name==="TokenExpiredError"?new mi.ClientError(_d.TOKEN_EXPIRED,Ed.FORBIDDEN):new mi.ClientError(_d.INVALID_TOKEN,Ed.UNAUTHORIZED)}}var gd,mS,Dh,Xi,dw,mi,pS,fw,dq,fq,mq,hq,Mh,Ed,_d,pq,Xae,hS,Sd,fS,Td=ce(()=>{gd=w(require("jsonwebtoken")),mS=w(require("fs-extra")),Dh=w(require("node:path")),Xi=w(require("joi")),dw=w(ut());k();mi=w(ge()),pS=w(Q());mg();fw=w(ts()),dq=w(Dn()),fq=w(dS()),mq=w(Co()),hq=w(oi()),Mh=w(oe()),{HTTP_STATUS_CODES:Ed,AUTHENTICATION_ERROR_MSGS:_d}=mi.hdbErrors;Mh.default.initSync();pq=Mh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Xae=Mh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",hS="RS256",Sd={OPERATION:"operation",REFRESH:"refresh"};o(ES,"getJWTRSAKeys");o(mw,"createTokens");o(hw,"refreshOperationToken");o(pw,"validateOperationToken");o(_S,"validateRefreshToken");o(Eq,"validateToken")});var Ew=M((cMe,Sq)=>{"use strict";var Zae=lq(),Rd=require("passport"),ece=require("passport-local").Strategy,tce=require("passport-http").BasicStrategy,rce=require("util"),nce=ts(),gq=rce.callbackify(nce.findAndValidateUser),aMe=tn(),sce=(k(),v(W)),_q=(Td(),v(vh));Rd.use(new ece(function(e,t,r){gq(e,t,r)}));Rd.use(new tce(function(e,t,r){gq(e,t,r)}));Rd.serializeUser(function(e,t){t(null,e)});Rd.deserializeUser(function(e,t){t(null,e)});function ice(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Rd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===sce.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?_q.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):_q.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Rd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(ice,"authorize");function oce(e,t){let r=Zae(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(oce,"checkPermissions");Sq.exports={authorize:ice,checkPermissions:oce}});var gS=M((uMe,Tq)=>{"use strict";var ace=Jn();Tq.exports={writeTransaction:cce};function cce(e,t,r){return ace.writeTransaction(e,t,r)}o(cce,"writeTransaction")});var bq=M((mMe,Aq)=>{"use strict";var lce=sn(),uce=ii(),Rq=Q(),dce=Dn(),fMe=gS(),fce=require("clone"),gw=require("alasql"),mce=rg(),yq=require("util"),hce=yq.promisify(uce.getTableSchema),pce=yq.promisify(lce.search),Ece=(k(),v(W)),_w=ie();mce(gw);Aq.exports={update:gce};var _ce="There was a problem performing this update. Please check the logs and try again.";async function gce({statement:e,hdb_user:t}){let r=await hce(e.table.databaseid,e.table.tableid),n=Sce(e.columns);_w.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=fce(s),c=_w.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=gw.parse(l).statements[0],d=await pce(u),f=Tce(n,d);return Rce(a,f,t)}o(gce,"update");function Sce(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=gw.compile(`SELECT ${r.expression.toString()} AS [${Ece.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Rq.error(t),new Error(_ce)}}o(Sce,"createUpdateRecord");function Tce(e,t){return _w.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Tce,"buildUpdateRecords");async function Rce(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await dce.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Rq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Rce,"updateRecords")});var Nq=M((_Me,Iq)=>{var yce=require("alasql"),Ace=sn(),bce=Q(),Ice=Jn(),Tw=require("util"),Sw=ie(),Nce=(k(),v(W)),wce=ii(),pMe=gS(),EMe=Dn(),Oce="record",Cce="successfully deleted",Pce=Tw.callbackify(vce),Lce=Tw.promisify(Ace.search),Dce=Tw.promisify(wce.getTableSchema);Iq.exports={convertDelete:Pce};function Mce(e){return`${e.deleted_hashes.length} ${Oce}${e.deleted_hashes.length===1?"":"s"} ${Cce}`}o(Mce,"generateReturnMessage");async function vce({statement:e,hdb_user:t}){let r=await Dce(e.table.databaseid,e.table.tableid);Sw.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Sw.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=yce.parse(a).statements[0],l={operation:Nce.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Lce(c);let u=await Ice.deleteRecords(l);return Sw.isEmptyOrZeroLength(u.message)&&(u.message=Mce(u)),delete u.txn_time,u}catch(u){throw bce.error(u),u.hdb_code?u.message:u}}o(vce,"convertDelete")});var Lq=M((SMe,Pq)=>{"use strict";var Uce=Ua(),{hdbErrors:wq}=ge(),{getDatabases:Oq}=(Me(),v(Et));Pq.exports={checkSchemaExists:Cq,checkSchemaTableExists:xce,schemaDescribe:Uce};async function Cq(e){if(!Oq()[e])return wq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Cq,"checkSchemaExists");async function xce(e,t){let r=await Cq(e);if(r)return r;if(!Oq()[e][t])return wq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(xce,"checkSchemaTableExists")});var Iw=M((bMe,$q)=>{"use strict";var{decode:Bce}=require("msgpackr"),{isMainThread:RMe,parentPort:yMe,threadId:AMe}=require("worker_threads"),RS=mr(),yd=Ot(),Aw=(k(),v(W)),dn=Q(),yw=oe(),Fce=(k(),v(W)),{onMessageByType:Hce}=nt(),Uq=$i(),{recordAction:Dq,recordActionBinary:kce}=(Wi(),v(wg)),{publishToStream:Gce}=RS,{ConsumerEvents:Mq}=require("nats"),qce=sn(),{promisify:$ce}=require("util"),{decodeBlobsWithWrites:Vce}=(Kn(),v(o_)),xq=$ce(setTimeout),yS=1e4,AS,TS,Kce,Yce,Bq,Uh=new Map,Ad=new Map;$q.exports={initialize:Fq,ingestConsumer:bw,setSubscription:Wce,setIgnoreOrigin:Qce,getDatabaseSubscriptions:jce,updateConsumer:Hq};async function Fq(){Hce(Aw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await Hq(n)}),Bq=!0,dn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await RS.getNATSReferences();AS=e,TS=e.info.server_name,Kce=t,Yce=r}o(Fq,"initialize");async function Hq(e){if(e.status==="start"){let{js:t,jsm:r}=await kq(e.node_domain_name);bw(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Uh.get(e.stream_name+e.node_domain_name);t&&(dn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Uh.set(e.stream_name+e.node_domain_name,"close")),Ad.get(e.node_domain_name)==="failed"&&Ad.set(e.node_domain_name,"close")}}o(Hq,"updateConsumer");var bS=new Map;function Wce(e,t,r){let n=bS.get(e);n||bS.set(e,n=new Map),n.set(t,r),Bq||Fq().then(zce)}o(Wce,"setSubscription");async function zce(){let e=await qce.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+yd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await kq(r),!n))break;let{schema:a,table:c}=i,l=Uq.createNatsTableStreamName(a,c);bw(l,n,s,r)}}}o(zce,"accessConsumers");async function kq(e){let t,r,n=1;for(;!r;)try{t=await AS.jetstream({domain:e}),r=await AS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ad.get(e)==="close")break;Ad.set(e,"failed"),n%10===1&&dn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<yS?n++*100:yS;await xq(i)}return{js:t,jsm:r}}o(kq,"connectToRemoteJS");function jce(){return bS}o(jce,"getDatabaseSubscriptions");var Gq;function Qce(e){Gq=e}o(Qce,"setIgnoreOrigin");var qq=100,vq=new Array(qq),SS=0;async function bw(e,t,r,n){let{connection:s}=await RS.getNATSReferences();AS=s,TS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,TS),dn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Ad.get(n)==="close")break;a%10===1&&dn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(dn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await RS.createConsumer(r,e,TS,new Date(Date.now()).toISOString()));let d=a++*100<yS?a++*100:yS;await xq(d)}let c=!1,l;for(;!c;){if(Uh.get(e+n)==="close"||Ad.get(n)==="close"){Uh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:yw.get(Aw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Uh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===Mq.ConsumerDeleted&&(await l.close(),c=!0),d.type===Mq.HeartbeatsMissed){let f=d.data;dn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(dn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await vq[SS],vq[SS]=Jce(d).catch(f=>{dn.error(f)}),++SS>=qq&&(SS=0)}catch(d){d.message==="consumer deleted"?(dn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):dn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(bw,"ingestConsumer");async function Jce(e){let t;await Vce(()=>{t=Bce(e.data)}),Dq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),dn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=yw.get(Aw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(yd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!Gq),kce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(yd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:h}=t;dn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),dn.trace(`messageProcessor nats msg id: ${e.headers.get(yd.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(O=>p=O),{timestamp:g,user:R,node_name:T}=m||{},y=bS.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=p,y.send(t);else if(d.length===1&&!l)y.send({type:Rw(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:R,nodeName:T});else{let O=d.map((F,Z)=>({type:Rw(a),value:F,expiresAt:h,id:f?.[Z],table:u}));for(;l;)O.push({type:Rw(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:p,user:R,nodeName:T})}yw.get(Fce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Gce(e.subject.split(".").slice(0,-1).join("."),Uq.createNatsTableStreamName(c,u),e.headers,e.data),await _;let N=Date.now()-g;g&&Dq(N,"replication-latency",e.subject,a,"ingest")}catch(a){dn.error(a)}e.ack()}o(Jce,"messageProcessor");function Rw(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(Rw,"convertOperation")});var mr=M((LMe,o$)=>{"use strict";var kr=oe();kr.initSync();var Xce=require("fs-extra"),Zce=require("semver"),Fh=require("path"),{monotonicFactory:ele}=require("ulidx"),Kq=ele(),tle=require("util"),Yq=require("child_process"),rle=tle.promisify(Yq.exec),nle=Yq.spawn,jr=Ot(),Qe=(k(),v(W)),{packageJson:sle,PACKAGE_ROOT:ile}=bt(),IS=ie(),hi=Q(),NS=$i(),ole=gS(),xh=wt(),{broadcast:ale,onMessageByType:cle,getWorkerIndex:lle}=nt(),{isMainThread:Wq}=require("worker_threads"),{Encoder:ule,decode:Cw}=require("msgpackr"),zq=new ule,{isEmpty:Ll}=IS,jq=ts(),NMe=48*36e11;Wq&&cle(Qe.ITC_EVENT_TYPES.RESTART,()=>{fn=void 0,Pl=void 0});var{connect:dle,StorageType:fle,RetentionPolicy:mle,AckPolicy:Pw,DeliverPolicy:Lw,DiscardPolicy:hle,NatsConnection:wMe,JetStreamManager:OMe,JetStreamClient:CMe,StringCodec:PMe,JSONCodec:ple,createInbox:Dw,headers:Ele,ErrorCode:Vq}=require("nats"),{recordAction:_le}=(Wi(),v(wg)),{encodeBlobsAsBuffers:gle}=(Kn(),v(o_)),Qq=ple(),Sle="clustering",Tle=sle.engines[jr.NATS_SERVER_NAME],Rle=Fh.join(ile,"dependencies"),Ow=Fh.join(Rle,`${process.platform}-${process.arch}`,jr.NATS_BINARY_NAME),Nw,ww,Bh,Ol,Cl;o$.exports={runCommand:Jq,checkNATSServerInstalled:yle,createConnection:Mw,getConnection:Hh,getJetStreamManager:kh,getJetStream:Zq,getNATSReferences:Zi,getServerList:ble,createLocalStream:vw,listStreams:e$,deleteLocalStream:Ile,getServerConfig:bd,listRemoteStreams:Nle,viewStream:wle,viewStreamIterator:Ole,publishToStream:Cle,request:Dle,reloadNATS:Uw,reloadNATSHub:Mle,reloadNATSLeaf:vle,extractServerName:Lle,requestErrorHandler:Ule,createLocalTableStream:s$,createTableStreams:Fle,purgeTableStream:i$,purgeSchemaTableStreams:Hle,getStreamInfo:kle,updateLocalStreams:qle,closeConnection:Ale,getJsmServerName:wS,addNatsMsgHeader:t$,clearClientCache:Xq,updateRemoteConsumer:xle,createConsumer:r$,updateConsumerIterator:Ble};async function Jq(e,t=void 0){let{stdout:r,stderr:n}=await rle(e,{cwd:t});if(n)throw new Error(n.replace(`
21
21
  `,""));return r.replace(`
22
- `,"")}o(Qq,"runCommand");async function Rle(){try{await Jce.access(Ow)}catch{return!1}let e=await Qq(`${Ow} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Xce.eq(t,Sle)}o(Rle,"checkNATSServerInstalled");async function Mw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await zq.getClusterUser();if(Pl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}hi.trace("create nats connection called");let i=await ule({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),hi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&hi.error("Error with Nats client connection, connection closed",a),i===mn&&Jq()}),i}o(Mw,"createConnection");function Jq(){mn=void 0,wl=void 0,Ol=void 0,Cl=void 0}o(Jq,"clearClientCache");async function yle(){mn&&(await mn.drain(),mn=void 0,wl=void 0,Ol=void 0,Cl=void 0)}o(yle,"closeConnection");var mn,Cl;async function Hh(){return Cl||(Cl=Mw(Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mn=await Cl),mn||Cl}o(Hh,"getConnection");async function kh(){if(wl)return wl;Pl(mn)&&await Hh();let{domain:e}=Ad(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wl=await mn.jetstreamManager({domain:e,timeout:6e4}),wl}o(kh,"getJetStreamManager");async function Xq(){if(Ol)return Ol;Pl(mn)&&await Hh();let{domain:e}=Ad(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=mn.jetstream({domain:e,timeout:6e4}),Ol}o(Xq,"getJetStream");async function Zi(){let e=mn||await Hh(),t=wl||await kh(),r=Ol||await Xq();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function Ale(e){let t=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await zq.getClusterUser(),s=await Mw(t,r,n),i=Dw(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=jq.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await IS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Ale,"getServerList");async function vw(e,t){let{jsm:r}=await Zi(),n=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:dle.File,retention:fle.Limits,subjects:t,discard:mle.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(vw,"createLocalStream");async function Zq(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(Zq,"listStreams");async function ble(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(ble,"deleteLocalStream");async function Ile(e){let{connection:t}=await Zi(),r=[],n=Dw(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(jq.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Ile,"listRemoteStreams");async function Nle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=Vq(),a={durable_name:i,ack_policy:Pw.Explicit};t&&(a.deliver_policy=Lw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=Cw(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Qr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Nle,"viewStream");async function*wle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=Vq(),a={durable_name:i,ack_policy:Pw.Explicit};t&&(a.deliver_policy=Lw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=Cw(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Qr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(wle,"viewStreamIterator");async function Ole(e,t,r,n){hi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=e$(n,r);let{js:s}=await Zi(),i=await wS(),a=`${e}.${i}`,c=await _le(()=>n instanceof Uint8Array?n:Wq.encode(n));try{hi.trace(`publishToStream publishing to subject: ${a}`),Ele(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return r$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){hi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await vw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Ole,"publishToStream");function e$(e,t){t===void 0&&(t=ple());let r=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Qr.MSG_HEADERS.ORIGIN)&&r&&t.append(Qr.MSG_HEADERS.ORIGIN,r),t}o(e$,"addNatsMsgHeader");function Ad(e){e=e.toLowerCase();let t=Fh.join(Gr.get(Qe.CONFIG_PARAMS.ROOTPATH),gle);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Pl(ww)&&(ww={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Qr.SERVER_SUFFIX.HUB,config_file:Qr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fh.join(t,Qr.PID_FILES.HUB),hdbNatsPath:t}),ww;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Pl(Nw)&&(Nw={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Qr.SERVER_SUFFIX.LEAF,config_file:Qr.NATS_CONFIG_FILES.LEAF_SERVER,domain:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Qr.SERVER_SUFFIX.LEAF,pid_file_path:Fh.join(t,Qr.PID_FILES.LEAF),hdbNatsPath:t}),Nw;hi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Ad,"getServerConfig");async function t$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Pw.Explicit,durable_name:r,deliver_policy:Lw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(t$,"createConsumer");async function Cle(e,t,r){await e.consumers.delete(t,r)}o(Cle,"removeConsumer");function Ple(e){return e.split(".")[1]}o(Ple,"extractServerName");async function Lle(e,t,r=6e4,n=Dw()){if(!IS.isObject(t))throw new Error("data param must be an object");let s=Wq.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return Cw(c.data)}o(Lle,"request");function Uw(e){return new Promise(async(t,r)=>{let n=rle(Ow,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(Uw,"reloadNATS");async function Dle(){let{pid_file_path:e}=Ad(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Uw(e)}o(Dle,"reloadNATSHub");async function Mle(){let{pid_file_path:e}=Ad(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Uw(e)}o(Mle,"reloadNATSLeaf");function vle(e,t,r){let n;switch(e.code){case $q.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case $q.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(vle,"requestErrorHandler");async function Ule(e,t){let r=t+Qr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await $le(r),{schema:i,table:a}=e,c=NS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await r$(async()=>{if(e.subscribe===!0)await t$(s,c,n.info.server_name,l);else try{await Cle(s,c,n.info.server_name)}catch(u){hi.trace(u)}})}o(Ule,"updateRemoteConsumer");async function xle(e,t,r,n){let s=NS.createNatsTableStreamName(e,t),i=r+Qr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!Yq&&cle()<Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Iw();await c(a)}await ole(a),n==="stop"&&await IS.asyncSetTimeout(1e3)}o(xle,"updateConsumerIterator");function r$(e){return ile.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(r$,"exclusiveLock");async function n$(e,t){let r=NS.createNatsTableStreamName(e,t),n=await wS(),s=kle(e,t,n);await vw(r,[s])}o(n$,"createLocalTableStream");async function Ble(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await n$(n,s)}}o(Ble,"createTableStreams");async function s$(e,t,r=void 0){if(Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=NS.createNatsTableStreamName(e,t),{domain:s}=Ad(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Hh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")hi.warn(n);else throw n}}o(s$,"purgeTableStream");async function Fle(e,t){if(Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await s$(e,t[r])}o(Fle,"purgeSchemaTableStreams");async function Hle(e){return(await kh()).streams.info(e)}o(Hle,"getStreamInfo");function kle(e,t,r){return`${Qr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(kle,"createSubjectName");async function wS(){if(Bh)return Bh;if(Bh=(await kh())?.nc?.info?.server_name,Bh===void 0)throw new Error("Unable to get jetstream manager server name");return Bh}o(wS,"getJsmServerName");async function Gle(){let e=await kh(),t=await wS(),r=await Zq();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=qle(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");hi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Gle,"updateLocalStreams");function qle(e){let{config:t}=e,r=!1,n=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(qle,"updateStreamLimits");async function $le(e){let t,r;try{t=await mn.jetstream({domain:e}),r=await mn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw hi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o($le,"connectToRemoteJS")});function xw(e){let t=e.get(OS),r=t?(0,bd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Ze(),s=!1;r.nodeName=Ze();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:qh(e)??1,nodes:[]})})}i[n]=0,e.putSync(OS,(0,bd.pack)(r))}return r}function Gh(e){return xw(e).remoteNameToId}function a$(e,t){let r=xw(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(OS,(0,bd.pack)(r)),s}function CS(e,t){let r=xw(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(OS,(0,bd.pack)(r))}return o$.trace?.("The remote node name map",e,n,s),s}var o$,bd,OS,Bw=ue(()=>{o$=w(ei());is();bd=require("msgpackr"),OS=Symbol.for("remote-ids");o(xw,"getIdMappingRecord");o(Gh,"exportIdMapping");o(a$,"remoteToLocalNodeId");o(CS,"getIdOfRemoteNode")});var Fw={};Oe(Fw,{commitsAwaitingReplication:()=>Id,getHDBNodeTable:()=>Kt,getReplicationSharedStatus:()=>Nd,iterateRoutes:()=>Vh,shouldReplicateToNode:()=>$h,subscribeToNodeUpdates:()=>wd});function Kt(){return c$||(c$=ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Nd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function wd(e){Kt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;f$.debug?.("adding node",n,"on node",Ze()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Ze()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Kt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function $h(e,t){let r=Wa.default.get(U.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===Wa.default.get(U.REPLICATION_SHARD))))&&Kt().primaryStore.get(Ze())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Vle(){wd(e=>{za({},(t,r)=>{let n=e.name,s=l$.get(n);if(s||l$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Nd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Id.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Vh(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=Wa.default.get(U.REPLICATION_SECUREPORT)??(!Wa.default.get(U.REPLICATION_PORT)&&Wa.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Wa.default.get(U.REPLICATION_PORT)||Wa.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){u$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var u$,d$,Wa,f$,c$,l$,Id,Ll=ue(()=>{De();is();rm();u$=require("worker_threads"),d$=w(ge()),Wa=w(oe());k();f$=w(ei());server.nodes=[];o(Kt,"getHDBNodeTable");o(Nd,"getReplicationSharedStatus");o(wd,"subscribeToNodeUpdates");o($h,"shouldReplicateToNode");l$=new Map;tv((e,t,r)=>{if(r>server.nodes.length)throw new d$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Id||(Id=new Map,Vle());let n=Id.get(e);return n||(n=[],Id.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Vle,"startSubscriptionToReplications");o(Vh,"iterateRoutes")});var p$={};Oe(p$,{connectedToNode:()=>Dl,disconnectedFromNode:()=>Cd,ensureNode:()=>Ho,requestClusterStatus:()=>h$,startOnMainThread:()=>kw});async function kw(e){let t=0,r=nt();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){PS.set(i,qh(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=Ze();function c(){let l=Kt().primaryStore.get(a);if(l!==null){let u=e.url??ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Ho(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Kt().primaryStore.get(a)&&c();for(let l of Vh(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}wd(s)});let n;function s(i,a=i?.name){let c=Ze()&&a===Ze()||ja()&&i?.url===ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Kt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ot.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let h;for(let[p,{worker:_,nodes:g}]of m){let y=g[0];if(y&&y.name==a){h=!0;for(let[T,{worker:R}]of m)m.delete(T),ot.warn("Node was deleted, unsubscribing from node",a,T,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:T,url:f});break}}if(h){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){ot.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ot.info(`Added node ${i.name} at ${i.url} for process ${Ze()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Od)if(i.url===m.url){Od.delete(f);break}Od.set(i.name,i)}let u=nt();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=za(e,(f,m,h)=>{h?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ot.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ot.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];PS.has(f)&&Kh.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:m,name:Ze(),startTime:PS.get(f),endTime:Date.now(),replicates:!0}),PS.delete(f));let g=$h(i,f),y=to.workers.filter(T=>T.name==="http");if(h?(p=h.worker,h.nodes=_):g&&(t=t%y.length,p=y[t++],l.set(f,{worker:p,nodes:_,url:i.url}),p?.on("exit",()=>{l.get(f)?.worker===p&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let T={type:"subscribe-to-node",database:f,nodes:_};p?p.postMessage(T):Yh(T)},Kle);else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Kt().primaryStore.get(Ze())?.replicates}),Kt().primaryStore.get(Ze())?.replicates||(n=!1,ot.info("Disabling replication, this node name",Ze(),Kt().primaryStore.get(Ze()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):DS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Cd=o(function(i){try{ot.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Od.keys()),c=a.sort(),l=c.indexOf(i.name||pi(i.url));if(l===-1){ot.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){ot.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!Kh.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,h=(l+1)%c.length;for(;l!==h;){let p=c[h],_=Od.get(p);u=eo.get(_.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){h=(h+1)%c.length;continue}let{worker:y,nodes:T}=g,R=!1;for(let N of d.nodes){if(T.some(O=>O.name===N.name)){ot.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}N.endTime<Date.now()||(T.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){ot.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}ot.info(`Failing over ${i.database} from ${i.name} to ${p}`),y?y.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Yh({database:i.database,nodes:T});return}ot.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ot.error("Error failing over node",a)}},"disconnectedFromNode"),Dl=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){ot.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ot.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ot.debug("Connected node is not named yet",i.database,c);return}if(!Kh.default.get(U.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:h,connected:p}=f;if(h)if(p===!1&&h[0].shard===l.shard)u=!0,c.nodes.push(h[0]);else{let _=h.filter(g=>g&&g.name!==l.name);_.length<h.length&&(f.nodes=_,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:h}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Cd),(0,to.onMessageByType)("connected-to-node",Dl),(0,to.onMessageByType)("request-cluster-status",h$)}function h$(e,t){let r=[];for(let[n,s]of Od)try{let i=eo.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(h=>!(h.endTime<Date.now())).map(h=>h.name)});let c=(0,Hw.cloneDeep)(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Ho(e,t){let r=Kt();e=e??pi(t.url),t.name=e;try{if(t.ca){let s=new m$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!Kh.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=(0,Hw.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,LS,ot,Hw,Kh,m$,Kle,eo,Cd,Dl,Od,PS,Wh=ue(()=>{De();to=w(rt());is();LS=require("worker_threads");Ll();ot=w(Q()),Hw=require("lodash"),Kh=w(oe());k();m$=require("crypto"),Kle=200,eo=new Map,Od=new Map,PS=new Map;o(kw,"startOnMainThread");o(h$,"requestClusterStatus");LS.parentPort&&(Cd=o(e=>{LS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Dl=o(e=>{LS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{Yh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{DS(e)}));o(Ho,"ensureNode")});var as=M(Yt=>{"use strict";var hr=require("path"),{watch:Yle}=require("chokidar"),Bn=require("fs-extra"),Pd=require("node-forge"),R$=require("net"),{generateKeyPair:Gw,X509Certificate:ko,createPrivateKey:y$}=require("crypto"),Wle=require("util");Gw=Wle.promisify(Gw);var Ot=Pd.pki,Ei=require("joi"),{v4:A$}=require("uuid"),{validateBySchema:Kw}=lt(),{forComponent:zle}=Q(),os=oe(),Ls=(k(),v(W)),{CONFIG_PARAMS:vl}=Ls,_i=qI(),{ClientError:Ja}=ge(),vS=require("node:tls"),{relative:b$,join:jle}=require("node:path"),{CERT_PREFERENCE_APP:WMe,CERTIFICATE_VALUES:E$}=_i,Qle=Uc(),qw=bt(),{table:Jle,getDatabases:Xle,databases:MS}=(De(),v(mt)),{getJWTRSAKeys:_$}=(Sd(),v(vh)),ht=zle("tls");Yt.generateKeys=zw;Yt.updateConfigCert=D$;Yt.createCsr=iue;Yt.signCertificate=oue;Yt.setCertTable=Ld;Yt.loadCertificates=C$;Yt.reviewSelfSignedCert=Qw;Yt.createTLSSelector=v$;Yt.listCertificates=x$;Yt.addCertificate=fue;Yt.removeCertificate=hue;Yt.createNatsCerts=lue;Yt.generateCertsKeys=cue;Yt.getReplicationCert=jh;Yt.getReplicationCertAuth=sue;Yt.renewSelfSigned=uue;Yt.hostnamesFromCert=Xw;Yt.getKey=pue;Yt.getHostnamesFromCertificate=Eue;Yt.getPrimaryHostName=Jw;var{urlToNodeName:I$,getThisNodeUrl:Zle,getThisNodeName:xS,clearThisNodeName:eue}=(is(),v(Go)),{readFileSync:tue,statSync:N$}=require("node:fs"),zMe=oe(),{getTicketKeys:rue,onMessageFromWorkers:nue}=rt(),Qa=Q(),{isMainThread:w$}=require("worker_threads"),{TLSSocket:O$,createSecureContext:jMe}=require("node:tls"),Yw=3650,zh=["127.0.0.1","localhost","::1"],Ww=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];nue(async e=>{e.type===Ls.ITC_EVENT_TYPES.RESTART&&(os.initSync(!0),await Qw())});var Jr;function Za(){return Jr||(Jr=Xle().system.hdb_certificate,Jr||(Jr=Jle({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__"}]}))),Jr}o(Za,"getCertTable");async function jh(){let e=v$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(xS());if(!r)return;let n=new ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(jh,"getReplicationCert");async function sue(){Za();let e=(await jh()).options.cert,r=new ko(e).issuer.match(/CN=(.*)/)?.[1];return Jr.get(r)}o(sue,"getReplicationCertAuth");var g$,Xa=new Map;function C$(){if(g$)return;g$=!0;let e=[{configKey:vl.TLS},{configKey:vl.OPERATIONSAPI_TLS}];Za();let t=hr.dirname(qw.getConfigFilePath()),r;for(let{configKey:n}of e){let s=qw.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&b$(jle(t,"keys"),a);c&&S$(a,l=>{Xa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&w$){let d;S$(u,f=>{if(E$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=M$(u),p=new ko(h),_;try{_=Jw(p)}catch(R){ht.error("error extracting host name from certificate",R);return}if(_==null){ht.error("No host name found on certificate");return}if(p.checkIssued(new ko(E$.cert)))return;let g=Jr.primaryStore.get(_),y=N$(u).mtimeMs,T=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&y<=T){y<T&&ht.info(`Certificate ${_} at ${u} is older (${new Date(y)}) than the certificate in the database (${T>1?new Date(T):"only self signed certificate available"})`);return}r=Jr.put({name:_,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:y,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}o(C$,"loadCertificates");function S$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&w$&&ht.warn(`Reloading ${r}:`,i),n=c,t(M$(i)))}catch(c){ht.error(`Error loading ${r}:`,i,c)}},"loadFile");Bn.existsSync(e)?s(e,N$(e)):ht.error(`${r} file not found:`,e),Yle(e,{persistent:!1}).on("change",s)}o(S$,"loadAndWatch");function $w(){let e=Zle();if(e==null){let t=zh[0];return ht.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return I$(e)}o($w,"getHost");function US(){let e=xS();if(e==null){let t=zh[0];return ht.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(US,"getCommonName");async function iue(){let e=await jh(),t=Ot.certificateFromPem(e.options.cert),r=Ot.privateKeyFromPem(e.options.key);ht.info("Creating CSR with cert named:",e.name);let n=Ot.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:US()},...Ww];ht.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:P$()}];return ht.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Pd.pki.certificationRequestToPem(n)}o(iue,"createCsr");function P$(){let e=zh.includes(US())?zh:[...zh,US()];return e.includes($w())||e.push($w()),[{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=>R$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(P$,"certExtensions");async function oue(e){let t={},r=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Za();for await(let d of Jr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Xa.has(d.private_key_name)){n=Xa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Bn.exists(hr.join(r,d.private_key_name))){n=Bn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Vw();s=d.ca,n=d.private_key}n=Ot.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Ot.certificateFromPem(s.certificate);ht.info("Signing CSR with cert named",s.name);let a=Ot.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return ht.error(d),new Error("Error verifying CSR: "+d.message)}let c=Pd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Yw),ht.info("sign cert setting validity:",c.validity),ht.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),ht.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;ht.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Pd.md.sha256.create()),t.certificate=Ot.certificateToPem(c)}else ht.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(oue,"signCertificate");async function aue(e,t){await Ld({name:xS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Ld({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Ot.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(aue,"createCertificateTable");async function Ld(e){let t=new ko(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},Za(),await Jr.patch(e)}o(Ld,"setCertTable");async function zw(){let e=await Gw("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Ot.publicKeyFromPem(e.publicKey),privateKey:Ot.privateKeyFromPem(e.privateKey)}}o(zw,"generateKeys");async function jw(e,t,r){let n=Ot.createCertificate();if(!t){let a=await jh();t=Ot.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Yw);let i=[{name:"commonName",value:US()},...Ww];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(P$()),n.sign(e,Pd.md.sha256.create()),Ot.certificateToPem(n)}o(jw,"generateCertificates");async function Vw(){let e=await x$(),t;for(let r of e){if(!r.is_authority)continue;let n=await U$(r.private_key_name);if(r.private_key_name&&n&&new ko(r.certificate).checkPrivateKey(y$(n))){ht.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ht.trace("No CA found with matching private key")}o(Vw,"getCertAuthority");async function L$(e,t,r=!0){let n=Ot.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Yw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${os.get(vl.REPLICATION_HOSTNAME)??I$(os.get(vl.REPLICATION_URL))??A$().split("-")[0]}`},...Ww];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Pd.md.sha256.create());let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=hr.join(a,_i.PRIVATEKEY_PEM_NAME);return r&&await Bn.writeFile(c,Ot.privateKeyToPem(e)),n}o(L$,"generateCertAuthority");async function cue(){let{privateKey:e,publicKey:t}=await zw(),r=await L$(e,t),n=await jw(e,t,r);await aue(n,r),D$()}o(cue,"generateCertsKeys");async function lue(){let e=await jw(Ot.privateKeyFromPem(_i.CERTIFICATE_VALUES.key),void 0,Ot.certificateFromPem(_i.CERTIFICATE_VALUES.cert)),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME);await Bn.exists(r)||await Bn.writeFile(r,e);let n=hr.join(t,_i.NATS_CA_PEM_NAME);await Bn.exists(n)||await Bn.writeFile(n,_i.CERTIFICATE_VALUES.cert)}o(lue,"createNatsCerts");async function uue(){Za();for await(let e of Jr.search([{attribute:"is_self_signed",value:!0}]))await Jr.delete(e.name);await Qw()}o(uue,"renewSelfSigned");async function Qw(){eue(),await C$(),Za();let e=await Vw();if(!e){ht.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Ot.privateKeyFromPem(Bn.readFileSync(u)),keyPath:u}}catch(d){return ht.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=os.get(vl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=os.get(vl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=b$(a,i);s||(ht.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await zw(),Bn.existsSync(hr.join(a,_i.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${A$().split("-")[0]}.pem`),await Bn.writeFile(hr.join(a,c),Ot.privateKeyToPem(s)));let l=await L$(s,Ot.setRsaPublicKey(s.n,s.e),!1);await Ld({name:l.subject.getField("CN").value,uses:["https"],certificate:Ot.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await jh()){let r=xS();ht.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Vw();let n=Ot.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await jw(Ot.privateKeyFromPem(e.private_key),s,n);await Ld({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(Qw,"reviewSelfSignedCert");function D$(){let e=Qle(Object.keys(Ls.CONFIG_PARAM_MAP),!0),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.PRIVATEKEY_PEM_NAME),n=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,_i.NATS_CA_PEM_NAME),i=Ls.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),qw.updateConfigValue(void 0,void 0,a,!1,!0)}o(D$,"updateConfigCert");function M$(e){return e.startsWith("-----BEGIN")?e:tue(e,"utf8")}o(M$,"readPEM");var T$=vS.createSecureContext;vS.createSecureContext=function(e){if(!e.cert||!e.key)return T$(e);let t={...e};delete t.key,delete t.cert;let r=T$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var due=O$.prototype._init;O$.prototype._init=function(e,t){due.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Ml=new Map;function v$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ml.clear();let d=0;if(MS===void 0){c();return}for await(let f of MS.system.hdb_certificate.search([])){let m=f.certificate,h=new ko(m);f.is_authority&&(h.asString=m,Ml.set(h.subject,m))}for await(let f of MS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",h=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(h+=1);let p=await U$(f.private_key_name),_=f.certificate,g=new ko(_);if(Ml.has(g.issuer)&&(_+=`
23
- `+Ml.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let y={ciphers:f.ciphers,ticketKeys:rue(),availableCAs:Ml,ca:t&&Array.from(Ml.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(y.sessionIdContext=a.sessionIdContext);let T=vS.createSecureContext(y);T.name=f.name,T.options=y,T.quality=h,T.certificateAuthorities=Array.from(Ml),T.certStart=_.toString().slice(0,100);let R=f.hostnames??Xw(g);Array.isArray(R)||(R=[R]);let N;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===$w()&&(h+=2),R$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;h>F&&r.set(O,T)}else Qa.error("No hostname found for certificate at",vS.certificate);Qa.trace("Adding TLS",T.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=T,d=h,a&&(a.defaultContext=T))}catch(m){Qa.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),MS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Qa.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Qa.debug("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?Qa.debug("No certificate found to match",a,"using the default certificate"):Qa.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Qa.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(v$,"createTLSSelector");async function U$(e){let t=Xa.get(e);return!t&&e?await Bn.readFile(hr.join(os.get(vl.ROOTPATH),Ls.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(U$,"getPrivateKeyByName");async function x$(){Za();let e=[];for await(let t of Jr.search([]))e.push(t);return e}o(x$,"listCertificates");async function fue(e){let t=Kw(e,Ei.object({name:Ei.string().required(),certificate:Ei.string().required(),is_authority:Ei.boolean().required(),private_key:Ei.string(),hosts:Ei.array(),uses:Ei.array()}));if(t)throw new Ja(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new ko(n),c=!1,l=!1,u;for(let[h,p]of Xa)!s&&!c&&a.checkPrivateKey(y$(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new Ja("A suitable private key was not found for this certificate");let d;if(!r){try{d=Jw(a)}catch(h){ht.error(h)}if(d==null)throw new Ja("Error extracting certificate host name, please provide a name parameter")}let f=mue(r??d);s&&!c&&!l&&(await Bn.writeFile(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,f+".pem"),s),Xa.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Ld(m),"Successfully added certificate: "+f}o(fue,"addCertificate");function mue(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(mue,"sanitizeName");async function hue(e){let t=Kw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;Za();let n=await Jr.get(r);if(!n)throw new Ja(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Jr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ht.info("Removing private key named",s),await Bn.remove(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,s)))}return await Jr.delete(r),"Successfully removed "+r}o(hue,"removeCertificate");function Jw(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||Xw(e)[0]}o(Jw,"getPrimaryHostName");function Xw(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(Xw,"hostnamesFromCert");async function pue(e){if(e.bypass_auth!==!0)throw new Ja("Unauthorized","401");let t=Kw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await _$()).privateKey;if(r===".jwtPublic")return(await _$()).publicKey;if(Xa.get(r))return Xa.get(e.name);throw new Ja("Key not found")}o(pue,"getKey");function Eue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Eue,"getHostnamesFromCertificate")});var sV={};Oe(sV,{CONFIRMATION_STATUS_POSITION:()=>rV,LATENCY_POSITION:()=>YS,NodeReplicationConnection:()=>vd,OPERATION_REQUEST:()=>rO,RECEIVED_TIME_POSITION:()=>VS,RECEIVED_VERSION_POSITION:()=>$S,RECEIVING_STATUS_POSITION:()=>KS,RECEIVING_STATUS_RECEIVING:()=>nV,RECEIVING_STATUS_WAITING:()=>nO,SENDING_TIME_POSITION:()=>Qh,createWebSocket:()=>WS,databaseSubscriptions:()=>tc,replicateOverWS:()=>Jh,tableUpdateListeners:()=>iO});async function WS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Ze(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!eO){let l=(0,J$.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),eO=u.secureContexts}if(i=eO.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 a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,Z$.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(qS?.caCount!==qo.size&&(qS=X$.createSecureContext({...i.options,ca:[...qo,...i.options.availableCAs.values()]}),qS.caCount=qo.size),c.secureContext=qS),new j$.WebSocket(e,"harperdb-replication-v1",c)}function Jh(e,t,r){let n=t.port||t.securePort,s=Ul.pid%1e3+"-"+Q$.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ae.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||tc,f,m,h=!1,p=t.subscription;p?.then&&p.then(E=>{p=E,p.auditStore&&(f=p.auditStore)});let _=t.tables||u&&nt()[u],g;if(!r){ae.error?.(s,"No authorization provided"),Ss(1008,"Unauthorized");return}let y=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,N,O,F,Z,G,Y,q=6e4,K,ce=0,le=0,se=0,pe=z$.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Ne=new Map,Ue=[],xe=0,Rr;if(t.url){let E=o(()=>{Z&&le===e._socket?.bytesRead&&se===e._socket?.bytesWritten?e.terminate():(Z=performance.now(),e.ping(),le=e._socket?.bytesRead,se=e._socket?.bytesWritten)},"sendPing");O=setInterval(E,Y$).unref(),E()}else Jt();e._socket?.setMaxListeners(200);function Jt(){clearTimeout(F),le=e._socket?.bytesRead,se=e._socket?.bytesWritten,F=setTimeout(()=>{le===e._socket?.bytesRead&&se===e._socket?.bytesWritten&&(ae.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},Y$*2).unref()}o(Jt,"resetPingTimer");function Mt(){if(!(!g||!u))return m||(m=Nd(f,u,g)),m}o(Mt,"getSharedStatus"),u&&ga(u);let Xt,Mf,Cc=[],Gt=[],vf,Uf=[],IE=[],NE=[],Fy=150,xf=25,Pe=0,wE=0,Bf=!1,po,Lr,yr,Ff;e.on("message",E=>{ce=performance.now();try{let S=E.dataView=new $c(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let P=(0,et.decode)(E),[L,D,H]=P;switch(L){case F$:{if(D){if(g){if(g!==D){ae.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,et.encode)([Dd])),Ss(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Ho(g,B)}if(t.connection&&(t.connection.nodeName=g),ae.debug?.(s,"received node name:",g,"db:",u??P[2]),!u)try{ga(u=P[2]),u==="system"&&(Xt=za(t,(B,de)=>{hu(de)&&Sa(de)}),e.on("close",()=>{Xt?.remove()}))}catch(B){ae.warn?.(s,"Error setting database",B),e.send((0,et.encode)([Dd])),Ss(1008,B.message);return}Dr()}break}case V$:{ae.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let de=P[2];B.database=de;let me;hu(de)&&(de==="system"?ke[de]?.[B.table]||(me=V(B,ke[de]?.[B.table])):me=V(B,ke[de]?.[B.table]),f||(f=me?.auditStore),_||(_=nt()?.[de]))}break}case Dd:Ss();break;case rO:try{let B=r?.replicates||r?.subscribers||r?.name;ae.debug?.("Received operation request",D,"from",g),server.operation(D,{user:r},!B).then(de=>{Array.isArray(de)&&(de={results:de}),de.requestId=D.requestId,e.send((0,et.encode)([FS,de]))},de=>{e.send((0,et.encode)([FS,{requestId:D.requestId,error:(0,Md.errorToString)(de)}]))})}catch(B){e.send((0,et.encode)([FS,{requestId:D.requestId,error:(0,Md.errorToString)(B)}]))}break;case FS:let{resolve:C,reject:x}=y.get(D.requestId);D.error?x(new Error(D.error)):C(D),y.delete(D.requestId);break;case Zw:let z=P[3];if(!_){u?ae.error?.(s,"No database found for",u):ae.error?.(s,"Database name never received"),Ss();return}let ne=_[z];ne=V({table:z,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},ne),Cc[H]={name:z,decoder:new et.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return ne.primaryStore.getEntry(B)},rootStore:ne.primaryStore.rootStore};break;case H$:Ff=f?a$(D,f):new Map,vf=P[2],ae.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${vf}`);break;case k$:let re=H;NE[re]=D;break;case $$:Mt()[rV]=D,ae.trace?.(s,"received and broadcasting committed update",D),Mt().buffer.notify();break;case q$:R=D,p.send({type:"end_txn",localTime:R,remoteNodeIds:T}),Mt(),m[$S]=R,m[VS]=Date.now(),m[KS]=nO;break;case HS:{let B=P[1],{fileId:de,size:me,finished:Se,error:ee}=B,j=Ne.get(de);ae.debug?.("Received blob",de,"has stream",!!j,"connectedToBlob",!!j?.connectedToBlob,"length",P[2].length,"finished",Se),j||(j=new tO.PassThrough,j.expectedSize=me,Ne.set(de,j)),j.lastChunk=Date.now();let he=P[2];st(he.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Se?(ee?(j.on("error",()=>{}),j.destroy(new Error("Blob error: "+ee+" for record "+(j.recordId??"unknown")+" from "+g))):j.end(he),j.connectedToBlob&&Ne.delete(de)):j.write(he)}catch(Te){ae.error?.(`Error receiving blob for ${j.recordId} from ${g} and streaming to storage`,Te),Ne.delete(de)}break}case G$:{let B=D,de;try{let me=P[3],Se=Gt[H]||(Gt[H]=_[P[4]]);if(!Se)return ae.warn?.("Unknown table id trying to handle record request",H);let ee=Se.primaryStore.getBinaryFast(Symbol.for("structures")),j=ee?.length??0;if(j>0&&j!==wE){wE=j;let Te=(0,et.decode)(ee);e.send((0,et.encode)([Zw,{typedStructs:Te.typed,structures:Te.named},H,Se.tableName]))}let he=Se.primaryStore.getBinaryFast(me);if(he){let Te=Se.primaryStore.decoder.decode(he,{valueAsBuffer:!0}),fe=ct||{};fe.version=(0,eV.getLastVersion)(),ct&&ct[wu]&Vr&&(Te=Buffer.from(Te),fm(()=>Se.primaryStore.decoder.decode(he),We=>_a(We,me),Se.primaryStore.rootStore)),de=(0,et.encode)([BS,B,{value:Te,expiresAt:fe.expiresAt,version:fe.version,residencyId:fe.residencyId,nodeId:fe.nodeId,user:fe.user}])}else de=(0,et.encode)([BS,B])}catch(me){de=(0,et.encode)([BS,B,{error:me.message}])}e.send(de);break}case BS:{let{resolve:B,reject:de,tableId:me,key:Se}=y.get(P[1]),ee=P[2];if(ee?.error)de(new Error(ee.error));else if(ee){let j;i_(()=>{let he=Cc[me].decoder.decode(ee.value);ee.value=he,ee.key=Se,B(ee)||j&&setTimeout(()=>j.forEach(r_),6e4).unref()},f?.rootStore,he=>{let Te=Pc(he,Se);return j||(j=[]),j.push(Te),Te})}else B();y.delete(P[1]);break}case B$:{yr=D;let B,de,me=!1;if(p){if(u!==p.databaseName&&!p.then){ae.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(ae.debug?.(s,"received subscription request for",u,"at",yr),!p){let Ee;p=new Promise(ft=>{ae.debug?.("Waiting for subscription to database "+u),Ee=ft}),p.ready=Ee,tc.set(u,p)}if(r.name)de=Kt().subscribe(r.name),de.then(async Ee=>{B=Ee;for await(let ft of B){let tt=ft.value;if(!(tt?.replicates===!0||tt?.replicates?.receives||tt?.subscriptions?.some(cr=>(cr.database||cr.schema)===u&&cr.publish!==!1))){me=!0,e.send((0,et.encode)([Dd])),Ss(1008,`Unauthorized database subscription to ${u}`);return}}},Ee=>{ae.error?.(s,"Error subscribing to HDB nodes",Ee)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,et.encode)([Dd])),Ss(1008,`Unauthorized database subscription to ${u}`);return}if(Lr&&(ae.debug?.(s,"stopping previous subscription",u),Lr.emit("close")),yr.length===0)return;let Se=yr[0],ee=o(Ee=>{if(Ee&&(Se.replicateByDefault?!Se.tables.includes(Ee.tableName):Se.tables.includes(Ee.tableName)))return{table:Ee}},"tableToTableEntry"),j={txnTime:0},he,Te,fe=1/0,We,Et=o((Ee,ft)=>{if(Ee.type==="end_txn"){j.txnTime&&(a[i]!==66&&ae.error?.("Invalid encoding of message"),pu(9),pu(E_),Dc(We=ft),ut()),i=c,j.txnTime=0;return}let tt=Ee.nodeId,cr=Ee.tableId,vt=Te[cr];if(!vt&&(vt=Te[cr]=ee(p.tableById[cr]),!vt))return ae.debug?.("Not subscribed to table",cr);let Ts=vt.table,Ut=Ts.primaryStore,Qs=Ut.encoder;(Ee.extendedType&R_||!Qs.typedStructs)&&(Qs._mergeStructures(Qs.getStructures()),Qs.typedStructs&&(Qs.lastTypedStructuresLength=Qs.typedStructs.length));let Eu=he[tt];if(!(Eu&&Eu.startTime<ft&&(!Eu.endTime||Eu.endTime>ft)))return GS&&ae.trace?.(s,"skipping replication update",Ee.recordId,"to:",g,"from:",tt,"subscribed:",he),eM();GS&&ae.trace?.(s,"sending replication update",Ee.recordId,"to:",g,"from:",tt,"subscribed:",he);let Hy=Ee.version,Mc=Ee.residencyId,ky=mu(Mc,Ts),CE;if(ky&&!ky.includes(g)){let Js=mu(Ee.previousResidencyId,Ts);if(Js&&!Js.includes(g)&&(Ee.type==="put"||Ee.type==="patch")||Ts.getResidencyById)return eM();let kf=Ee.recordId;ae.trace?.(s,"sending invalidation",kf,g,"from",tt);let Gf=0;Mc&&(Gf|=Vc),Ee.previousResidencyId&&(Gf|=Kc);let $y,PE=null;for(let tM in Ts.indices){if(!PE){if($y=Ee.getValue(Ut,!0),!$y)break;PE={}}PE[tM]=$y[tM]}CE=Yc(Ee.version,cr,kf,null,tt,Ee.user,Ee.type==="put"||Ee.type==="patch"?"invalidate":Ee.type,Qs.encode(PE),Gf,Mc,Ee.previousResidencyId,Ee.expiresAt)}function eM(){return ae.trace?.(s,"skipping audit record",Ee.recordId),G||(G=setTimeout(()=>{G=null,(We||0)+K$/2<fe&&(GS&&ae.trace?.(s,"sending skipped sequence update",fe),e.send((0,et.encode)([q$,fe])))},K$).unref()),new Promise(setImmediate)}o(eM,"skipAuditRecord");let Gy=Qs.typedStructs,qy=Qs.structures;if((Gy?.length!=vt.typed_length||qy?.length!=vt.structure_length)&&(vt.typed_length=Gy?.length,vt.structure_length=qy.length,ae.debug?.(s,"send table struct",vt.typed_length,vt.structure_length),vt.sentName||(vt.sentName=!0),e.send((0,et.encode)([Zw,{typedStructs:Gy,structures:qy,attributes:Ts.attributes,schemaDefined:Ts.schemaDefined},cr,vt.table.tableName]))),Mc&&!IE[Mc]&&(e.send((0,et.encode)([k$,ky,Mc])),IE[Mc]=!0),j.txnTime!==Hy&&(j.txnTime&&(GS&&ae.trace?.(s,"new txn time, sending queued txn",j.txnTime),a[i]!==66&&ae.error?.("Invalid encoding of message"),ut()),j.txnTime=Hy,i=c,Dc(Hy)),CE)pu(CE.length),Lc(CE);else{let Js=Ee.encoded;Ee.extendedType&Vr&&fm(()=>Ee.getValue(Ut),Gf=>_a(Gf,Ee.recordId),Ut.rootStore);let kf=Js[0]===66?8:0;pu(Js.length-kf),Lc(Js,kf),ae.trace?.("wrote record",Ee.recordId,"length:",Js.length)}return e._socket.writableNeedDrain?new Promise(Js=>{ae.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Js)}):xe>xf?new Promise(Js=>{Rr=Js}):new Promise(setImmediate)},"sendAuditRecord"),ut=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ae.debug?.(s,"Sent message, size:",c-i),st(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ae.debug?.(s,"skipping empty transaction")},"sendQueuedData");Lr=new sO.EventEmitter,Lr.once("close",()=>{me=!0,B?.end()});for(let{startTime:Ee}of yr)Ee<fe&&(fe=Ee);(de||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,Te=p.tableById.map(ee),he=[];for(let{name:ft,startTime:tt,endTime:cr}of yr){let vt=CS(ft,f);ae.debug?.("subscription to",ft,"using local id",vt,"starting",tt),he[vt]={startTime:tt,endTime:cr}}Sa(u),Xt||(Xt=bl(ft=>{ft.databaseName===u&&Sa(u)}),Mf=Sh(ft=>{ft===u&&(e.send((0,et.encode)([Dd])),Ss())}),e.on("close",()=>{Xt?.remove(),Mf?.remove()})),e.send((0,et.encode)([H$,Gh(p.auditStore),yr.map(({name:ft})=>ft)]));let Ee=!0;do{isFinite(fe)||(ae.warn?.("Invalid sequence id "+fe),Ss(1008,"Invalid sequence id"+fe));let ft;if(Ee&&!me&&(Ee=!1,fe===0)){ae.info?.("Replicating all tables to",g);let tt=fe,cr=zS(f);for(let vt in _){if(!ee(vt))continue;let Ts=_[vt];for(let Ut of Ts.primaryStore.getRange({snapshot:!1,versions:!0})){if(me)return;if(Ut.localTime>=fe){ae.trace?.(s,"Copying record from",u,vt,Ut.key,Ut.localTime),tt=Math.max(Ut.localTime,tt),Mt()[Qh]=1;let Qs=Yc(Ut.version,Ts.tableId,Ut.key,null,cr,null,"put",fm(()=>Ts.primaryStore.encoder.encode(Ut.value),Eu=>_a(Eu,Ut.key)),Ut.metadataFlags&-256,Ut.residencyId,null,Ut.expiresAt);await Et({recordId:Ut.key,tableId:Ts.tableId,type:"put",getValue(){return Ut.value},encoded:Qs,version:Ut.version,residencyId:Ut.residencyId,nodeId:cr,extendedType:Ut.metadataFlags},Ut.localTime)}}}c-i>8&&Et({type:"end_txn"},fe),Mt()[Qh]=0,fe=tt}for(let{key:tt,value:cr}of f.getRange({start:fe||1,exclusiveStart:!0,snapshot:!1})){if(me)return;let vt=At(cr);ae.debug?.("sending audit record",new Date(tt)),Mt()[Qh]=tt,fe=tt,await Et(vt,tt),Lr.startTime=tt}c-i>8&&Et({type:"end_txn"},fe),Mt()[Qh]=0,await SU(f)}while(!me)}).catch(Ee=>{ae.error?.(s,"Error handling subscription to node",Ee),Ss(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,b,I;do{Mt();let P=S.readInt();if(P===9&&S.getUint8(S.position)==E_){S.position++,R=I=S.readFloat64(),m[$S]=R,m[VS]=Date.now(),m[KS]=nO,ae.trace?.("received remote sequence update",R,u);break}let L=S.position,D=At(E,L,L+P),H=Cc[D.tableId];H||ae.error?.(`No table found with an id of ${D.tableId}`);let C;D.residencyId&&(C=NE[D.residencyId],ae.trace?.(s,"received residency list",C,D.type,D.recordId));try{let x=D.recordId;i_(()=>{b={table:H.name,id:D.recordId,type:D.type,nodeId:Ff.get(D.nodeId),residencyList:C,timestamp:D.version,value:D.getValue(H),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},f?.rootStore,z=>Pc(z,x))}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(H.decoder.typedStructs),x}A=!1,ae.trace?.(s,"received replication message",D.type,"id",b.id,"version",new Date(D.version),"nodeId",b.nodeId),m[$S]=D.version,m[VS]=Date.now(),m[KS]=nV,p.send(b),S.position=L+P}while(S.position<E.byteLength);Pe++,st(E.byteLength,"bytes-received",`${g}.${u}.${b?.table||"unknown_table"}`,"replication","ingest"),Pe>Fy&&!Bf&&(Bf=!0,e.pause(),ae.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:R,remoteNodeIds:T,async onCommit(){if(b){let P=Date.now()-b.timestamp;st(P,"replication-latency",g+"."+u+"."+b.table,b.type,"ingest")}Pe--,Bf&&(Bf=!1,e.resume(),ae.debug?.(`Replication resuming ${g}`)),Ue.length>0&&await Promise.all(Ue),ae.trace?.("All blobs finished"),!N&&I&&(ae.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,et.encode)([$$,N])),ae.trace?.(s,"sent confirmation of a commit at",N),N=null},gue)),N=I,ae.debug?.("last sequence committed",new Date(I),u)}})}catch(S){ae.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",Jt),e.on("pong",()=>{if(t.connection){let E=performance.now()-Z;t.connection.latency=E,Mt()&&(m[YS]=E),t.isSubscriptionConnection&&Dl({name:g,database:u,url:t.url,latency:E})}Z=null}),e.on("close",(E,S)=>{clearInterval(O),clearTimeout(F),clearInterval(Y),Lr&&Lr.emit("close"),po&&po.end();for(let[A,{reject:b}]of y)b(new Error(`Connection closed ${S?.toString()} ${E}`));ae.debug?.(s,"closed",E,S?.toString())});function Ss(E,S){try{e.isFinished=!0,ae.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){ae.error?.(s,"Error closing connection",A)}}o(Ss,"close");let Ea=new Set;async function _a(E,S){let A=n_(E);if(Ea.has(A)){ae.debug?.("Blob already being sent",A);return}Ea.add(A);try{let b;xe++;for await(let I of E.stream())b&&(ae.debug?.("Sending blob chunk",A,"length",b.length),e.send((0,et.encode)([HS,{fileId:A,size:E.size},b]))),b=I,e._socket.writableNeedDrain&&(ae.debug?.("draining",A),await new Promise(P=>e._socket.once("drain",P)),ae.debug?.("drained",A)),st(I.length,"bytes-sent",`${g}.${u}`,"replication","blob");ae.debug?.("Sending final blob chunk",A,"length",b.length),e.send((0,et.encode)([HS,{fileId:A,size:E.size,finished:!0},b]))}catch(b){ae.warn?.("Error sending blob",b,"blob id",A,"for record",S),e.send((0,et.encode)([HS,{fileId:A,finished:!0,error:(0,Md.errorToString)(b)},Buffer.alloc(0)]))}finally{Ea.delete(A),xe--,xe<xf&&Rr?.()}}o(_a,"sendBlobs");function Pc(E,S){let A=n_(E),b=Ne.get(A);ae.debug?.("Received transaction with blob",A,"has stream",!!b,"ended",!!b?.writableEnded),b?b.writableEnded&&Ne.delete(A):(b=new tO.PassThrough,Ne.set(A,b)),b.connectedToBlob=!0,b.lastChunk=Date.now(),b.recordId=S,E.size===void 0&&b.expectedSize&&(E.size=b.expectedSize);let I=b.blob??createBlob(b,E);b.blob=I;let P=Ao(()=>dm(I).saving,p.auditStore?.rootStore);return P&&(P.blobId=A,Ue.push(P),P.finally(()=>{ae.debug?.(`Finished receiving blob stream ${A}`),Ue.splice(Ue.indexOf(P),1)})),I}o(Pc,"receiveBlobs");function Dr(){if(h||(h=!0,t.connection?.on("subscriptions-updated",Dr)),!f&&p&&(f=p.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let E=new Map;f||(f=p?.auditStore);try{for(let b of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of b.value.nodes||[])I.lastTxnTime>(E.get(I.id)??0)&&E.set(I.id,I.lastTxnTime)}catch(b){if(!b.message.includes("Can not re"))throw b}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((b,I)=>{let P=[],{replicateByDefault:L}=b;if(b.subscriptions){for(let x of b.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let z=x.table;_?.[z]?.replicate!==!1&&P.push(z)}L=!1}else for(let x in _)(L?_[x].replicate===!1:_[x].replicate)&&P.push(x);let D=f&&CS(b.name,f),H=p?.dbisDB?.get([Symbol.for("seq"),D])??1,C=Math.max(H?.seqId??1,(typeof b.startTime=="string"?new Date(b.startTime).getTime():b.startTime)??1);if(ae.debug?.("Starting time recorded in db",b.name,D,u,H?.seqId,"start time:",C,new Date(C)),S!==b){let x=f&&CS(S.name,f),z=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let ne of z?.nodes||[])ne.name===b.name&&(C=ne.seqId,ae.debug?.("Using sequence id from proxy node",S.name,C))}if(D===void 0?ae.warn("Starting subscription request from node",b,"but no node id found"):T.push(D),E.get(D)>C&&(C=E.get(D),ae.debug?.("Updating start time from more recent txn recorded",S.name,C)),C===1&&kS)try{new URL(kS).hostname===b.name?(ae.warn?.(`Requesting full copy of database ${u} from ${kS}`),C=0):C=Date.now()-6e4}catch(x){ae.error?.("Error parsing leader URL",kS,x)}return ae.trace?.(s,"defining subscription request",b.name,u,new Date(C)),{name:b.name,replicateByDefault:L,tables:P,startTime:C,endTime:b.endTime}});if(A)if(ae.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout(K),A.length>0)e.send((0,et.encode)([B$,A]));else{let b=o(()=>{let I=performance.now();K=setTimeout(()=>{ce<=I?Ss(1008,"Connection has no subscriptions and is no longer used"):b()},q).unref()},"scheduleClose");b()}}o(Dr,"sendSubscriptionRequestUpdate");function mu(E,S){if(!E)return;let A=Uf[E];return A||(A=S.getResidencyRecord(E),Uf[E]=A),A}o(mu,"getResidence");function hu(E){return!(ec&&ec!="*"&&!ec[E]&&!ec.includes?.(E)&&!ec.some?.(S=>S.name===E))}o(hu,"checkDatabaseAccess");function ga(E){if(p=p||d.get(E),!hu(E))throw new Error(`Access to database "${E}" is not permitted`);p||ae.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=nt()?.[E]);let S=Ze();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return OE(S,E),!0}o(ga,"setDatabase");function OE(E,S){let A=nt()?.[S],b=[];for(let I in A){let P=A[I];b.push({table:I,schemaDefined:P.schemaDefined,attributes:P.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ae.trace?.("Sending database info for node",E,"database name",S),e.send((0,et.encode)([F$,E,S,b]))}o(OE,"sendNodeDBName");function Sa(E){let S=nt()?.[E],A=[];for(let b in S){if(yr&&!yr.some(P=>P.replicateByDefault?!P.tables.includes(b):P.tables.includes(b)))continue;let I=S[b];A.push({table:b,schemaDefined:I.schemaDefined,attributes:I.attributes.map(P=>({name:P.name,type:P.type,isPrimaryKey:P.isPrimaryKey}))})}e.send((0,et.encode)([V$,A,E]))}o(Sa,"sendDBSchema"),Y=setInterval(()=>{for(let[E,S]of Ne)S.lastChunk+pe<Date.now()&&(ae.warn?.(`Timeout waiting for blob stream to finish ${E} for record ${S.recordId??"unknown"} from ${g}`),Ne.delete(E),S.end())},pe).unref();let Ta=1,Hf=[];return{end(){po&&po.end(),Lr&&Lr.emit("close")},getRecord(E){let S=Ta++;return new Promise((A,b)=>{let I=[G$,S,E.table.tableId,E.id];Hf[E.table.tableId]||(I.push(E.table.tableName),Hf[E.table.tableId]=!0),e.send((0,et.encode)(I)),ce=performance.now(),y.set(S,{tableId:E.table.tableId,key:E.id,resolve(P){let{table:L,entry:D}=E;if(A(P),P)return L._recordRelocate(D,P)},reject:b})})},sendOperation(E){let S=Ta++;return E.requestId=S,e.send((0,et.encode)([rO,E])),new Promise((A,b)=>{y.set(S,{resolve:A,reject:b})})}};function pu(E){Ra(5),E<128?a[c++]=E:E<16384?(l.setUint16(c,E|32768),c+=2):E<1056964608?(l.setUint32(c,E|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,E),c+=5)}function Lc(E,S=0,A=E.length){let b=A-S;Ra(b),E.copy(a,c,S,A),c+=b}function Dc(E){Ra(8),l.setFloat64(c,E),c+=8}function Ra(E){if(E+16>a.length-c){let S=Buffer.allocUnsafeSlow(c+E-i+65536>>10<<11);a.copy(S,0,i,c),c=c-i,i=0,a=S,l=new DataView(a.buffer,0,a.length)}}function V(E,S){let A=E.database??"data";if(A!=="data"&&!ke[A]){ae.warn?.("Database not found",E.database);return}S||(S={});let b=S.schemaDefined,I=!1,P=E.schemaDefined,L=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let H=E.attributes[D],C=L.find(x=>x.name===H.name);(!C||C.type!==H.type)&&(b?ae.error?.(`Schema for '${u}.${E.table}' is defined locally, but attribute '${H.name}: ${H.type}' from '${g}' does not match local attribute ${C?"'"+C.name+": "+C.type+"'":"which does not exist"}`):(I=!0,P||(H.indexed=!0),C?L[L.indexOf(C)]=H:L.push(H)))}return I?(ae.debug?.("(Re)creating",E),ze({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:L,...S})):S}}var z$,et,j$,Q$,Md,sO,J$,X$,Ul,Z$,tO,eV,tV,ae,B$,F$,H$,Dd,k$,Zw,G$,BS,rO,FS,q$,$$,V$,HS,rV,$S,VS,Qh,YS,KS,nO,nV,_ue,kS,iO,tc,GS,K$,gue,Y$,eO,qS,W$,vd,oO=ue(()=>{De();Li();Bw();tb();is();z$=w(oe());k();Wc();et=require("msgpackr"),j$=require("ws"),Q$=require("worker_threads"),Md=w(Q());Wh();sO=require("events"),J$=w(as()),X$=w(require("node:tls"));Ll();Ul=w(require("node:process")),Z$=require("node:net");Wi();Kn();tO=require("node:stream"),eV=require("lmdb"),tV=w(require("minimist")),ae=(0,Md.forComponent)("replication").conditional,B$=129,F$=140,H$=141,Dd=142,k$=130,Zw=132,G$=133,BS=134,rO=136,FS=137,q$=143,$$=144,V$=145,HS=146,rV=0,$S=1,VS=2,Qh=3,YS=4,KS=5,nO=0,nV=1,_ue=(0,tV.default)(Ul.argv),kS=_ue.HDB_LEADER_URL??Ul.env.HDB_LEADER_URL,iO=new Map,tc=new Map,GS=!0,K$=300,gue=2,Y$=3e4;o(WS,"createWebSocket");W$=500,vd=class extends sO.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=W$;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??pi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await WS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ae.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Ul.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=W$,this.nodeSubscriptions&&Dl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Jh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ae.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?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 ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Cd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ae.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(Jh,"replicateOverWS")});var Go={};Oe(Go,{clearThisNodeName:()=>wue,disableReplication:()=>yue,enabledDatabases:()=>ec,forEachReplicatedDatabase:()=>za,getThisNodeId:()=>zS,getThisNodeName:()=>Ze,getThisNodeUrl:()=>ja,hostnameToUrl:()=>ZS,lastTimeInAuditStore:()=>qh,monitorNodeCAs:()=>mV,replicateOperation:()=>Cue,replicationCertificateAuthorities:()=>qo,sendOperationToNode:()=>Xh,servers:()=>Tue,setReplicator:()=>pV,start:()=>Rue,startOnMainThread:()=>kw,subscribeToNode:()=>Yh,unsubscribeFromNode:()=>DS,urlToNodeName:()=>pi});function Rue(e){if(!e.port&&!e.securePort&&(e.port=Ds.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ds.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!Ze())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Vh(e))t.set(pi(s.url),s);Aue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Le.ws(async(s,i,a,c)=>{if(Ct.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);await a,s._socket.unref(),Jh(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Ct.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Le.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Ct.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Ct.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Kt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,dV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){Ct.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else Ct.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:Ct.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(qo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=XS.createSecureContext(u)}catch(l){Ct.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}mV(()=>{for(let s of n)s()})}function mV(e){let t=0;wd(r=>{r?.ca&&(qo.add(r.ca),qo.size!==t&&(t=qo.size,e?.()))})}function yue(e=!0){fV=e}function Aue(e){fV||(nt(),ec=e.databases,za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||tc;for(let[s,i]of QS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];pV(r,s,e),iO.get(s)?.forEach(i=>i(s))}}))}function pV(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 hV extends xr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||tc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Ct.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Vn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let p of c){if(u.has(p)||p===Le.hostname)continue;let _=Iue(p,hV.subscription,e);if(_?.isConnected){let g=Nd(t.auditStore,e,p)[YS];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new lV.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:Sue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;Ct.warn("Error in load from node",JS,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function bue(e,t,r,n,s){let i=QS.get(e);i||QS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new vd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Iue(e,t,r){let n=iV.get(e);n||(n=new Map,iV.set(e,n));let s=n.get(r);if(s)return s;let i=Kt().primaryStore.get(e);return i?.url&&(s=new vd(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Xh(e,t,r){r||(r={}),r.serverName=e.name;let n=await WS(e.url,r),s=Jh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Ct.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Ct.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Yh(e){try{uV.isMainThread&&Ct.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=tc.get(e.database);if(!t){let n;t=new Promise(s=>{Ct.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,tc.set(e.database,t)}let r=bue(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=>$h(n,e.database)),e.replicateByDefault)}catch(t){Ct.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function DS({name:e,url:t,database:r}){Ct.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Kt().primaryStore.getRange({})));let n=QS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Nue(){if(aO!==void 0)return aO;let e=Ds.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Ds.default.get(U.TLS_CERTIFICATE);if(e)return aO=new aV.X509Certificate((0,cV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function Ze(){return JS||(JS=Ds.default.get("replication_hostname")??pi(Ds.default.get("replication_url"))??Nue()??oV("operationsapi_network_secureport")??oV("operationsapi_network_port")??"127.0.0.1")}function wue(){JS=void 0}function oV(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function jS(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function zS(e){return Gh(e)?.[Ze()]}function ja(){let e=Ds.default.get("replication_url");return e||ZS(Ze())}function ZS(e){let t=jS("replication_port");if(t)return`ws://${e}:${t}`;if(t=jS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=jS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=jS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function pi(e){if(e)return new URL(e).hostname}function za(e,t){for(let n of Object.getOwnPropertyNames(ke))r(n);return Sh(n=>{r(n)}),bl((n,s)=>{r(n.databaseName)});function r(n){let s=ke[n];Ct.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):Oue(n)&&t(s,n,!1)}o(r,"forDatabase")}function Oue(e){let t=ke[e];for(let r in t)if(t[r].replicate)return!0}function qh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Cue(e){let t={message:""};if(e.replicated){e.replicated=!1,Ct.trace?.("Replicating operation",e.operation,"to nodes",Le.nodes.map(n=>n.name));let r=await Promise.allSettled(Le.nodes.map(n=>Xh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Le.nodes[s]?.name,i})}return t}var Ds,Ct,aV,cV,XS,lV,uV,dV,fV,Sue,Tue,qo,ec,QS,iV,aO,JS,is=ue(()=>{De();Pa();Tu();oO();Mr();Ds=w(oe()),Ct=w(Q()),aV=require("crypto"),cV=require("fs");Wh();Ll();k();Bw();XS=w(require("node:tls")),lV=w(ge()),uV=require("worker_threads"),dV=w(as()),Sue=1,Tue=[],qo=Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(XS.rootCertificates):new Set;o(Rue,"start");o(mV,"monitorNodeCAs");o(yue,"disableReplication");o(Aue,"assignReplicationSource");o(pV,"setReplicator");QS=new Map;o(bue,"getSubscriptionConnection");iV=new Map;o(Iue,"getRetrievalConnectionByName");o(Xh,"sendOperationToNode");o(Yh,"subscribeToNode");o(DS,"unsubscribeFromNode");o(Nue,"getCommonNameFromCert");o(Ze,"getThisNodeName");o(wue,"clearThisNodeName");Object.defineProperty(Le,"hostname",{get(){return Ze()}});o(oV,"getHostFromListeningPort");o(jS,"getPortFromListeningPort");o(zS,"getThisNodeId");Le.replication={getThisNodeId:zS,exportIdMapping:Gh};o(ja,"getThisNodeUrl");o(ZS,"hostnameToUrl");o(pi,"urlToNodeName");o(za,"forEachReplicatedDatabase");o(Oue,"hasExplicitlyReplicatedTable");o(qh,"lastTimeInAuditStore");o(Cue,"replicateOperation")});var ep=M((Rve,TV)=>{"use strict";var Ud=Pq(),{validateBySchema:Zh}=lt(),{commonValidators:xd,schemaRegex:cO}=Hi(),pr=require("joi"),Pue=Q(),Lue=require("uuid").v4,rT=Co(),Bd=(k(),v(W)),Due=require("util"),rc=Jn(),{handleHDBError:$o,hdbErrors:Mue,ClientError:xl}=ge(),{HDB_ERROR_MSGS:eT,HTTP_STATUS_CODES:Vo}=Mue,{SchemaEventMsg:nT}=oi(),EV=mr(),{getDatabases:vue}=(De(),v(mt)),{transformReq:Fd}=ie(),{replicateOperation:_V}=(is(),v(Go)),{cleanupOrphans:Uue}=(Kn(),v(o_)),tT=pr.string().min(1).max(xd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+xd.schema_format.message}),xue=pr.string().min(1).max(xd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+xd.schema_format.message}).required(),Bue=pr.string().min(1).max(xd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+xd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();TV.exports={createSchema:Fue,createSchemaStructure:gV,createTable:Hue,createTableStructure:SV,createAttribute:Vue,dropSchema:kue,dropTable:Gue,dropAttribute:que,getBackup:Kue,cleanupOrphanBlobs:Yue};async function Fue(e){let t=await gV(e);return rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema)),t}o(Fue,"createSchema");async function gV(e){let t=Zh(e,pr.object({database:tT,schema:tT}));if(t)throw new xl(t.message);if(Fd(e),!await Ud.checkSchemaExists(e.schema))throw $o(new Error,eT.SCHEMA_EXISTS_ERR(e.schema),Vo.BAD_REQUEST,Bd.LOG_LEVELS.ERROR,eT.SCHEMA_EXISTS_ERR(e.schema),!0);return await rc.createSchema(e),`database '${e.schema}' successfully created`}o(gV,"createSchemaStructure");async function Hue(e){return Fd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await SV(e)}o(Hue,"createTable");async function SV(e){let t=Zh(e,pr.object({database:tT,schema:tT,table:xue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Bue}));if(t)throw new xl(t.message);if(!await Ud.checkSchemaTableExists(e.schema,e.table))throw $o(new Error,eT.TABLE_EXISTS_ERR(e.schema,e.table),Vo.BAD_REQUEST,Bd.LOG_LEVELS.ERROR,eT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Lue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await rc.createTable(n,e);else throw $o(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Vo.BAD_REQUEST);else await rc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(SV,"createTableStructure");async function kue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new xl(t.message);Fd(e);let r=await Ud.checkSchemaExists(e.schema);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Bd.LOG_LEVELS.ERROR,r,!0);let n=await Ud.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await rc.dropSchema(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema)),await EV.purgeSchemaTableStreams(e.schema,s);let i=await _V(e);return i.message=`successfully deleted '${e.schema}'`,i}o(kue,"dropSchema");async function Gue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new xl(t.message);Fd(e);let r=await Ud.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Bd.LOG_LEVELS.ERROR,r,!0);await rc.dropTable(e),await EV.purgeTableStream(e.schema,e.table);let n=await _V(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Gue,"dropTable");async function que(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new xl(t.message);Fd(e);let r=await Ud.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Bd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $o(new Error,"You cannot drop a hash attribute",Vo.BAD_REQUEST,void 0,void 0,!0);if(Bd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $o(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Vo.BAD_REQUEST,void 0,void 0,!0);try{return await rc.dropAttribute(e),$ue(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Pue.error(`Got an error deleting attribute ${Due.inspect(e)}.`),n}}o(que,"dropAttribute");function $ue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o($ue,"dropAttributeFromGlobal");async function Vue(e){Fd(e);let t=vue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $o(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Vo.BAD_REQUEST,void 0,void 0,!0);return await rc.createAttribute(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Vue,"createAttribute");function Kue(e){return rc.getBackup(e)}o(Kue,"getBackup");function Yue(e){if(!e.database)throw new xl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new xl(`Unknown database '${e.database}'`);return Uue(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Yue,"cleanupOrphanBlobs")});var yV=M((Ave,RV)=>{"use strict";var{OPERATIONS_ENUM:Wue}=(k(),v(W)),lO=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Wue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};RV.exports=lO});var uO=M((Nve,wV)=>{"use strict";var zue=Jn(),Ive=yV(),sT=ie(),iT=(k(),v(W)),jue=oe(),{handleHDBError:AV,hdbErrors:Que}=ge(),{HDB_ERROR_MSGS:bV,HTTP_STATUS_CODES:IV}=Que,Jue=Object.values(iT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),NV="To use this operation audit log must be enabled in harperdb-config.yaml";wV.exports=Xue;async function Xue(e){if(sT.isEmpty(e.schema))throw new Error(bV.SCHEMA_REQUIRED_ERR);if(sT.isEmpty(e.table))throw new Error(bV.TABLE_REQUIRED_ERR);if(!jue.get(iT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw AV(new Error,NV,IV.BAD_REQUEST,iT.LOG_LEVELS.ERROR,NV,!0);let t=sT.checkSchemaTableExist(e.schema,e.table);if(t)throw AV(new Error,t,IV.NOT_FOUND,iT.LOG_LEVELS.ERROR,t,!0);if(!sT.isEmpty(e.search_type)&&Jue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${e.search_type}'`);return await zue.readAuditLog(e)}o(Xue,"readAuditLog")});var CV=M((Ove,OV)=>{"use strict";var{OPERATIONS_ENUM:Zue}=(k(),v(W)),dO=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Zue.GET_BACKUP,this.schema=t,this.table=r}};OV.exports=dO});var DV=M((Lve,LV)=>{"use strict";var ede=Jn(),Pve=CV(),fO=ie(),tde=(k(),v(W)),{handleHDBError:rde,hdbErrors:nde}=ge(),{HDB_ERROR_MSGS:PV,HTTP_STATUS_CODES:sde}=nde;LV.exports=ide;async function ide(e){if(fO.isEmpty(e.schema))throw new Error(PV.SCHEMA_REQUIRED_ERR);if(fO.isEmpty(e.table))throw new Error(PV.TABLE_REQUIRED_ERR);let t=fO.checkSchemaTableExist(e.schema,e.table);if(t)throw rde(new Error,t,sde.NOT_FOUND,tde.LOG_LEVELS.ERROR,t,!0);return ede.getBackup(e)}o(ide,"getBackup")});var xV=M((Mve,UV)=>{"use strict";var ode=oe(),nc=require("joi"),ade=lt(),MV=require("moment"),cde=require("fs-extra"),mO=require("path"),lde=require("lodash"),tp=(k(),v(W)),{LOG_LEVELS:Bl}=(k(),v(W)),ude="YYYY-MM-DD hh:mm:ss",dde=mO.resolve(__dirname,"../logs");UV.exports=function(e){return ade.validateBySchema(e,fde)};var fde=nc.object({from:nc.custom(vV),until:nc.custom(vV),level:nc.valid(Bl.NOTIFY,Bl.FATAL,Bl.ERROR,Bl.WARN,Bl.INFO,Bl.DEBUG,Bl.TRACE),order:nc.valid("asc","desc"),limit:nc.number().min(1),start:nc.number().min(0),log_name:nc.custom(mde)});function vV(e,t){if(MV(e,MV.ISO_8601).format(ude)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(vV,"validateDatetime");function mde(e,t){if(lde.invert(tp.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=ode.get(tp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?tp.LOG_NAMES.HDB:e,i=s===tp.LOG_NAMES.INSTALL?mO.join(dde,tp.LOG_NAMES.INSTALL):mO.join(n,s);return cde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(mde,"validateReadLogPath")});var pO=M((Uve,FV)=>{"use strict";var oT=(k(),v(W)),hde=Q(),pde=oe(),Ede=xV(),hO=require("path"),BV=require("fs-extra"),{once:_de}=require("events"),{handleHDBError:gde,hdbErrors:Sde}=ge(),{PACKAGE_ROOT:Tde}=Rt(),{replicateOperation:Rde}=(is(),v(Go)),yde=hO.join(Tde,"logs"),Ade=1e3,bde=200;FV.exports=Ide;async function Ide(e){let t=Ede(e);if(t)throw gde(t,t.message,Sde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Rde(e),n=pde.get(oT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?oT.LOG_NAMES.HDB:e.log_name,i=s===oT.LOG_NAMES.INSTALL?hO.join(yde,oT.LOG_NAMES.INSTALL):hO.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Ade:e.limit,h=e.order===void 0?void 0:e.order,p=e.start===void 0?0:e.start,_=p+m,g=0;h==="desc"&&!u&&!f&&(g=Math.max(BV.statSync(i).size-(_+5)*bde,0));let y=BV.createReadStream(i,{start:g});y.on("error",G=>{hde.error(G)});let T=0,R=[],N="",O;y.on("data",G=>{let Y=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let q=0,K;for(;(K=Y.exec(G))&&!y.destroyed;){O&&(O.message=G.slice(q,K.index),F(O));let[ce,le,se]=K,pe=se.split("] ["),Ne=pe[0],Ue=pe[1];pe.splice(0,2),O={timestamp:le,thread:Ne,level:Ue,tags:pe,message:""},q=K.index+ce.length}N=G.slice(q)}),y.on("end",G=>{y.destroyed||O&&(O.message=N.trim(),F(O))}),y.resume();function F(G){let Y,q,K;switch(!0){case(a&&l&&d):Y=new Date(G.timestamp),q=new Date(u),K=new Date(f),G.level===c&&Y>=q&&Y<=K&&T<p?T++:G.level===c&&Y>=q&&Y<=K&&(ro(G,h,R),T++,T===_&&y.destroy());break;case(a&&l):Y=new Date(G.timestamp),q=new Date(u),G.level===c&&Y>=q&&T<p?T++:G.level===c&&Y>=q&&(ro(G,h,R),T++,T===_&&y.destroy());break;case(a&&d):Y=new Date(G.timestamp),K=new Date(f),G.level===c&&Y<=K&&T<p?T++:G.level===c&&Y<=K&&(ro(G,h,R),T++,T===_&&y.destroy());break;case(l&&d):Y=new Date(G.timestamp),q=new Date(u),K=new Date(f),Y>=q&&Y<=K&&T<p?T++:Y>=q&&Y<=K&&(ro(G,h,R),T++,T===_&&y.destroy());break;case a:G.level===c&&T<p?T++:G.level===c&&(ro(G,h,R),T++,T===_&&y.destroy());break;case l:Y=new Date(G.timestamp),q=new Date(u),Y>=q&&T<p?T++:Y>=q&&T>=p&&(ro(G,h,R),T++,T===_&&y.destroy());break;case d:Y=new Date(G.timestamp),K=new Date(f),Y<=K&&T<p?T++:Y<=K&&T>=p&&(ro(G,h,R),T++,T===_&&y.destroy());break;default:T<p?T++:(ro(G,h,R),T++,T===_&&y.destroy())}}o(F,"onLogMessage"),await _de(y,"close");let Z=await r;if(Z.replicated){for(let G of R)G.node=server.hostname;for(let G of Z.replicated){let Y=G.node;if(G.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:Y,message:`Error retrieving logs: ${G.reason}`},h,R);else for(let q of G.results)q.node=Y,ro(q,h,R)}}return R}o(Ide,"readLog");function ro(e,t,r){t==="desc"?Nde(e,r):t==="asc"?wde(e,r):r.push(e)}o(ro,"pushLineToResult");function Nde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(Nde,"insertDescending");function wde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(wde,"insertAscending")});var aT=M((Gve,qV)=>{"use strict";var EO=require("joi"),{string:Hd,boolean:HV,date:Ode}=EO.types(),Cde=lt(),{validateSchemaExists:Bve,validateTableExists:Fve,validateSchemaName:Hve}=Hi(),Pde=(k(),v(W)),Lde=It(),kV=oe();kV.initSync();var kve=Hd.invalid(kV.get(Pde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Lde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),GV={operation:Hd.valid("add_node","update_node","set_node_replication"),node_name:Hd.optional(),subscriptions:EO.array().items({table:Hd.optional(),schema:Hd.optional(),database:Hd.optional(),subscribe:HV.required(),publish:HV.required().custom(Mde),start_time:Ode.iso()})};function Dde(e){return Cde.validateBySchema(e,EO.object(GV))}o(Dde,"addUpdateNodeValidator");function Mde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(Mde,"checkForFalsy");qV.exports={addUpdateNodeValidator:Dde,validationSchema:GV}});var kd=M(($ve,$V)=>{"use strict";var _O=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},gO=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};$V.exports={Node:_O,NodeSubscription:gO}});var KV=M((Kve,VV)=>{"use strict";var vde=(k(),v(W)).OPERATIONS_ENUM,SO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=vde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};VV.exports=SO});var rp=M((Wve,YV)=>{"use strict";var TO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},RO=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};YV.exports={RemotePayloadObject:TO,RemotePayloadSubscription:RO}});var zV=M((jve,WV)=>{"use strict";var yO=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};WV.exports=yO});var QV=M((tUe,jV)=>{"use strict";var Ude=zV(),Jve=qt(),Xve=_t(),xde=Q(),{getSchemaPath:Zve,getTransactionAuditStorePath:eUe}=yt(),{getDatabases:Bde}=(De(),v(mt));jV.exports=Fde;async function Fde(e){let t=new Ude;try{let r=Bde()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){xde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Fde,"lmdbGetTableSize")});var XV=M((nUe,JV)=>{"use strict";var AO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};JV.exports=AO});var qd=M((lUe,r1)=>{"use strict";var Hde=require("fs-extra"),kde=require("path"),hn=require("systeminformation"),sc=Q(),ZV=mr(),iUe=It(),Gd=(k(),v(W)),Gde=QV(),qde=Ua(),{getThreadInfo:e1}=rt(),np=oe();np.initSync();var $de=XV(),{openEnvironment:oUe}=_t(),{getSchemaPath:aUe}=yt(),{database:cUe,databases:bO}=(De(),v(mt)),cT;r1.exports={getHDBProcessInfo:OO,getNetworkInfo:PO,getDiskInfo:CO,getMemoryInfo:wO,getCPUInfo:NO,getTimeInfo:IO,getSystemInformation:LO,systemInformation:Vde,getTableSize:DO,getMetrics:MO};function IO(){return hn.time()}o(IO,"getTimeInfo");async function NO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await hn.cpu();d.cpu_speed=await hn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:y,...T}=await hn.currentLoad();return T.cpus=[],y.forEach(R=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:Z,rawLoadSystem:G,rawLoadUser:Y,...q}=R;T.cpus.push(q)}),d.current_load=T,d}catch(e){return sc.error(`error in getCPUInfo: ${e}`),{}}}o(NO,"getCPUInfo");async function wO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await hn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return sc.error(`error in getMemoryInfo: ${e}`),{}}}o(wO,"getMemoryInfo");async function OO(){let e={core:[],clustering:[]};try{let t=await hn.processes(),r;try{r=Number.parseInt(await Hde.readFile(kde.join(np.get(Gd.CONFIG_PARAMS.ROOTPATH),Gd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Gd.NODE_ERROR_CODES.ENOENT)sc.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 sc.error(`error in getHDBProcessInfo: ${t}`),e}}o(OO,"getHDBProcessInfo");async function CO(){let e={};try{if(!np.get(Gd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await hn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await hn.fsStats();return e.read_write=u,e.size=await hn.fsSize(),e}catch(t){return sc.error(`error in getDiskInfo: ${t}`),e}}o(CO,"getDiskInfo");async function PO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return np.get(Gd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await hn.networkInterfaceDefault(),e.latency=await hn.inetChecksite("google.com"),(await hn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await hn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return sc.error(`error in getNetworkInfo: ${t}`),e}}o(PO,"getNetworkInfo");async function LO(){if(cT!==void 0)return cT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await hn.osInfo();e=c;let l=await hn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,cT=e,cT}catch(t){return sc.error(`error in getSystemInformation: ${t}`),e}}o(LO,"getSystemInformation");async function DO(){let e=[],t=await qde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Gde(n));return e}o(DO,"getTableSize");async function MO(){let e={};for(let t in bO){let r=e[t]={},n=r.tables={};for(let s in bO[t])try{let i=bO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){sc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(MO,"getMetrics");async function t1(){if(np.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await ZV.getNATSReferences(),t=await ZV.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(t1,"getNatsStreamInfo");async function Vde(e){let t=new $de;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LO(),t.time=IO(),t.cpu=await NO(),t.memory=await wO(),t.disk=await CO(),t.network=await PO(),t.harperdb_processes=await OO(),t.table_size=await DO(),t.metrics=await MO(),t.threads=await e1(),t.replication=await t1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LO();break;case"time":t.time=IO();break;case"cpu":t.cpu=await NO();break;case"memory":t.memory=await wO();break;case"disk":t.disk=await CO();break;case"network":t.network=await PO();break;case"harperdb_processes":t.harperdb_processes=await OO();break;case"table_size":t.table_size=await DO();break;case"database_metrics":case"metrics":t.metrics=await MO();break;case"threads":t.threads=await e1();break;case"replication":t.replication=await t1();break;default:break}return t}o(Vde,"systemInformation")});var Ko=M((hUe,o1)=>{"use strict";var Kde=Mn(),vO=ie(),Yde=require("util"),Fl=(k(),v(W)),n1=oe();n1.initSync();var Wde=Ew(),s1=on(),{Node:dUe,NodeSubscription:fUe}=kd(),zde=Vu(),jde=KV(),{RemotePayloadObject:Qde,RemotePayloadSubscription:Jde}=rp(),{handleHDBError:Xde,hdbErrors:Zde}=ge(),{HTTP_STATUS_CODES:efe,HDB_ERROR_MSGS:tfe}=Zde,rfe=ai(),nfe=qd(),{packageJson:sfe}=Rt(),{getDatabases:ife}=(De(),v(mt)),mUe=Yde.promisify(Wde.authorize),ofe=s1.searchByHash,afe=s1.searchByValue;o1.exports={isEmpty:cfe,getNodeRecord:lfe,upsertNodeRecord:ufe,buildNodePayloads:dfe,checkClusteringEnabled:ffe,getAllNodeRecords:mfe,getSystemInfo:hfe,reverseSubscription:i1};function cfe(e){return e==null}o(cfe,"isEmpty");async function lfe(e){let t=new zde(Fl.SYSTEM_SCHEMA_NAME,Fl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return ofe(t)}o(lfe,"getNodeRecord");async function ufe(e){let t=new jde(Fl.SYSTEM_SCHEMA_NAME,Fl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Kde.upsert(t)}o(ufe,"upsertNodeRecord");function i1(e){if(vO.isEmpty(e.subscribe)||vO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(i1,"reverseSubscription");function dfe(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=vO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=i1(c),h=ife()[l]?.[u],p=new Jde(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new Qde(r,t,s,n)}o(dfe,"buildNodePayloads");function ffe(){if(!n1.get(Fl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xde(new Error,tfe.CLUSTERING_NOT_ENABLED,efe.BAD_REQUEST,void 0,void 0,!0)}o(ffe,"checkClusteringEnabled");async function mfe(){let e=new rfe(Fl.SYSTEM_SCHEMA_NAME,Fl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await afe(e))}o(mfe,"getAllNodeRecords");async function hfe(){let e=await nfe.getSystemInformation();return{hdb_version:sfe.version,node_version:e.node_version,platform:e.platform}}o(hfe,"getSystemInfo")});var UO=M((EUe,h1)=>{"use strict";var lT=mr(),a1=ie(),c1=It(),l1=(k(),v(W)),uT=Q(),u1=ep(),pfe=km(),{RemotePayloadObject:Efe}=rp(),{handleHDBError:d1,hdbErrors:_fe}=ge(),{HTTP_STATUS_CODES:f1}=_fe,{NodeSubscription:m1}=kd();h1.exports=gfe;async function gfe(e,t){let r;try{r=await lT.request(`${t}.${c1.REQUEST_SUFFIX}`,new Efe(l1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),uT.trace("Response from remote describe all request:",r)}catch(a){uT.error(`addNode received error from describe all request to remote node: ${a}`);let c=lT.requestErrorHandler(a,"add_node",t);throw d1(new Error,c,f1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===c1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw d1(new Error,a,f1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===l1.SYSTEM_SCHEMA_NAME){await lT.createLocalTableStream(l,c);let p=new m1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=a1.doesSchemaExist(l),d=n[l]!==void 0,f=c?a1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(uT.trace(`addNode creating schema: ${l}`),await u1.createSchema({operation:"create_schema",schema:l})),!f&&m){uT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new pfe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await u1.createTable(p)}await lT.createLocalTableStream(l,c);let h=new m1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(gfe,"reviewSubscriptions")});var $d={};Oe($d,{addNodeBack:()=>xO,removeNodeBack:()=>BO,setNode:()=>yfe});async function yfe(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=pi(t)):t=ZS(r);let n=(0,E1.validateBySchema)(e,Rfe);if(n)throw(0,Yo.handleHDBError)(n,n.message,Tfe.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 h=r,p=Kt(),_=await p.get(h);if(!_)throw new Yo.ClientError(h+" does not exist");try{await Xh({url:_.url},{operation:$.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?Ze():h},void 0)}catch(g){cs.warn(`Error removing node from target node ${h}, 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(h),`Successfully removed '${h}' from cluster`}if(!t)throw new Yo.ClientError("url required for this operation");let s=ja();if(s==null)throw new Yo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Ms.getReplicationCert)();let h=await(0,Ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Ms.createCsr)(),cs.info("Sending CSR to target node:",t)):h&&(c=h.certificate,cs.info("Sending CA named",h.name,"to target node",t))}let l={operation:$.ADD_NODE_BACK,hostname:(0,oc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(p1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=p1(e);l.subscribe=h.subscribe,l.publish=h.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Xh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,cs.warn("Error adding node:",t,"to cluster:",h),d=h}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(cs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ms.setCertTable)({name:Sfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ms.setCertTable)({name:Ze(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Ho(Ze(),h)}await Ho(u?u.nodeName:f.name??pi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function xO(e){cs.trace("addNodeBack received request:",e);let t=await(0,Ms.signCertificate)(e),r;e.csr?(r=t.signingCA,cs.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,cs.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,Ms.getReplicationCertAuth)();if(n.replicates){let i={url:ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,oc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Ho(Ze(),i)}return await Ho(e.hostname,n),t.nodeName=Ze(),t.usingCA=s?.certificate,cs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function BO(e){cs.trace("removeNodeBack received request:",e),await Kt().delete(e.name)}function p1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ms,E1,ic,oc,cs,Yo,Sfe,Tfe,Rfe,Vd=ue(()=>{Ms=w(as()),E1=w(lt()),ic=w(require("joi")),oc=w(oe());k();Wh();Ll();is();cs=w(Q()),Yo=w(ge()),{pki:Sfe}=require("node-forge"),{HTTP_STATUS_CODES:Tfe}=Yo.hdbErrors,Rfe=ic.default.object({hostname:ic.default.string(),verify_tls:ic.default.boolean(),replicates:ic.default.boolean(),subscriptions:ic.default.array(),revoked_certificates:ic.default.array(),shard:ic.default.number()});o(yfe,"setNode");o(xO,"addNodeBack");o(BO,"removeNodeBack");o(p1,"reverseSubscription")});var pT=M((IUe,g1)=>{"use strict";var{handleHDBError:dT,hdbErrors:Afe}=ge(),{HTTP_STATUS_CODES:fT}=Afe,{addUpdateNodeValidator:bfe}=aT(),mT=Q(),hT=(k(),v(W)),_1=It(),Ife=ie(),sp=mr(),ip=Ko(),FO=oe(),Nfe=UO(),{Node:wfe,NodeSubscription:Ofe}=kd(),{broadcast:Cfe}=rt(),{setNode:Pfe}=(Vd(),v($d)),AUe=oe(),bUe=(k(),v(W)),Lfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Dfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mfe=FO.get(hT.CONFIG_PARAMS.CLUSTERING_NODENAME);g1.exports=vfe;async function vfe(e,t=!1){if(mT.trace("addNode called with:",e),FO.get(hT.CONFIG_PARAMS.REPLICATION_URL)||FO.get(hT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Pfe(e);ip.checkClusteringEnabled();let r=bfe(e);if(r)throw dT(r,r.message,fT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await ip.getNodeRecord(n);if(!Ife.isEmptyOrZeroLength(f))throw dT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,fT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Nfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Lfe,a;let c=ip.buildNodePayloads(s,Mfe,hT.OPERATIONS_ENUM.ADD_NODE,await ip.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let h=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Ofe(h.schema,h.table,h.publish,h.subscribe))}mT.trace("addNode sending remote payload:",c);let u;try{u=await sp.request(`${n}.${_1.REQUEST_SUFFIX}`,c)}catch(f){mT.error(`addNode received error from request: ${f}`);for(let h=0,p=s.length;h<p;h++){let _=s[h];_.publish=!1,_.subscribe=!1,await sp.updateRemoteConsumer(_,n)}let m=sp.requestErrorHandler(f,"add_node",n);throw dT(new Error,m,fT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===_1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw dT(new Error,f,fT.INTERNAL_SERVER_ERROR,"error",f)}mT.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await sp.updateRemoteConsumer(h,n),h.subscribe===!0&&await sp.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new wfe(n,l,u.system_info);return await ip.upsertNodeRecord(d),Cfe({type:"nats_update"}),i.length>0?a.message=Dfe:a.message=`Successfully added '${n}' to manifest`,a}o(vfe,"addNode")});var qO=M((OUe,T1)=>{"use strict";var{handleHDBError:HO,hdbErrors:Ufe}=ge(),{HTTP_STATUS_CODES:kO}=Ufe,{addUpdateNodeValidator:xfe}=aT(),op=Q(),ET=(k(),v(W)),S1=It(),wUe=ie(),ap=mr(),cp=Ko(),GO=oe(),{cloneDeep:Bfe}=require("lodash"),Ffe=UO(),{Node:Hfe,NodeSubscription:kfe}=kd(),{broadcast:Gfe}=rt(),{setNode:qfe}=(Vd(),v($d)),$fe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Vfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Kfe=GO.get(ET.CONFIG_PARAMS.CLUSTERING_NODENAME);T1.exports=Yfe;async function Yfe(e){if(op.trace("updateNode called with:",e),GO.get(ET.CONFIG_PARAMS.REPLICATION_URL)??GO.get(ET.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qfe(e);cp.checkClusteringEnabled();let t=xfe(e);if(t)throw HO(t,t.message,kO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await cp.getNodeRecord(r);s.length>0&&(n=Bfe(s));let{added:i,skipped:a}=await Ffe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=$fe,c;let l=cp.buildNodePayloads(i,Kfe,ET.OPERATIONS_ENUM.UPDATE_NODE,await cp.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];op.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}op.trace("updateNode sending remote payload:",l);let u;try{u=await ap.request(`${r}.${S1.REQUEST_SUFFIX}`,l)}catch(d){op.error(`updateNode received error from request: ${d}`);let f=ap.requestErrorHandler(d,"update_node",r);throw HO(new Error,f,kO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===S1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw HO(new Error,d,kO.INTERNAL_SERVER_ERROR,"error",d)}op.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await ap.updateRemoteConsumer(m,r),m.subscribe===!0?await ap.updateConsumerIterator(m.schema,m.table,r,"start"):await ap.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Hfe(r,[],u.system_info)]),await Wfe(n[0],i,u.system_info),a.length>0?c.message=Vfe:c.message=`Successfully updated '${r}'`,c}o(Yfe,"updateNode");async function Wfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new kfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await cp.upsertNodeRecord(n),Gfe({type:"nats_update"})}o(Wfe,"updateNodeTable")});var I1=M((PUe,b1)=>{"use strict";var A1=require("joi"),{string:R1}=A1.types(),zfe=lt(),y1=(k(),v(W)),jfe=oe(),Qfe=It();b1.exports=Jfe;function Jfe(e){let t=R1.invalid(jfe.get(y1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Qfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=A1.object({operation:R1.valid(y1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return zfe.validateBySchema(e,r)}o(Jfe,"removeNodeValidator")});var _T=M((DUe,P1)=>{"use strict";var{handleHDBError:N1,hdbErrors:Xfe}=ge(),{HTTP_STATUS_CODES:w1}=Xfe,Zfe=I1(),lp=Q(),O1=Ko(),eme=ie(),Kd=(k(),v(W)),C1=It(),$O=mr(),VO=oe(),{RemotePayloadObject:tme}=rp(),{NodeSubscription:rme}=kd(),nme=Hm(),sme=pl(),{broadcast:ime}=rt(),{setNode:ome}=(Vd(),v($d)),ame=VO.get(Kd.CONFIG_PARAMS.CLUSTERING_NODENAME);P1.exports=cme;async function cme(e){if(lp.trace("removeNode called with:",e),VO.get(Kd.CONFIG_PARAMS.REPLICATION_URL)??VO.get(Kd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ome(e);O1.checkClusteringEnabled();let t=Zfe(e);if(t)throw N1(t,t.message,w1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await O1.getNodeRecord(r);if(eme.isEmptyOrZeroLength(n))throw N1(new Error,`Node '${r}' was not found.`,w1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new tme(Kd.OPERATIONS_ENUM.REMOVE_NODE,ame,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await $O.updateConsumerIterator(d.schema,d.table,r,"stop");try{await $O.updateRemoteConsumer(new rme(d.schema,d.table,!1,!1),r)}catch(f){lp.error(f)}}try{i=await $O.request(`${r}.${C1.REQUEST_SUFFIX}`,s),lp.trace("Remove node reply from remote node:",r,i)}catch(l){lp.error("removeNode received error from request:",l),a=!0}let c=new nme(Kd.SYSTEM_SCHEMA_NAME,Kd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await sme.deleteRecord(c),ime({type:"nats_update"}),i?.status===C1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(lp.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(cme,"removeNode")});var M1=M((vUe,D1)=>{"use strict";var L1=require("joi"),{string:lme,array:ume}=L1.types(),dme=lt(),fme=aT();D1.exports=mme;function mme(e){let t=L1.object({operation:lme.valid("configure_cluster").required(),connections:ume.items(fme.validationSchema).required()});return dme.validateBySchema(e,t)}o(mme,"configureClusterValidator")});var KO=M((xUe,F1)=>{"use strict";var v1=(k(),v(W)),gT=Q(),hme=ie(),pme=oe(),Eme=_T(),_me=pT(),gme=Ko(),Sme=M1(),{handleHDBError:U1,hdbErrors:Tme}=ge(),{HTTP_STATUS_CODES:x1}=Tme,Rme="Configure cluster complete.",yme="Failed to configure the cluster. Check the logs for more details.",Ame="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";F1.exports=bme;async function bme(e){gT.trace("configure cluster called with:",e);let t=Sme(e);if(t)throw U1(t,t.message,x1.BAD_REQUEST,void 0,void 0,!0);let r=await gme.getAllNodeRecords(),n=[];if(pme.get(v1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await B1(Eme,{operation:v1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}gT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await B1(_me,f,f.node_name);s.push(m)}gT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(gT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(hme.isEmptyOrZeroLength(a))return{message:Rme,connections:c};if(l)return{message:Ame,failed_nodes:a,connections:c};throw U1(new Error,yme,x1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(bme,"configureCluster");async function B1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(B1,"functionWrapper")});var q1=M((FUe,G1)=>{"use strict";var up=require("joi"),Ime=lt(),{validateSchemaExists:H1,validateTableExists:Nme,validateSchemaName:k1}=Hi(),wme=up.object({operation:up.string().valid("purge_stream"),schema:up.string().custom(H1).custom(k1).optional(),database:up.string().custom(H1).custom(k1).optional(),table:up.string().custom(Nme).required()});function Ome(e){return Ime.validateBySchema(e,wme)}o(Ome,"purgeStreamValidator");G1.exports=Ome});var YO=M((kUe,$1)=>{"use strict";var{handleHDBError:Cme,hdbErrors:Pme}=ge(),{HTTP_STATUS_CODES:Lme}=Pme,Dme=q1(),Mme=mr(),vme=Ko();$1.exports=Ume;async function Ume(e){e.schema=e.schema??e.database;let t=Dme(e);if(t)throw Cme(t,t.message,Lme.BAD_REQUEST,void 0,void 0,!0);vme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Mme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Ume,"purgeStream")});var jO=M((qUe,Q1)=>{"use strict";var zO=Ko(),xme=mr(),TT=oe(),Yd=(k(),v(W)),Hl=It(),Bme=ie(),WO=Q(),{RemotePayloadObject:Fme}=rp(),{ErrorCode:V1}=require("nats"),{parentPort:K1}=require("worker_threads"),{onMessageByType:Hme}=rt(),{getThisNodeName:kme}=(is(),v(Go)),{requestClusterStatus:Gme}=(Wh(),v(p$)),{getReplicationSharedStatus:qme,getHDBNodeTable:$me}=(Ll(),v(Fw)),{CONFIRMATION_STATUS_POSITION:Vme,RECEIVED_VERSION_POSITION:Kme,RECEIVED_TIME_POSITION:Yme,SENDING_TIME_POSITION:Wme,RECEIVING_STATUS_POSITION:zme,RECEIVING_STATUS_RECEIVING:jme}=(oO(),v(sV)),Y1=TT.get(Yd.CONFIG_PARAMS.CLUSTERING_ENABLED),W1=TT.get(Yd.CONFIG_PARAMS.CLUSTERING_NODENAME);Q1.exports={clusterStatus:Qme,buildNodeStatus:j1};var z1;Hme("cluster-status",async e=>{z1(e)});async function Qme(){if(TT.get(Yd.CONFIG_PARAMS.REPLICATION_URL)||TT.get(Yd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(K1){K1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{z1=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=qme(u,l,a);c.lastCommitConfirmed=ST(d[Vme]),c.lastReceivedRemoteTime=ST(d[Kme]),c.lastReceivedLocalTime=ST(d[Yme]),c.sendingMessage=ST(d[Wme]),c.lastReceivedStatus=d[zme]===jme?"Receiving":"Waiting"}}}else n=Gme();n.node_name=kme();let s=$me().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:W1,is_enabled:Y1,connections:[]};if(!Y1)return e;let t=await zO.getAllNodeRecords();if(Bme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(j1(t[n],e.connections));return await Promise.allSettled(r),e}o(Qme,"clusterStatus");function ST(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(ST,"asDate");async function j1(e,t){let r=e.name,n=new Fme(Yd.OPERATIONS_ENUM.CLUSTER_STATUS,W1,void 0,await zO.getSystemInfo()),s,i,a=Hl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await xme.request(Hl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Hl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Hl.CLUSTER_STATUS_STATUSES.CLOSED,WO.error(`Error getting node status from ${r} `,s))}catch(l){WO.warn(`Error getting node status from ${r}`,l),l.code===V1.NoResponders?a=Hl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===V1.Timeout?a=Hl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Hl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Jme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Yd.PRE_4_0_0_VERSION&&await zO.upsertNodeRecord(l)}catch(l){WO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(j1,"buildNodeStatus");function Jme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Jme,"NodeStatusObject")});var JO=M((VUe,J1)=>{"use strict";var{handleHDBError:Xme,hdbErrors:Zme}=ge(),{HTTP_STATUS_CODES:ehe}=Zme,the=mr(),rhe=Ko(),QO=ie(),RT=require("joi"),nhe=lt(),she=2e3,ihe=RT.object({timeout:RT.number().min(1),connected_nodes:RT.boolean(),routes:RT.boolean()});J1.exports=ohe;async function ohe(e){rhe.checkClusteringEnabled();let t=nhe.validateBySchema(e,ihe);if(t)throw Xme(t,t.message,ehe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||QO.autoCastBoolean(n),a=s===void 0||QO.autoCastBoolean(s),c={nodes:[]},l=await the.getServerList(r??she),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,h=l[d].data;if(m.name.endsWith("-hub")){let p={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(p.connected_nodes=[],u[m.name]&&u[m.name].forEach(_=>{p.connected_nodes.includes(_.name.slice(0,-4))||p.connected_nodes.push(_.name.slice(0,-4))})),a&&(p.routes=h.cluster?.urls?h.cluster?.urls.map(_=>({host:_.split(":")[0],port:QO.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(ohe,"clusterNetwork")});var tK=M((YUe,eK)=>{"use strict";var XO=require("joi"),X1=lt(),{routeConstraints:Z1}=VI();eK.exports={setRoutesValidator:ahe,deleteRoutesValidator:che};function ahe(e){let t=XO.object({server:XO.valid("hub","leaf"),routes:Z1.required()});return X1.validateBySchema(e,t)}o(ahe,"setRoutesValidator");function che(e){let t=XO.object({routes:Z1.required()});return X1.validateBySchema(e,t)}o(che,"deleteRoutesValidator")});var yT=M((zUe,cK)=>{"use strict";var Wo=bt(),ZO=ie(),vs=(k(),v(W)),Wd=oe(),rK=tK(),{handleHDBError:nK,hdbErrors:lhe}=ge(),{HTTP_STATUS_CODES:sK}=lhe,iK="cluster routes successfully set",oK="cluster routes successfully deleted";cK.exports={setRoutes:dhe,getRoutes:fhe,deleteRoutes:mhe};function uhe(e){let t=Wo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=ZO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:iK,set:i,skipped:s}}o(uhe,"setRoutesNats");function dhe(e){let t=rK.setRoutesValidator(e);if(t)throw nK(t,t.message,sK.BAD_REQUEST,void 0,void 0,!0);if(Wd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return uhe(e);let r=[],n=[],s=Wd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{aK(s,i)?n.push(i):(s.push(i),r.push(i))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:iK,set:r,skipped:n}}o(dhe,"setRoutes");function aK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(aK,"existsInArray");function fhe(){if(Wd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Wo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Wd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(fhe,"getRoutes");function mhe(e){let t=rK.deleteRoutesValidator(e);if(t)throw nK(t,t.message,sK.BAD_REQUEST,void 0,void 0,!0);if(Wd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return hhe(e);let r=[],n=[],s=Wd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{aK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:oK,deleted:r,skipped:n}}o(mhe,"deleteRoutes");function hhe(e){let t=Wo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,h=r.length;m<h;m++){let p=r[m];if(d.host===p.host&&d.port===p.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let h=0,p=n.length;h<p;h++){let _=n[h];if(d.host===_.host&&d.port===_.port){n.splice(h,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=ZO.isEmptyOrZeroLength(r)?null:r,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ZO.isEmptyOrZeroLength(n)?null:n,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:oK,deleted:s,skipped:i}}o(hhe,"deleteRoutesNats")});var uK=M((QUe,lK)=>{"use strict";var dp=require("alasql"),kl=require("recursive-iterator"),gi=Q(),phe=ie(),fp=(k(),v(W)),eC=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,_he(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=>fp.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=>!fp.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][fp.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Ehe(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!fp.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new dp.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Ehe(e){return e.filter(t=>t[fp.PERMS_CRUD_ENUM.READ])}o(Ehe,"filterReadRestrictedAttrs");function _he(e,t,r,n,s){ghe(e,t,r,n,s)}o(_he,"interpretAST");function mp(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(mp,"addSchemaTableToMap");function ghe(e,t,r,n,s){if(!e){gi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof dp.yy.Insert?yhe(e,t,r):e instanceof dp.yy.Select?She(e,t,r,n,s):e instanceof dp.yy.Update?The(e,t,r):e instanceof dp.yy.Delete?Rhe(e,t,r):gi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(ghe,"getRecordAttributesAST");function She(e,t,r,n,s){if(!e){gi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(phe.isEmptyOrZeroLength(i)){gi.error("No schema specified");return}e.from.forEach(c=>{mp(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),mp(c.table,t,r,n,s)});let a=new kl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{gi.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 kl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new kl(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new kl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{gi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(She,"getSelectAttributes");function The(e,t,r){if(!e){gi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new kl(e.columns),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.table.tableid,s,i.columnid,t,r)}o(The,"getUpdateAttributes");function Rhe(e,t,r){if(!e){gi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new kl(e.where),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.table.tableid,s,i.columnid,t,r)}o(Rhe,"getDeleteAttributes");function yhe(e,t,r){if(!e){gi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new kl(e.columns),s=e.into.databaseid;mp(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.into.tableid,s,i.columnid,t,r)}o(yhe,"getInsertAttributes");function tC(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(tC,"pushAttribute");lK.exports=eC});var fK=M((XUe,dK)=>{"use strict";var AT=(k(),v(W)),bT=class{static{o(this,"BaseLicense")}constructor(t=0,r=AT.RAM_ALLOCATION_ENUM.DEFAULT,n=AT.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},rC=class extends bT{static{o(this,"ExtendedLicense")}constructor(t=0,r=AT.RAM_ALLOCATION_ENUM.DEFAULT,n=AT.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};dK.exports={BaseLicense:bT,ExtendedLicense:rC}});var Qd=M((e0e,gK)=>{"use strict";var jd=require("fs-extra"),IT=(mg(),v(fg)),hK=require("crypto"),Ahe=require("moment"),bhe=require("uuid").v4,pn=Q(),sC=require("path"),Ihe=ie(),Gl=(k(),v(W)),{totalmem:mK}=require("os"),Nhe=fK().ExtendedLicense,zd="invalid license key format",whe="061183",Ohe="mofi25",Che="aes-256-cbc",Phe=16,Lhe=32,pK=oe(),{resolvePath:EK}=bt();pK.initSync();var nC;gK.exports={validateLicense:_K,generateFingerPrint:Mhe,licenseSearch:aC,getLicense:xhe,checkMemoryLimit:Bhe};function iC(){return sC.join(pK.getHdbBasePath(),Gl.LICENSE_KEY_DIR_NAME,Gl.LICENSE_FILE_NAME)}o(iC,"getLicenseDirPath");function Dhe(){let e=iC();return EK(sC.join(e,Gl.LICENSE_FILE_NAME))}o(Dhe,"getLicenseFilePath");function oC(){let e=iC();return EK(sC.join(e,Gl.REG_KEY_FILE_NAME))}o(oC,"getFingerPrintFilePath");async function Mhe(){let e=oC();try{return await jd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await vhe();throw pn.error(`Error writing fingerprint file to ${e}`),pn.error(t),new Error("There was an error generating the fingerprint")}}o(Mhe,"generateFingerPrint");async function vhe(){let e=bhe(),t=IT.hash(e,IT.HASH_FUNCTION.MD5),r=oC();try{await jd.mkdirp(iC()),await jd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw pn.error(`Error writing fingerprint file to ${r}`),pn.error(n),new Error("There was an error generating the fingerprint")}return t}o(vhe,"writeFingerprint");function _K(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Gl.RAM_ALLOCATION_ENUM.DEFAULT,version:Gl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return pn.error("empty license key passed to validate."),r;let n=oC(),s=!1;try{s=jd.statSync(n)}catch(i){pn.error(i)}if(s){let i;try{i=jd.readFileSync(n,"utf8")}catch{pn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Ohe),c=a[1];c=Buffer.concat([Buffer.from(c)],Phe);let l=Buffer.concat([Buffer.from(i)],Lhe),u=hK.createDecipheriv(Che,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let h=Uhe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(zd),pn.error(zd),new Error(zd)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(zd),pn.error(zd),new Error(zd)}else r.exp_date=d;r.exp_date<Ahe().valueOf()&&(r.valid_date=!1),IT.validate(a[1],`${whe}${i}${t}`,IT.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||pn.error("Invalid licence"),r}o(_K,"validateLicense");function Uhe(e,t){try{let r=hK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{pn.warn("Check old license failed")}}o(Uhe,"checkOldLicense");function aC(){let e=new Nhe,t=[];try{t=jd.readFileSync(Dhe(),"utf-8").split(`\r
24
- `)}catch(r){r.code==="ENOENT"?pn.debug("no license file found"):pn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Ihe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=_K(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){pn.error("There was an error parsing the license string."),pn.error(s),e.ram_allocation=Gl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return nC=e,e}o(aC,"licenseSearch");async function xhe(){return nC||await aC(),nC}o(xhe,"getLicense");function Bhe(){let e=aC().ram_allocation,t=process.constrainedMemory?.()||mK();if(t=Math.round(Math.min(t,mK())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(Bhe,"checkMemoryLimit")});var uC=M((r0e,yK)=>{var NT=Qd(),SK=require("chalk"),ls=Q(),TK=require("prompt"),{promisify:Fhe}=require("util"),cC=(k(),v(W)),Hhe=require("fs-extra"),khe=require("path"),Ghe=ie(),{packageJson:qhe}=Rt(),RK=oe();RK.initSync();var $he=require("moment"),Vhe=Fhe(TK.get),Khe=khe.join(RK.getHdbBasePath(),cC.LICENSE_KEY_DIR_NAME,cC.LICENSE_FILE_NAME,cC.LICENSE_FILE_NAME);yK.exports={getFingerprint:Whe,setLicense:Yhe,parseLicense:lC,register:zhe,getRegistrationInfo:Qhe};async function Yhe(e){if(e&&e.key&&e.company){try{ls.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await lC(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ls.error(r),ls.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Yhe,"setLicense");async function Whe(){let e={};try{e=await NT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ls.error(r),ls.error(t),new Error(r)}return e}o(Whe,"getFingerprint");async function lC(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ls.info("Validating license input...");let r=NT.validateLicense(e,t);if(ls.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ls.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ls.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ls.info("writing license to disk"),await Hhe.writeFile(Khe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ls.error("Failed to write License"),n}return"Registration successful."}o(lC,"parseLicense");async function zhe(){let e=await jhe();return lC(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(zhe,"register");async function jhe(){let e=await NT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:SK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:SK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{TK.start()}catch(n){ls.error(n)}let r;try{r=await Vhe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(jhe,"promptForRegistration");async function Qhe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await NT.getLicense()}catch(r){throw ls.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Ghe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=qhe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=$he.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Qhe,"getRegistrationInfo")});var bK=M((s0e,AK)=>{"use strict";var Jhe=It(),dC=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,h,p){this.port=t,a===null&&(a=void 0),this.server_name=r+Jhe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:h},HDB:{users:p}},this.system_account="SYS"}};AK.exports=dC});var wK=M((o0e,NK)=>{"use strict";var IK=It(),fC=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+IK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+IK.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};NK.exports=fC});var CK=M((c0e,OK)=>{"use strict";var mC=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};OK.exports=mC});var LK=M((u0e,PK)=>{"use strict";var Xhe=It(),hC=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Xhe.SERVER_SUFFIX.ADMIN,this.password=r}};PK.exports=hC});var PT=M((f0e,vK)=>{"use strict";var ql=require("path"),$l=require("fs-extra"),Zhe=bK(),epe=wK(),tpe=CK(),rpe=LK(),pC=ts(),Xd=ie(),Fn=bt(),OT=(k(),v(W)),hp=It(),{CONFIG_PARAMS:nr}=OT,Zd=Q(),pp=oe(),DK=$i(),EC=mr(),npe=as(),Jd="clustering",spe=1e4,MK=50;vK.exports={generateNatsConfig:ope,removeNatsConfig:ape,getHubConfigPath:ipe};function ipe(){let e=pp.get(nr.ROOTPATH);return ql.join(e,Jd,hp.NATS_CONFIG_FILES.HUB_SERVER)}o(ipe,"getHubConfigPath");async function ope(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=pp.get(nr.ROOTPATH);$l.ensureDirSync(ql.join(r,"clustering","leaf")),pp.initSync();let n=Fn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Fn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Fn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await $l.exists(i)&&!await $l.exists(!n)&&await npe.createNatsCerts();let a=ql.join(r,Jd,hp.PID_FILES.HUB),c=ql.join(r,Jd,hp.PID_FILES.LEAF),l=Fn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=ql.join(r,Jd,hp.NATS_CONFIG_FILES.HUB_SERVER),d=ql.join(r,Jd,hp.NATS_CONFIG_FILES.LEAF_SERVER),f=Fn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Fn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),h=Fn.getConfigFromFile(nr.CLUSTERING_NODENAME),p=Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await EC.checkNATSServerInstalled()||CT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await pC.listUsers(),g=Fn.getConfigFromFile(nr.CLUSTERING_USER),y=await pC.getClusterUser();(Xd.isEmpty(y)||y.active!==!0)&&CT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await wT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await wT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await wT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await wT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[q,K]of _.entries())K.role?.role===OT.ROLE_TYPES_ENUM.CLUSTER_USER&&K.active&&(T.push(new rpe(K.username,DK.decrypt(K.hash))),R.push(new tpe(K.username,DK.decrypt(K.hash))));let N=[],{hub_routes:O}=Fn.getClusteringRoutes();if(!Xd.isEmptyOrZeroLength(O))for(let q of O)N.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${q.host}:${q.port}`);let F=new Zhe(Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,R);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Xd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await $l.writeJson(u,F),Zd.trace(`Hub server config written to ${u}`));let Z=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,G=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,Y=new epe(Fn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[Z],[G],T,R,i,s,n,f);n==null&&delete Y.tls.ca_file,(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await $l.writeJson(d,Y),Zd.trace(`Leaf server config written to ${d}`))}o(ope,"generateNatsConfig");async function wT(e){let t=pp.get(e);return Xd.isEmpty(t)&&CT(`port undefined for '${e}'`),await Xd.isPortTaken(t)&&CT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(wT,"isPortAvailable");function CT(e){let t=`Error generating clustering config: ${e}`;Zd.error(t),console.error(t),process.exit(1)}o(CT,"generateNatsConfigError");async function ape(e){let{port:t,config_file:r}=EC.getServerConfig(e),{username:n,decrypt_hash:s}=await pC.getClusterUser(),i=0,a=2e3;for(;i<MK;){try{let d=await EC.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Zd.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=MK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&Zd.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Xd.asyncSetTimeout(u)}let c="0".repeat(spe),l=ql.join(pp.get(nr.ROOTPATH),Jd,r);await $l.writeFile(l,c),await $l.remove(l),Zd.notify(e,"started.")}o(ape,"removeNatsConfig")});var kK=M((h0e,HK)=>{"use strict";var us=oe(),cpe=Qd(),Ke=(k(),v(W)),Ep=It(),zo=require("path"),{PACKAGE_ROOT:DT}=Rt(),UK=oe(),LT=ie(),ef="/dev/null",lpe=zo.join(DT,"launchServiceScripts"),xK=zo.join(DT,"utility/scripts"),upe=zo.join(xK,Ke.HDB_RESTART_SCRIPT),BK=zo.resolve(DT,"dependencies",`${process.platform}-${process.arch}`,Ep.NATS_BINARY_NAME);function FK(){let t=cpe.licenseSearch().ram_allocation||Ke.RAM_ALLOCATION_ENUM.DEFAULT,r=Ke.MEM_SETTING_KEY+t,n={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return LT.noBootFile()&&(n[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{name:Ke.PROCESS_DESCRIPTORS.HDB,script:Ke.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:DT}}o(FK,"generateMainServerConfig");var dpe=9930;function fpe(){us.initSync(!0);let e=us.get(Ke.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.HUB_SERVER),r=zo.join(us.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=UK.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==dpe?"-"+n:""),script:BK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ef,i.error_file=ef),i}o(fpe,"generateNatsHubServerConfig");var mpe=9940;function hpe(){us.initSync(!0);let e=us.get(Ke.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.LEAF_SERVER),r=zo.join(us.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=UK.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==mpe?"-"+n:""),script:BK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ef,i.error_file=ef),i}o(hpe,"generateNatsLeafServerConfig");function ppe(){us.initSync();let e=zo.join(us.get(Ke.CONFIG_PARAMS.LOGGING_ROOT),Ke.LOG_NAMES.HDB),t={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ke.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:lpe,autorestart:!1};return us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ef,t.error_file=ef),t}o(ppe,"generateClusteringUpgradeV4ServiceConfig");function Epe(){let e={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.RESTART_HDB};return LT.noBootFile()&&(e[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{...{name:Ke.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:xK},script:upe}}o(Epe,"generateRestart");function _pe(){return{apps:[FK()]}}o(_pe,"generateAllServiceConfigs");HK.exports={generateAllServiceConfigs:_pe,generateMainServerConfig:FK,generateRestart:Epe,generateNatsHubServerConfig:fpe,generateNatsLeafServerConfig:hpe,generateClusteringUpgradeV4ServiceConfig:ppe}});var gp=M((_0e,eY)=>{"use strict";var at=(k(),v(W)),gpe=ie(),Qo=PT(),MT=mr(),jo=It(),ac=kK(),vT=oe(),Vl=Q(),Spe=Ko(),{startWorker:GK,onMessageFromWorkers:Tpe}=rt(),Rpe=qd(),E0e=require("util"),ype=require("child_process"),Ape=require("fs"),{execFile:bpe}=ype,Je;eY.exports={enterPM2Mode:Ipe,start:cc,stop:_C,reload:$K,restart:VK,list:gC,describe:WK,connect:Jo,kill:Ppe,startAllServices:Lpe,startService:SC,getUniqueServicesList:zK,restartAllServices:Dpe,isServiceRegistered:jK,reloadStopStart:QK,restartHdb:YK,deleteProcess:Ope,startClusteringProcesses:XK,startClusteringThreads:ZK,isHdbRestartRunning:Cpe,isClusteringRunning:vpe,stopClustering:Mpe,reloadClustering:Upe,expectedRestartOfChildren:KK};var _p=!1;Tpe(e=>{e.type==="restart"&&vT.initSync(!0)});function Ipe(){_p=!0}o(Ipe,"enterPM2Mode");function Jo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(Jo,"connect");var En,Npe=10,qK;function cc(e,t=!1){if(_p)return wpe(e);let r=bpe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=En.indexOf(r);a>-1&&En.splice(a,1),!qK&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Npe&&(Ape.existsSync(Qo.getHubConfigPath())?cc(e):(await Qo.generateNatsConfig(!0),cc(e),await new Promise(c=>setTimeout(c,3e3)),await Qo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Qo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=vT.get(at.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Vl.OUTPUTS.STDERR:Vl.OUTPUTS.STDOUT;Vl.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=jo.LOG_LEVELS[m]}if(jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Vl.OUTPUTS.STDERR:Vl.OUTPUTS.STDOUT;Vl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!En&&(En=[],!t)){let i=o(()=>{qK=!0,En&&(En.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}En.push(r)}o(cc,"start");function wpe(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(wpe,"startWithPM2");function _C(e){if(!_p){for(let t of En||[])t.name===e&&(En.splice(En.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,a)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(a)})})})}o(_C,"stop");function $K(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o($K,"reload");function VK(e){if(!_p){KK();for(let t of En||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(VK,"restart");function KK(){for(let e of En||[])e.config&&(e.config.restarts=0)}o(KK,"expectedRestartOfChildren");function Ope(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Ope,"deleteProcess");async function YK(){await cc(ac.generateRestart())}o(YK,"restartHdb");async function Cpe(){let e=await gC();for(let t in e)if(e[t].name===at.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Cpe,"isHdbRestartRunning");function gC(){return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(gC,"list");function WK(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(WK,"describe");function Ppe(){if(!_p){for(let e of En||[])e.kill();En=[];return}return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(Ppe,"kill");async function Lpe(){try{await XK(),await ZK(),await cc(ac.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(Lpe,"startAllServices");async function SC(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case at.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ac.generateMainServerConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ac.generateNatsIngestServiceConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ac.generateNatsReplyServiceConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ac.generateNatsHubServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ac.generateNatsLeafServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case at.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ac.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await cc(r)}catch(r){throw Je?.disconnect(),r}}o(SC,"startService");async function zK(){try{let e=await gC(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Je?.disconnect(),e}}o(zK,"getUniqueServicesList");async function Dpe(e=[]){try{let t=!1,r=await zK();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===at.PROCESS_DESCRIPTORS.HDB?t=!0:await VK(a))}t&&await QK(at.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(Dpe,"restartAllServices");async function jK(e){if(En?.find(r=>r.name===e))return!0;let t=await Rpe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(jK,"isServiceRegistered");async function QK(e){let t=vT.get(at.CONFIG_PARAMS.THREADS_COUNT)??vT.get(at.CONFIG_PARAMS.THREADS),r=await WK(e),n=gpe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await _C(e),await SC(e)):e===at.PROCESS_DESCRIPTORS.HDB?await YK():await $K(e)}o(QK,"reloadStopStart");var JK;async function XK(e=!1){for(let t in at.CLUSTERING_PROCESSES){let r=at.CLUSTERING_PROCESSES[t];await SC(r,e)}}o(XK,"startClusteringProcesses");async function ZK(){JK=GK(at.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:at.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await MT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await MT.updateLocalStreams();let e=await Spe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===at.PRE_4_0_0_VERSION){Vl.info("Starting clustering upgrade 4.0.0 process"),GK(at.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(ZK,"startClusteringThreads");async function Mpe(){for(let e in at.CLUSTERING_PROCESSES)if(e!==at.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===at.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await JK.terminate();else{let t=at.CLUSTERING_PROCESSES[e];await _C(t)}}o(Mpe,"stopClustering");async function vpe(){for(let e in at.CLUSTERING_PROCESSES){let t=at.CLUSTERING_PROCESSES[e];if(await jK(t)===!1)return!1}return!0}o(vpe,"isClusteringRunning");async function Upe(){await Qo.generateNatsConfig(!0),await MT.reloadNATSHub(),await MT.reloadNATSLeaf(),await Qo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Qo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Upe,"reloadClustering")});var yC={};Oe(yC,{compactOnStart:()=>xpe,copyDb:()=>oY});async function xpe(){lc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,TC.get)(U.ROOTPATH),t=new Map,r=nt();(0,RC.updateConfigValue)(U.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,UT.join)(e,"backup",n+".mdb"),a=(0,UT.join)(e,vc,n+"-copy.mdb"),c=0;try{c=await tY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){lc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await oY(n,a),console.log("Backing up",n,"to",i);try{await(0,Kl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,Kl.move)(a,s,{overwrite:!0}),await(0,Kl.remove)((0,UT.join)(e,vc,`${n}-copy.mdb-lock`))}try{cd()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{cd()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){lc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,RC.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Kl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw cd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=await tY(n);if(console.log("Database",n,"after compact has a total record count of",a),i!==a){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
22
+ `,"")}o(Jq,"runCommand");async function yle(){try{await Xce.access(Ow)}catch{return!1}let e=await Jq(`${Ow} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Zce.eq(t,Tle)}o(yle,"checkNATSServerInstalled");async function Mw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await jq.getClusterUser();if(Ll(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}hi.trace("create nats connection called");let i=await dle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),hi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&hi.error("Error with Nats client connection, connection closed",a),i===fn&&Xq()}),i}o(Mw,"createConnection");function Xq(){fn=void 0,Ol=void 0,Cl=void 0,Pl=void 0}o(Xq,"clearClientCache");async function Ale(){fn&&(await fn.drain(),fn=void 0,Ol=void 0,Cl=void 0,Pl=void 0)}o(Ale,"closeConnection");var fn,Pl;async function Hh(){return Pl||(Pl=Mw(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),fn=await Pl),fn||Pl}o(Hh,"getConnection");async function kh(){if(Ol)return Ol;Ll(fn)&&await Hh();let{domain:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ll(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await fn.jetstreamManager({domain:e,timeout:6e4}),Ol}o(kh,"getJetStreamManager");async function Zq(){if(Cl)return Cl;Ll(fn)&&await Hh();let{domain:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ll(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Cl=fn.jetstream({domain:e,timeout:6e4}),Cl}o(Zq,"getJetStream");async function Zi(){let e=fn||await Hh(),t=Ol||await kh(),r=Cl||await Zq();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function ble(e){let t=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await jq.getClusterUser(),s=await Mw(t,r,n),i=Dw(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=Qq.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await IS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(ble,"getServerList");async function vw(e,t){let{jsm:r}=await Zi(),n=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:fle.File,retention:mle.Limits,subjects:t,discard:hle.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(vw,"createLocalStream");async function e$(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(e$,"listStreams");async function Ile(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(Ile,"deleteLocalStream");async function Nle(e){let{connection:t}=await Zi(),r=[],n=Dw(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(Qq.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Nle,"listRemoteStreams");async function wle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=Kq(),a={durable_name:i,ack_policy:Pw.Explicit};t&&(a.deliver_policy=Lw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=Cw(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(jr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(wle,"viewStream");async function*Ole(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=Kq(),a={durable_name:i,ack_policy:Pw.Explicit};t&&(a.deliver_policy=Lw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=Cw(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(jr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Ole,"viewStreamIterator");async function Cle(e,t,r,n){hi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=t$(n,r);let{js:s}=await Zi(),i=await wS(),a=`${e}.${i}`,c=await gle(()=>n instanceof Uint8Array?n:zq.encode(n));try{hi.trace(`publishToStream publishing to subject: ${a}`),_le(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return n$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){hi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await vw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Cle,"publishToStream");function t$(e,t){t===void 0&&(t=Ele());let r=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(jr.MSG_HEADERS.ORIGIN)&&r&&t.append(jr.MSG_HEADERS.ORIGIN,r),t}o(t$,"addNatsMsgHeader");function bd(e){e=e.toLowerCase();let t=Fh.join(kr.get(Qe.CONFIG_PARAMS.ROOTPATH),Sle);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ll(ww)&&(ww={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.HUB,config_file:jr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fh.join(t,jr.PID_FILES.HUB),hdbNatsPath:t}),ww;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ll(Nw)&&(Nw={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,config_file:jr.NATS_CONFIG_FILES.LEAF_SERVER,domain:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,pid_file_path:Fh.join(t,jr.PID_FILES.LEAF),hdbNatsPath:t}),Nw;hi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(bd,"getServerConfig");async function r$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Pw.Explicit,durable_name:r,deliver_policy:Lw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(r$,"createConsumer");async function Ple(e,t,r){await e.consumers.delete(t,r)}o(Ple,"removeConsumer");function Lle(e){return e.split(".")[1]}o(Lle,"extractServerName");async function Dle(e,t,r=6e4,n=Dw()){if(!IS.isObject(t))throw new Error("data param must be an object");let s=zq.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return Cw(c.data)}o(Dle,"request");function Uw(e){return new Promise(async(t,r)=>{let n=nle(Ow,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(Uw,"reloadNATS");async function Mle(){let{pid_file_path:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Uw(e)}o(Mle,"reloadNATSHub");async function vle(){let{pid_file_path:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Uw(e)}o(vle,"reloadNATSLeaf");function Ule(e,t,r){let n;switch(e.code){case Vq.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case Vq.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Ule,"requestErrorHandler");async function xle(e,t){let r=t+jr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await Vle(r),{schema:i,table:a}=e,c=NS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await n$(async()=>{if(e.subscribe===!0)await r$(s,c,n.info.server_name,l);else try{await Ple(s,c,n.info.server_name)}catch(u){hi.trace(u)}})}o(xle,"updateRemoteConsumer");async function Ble(e,t,r,n){let s=NS.createNatsTableStreamName(e,t),i=r+jr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!Wq&&lle()<kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Iw();await c(a)}await ale(a),n==="stop"&&await IS.asyncSetTimeout(1e3)}o(Ble,"updateConsumerIterator");function n$(e){return ole.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(n$,"exclusiveLock");async function s$(e,t){let r=NS.createNatsTableStreamName(e,t),n=await wS(),s=Gle(e,t,n);await vw(r,[s])}o(s$,"createLocalTableStream");async function Fle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await s$(n,s)}}o(Fle,"createTableStreams");async function i$(e,t,r=void 0){if(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=NS.createNatsTableStreamName(e,t),{domain:s}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Hh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")hi.warn(n);else throw n}}o(i$,"purgeTableStream");async function Hle(e,t){if(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await i$(e,t[r])}o(Hle,"purgeSchemaTableStreams");async function kle(e){return(await kh()).streams.info(e)}o(kle,"getStreamInfo");function Gle(e,t,r){return`${jr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Gle,"createSubjectName");async function wS(){if(Bh)return Bh;if(Bh=(await kh())?.nc?.info?.server_name,Bh===void 0)throw new Error("Unable to get jetstream manager server name");return Bh}o(wS,"getJsmServerName");async function qle(){let e=await kh(),t=await wS(),r=await e$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=$le(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");hi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(qle,"updateLocalStreams");function $le(e){let{config:t}=e,r=!1,n=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o($le,"updateStreamLimits");async function Vle(e){let t,r;try{t=await fn.jetstream({domain:e}),r=await fn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw hi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(Vle,"connectToRemoteJS")});function xw(e){let t=e.get(OS),r=t?(0,Id.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Ze(),s=!1;r.nodeName=Ze();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:qh(e)??1,nodes:[]})})}i[n]=0,e.putSync(OS,(0,Id.pack)(r))}return r}function Gh(e){return xw(e).remoteNameToId}function c$(e,t){let r=xw(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(OS,(0,Id.pack)(r)),s}function CS(e,t){let r=xw(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(OS,(0,Id.pack)(r))}return a$.trace?.("The remote node name map",e,n,s),s}var a$,Id,OS,Bw=ce(()=>{a$=w(ei());is();Id=require("msgpackr"),OS=Symbol.for("remote-ids");o(xw,"getIdMappingRecord");o(Gh,"exportIdMapping");o(c$,"remoteToLocalNodeId");o(CS,"getIdOfRemoteNode")});var Fw={};we(Fw,{commitsAwaitingReplication:()=>Nd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>wd,iterateRoutes:()=>Vh,shouldReplicateToNode:()=>$h,subscribeToNodeUpdates:()=>Od});function Wt(){return l$||(l$=ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function wd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Od(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;m$.debug?.("adding node",n,"on node",Ze()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Ze()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Wt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function $h(e,t){let r=Wa.default.get(U.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===Wa.default.get(U.REPLICATION_SHARD))))&&Wt().primaryStore.get(Ze())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Kle(){Od(e=>{za({},(t,r)=>{let n=e.name,s=u$.get(n);if(s||u$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=wd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Nd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Vh(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=Wa.default.get(U.REPLICATION_SECUREPORT)??(!Wa.default.get(U.REPLICATION_PORT)&&Wa.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Wa.default.get(U.REPLICATION_PORT)||Wa.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){d$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var d$,f$,Wa,m$,l$,u$,Nd,Dl=ce(()=>{Me();is();rm();d$=require("worker_threads"),f$=w(ge()),Wa=w(oe());k();m$=w(ei());server.nodes=[];o(Wt,"getHDBNodeTable");o(wd,"getReplicationSharedStatus");o(Od,"subscribeToNodeUpdates");o($h,"shouldReplicateToNode");u$=new Map;tv((e,t,r)=>{if(r>server.nodes.length)throw new f$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Nd||(Nd=new Map,Kle());let n=Nd.get(e);return n||(n=[],Nd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Kle,"startSubscriptionToReplications");o(Vh,"iterateRoutes")});var E$={};we(E$,{connectedToNode:()=>Ml,disconnectedFromNode:()=>Pd,ensureNode:()=>Ho,requestClusterStatus:()=>p$,startOnMainThread:()=>kw});async function kw(e){let t=0,r=st();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){PS.set(i,qh(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=Ze();function c(){let l=Wt().primaryStore.get(a);if(l!==null){let u=e.url??ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Ho(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of Vh(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}Od(s)});let n;function s(i,a=i?.name){let c=Ze()&&a===Ze()||ja()&&i?.url===ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Wt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(at.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let h;for(let[p,{worker:_,nodes:g}]of m){let R=g[0];if(R&&R.name==a){h=!0;for(let[T,{worker:y}]of m)m.delete(T),at.warn("Node was deleted, unsubscribing from node",a,T,f),y?.postMessage({type:"unsubscribe-from-node",node:a,database:T,url:f});break}}if(h){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){at.info(`Node ${i.name} is missing url`);return}let l=eo.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 ${Ze()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Cd)if(i.url===m.url){Cd.delete(f);break}Cd.set(i.name,i)}let u=st();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=za(e,(f,m,h)=>{h?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(at.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){at.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];PS.has(f)&&Kh.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:m,name:Ze(),startTime:PS.get(f),endTime:Date.now(),replicates:!0}),PS.delete(f));let g=$h(i,f),R=to.workers.filter(T=>T.name==="http");if(h?(p=h.worker,h.nodes=_):g&&(t=t%R.length,p=R[t++],l.set(f,{worker:p,nodes:_,url:i.url}),p?.on("exit",()=>{l.get(f)?.worker===p&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let T={type:"subscribe-to-node",database:f,nodes:_};p?p.postMessage(T):Yh(T)},Yle);else{at.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Wt().primaryStore.get(Ze())?.replicates}),Wt().primaryStore.get(Ze())?.replicates||(n=!1,at.info("Disabling replication, this node name",Ze(),Wt().primaryStore.get(Ze()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):DS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Pd=o(function(i){try{at.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Cd.keys()),c=a.sort(),l=c.indexOf(i.name||pi(i.url));if(l===-1){at.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){at.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!Kh.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,h=(l+1)%c.length;for(;l!==h;){let p=c[h],_=Cd.get(p);u=eo.get(_.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){h=(h+1)%c.length;continue}let{worker:R,nodes:T}=g,y=!1;for(let N of d.nodes){if(T.some(O=>O.name===N.name)){at.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}N.endTime<Date.now()||(T.push(N),y=!0)}if(d.nodes=[d.nodes[0]],!y){at.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}at.info(`Failing over ${i.database} from ${i.name} to ${p}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Yh({database:i.database,nodes:T});return}at.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){at.error("Error failing over node",a)}},"disconnectedFromNode"),Ml=o(function(i){let a=eo.get(i.url),c=a?.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,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){at.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){at.debug("Connected node is not named yet",i.database,c);return}if(!Kh.default.get(U.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:h,connected:p}=f;if(h)if(p===!1&&h[0].shard===l.shard)u=!0,c.nodes.push(h[0]);else{let _=h.filter(g=>g&&g.name!==l.name);_.length<h.length&&(f.nodes=_,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:h}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Pd),(0,to.onMessageByType)("connected-to-node",Ml),(0,to.onMessageByType)("request-cluster-status",p$)}function p$(e,t){let r=[];for(let[n,s]of Cd)try{let i=eo.get(s.url);at.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(h=>!(h.endTime<Date.now())).map(h=>h.name)});let c=(0,Hw.cloneDeep)(s);c.database_sockets=a,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 Ho(e,t){let r=Wt();e=e??pi(t.url),t.name=e;try{if(t.ca){let s=new h$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){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&&!Kh.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=(0,Hw.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}at.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,LS,at,Hw,Kh,h$,Yle,eo,Pd,Ml,Cd,PS,Wh=ce(()=>{Me();to=w(nt());is();LS=require("worker_threads");Dl();at=w(Q()),Hw=require("lodash"),Kh=w(oe());k();h$=require("crypto"),Yle=200,eo=new Map,Cd=new Map,PS=new Map;o(kw,"startOnMainThread");o(p$,"requestClusterStatus");LS.parentPort&&(Pd=o(e=>{LS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ml=o(e=>{LS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{Yh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{DS(e)}));o(Ho,"ensureNode")});var as=M(zt=>{"use strict";var hr=require("path"),{watch:Wle}=require("chokidar"),xn=require("fs-extra"),Ld=require("node-forge"),y$=require("net"),{generateKeyPair:Gw,X509Certificate:ko,createPrivateKey:A$}=require("crypto"),zle=require("util");Gw=zle.promisify(Gw);var Lt=Ld.pki,Ei=require("joi"),{v4:b$}=require("uuid"),{validateBySchema:Kw}=ut(),{forComponent:jle}=Q(),os=oe(),Ls=(k(),v(W)),{CONFIG_PARAMS:Ul}=Ls,_i=qI(),{ClientError:Ja}=ge(),vS=require("node:tls"),{relative:I$,join:Qle}=require("node:path"),{CERT_PREFERENCE_APP:zMe,CERTIFICATE_VALUES:_$}=_i,Jle=xc(),qw=wt(),{table:Xle,getDatabases:Zle,databases:MS}=(Me(),v(Et)),{getJWTRSAKeys:g$}=(Td(),v(vh)),_t=jle("tls");zt.generateKeys=zw;zt.updateConfigCert=M$;zt.createCsr=oue;zt.signCertificate=aue;zt.setCertTable=Dd;zt.loadCertificates=P$;zt.reviewSelfSignedCert=Qw;zt.createTLSSelector=U$;zt.listCertificates=B$;zt.addCertificate=mue;zt.removeCertificate=pue;zt.createNatsCerts=uue;zt.generateCertsKeys=lue;zt.getReplicationCert=jh;zt.getReplicationCertAuth=iue;zt.renewSelfSigned=due;zt.hostnamesFromCert=Xw;zt.getKey=Eue;zt.getHostnamesFromCertificate=_ue;zt.getPrimaryHostName=Jw;var{urlToNodeName:N$,getThisNodeUrl:eue,getThisNodeName:xS,clearThisNodeName:tue}=(is(),v(Go)),{readFileSync:rue,statSync:w$}=require("node:fs"),jMe=oe(),{getTicketKeys:nue,onMessageFromWorkers:sue}=nt(),Qa=Q(),{isMainThread:O$}=require("worker_threads"),{TLSSocket:C$,createSecureContext:QMe}=require("node:tls"),Yw=3650,zh=["127.0.0.1","localhost","::1"],Ww=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];sue(async e=>{e.type===Ls.ITC_EVENT_TYPES.RESTART&&(os.initSync(!0),await Qw())});var Qr;function Za(){return Qr||(Qr=Zle().system.hdb_certificate,Qr||(Qr=Xle({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__"}]}))),Qr}o(Za,"getCertTable");async function jh(){let e=U$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(xS());if(!r)return;let n=new ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(jh,"getReplicationCert");async function iue(){Za();let e=(await jh()).options.cert,r=new ko(e).issuer.match(/CN=(.*)/)?.[1];return Qr.get(r)}o(iue,"getReplicationCertAuth");var S$,Xa=new Map;function P$(){if(S$)return;S$=!0;let e=[{configKey:Ul.TLS},{configKey:Ul.OPERATIONSAPI_TLS}];Za();let t=hr.dirname(qw.getConfigFilePath()),r;for(let{configKey:n}of e){let s=qw.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&I$(Qle(t,"keys"),a);c&&T$(a,l=>{Xa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&O$){let d;T$(u,f=>{if(_$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=v$(u),p=new ko(h),_;try{_=Jw(p)}catch(y){_t.error("error extracting host name from certificate",y);return}if(_==null){_t.error("No host name found on certificate");return}if(p.checkIssued(new ko(_$.cert)))return;let g=Qr.primaryStore.get(_),R=w$(u).mtimeMs,T=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=T){R<T&&_t.info(`Certificate ${_} at ${u} is older (${new Date(R)}) than the certificate in the database (${T>1?new Date(T):"only self signed certificate available"})`);return}r=Qr.put({name:_,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp: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}o(P$,"loadCertificates");function T$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&O$&&_t.warn(`Reloading ${r}:`,i),n=c,t(v$(i)))}catch(c){_t.error(`Error loading ${r}:`,i,c)}},"loadFile");xn.existsSync(e)?s(e,w$(e)):_t.error(`${r} file not found:`,e),Wle(e,{persistent:!1}).on("change",s)}o(T$,"loadAndWatch");function $w(){let e=eue();if(e==null){let t=zh[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return N$(e)}o($w,"getHost");function US(){let e=xS();if(e==null){let t=zh[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(US,"getCommonName");async function oue(){let e=await jh(),t=Lt.certificateFromPem(e.options.cert),r=Lt.privateKeyFromPem(e.options.key);_t.info("Creating CSR with cert named:",e.name);let n=Lt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:US()},...Ww];_t.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:L$()}];return _t.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Ld.pki.certificationRequestToPem(n)}o(oue,"createCsr");function L$(){let e=zh.includes(US())?zh:[...zh,US()];return e.includes($w())||e.push($w()),[{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=>y$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(L$,"certExtensions");async function aue(e){let t={},r=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Za();for await(let d of Qr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Xa.has(d.private_key_name)){n=Xa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await xn.exists(hr.join(r,d.private_key_name))){n=xn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Vw();s=d.ca,n=d.private_key}n=Lt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Lt.certificateFromPem(s.certificate);_t.info("Signing CSR with cert named",s.name);let a=Lt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return _t.error(d),new Error("Error verifying CSR: "+d.message)}let c=Ld.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Yw),_t.info("sign cert setting validity:",c.validity),_t.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),_t.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;_t.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Ld.md.sha256.create()),t.certificate=Lt.certificateToPem(c)}else _t.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(aue,"signCertificate");async function cue(e,t){await Dd({name:xS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Dd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Lt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(cue,"createCertificateTable");async function Dd(e){let t=new ko(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},Za(),await Qr.patch(e)}o(Dd,"setCertTable");async function zw(){let e=await Gw("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Lt.publicKeyFromPem(e.publicKey),privateKey:Lt.privateKeyFromPem(e.privateKey)}}o(zw,"generateKeys");async function jw(e,t,r){let n=Lt.createCertificate();if(!t){let a=await jh();t=Lt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Yw);let i=[{name:"commonName",value:US()},...Ww];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(L$()),n.sign(e,Ld.md.sha256.create()),Lt.certificateToPem(n)}o(jw,"generateCertificates");async function Vw(){let e=await B$(),t;for(let r of e){if(!r.is_authority)continue;let n=await x$(r.private_key_name);if(r.private_key_name&&n&&new ko(r.certificate).checkPrivateKey(A$(n))){_t.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;_t.trace("No CA found with matching private key")}o(Vw,"getCertAuthority");async function D$(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Yw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${os.get(Ul.REPLICATION_HOSTNAME)??N$(os.get(Ul.REPLICATION_URL))??b$().split("-")[0]}`},...Ww];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Ld.md.sha256.create());let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=hr.join(a,_i.PRIVATEKEY_PEM_NAME);return r&&await xn.writeFile(c,Lt.privateKeyToPem(e)),n}o(D$,"generateCertAuthority");async function lue(){let{privateKey:e,publicKey:t}=await zw(),r=await D$(e,t),n=await jw(e,t,r);await cue(n,r),M$()}o(lue,"generateCertsKeys");async function uue(){let e=await jw(Lt.privateKeyFromPem(_i.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(_i.CERTIFICATE_VALUES.cert)),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME);await xn.exists(r)||await xn.writeFile(r,e);let n=hr.join(t,_i.NATS_CA_PEM_NAME);await xn.exists(n)||await xn.writeFile(n,_i.CERTIFICATE_VALUES.cert)}o(uue,"createNatsCerts");async function due(){Za();for await(let e of Qr.search([{attribute:"is_self_signed",value:!0}]))await Qr.delete(e.name);await Qw()}o(due,"renewSelfSigned");async function Qw(){tue(),await P$(),Za();let e=await Vw();if(!e){_t.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Lt.privateKeyFromPem(xn.readFileSync(u)),keyPath:u}}catch(d){return _t.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=os.get(Ul.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=os.get(Ul.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=I$(a,i);s||(_t.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await zw(),xn.existsSync(hr.join(a,_i.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${b$().split("-")[0]}.pem`),await xn.writeFile(hr.join(a,c),Lt.privateKeyToPem(s)));let l=await D$(s,Lt.setRsaPublicKey(s.n,s.e),!1);await Dd({name:l.subject.getField("CN").value,uses:["https"],certificate:Lt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await jh()){let r=xS();_t.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Vw();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await jw(Lt.privateKeyFromPem(e.private_key),s,n);await Dd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(Qw,"reviewSelfSignedCert");function M$(){let e=Jle(Object.keys(Ls.CONFIG_PARAM_MAP),!0),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.PRIVATEKEY_PEM_NAME),n=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,_i.NATS_CA_PEM_NAME),i=Ls.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),qw.updateConfigValue(void 0,void 0,a,!1,!0)}o(M$,"updateConfigCert");function v$(e){return e.startsWith("-----BEGIN")?e:rue(e,"utf8")}o(v$,"readPEM");var R$=vS.createSecureContext;vS.createSecureContext=function(e){if(!e.cert||!e.key)return R$(e);let t={...e};delete t.key,delete t.cert;let r=R$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var fue=C$.prototype._init;C$.prototype._init=function(e,t){fue.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var vl=new Map;function U$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),vl.clear();let d=0;if(MS===void 0){c();return}for await(let f of MS.system.hdb_certificate.search([])){let m=f.certificate,h=new ko(m);f.is_authority&&(h.asString=m,vl.set(h.subject,m))}for await(let f of MS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",h=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(h+=1);let p=await x$(f.private_key_name),_=f.certificate,g=new ko(_);if(vl.has(g.issuer)&&(_+=`
23
+ `+vl.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:nue(),availableCAs:vl,ca:t&&Array.from(vl.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(R.sessionIdContext=a.sessionIdContext);let T=vS.createSecureContext(R);T.name=f.name,T.options=R,T.quality=h,T.certificateAuthorities=Array.from(vl),T.certStart=_.toString().slice(0,100);let y=f.hostnames??Xw(g);Array.isArray(y)||(y=[y]);let N;for(let O of y)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===$w()&&(h+=2),y$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;h>F&&r.set(O,T)}else Qa.error("No hostname found for certificate at",vS.certificate);Qa.trace("Adding TLS",T.name,"for",a.ports||"client","cert named",f.name,"hostnames",y,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=T,d=h,a&&(a.defaultContext=T))}catch(m){Qa.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),MS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Qa.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Qa.debug("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?Qa.debug("No certificate found to match",a,"using the default certificate"):Qa.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Qa.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(U$,"createTLSSelector");async function x$(e){let t=Xa.get(e);return!t&&e?await xn.readFile(hr.join(os.get(Ul.ROOTPATH),Ls.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(x$,"getPrivateKeyByName");async function B$(){Za();let e=[];for await(let t of Qr.search([]))e.push(t);return e}o(B$,"listCertificates");async function mue(e){let t=Kw(e,Ei.object({name:Ei.string().required(),certificate:Ei.string().required(),is_authority:Ei.boolean().required(),private_key:Ei.string(),hosts:Ei.array(),uses:Ei.array()}));if(t)throw new Ja(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new ko(n),c=!1,l=!1,u;for(let[h,p]of Xa)!s&&!c&&a.checkPrivateKey(A$(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new Ja("A suitable private key was not found for this certificate");let d;if(!r){try{d=Jw(a)}catch(h){_t.error(h)}if(d==null)throw new Ja("Error extracting certificate host name, please provide a name parameter")}let f=hue(r??d);s&&!c&&!l&&(await xn.writeFile(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,f+".pem"),s),Xa.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Dd(m),"Successfully added certificate: "+f}o(mue,"addCertificate");function hue(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(hue,"sanitizeName");async function pue(e){let t=Kw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;Za();let n=await Qr.get(r);if(!n)throw new Ja(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Qr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(_t.info("Removing private key named",s),await xn.remove(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,s)))}return await Qr.delete(r),"Successfully removed "+r}o(pue,"removeCertificate");function Jw(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||Xw(e)[0]}o(Jw,"getPrimaryHostName");function Xw(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(Xw,"hostnamesFromCert");async function Eue(e){if(e.bypass_auth!==!0)throw new Ja("Unauthorized","401");let t=Kw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await g$()).privateKey;if(r===".jwtPublic")return(await g$()).publicKey;if(Xa.get(r))return Xa.get(e.name);throw new Ja("Key not found")}o(Eue,"getKey");function _ue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(_ue,"getHostnamesFromCertificate")});var iV={};we(iV,{CONFIRMATION_STATUS_POSITION:()=>nV,LATENCY_POSITION:()=>YS,NodeReplicationConnection:()=>Ud,OPERATION_REQUEST:()=>rO,RECEIVED_TIME_POSITION:()=>VS,RECEIVED_VERSION_POSITION:()=>$S,RECEIVING_STATUS_POSITION:()=>KS,RECEIVING_STATUS_RECEIVING:()=>sV,RECEIVING_STATUS_WAITING:()=>nO,SENDING_TIME_POSITION:()=>Qh,createWebSocket:()=>WS,databaseSubscriptions:()=>tc,replicateOverWS:()=>Jh,tableUpdateListeners:()=>iO});async function WS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Ze(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!eO){let l=(0,X$.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),eO=u.secureContexts}if(i=eO.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 a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,eV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(qS?.caCount!==qo.size&&(qS=Z$.createSecureContext({...i.options,ca:[...qo,...i.options.availableCAs.values()]}),qS.caCount=qo.size),c.secureContext=qS),new Q$.WebSocket(e,"harperdb-replication-v1",c)}function Jh(e,t,r){let n=t.port||t.securePort,s=xl.pid%1e3+"-"+J$.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ae.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||tc,f,m,h=!1,p=t.subscription;p?.then&&p.then(E=>{p=E,p.auditStore&&(f=p.auditStore)});let _=t.tables||u&&st()[u],g;if(!r){ae.error?.(s,"No authorization provided"),Ss(1008,"Unauthorized");return}let R=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,O,F,Z,G,Y,K=6e4,$,le=0,ue=0,se=0,me=j$.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Pe=new Map,De=[],dt=0,Ye;if(t.url){let E=o(()=>{Z&&ue===e._socket?.bytesRead&&se===e._socket?.bytesWritten?e.terminate():(Z=performance.now(),e.ping(),ue=e._socket?.bytesRead,se=e._socket?.bytesWritten)},"sendPing");O=setInterval(E,W$).unref(),E()}else qn();e._socket?.setMaxListeners(200);function qn(){clearTimeout(F),ue=e._socket?.bytesRead,se=e._socket?.bytesWritten,F=setTimeout(()=>{ue===e._socket?.bytesRead&&se===e._socket?.bytesWritten&&(ae.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},W$*2).unref()}o(qn,"resetPingTimer");function rt(){if(!(!g||!u))return m||(m=wd(f,u,g)),m}o(rt,"getSharedStatus"),u&&ga(u);let ht,Cc,Pc=[],$t=[],vf,Uf=[],IE=[],NE=[],Fy=150,xf=25,Ce=0,wE=0,Bf=!1,po,Pr,Rr,Ff;e.on("message",E=>{le=performance.now();try{let S=E.dataView=new Vc(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let P=(0,et.decode)(E),[L,D,H]=P;switch(L){case H$:{if(D){if(g){if(g!==D){ae.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,et.encode)([Md])),Ss(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Ho(g,B)}if(t.connection&&(t.connection.nodeName=g),ae.debug?.(s,"received node name:",g,"db:",u??P[2]),!u)try{ga(u=P[2]),u==="system"&&(ht=za(t,(B,de)=>{pu(de)&&Sa(de)}),e.on("close",()=>{ht?.remove()}))}catch(B){ae.warn?.(s,"Error setting database",B),e.send((0,et.encode)([Md])),Ss(1008,B.message);return}Lr()}break}case K$:{ae.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let de=P[2];B.database=de;let he;pu(de)&&(de==="system"?He[de]?.[B.table]||(he=V(B,He[de]?.[B.table])):he=V(B,He[de]?.[B.table]),f||(f=he?.auditStore),_||(_=st()?.[de]))}break}case Md:Ss();break;case rO:try{let B=r?.replicates||r?.subscribers||r?.name;ae.debug?.("Received operation request",D,"from",g),server.operation(D,{user:r},!B).then(de=>{Array.isArray(de)&&(de={results:de}),de.requestId=D.requestId,e.send((0,et.encode)([FS,de]))},de=>{e.send((0,et.encode)([FS,{requestId:D.requestId,error:(0,vd.errorToString)(de)}]))})}catch(B){e.send((0,et.encode)([FS,{requestId:D.requestId,error:(0,vd.errorToString)(B)}]))}break;case FS:let{resolve:C,reject:x}=R.get(D.requestId);D.error?x(new Error(D.error)):C(D),R.delete(D.requestId);break;case Zw:let z=P[3];if(!_){u?ae.error?.(s,"No database found for",u):ae.error?.(s,"Database name never received"),Ss();return}let ne=_[z];ne=V({table:z,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},ne),Pc[H]={name:z,decoder:new et.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return ne.primaryStore.getEntry(B)},rootStore:ne.primaryStore.rootStore};break;case k$:Ff=f?c$(D,f):new Map,vf=P[2],ae.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${vf}`);break;case G$:let re=H;NE[re]=D;break;case V$:rt()[nV]=D,ae.trace?.(s,"received and broadcasting committed update",D),rt().buffer.notify();break;case $$:y=D,p.send({type:"end_txn",localTime:y,remoteNodeIds:T}),rt(),m[$S]=y,m[VS]=Date.now(),m[KS]=nO;break;case HS:{let B=P[1],{fileId:de,size:he,finished:Se,error:ee}=B,j=Pe.get(de);ae.debug?.("Received blob",de,"has stream",!!j,"connectedToBlob",!!j?.connectedToBlob,"length",P[2].length,"finished",Se),j||(j=new tO.PassThrough,j.expectedSize=he,Pe.set(de,j)),j.lastChunk=Date.now();let pe=P[2];it(pe.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Se?(ee?(j.on("error",()=>{}),j.destroy(new Error("Blob error: "+ee+" for record "+(j.recordId??"unknown")+" from "+g))):j.end(pe),j.connectedToBlob&&Pe.delete(de)):j.write(pe)}catch(Te){ae.error?.(`Error receiving blob for ${j.recordId} from ${g} and streaming to storage`,Te),Pe.delete(de)}break}case q$:{let B=D,de;try{let he=P[3],Se=$t[H]||($t[H]=_[P[4]]);if(!Se)return ae.warn?.("Unknown table id trying to handle record request",H);let ee=Se.primaryStore.getBinaryFast(Symbol.for("structures")),j=ee?.length??0;if(j>0&&j!==wE){wE=j;let Te=(0,et.decode)(ee);e.send((0,et.encode)([Zw,{typedStructs:Te.typed,structures:Te.named},H,Se.tableName]))}let pe=Se.primaryStore.getBinaryFast(he);if(pe){let Te=Se.primaryStore.decoder.decode(pe,{valueAsBuffer:!0}),fe=lt||{};fe.version=(0,tV.getLastVersion)(),lt&&lt[Ou]&$r&&(Te=Buffer.from(Te),fm(()=>Se.primaryStore.decoder.decode(pe),We=>_a(We,he),Se.primaryStore.rootStore)),de=(0,et.encode)([BS,B,{value:Te,expiresAt:fe.expiresAt,version:fe.version,residencyId:fe.residencyId,nodeId:fe.nodeId,user:fe.user}])}else de=(0,et.encode)([BS,B])}catch(he){de=(0,et.encode)([BS,B,{error:he.message}])}e.send(de);break}case BS:{let{resolve:B,reject:de,tableId:he,key:Se}=R.get(P[1]),ee=P[2];if(ee?.error)de(new Error(ee.error));else if(ee){let j;i_(()=>{let pe=Pc[he].decoder.decode(ee.value);ee.value=pe,ee.key=Se,B(ee)||j&&setTimeout(()=>j.forEach(r_),6e4).unref()},f?.rootStore,pe=>{let Te=Lc(pe,Se);return j||(j=[]),j.push(Te),Te})}else B();R.delete(P[1]);break}case F$:{Rr=D;let B,de,he=!1;if(p){if(u!==p.databaseName&&!p.then){ae.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(ae.debug?.(s,"received subscription request for",u,"at",Rr),!p){let Ee;p=new Promise(pt=>{ae.debug?.("Waiting for subscription to database "+u),Ee=pt}),p.ready=Ee,tc.set(u,p)}if(r.name)de=Wt().subscribe(r.name),de.then(async Ee=>{B=Ee;for await(let pt of B){let tt=pt.value;if(!(tt?.replicates===!0||tt?.replicates?.receives||tt?.subscriptions?.some(cr=>(cr.database||cr.schema)===u&&cr.publish!==!1))){he=!0,e.send((0,et.encode)([Md])),Ss(1008,`Unauthorized database subscription to ${u}`);return}}},Ee=>{ae.error?.(s,"Error subscribing to HDB nodes",Ee)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,et.encode)([Md])),Ss(1008,`Unauthorized database subscription to ${u}`);return}if(Pr&&(ae.debug?.(s,"stopping previous subscription",u),Pr.emit("close")),Rr.length===0)return;let Se=Rr[0],ee=o(Ee=>{if(Ee&&(Se.replicateByDefault?!Se.tables.includes(Ee.tableName):Se.tables.includes(Ee.tableName)))return{table:Ee}},"tableToTableEntry"),j={txnTime:0},pe,Te,fe=1/0,We,St=o((Ee,pt)=>{if(Ee.type==="end_txn"){j.txnTime&&(a[i]!==66&&ae.error?.("Invalid encoding of message"),Eu(9),Eu(E_),Mc(We=pt),ft()),i=c,j.txnTime=0;return}let tt=Ee.nodeId,cr=Ee.tableId,xt=Te[cr];if(!xt&&(xt=Te[cr]=ee(p.tableById[cr]),!xt))return ae.debug?.("Not subscribed to table",cr);let Ts=xt.table,Bt=Ts.primaryStore,Qs=Bt.encoder;(Ee.extendedType&R_||!Qs.typedStructs)&&(Qs._mergeStructures(Qs.getStructures()),Qs.typedStructs&&(Qs.lastTypedStructuresLength=Qs.typedStructs.length));let _u=pe[tt];if(!(_u&&_u.startTime<pt&&(!_u.endTime||_u.endTime>pt)))return GS&&ae.trace?.(s,"skipping replication update",Ee.recordId,"to:",g,"from:",tt,"subscribed:",pe),eM();GS&&ae.trace?.(s,"sending replication update",Ee.recordId,"to:",g,"from:",tt,"subscribed:",pe);let Hy=Ee.version,vc=Ee.residencyId,ky=hu(vc,Ts),CE;if(ky&&!ky.includes(g)){let Js=hu(Ee.previousResidencyId,Ts);if(Js&&!Js.includes(g)&&(Ee.type==="put"||Ee.type==="patch")||Ts.getResidencyById)return eM();let kf=Ee.recordId;ae.trace?.(s,"sending invalidation",kf,g,"from",tt);let Gf=0;vc&&(Gf|=Kc),Ee.previousResidencyId&&(Gf|=Yc);let $y,PE=null;for(let tM in Ts.indices){if(!PE){if($y=Ee.getValue(Bt,!0),!$y)break;PE={}}PE[tM]=$y[tM]}CE=Wc(Ee.version,cr,kf,null,tt,Ee.user,Ee.type==="put"||Ee.type==="patch"?"invalidate":Ee.type,Qs.encode(PE),Gf,vc,Ee.previousResidencyId,Ee.expiresAt)}function eM(){return ae.trace?.(s,"skipping audit record",Ee.recordId),G||(G=setTimeout(()=>{G=null,(We||0)+Y$/2<fe&&(GS&&ae.trace?.(s,"sending skipped sequence update",fe),e.send((0,et.encode)([$$,fe])))},Y$).unref()),new Promise(setImmediate)}o(eM,"skipAuditRecord");let Gy=Qs.typedStructs,qy=Qs.structures;if((Gy?.length!=xt.typed_length||qy?.length!=xt.structure_length)&&(xt.typed_length=Gy?.length,xt.structure_length=qy.length,ae.debug?.(s,"send table struct",xt.typed_length,xt.structure_length),xt.sentName||(xt.sentName=!0),e.send((0,et.encode)([Zw,{typedStructs:Gy,structures:qy,attributes:Ts.attributes,schemaDefined:Ts.schemaDefined},cr,xt.table.tableName]))),vc&&!IE[vc]&&(e.send((0,et.encode)([G$,ky,vc])),IE[vc]=!0),j.txnTime!==Hy&&(j.txnTime&&(GS&&ae.trace?.(s,"new txn time, sending queued txn",j.txnTime),a[i]!==66&&ae.error?.("Invalid encoding of message"),ft()),j.txnTime=Hy,i=c,Mc(Hy)),CE)Eu(CE.length),Dc(CE);else{let Js=Ee.encoded;Ee.extendedType&$r&&fm(()=>Ee.getValue(Bt),Gf=>_a(Gf,Ee.recordId),Bt.rootStore);let kf=Js[0]===66?8:0;Eu(Js.length-kf),Dc(Js,kf),ae.trace?.("wrote record",Ee.recordId,"length:",Js.length)}return e._socket.writableNeedDrain?new Promise(Js=>{ae.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Js)}):dt>xf?new Promise(Js=>{Ye=Js}):new Promise(setImmediate)},"sendAuditRecord"),ft=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ae.debug?.(s,"Sent message, size:",c-i),it(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ae.debug?.(s,"skipping empty transaction")},"sendQueuedData");Pr=new sO.EventEmitter,Pr.once("close",()=>{he=!0,B?.end()});for(let{startTime:Ee}of Rr)Ee<fe&&(fe=Ee);(de||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,Te=p.tableById.map(ee),pe=[];for(let{name:pt,startTime:tt,endTime:cr}of Rr){let xt=CS(pt,f);ae.debug?.("subscription to",pt,"using local id",xt,"starting",tt),pe[xt]={startTime:tt,endTime:cr}}Sa(u),ht||(ht=Il(pt=>{pt.databaseName===u&&Sa(u)}),Cc=Sh(pt=>{pt===u&&(e.send((0,et.encode)([Md])),Ss())}),e.on("close",()=>{ht?.remove(),Cc?.remove()})),e.send((0,et.encode)([k$,Gh(p.auditStore),Rr.map(({name:pt})=>pt)]));let Ee=!0;do{isFinite(fe)||(ae.warn?.("Invalid sequence id "+fe),Ss(1008,"Invalid sequence id"+fe));let pt;if(Ee&&!he&&(Ee=!1,fe===0)){ae.info?.("Replicating all tables to",g);let tt=fe,cr=zS(f);for(let xt in _){if(!ee(xt))continue;let Ts=_[xt];for(let Bt of Ts.primaryStore.getRange({snapshot:!1,versions:!0})){if(he)return;if(Bt.localTime>=fe){ae.trace?.(s,"Copying record from",u,xt,Bt.key,Bt.localTime),tt=Math.max(Bt.localTime,tt),rt()[Qh]=1;let Qs=Wc(Bt.version,Ts.tableId,Bt.key,null,cr,null,"put",fm(()=>Ts.primaryStore.encoder.encode(Bt.value),_u=>_a(_u,Bt.key)),Bt.metadataFlags&-256,Bt.residencyId,null,Bt.expiresAt);await St({recordId:Bt.key,tableId:Ts.tableId,type:"put",getValue(){return Bt.value},encoded:Qs,version:Bt.version,residencyId:Bt.residencyId,nodeId:cr,extendedType:Bt.metadataFlags},Bt.localTime)}}}c-i>8&&St({type:"end_txn"},fe),rt()[Qh]=0,fe=tt}for(let{key:tt,value:cr}of f.getRange({start:fe||1,exclusiveStart:!0,snapshot:!1})){if(he)return;let xt=Nt(cr);ae.debug?.("sending audit record",new Date(tt)),rt()[Qh]=tt,fe=tt,await St(xt,tt),Pr.startTime=tt}c-i>8&&St({type:"end_txn"},fe),rt()[Qh]=0,await SU(f)}while(!he)}).catch(Ee=>{ae.error?.(s,"Error handling subscription to node",Ee),Ss(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,b,I;do{rt();let P=S.readInt();if(P===9&&S.getUint8(S.position)==E_){S.position++,y=I=S.readFloat64(),m[$S]=y,m[VS]=Date.now(),m[KS]=nO,ae.trace?.("received remote sequence update",y,u);break}let L=S.position,D=Nt(E,L,L+P),H=Pc[D.tableId];H||ae.error?.(`No table found with an id of ${D.tableId}`);let C;D.residencyId&&(C=NE[D.residencyId],ae.trace?.(s,"received residency list",C,D.type,D.recordId));try{let x=D.recordId;i_(()=>{b={table:H.name,id:D.recordId,type:D.type,nodeId:Ff.get(D.nodeId),residencyList:C,timestamp:D.version,value:D.getValue(H),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},f?.rootStore,z=>Lc(z,x))}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(H.decoder.typedStructs),x}A=!1,ae.trace?.(s,"received replication message",D.type,"id",b.id,"version",new Date(D.version),"nodeId",b.nodeId),m[$S]=D.version,m[VS]=Date.now(),m[KS]=sV,p.send(b),S.position=L+P}while(S.position<E.byteLength);Ce++,it(E.byteLength,"bytes-received",`${g}.${u}.${b?.table||"unknown_table"}`,"replication","ingest"),Ce>Fy&&!Bf&&(Bf=!0,e.pause(),ae.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:y,remoteNodeIds:T,async onCommit(){if(b){let P=Date.now()-b.timestamp;it(P,"replication-latency",g+"."+u+"."+b.table,b.type,"ingest")}Ce--,Bf&&(Bf=!1,e.resume(),ae.debug?.(`Replication resuming ${g}`)),De.length>0&&await Promise.all(De),ae.trace?.("All blobs finished"),!N&&I&&(ae.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,et.encode)([V$,N])),ae.trace?.(s,"sent confirmation of a commit at",N),N=null},Sue)),N=I,ae.debug?.("last sequence committed",new Date(I),u)}})}catch(S){ae.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",qn),e.on("pong",()=>{if(t.connection){let E=performance.now()-Z;t.connection.latency=E,rt()&&(m[YS]=E),t.isSubscriptionConnection&&Ml({name:g,database:u,url:t.url,latency:E})}Z=null}),e.on("close",(E,S)=>{clearInterval(O),clearTimeout(F),clearInterval(Y),Pr&&Pr.emit("close"),po&&po.end();for(let[A,{reject:b}]of R)b(new Error(`Connection closed ${S?.toString()} ${E}`));ae.debug?.(s,"closed",E,S?.toString())});function Ss(E,S){try{e.isFinished=!0,ae.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){ae.error?.(s,"Error closing connection",A)}}o(Ss,"close");let Ea=new Set;async function _a(E,S){let A=n_(E);if(Ea.has(A)){ae.debug?.("Blob already being sent",A);return}Ea.add(A);try{let b;dt++;for await(let I of E.stream())b&&(ae.debug?.("Sending blob chunk",A,"length",b.length),e.send((0,et.encode)([HS,{fileId:A,size:E.size},b]))),b=I,e._socket.writableNeedDrain&&(ae.debug?.("draining",A),await new Promise(P=>e._socket.once("drain",P)),ae.debug?.("drained",A)),it(I.length,"bytes-sent",`${g}.${u}`,"replication","blob");ae.debug?.("Sending final blob chunk",A,"length",b.length),e.send((0,et.encode)([HS,{fileId:A,size:E.size,finished:!0},b]))}catch(b){ae.warn?.("Error sending blob",b,"blob id",A,"for record",S),e.send((0,et.encode)([HS,{fileId:A,finished:!0,error:(0,vd.errorToString)(b)},Buffer.alloc(0)]))}finally{Ea.delete(A),dt--,dt<xf&&Ye?.()}}o(_a,"sendBlobs");function Lc(E,S){let A=n_(E),b=Pe.get(A);ae.debug?.("Received transaction with blob",A,"has stream",!!b,"ended",!!b?.writableEnded),b?b.writableEnded&&Pe.delete(A):(b=new tO.PassThrough,Pe.set(A,b)),b.connectedToBlob=!0,b.lastChunk=Date.now(),b.recordId=S,E.size===void 0&&b.expectedSize&&(E.size=b.expectedSize);let I=b.blob??createBlob(b,E);b.blob=I;let P=Ao(()=>dm(I).saving,p.auditStore?.rootStore);return P&&(P.blobId=A,De.push(P),P.finally(()=>{ae.debug?.(`Finished receiving blob stream ${A}`),De.splice(De.indexOf(P),1)})),I}o(Lc,"receiveBlobs");function Lr(){if(h||(h=!0,t.connection?.on("subscriptions-updated",Lr)),!f&&p&&(f=p.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let E=new Map;f||(f=p?.auditStore);try{for(let b of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of b.value.nodes||[])I.lastTxnTime>(E.get(I.id)??0)&&E.set(I.id,I.lastTxnTime)}catch(b){if(!b.message.includes("Can not re"))throw b}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((b,I)=>{let P=[],{replicateByDefault:L}=b;if(b.subscriptions){for(let x of b.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let z=x.table;_?.[z]?.replicate!==!1&&P.push(z)}L=!1}else for(let x in _)(L?_[x].replicate===!1:_[x].replicate)&&P.push(x);let D=f&&CS(b.name,f),H=p?.dbisDB?.get([Symbol.for("seq"),D])??1,C=Math.max(H?.seqId??1,(typeof b.startTime=="string"?new Date(b.startTime).getTime():b.startTime)??1);if(ae.debug?.("Starting time recorded in db",b.name,D,u,H?.seqId,"start time:",C,new Date(C)),S!==b){let x=f&&CS(S.name,f),z=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let ne of z?.nodes||[])ne.name===b.name&&(C=ne.seqId,ae.debug?.("Using sequence id from proxy node",S.name,C))}if(D===void 0?ae.warn("Starting subscription request from node",b,"but no node id found"):T.push(D),E.get(D)>C&&(C=E.get(D),ae.debug?.("Updating start time from more recent txn recorded",S.name,C)),C===1&&kS)try{new URL(kS).hostname===b.name?(ae.warn?.(`Requesting full copy of database ${u} from ${kS}`),C=0):C=Date.now()-6e4}catch(x){ae.error?.("Error parsing leader URL",kS,x)}return ae.trace?.(s,"defining subscription request",b.name,u,new Date(C)),{name:b.name,replicateByDefault:L,tables:P,startTime:C,endTime:b.endTime}});if(A)if(ae.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout($),A.length>0)e.send((0,et.encode)([F$,A]));else{let b=o(()=>{let I=performance.now();$=setTimeout(()=>{le<=I?Ss(1008,"Connection has no subscriptions and is no longer used"):b()},K).unref()},"scheduleClose");b()}}o(Lr,"sendSubscriptionRequestUpdate");function hu(E,S){if(!E)return;let A=Uf[E];return A||(A=S.getResidencyRecord(E),Uf[E]=A),A}o(hu,"getResidence");function pu(E){return!(ec&&ec!="*"&&!ec[E]&&!ec.includes?.(E)&&!ec.some?.(S=>S.name===E))}o(pu,"checkDatabaseAccess");function ga(E){if(p=p||d.get(E),!pu(E))throw new Error(`Access to database "${E}" is not permitted`);p||ae.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=st()?.[E]);let S=Ze();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return OE(S,E),!0}o(ga,"setDatabase");function OE(E,S){let A=st()?.[S],b=[];for(let I in A){let P=A[I];b.push({table:I,schemaDefined:P.schemaDefined,attributes:P.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ae.trace?.("Sending database info for node",E,"database name",S),e.send((0,et.encode)([H$,E,S,b]))}o(OE,"sendNodeDBName");function Sa(E){let S=st()?.[E],A=[];for(let b in S){if(Rr&&!Rr.some(P=>P.replicateByDefault?!P.tables.includes(b):P.tables.includes(b)))continue;let I=S[b];A.push({table:b,schemaDefined:I.schemaDefined,attributes:I.attributes.map(P=>({name:P.name,type:P.type,isPrimaryKey:P.isPrimaryKey}))})}e.send((0,et.encode)([K$,A,E]))}o(Sa,"sendDBSchema"),Y=setInterval(()=>{for(let[E,S]of Pe)S.lastChunk+me<Date.now()&&(ae.warn?.(`Timeout waiting for blob stream to finish ${E} for record ${S.recordId??"unknown"} from ${g}`),Pe.delete(E),S.end())},me).unref();let Ta=1,Hf=[];return{end(){po&&po.end(),Pr&&Pr.emit("close")},getRecord(E){let S=Ta++;return new Promise((A,b)=>{let I=[q$,S,E.table.tableId,E.id];Hf[E.table.tableId]||(I.push(E.table.tableName),Hf[E.table.tableId]=!0),e.send((0,et.encode)(I)),le=performance.now(),R.set(S,{tableId:E.table.tableId,key:E.id,resolve(P){let{table:L,entry:D}=E;if(A(P),P)return L._recordRelocate(D,P)},reject:b})})},sendOperation(E){let S=Ta++;return E.requestId=S,e.send((0,et.encode)([rO,E])),new Promise((A,b)=>{R.set(S,{resolve:A,reject:b})})}};function Eu(E){Ra(5),E<128?a[c++]=E:E<16384?(l.setUint16(c,E|32768),c+=2):E<1056964608?(l.setUint32(c,E|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,E),c+=5)}function Dc(E,S=0,A=E.length){let b=A-S;Ra(b),E.copy(a,c,S,A),c+=b}function Mc(E){Ra(8),l.setFloat64(c,E),c+=8}function Ra(E){if(E+16>a.length-c){let S=Buffer.allocUnsafeSlow(c+E-i+65536>>10<<11);a.copy(S,0,i,c),c=c-i,i=0,a=S,l=new DataView(a.buffer,0,a.length)}}function V(E,S){let A=E.database??"data";if(A!=="data"&&!He[A]){ae.warn?.("Database not found",E.database);return}S||(S={});let b=S.schemaDefined,I=!1,P=E.schemaDefined,L=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let H=E.attributes[D],C=L.find(x=>x.name===H.name);(!C||C.type!==H.type)&&(b?ae.error?.(`Schema for '${u}.${E.table}' is defined locally, but attribute '${H.name}: ${H.type}' from '${g}' does not match local attribute ${C?"'"+C.name+": "+C.type+"'":"which does not exist"}`):(I=!0,P||(H.indexed=!0),C?L[L.indexOf(C)]=H:L.push(H)))}return I?(ae.debug?.("(Re)creating",E),ze({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:L,...S})):S}}var j$,et,Q$,J$,vd,sO,X$,Z$,xl,eV,tO,tV,rV,ae,F$,H$,k$,Md,G$,Zw,q$,BS,rO,FS,$$,V$,K$,HS,nV,$S,VS,Qh,YS,KS,nO,sV,gue,kS,iO,tc,GS,Y$,Sue,W$,eO,qS,z$,Ud,oO=ce(()=>{Me();Li();Bw();tb();is();j$=w(oe());k();zc();et=require("msgpackr"),Q$=require("ws"),J$=require("worker_threads"),vd=w(Q());Wh();sO=require("events"),X$=w(as()),Z$=w(require("node:tls"));Dl();xl=w(require("node:process")),eV=require("node:net");Wi();Kn();tO=require("node:stream"),tV=require("lmdb"),rV=w(require("minimist")),ae=(0,vd.forComponent)("replication").conditional,F$=129,H$=140,k$=141,Md=142,G$=130,Zw=132,q$=133,BS=134,rO=136,FS=137,$$=143,V$=144,K$=145,HS=146,nV=0,$S=1,VS=2,Qh=3,YS=4,KS=5,nO=0,sV=1,gue=(0,rV.default)(xl.argv),kS=gue.HDB_LEADER_URL??xl.env.HDB_LEADER_URL,iO=new Map,tc=new Map,GS=!0,Y$=300,Sue=2,W$=3e4;o(WS,"createWebSocket");z$=500,Ud=class extends sO.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=z$;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??pi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await WS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ae.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${xl.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=z$,this.nodeSubscriptions&&Ml({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Jh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ae.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?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 ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Pd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ae.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(Jh,"replicateOverWS")});var Go={};we(Go,{clearThisNodeName:()=>Oue,disableReplication:()=>Aue,enabledDatabases:()=>ec,forEachReplicatedDatabase:()=>za,getThisNodeId:()=>zS,getThisNodeName:()=>Ze,getThisNodeUrl:()=>ja,hostnameToUrl:()=>ZS,lastTimeInAuditStore:()=>qh,monitorNodeCAs:()=>hV,replicateOperation:()=>Pue,replicationCertificateAuthorities:()=>qo,sendOperationToNode:()=>Xh,servers:()=>Rue,setReplicator:()=>EV,start:()=>yue,startOnMainThread:()=>kw,subscribeToNode:()=>Yh,unsubscribeFromNode:()=>DS,urlToNodeName:()=>pi});function yue(e){if(!e.port&&!e.securePort&&(e.port=Ds.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ds.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!Ze())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Vh(e))t.set(pi(s.url),s);bue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Le.ws(async(s,i,a,c)=>{if(Dt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);await a,s._socket.unref(),Jh(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Dt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Le.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Dt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Dt.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Wt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,fV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){Dt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else Dt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:Dt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(qo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=XS.createSecureContext(u)}catch(l){Dt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}hV(()=>{for(let s of n)s()})}function hV(e){let t=0;Od(r=>{r?.ca&&(qo.add(r.ca),qo.size!==t&&(t=qo.size,e?.()))})}function Aue(e=!0){mV=e}function bue(e){mV||(st(),ec=e.databases,za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||tc;for(let[s,i]of QS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];EV(r,s,e),iO.get(s)?.forEach(i=>i(s))}}))}function EV(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 pV extends Ur{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||tc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Dt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Vn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let p of c){if(u.has(p)||p===Le.hostname)continue;let _=Nue(p,pV.subscription,e);if(_?.isConnected){let g=wd(t.auditStore,e,p)[YS];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new uV.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:Tue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;Dt.warn("Error in load from node",JS,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Iue(e,t,r,n,s){let i=QS.get(e);i||QS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Ud(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Nue(e,t,r){let n=oV.get(e);n||(n=new Map,oV.set(e,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new Ud(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Xh(e,t,r){r||(r={}),r.serverName=e.name;let n=await WS(e.url,r),s=Jh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Dt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Dt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Yh(e){try{dV.isMainThread&&Dt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=tc.get(e.database);if(!t){let n;t=new Promise(s=>{Dt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,tc.set(e.database,t)}let r=Iue(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=>$h(n,e.database)),e.replicateByDefault)}catch(t){Dt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function DS({name:e,url:t,database:r}){Dt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=QS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function wue(){if(aO!==void 0)return aO;let e=Ds.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Ds.default.get(U.TLS_CERTIFICATE);if(e)return aO=new cV.X509Certificate((0,lV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function Ze(){return JS||(JS=Ds.default.get("replication_hostname")??pi(Ds.default.get("replication_url"))??wue()??aV("operationsapi_network_secureport")??aV("operationsapi_network_port")??"127.0.0.1")}function Oue(){JS=void 0}function aV(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function jS(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function zS(e){return Gh(e)?.[Ze()]}function ja(){let e=Ds.default.get("replication_url");return e||ZS(Ze())}function ZS(e){let t=jS("replication_port");if(t)return`ws://${e}:${t}`;if(t=jS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=jS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=jS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function pi(e){if(e)return new URL(e).hostname}function za(e,t){for(let n of Object.getOwnPropertyNames(He))r(n);return Sh(n=>{r(n)}),Il((n,s)=>{r(n.databaseName)});function r(n){let s=He[n];Dt.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):Cue(n)&&t(s,n,!1)}o(r,"forDatabase")}function Cue(e){let t=He[e];for(let r in t)if(t[r].replicate)return!0}function qh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Pue(e){let t={message:""};if(e.replicated){e.replicated=!1,Dt.trace?.("Replicating operation",e.operation,"to nodes",Le.nodes.map(n=>n.name));let r=await Promise.allSettled(Le.nodes.map(n=>Xh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Le.nodes[s]?.name,i})}return t}var Ds,Dt,cV,lV,XS,uV,dV,fV,mV,Tue,Rue,qo,ec,QS,oV,aO,JS,is=ce(()=>{Me();Pa();Ru();oO();Dr();Ds=w(oe()),Dt=w(Q()),cV=require("crypto"),lV=require("fs");Wh();Dl();k();Bw();XS=w(require("node:tls")),uV=w(ge()),dV=require("worker_threads"),fV=w(as()),Tue=1,Rue=[],qo=Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(XS.rootCertificates):new Set;o(yue,"start");o(hV,"monitorNodeCAs");o(Aue,"disableReplication");o(bue,"assignReplicationSource");o(EV,"setReplicator");QS=new Map;o(Iue,"getSubscriptionConnection");oV=new Map;o(Nue,"getRetrievalConnectionByName");o(Xh,"sendOperationToNode");o(Yh,"subscribeToNode");o(DS,"unsubscribeFromNode");o(wue,"getCommonNameFromCert");o(Ze,"getThisNodeName");o(Oue,"clearThisNodeName");Object.defineProperty(Le,"hostname",{get(){return Ze()}});o(aV,"getHostFromListeningPort");o(jS,"getPortFromListeningPort");o(zS,"getThisNodeId");Le.replication={getThisNodeId:zS,exportIdMapping:Gh};o(ja,"getThisNodeUrl");o(ZS,"hostnameToUrl");o(pi,"urlToNodeName");o(za,"forEachReplicatedDatabase");o(Cue,"hasExplicitlyReplicatedTable");o(qh,"lastTimeInAuditStore");o(Pue,"replicateOperation")});var ep=M((yve,RV)=>{"use strict";var xd=Lq(),{validateBySchema:Zh}=ut(),{commonValidators:Bd,schemaRegex:cO}=Hi(),pr=require("joi"),Lue=Q(),Due=require("uuid").v4,rT=Co(),Fd=(k(),v(W)),Mue=require("util"),rc=Jn(),{handleHDBError:$o,hdbErrors:vue,ClientError:Bl}=ge(),{HDB_ERROR_MSGS:eT,HTTP_STATUS_CODES:Vo}=vue,{SchemaEventMsg:nT}=oi(),_V=mr(),{getDatabases:Uue}=(Me(),v(Et)),{transformReq:Hd}=ie(),{replicateOperation:gV}=(is(),v(Go)),{cleanupOrphans:xue}=(Kn(),v(o_)),tT=pr.string().min(1).max(Bd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message}),Bue=pr.string().min(1).max(Bd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message}).required(),Fue=pr.string().min(1).max(Bd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();RV.exports={createSchema:Hue,createSchemaStructure:SV,createTable:kue,createTableStructure:TV,createAttribute:Kue,dropSchema:Gue,dropTable:que,dropAttribute:$ue,getBackup:Yue,cleanupOrphanBlobs:Wue};async function Hue(e){let t=await SV(e);return rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema)),t}o(Hue,"createSchema");async function SV(e){let t=Zh(e,pr.object({database:tT,schema:tT}));if(t)throw new Bl(t.message);if(Hd(e),!await xd.checkSchemaExists(e.schema))throw $o(new Error,eT.SCHEMA_EXISTS_ERR(e.schema),Vo.BAD_REQUEST,Fd.LOG_LEVELS.ERROR,eT.SCHEMA_EXISTS_ERR(e.schema),!0);return await rc.createSchema(e),`database '${e.schema}' successfully created`}o(SV,"createSchemaStructure");async function kue(e){return Hd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await TV(e)}o(kue,"createTable");async function TV(e){let t=Zh(e,pr.object({database:tT,schema:tT,table:Bue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Fue}));if(t)throw new Bl(t.message);if(!await xd.checkSchemaTableExists(e.schema,e.table))throw $o(new Error,eT.TABLE_EXISTS_ERR(e.schema,e.table),Vo.BAD_REQUEST,Fd.LOG_LEVELS.ERROR,eT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Due(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await rc.createTable(n,e);else throw $o(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Vo.BAD_REQUEST);else await rc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(TV,"createTableStructure");async function Gue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaExists(e.schema);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);let n=await xd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await rc.dropSchema(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema)),await _V.purgeSchemaTableStreams(e.schema,s);let i=await gV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Gue,"dropSchema");async function que(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);await rc.dropTable(e),await _V.purgeTableStream(e.schema,e.table);let n=await gV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(que,"dropTable");async function $ue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $o(new Error,"You cannot drop a hash attribute",Vo.BAD_REQUEST,void 0,void 0,!0);if(Fd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $o(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Vo.BAD_REQUEST,void 0,void 0,!0);try{return await rc.dropAttribute(e),Vue(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Lue.error(`Got an error deleting attribute ${Mue.inspect(e)}.`),n}}o($ue,"dropAttribute");function Vue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Vue,"dropAttributeFromGlobal");async function Kue(e){Hd(e);let t=Uue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $o(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Vo.BAD_REQUEST,void 0,void 0,!0);return await rc.createAttribute(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Kue,"createAttribute");function Yue(e){return rc.getBackup(e)}o(Yue,"getBackup");function Wue(e){if(!e.database)throw new Bl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Bl(`Unknown database '${e.database}'`);return xue(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Wue,"cleanupOrphanBlobs")});var AV=M((bve,yV)=>{"use strict";var{OPERATIONS_ENUM:zue}=(k(),v(W)),lO=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=zue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yV.exports=lO});var uO=M((wve,OV)=>{"use strict";var jue=Jn(),Nve=AV(),sT=ie(),iT=(k(),v(W)),Que=oe(),{handleHDBError:bV,hdbErrors:Jue}=ge(),{HDB_ERROR_MSGS:IV,HTTP_STATUS_CODES:NV}=Jue,Xue=Object.values(iT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),wV="To use this operation audit log must be enabled in harperdb-config.yaml";OV.exports=Zue;async function Zue(e){if(sT.isEmpty(e.schema))throw new Error(IV.SCHEMA_REQUIRED_ERR);if(sT.isEmpty(e.table))throw new Error(IV.TABLE_REQUIRED_ERR);if(!Que.get(iT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bV(new Error,wV,NV.BAD_REQUEST,iT.LOG_LEVELS.ERROR,wV,!0);let t=sT.checkSchemaTableExist(e.schema,e.table);if(t)throw bV(new Error,t,NV.NOT_FOUND,iT.LOG_LEVELS.ERROR,t,!0);if(!sT.isEmpty(e.search_type)&&Xue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${e.search_type}'`);return await jue.readAuditLog(e)}o(Zue,"readAuditLog")});var PV=M((Cve,CV)=>{"use strict";var{OPERATIONS_ENUM:ede}=(k(),v(W)),dO=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ede.GET_BACKUP,this.schema=t,this.table=r}};CV.exports=dO});var MV=M((Dve,DV)=>{"use strict";var tde=Jn(),Lve=PV(),fO=ie(),rde=(k(),v(W)),{handleHDBError:nde,hdbErrors:sde}=ge(),{HDB_ERROR_MSGS:LV,HTTP_STATUS_CODES:ide}=sde;DV.exports=ode;async function ode(e){if(fO.isEmpty(e.schema))throw new Error(LV.SCHEMA_REQUIRED_ERR);if(fO.isEmpty(e.table))throw new Error(LV.TABLE_REQUIRED_ERR);let t=fO.checkSchemaTableExist(e.schema,e.table);if(t)throw nde(new Error,t,ide.NOT_FOUND,rde.LOG_LEVELS.ERROR,t,!0);return tde.getBackup(e)}o(ode,"getBackup")});var BV=M((vve,xV)=>{"use strict";var ade=oe(),nc=require("joi"),cde=ut(),vV=require("moment"),lde=require("fs-extra"),mO=require("path"),ude=require("lodash"),tp=(k(),v(W)),{LOG_LEVELS:Fl}=(k(),v(W)),dde="YYYY-MM-DD hh:mm:ss",fde=mO.resolve(__dirname,"../logs");xV.exports=function(e){return cde.validateBySchema(e,mde)};var mde=nc.object({from:nc.custom(UV),until:nc.custom(UV),level:nc.valid(Fl.NOTIFY,Fl.FATAL,Fl.ERROR,Fl.WARN,Fl.INFO,Fl.DEBUG,Fl.TRACE),order:nc.valid("asc","desc"),limit:nc.number().min(1),start:nc.number().min(0),log_name:nc.custom(hde)});function UV(e,t){if(vV(e,vV.ISO_8601).format(dde)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(UV,"validateDatetime");function hde(e,t){if(ude.invert(tp.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=ade.get(tp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?tp.LOG_NAMES.HDB:e,i=s===tp.LOG_NAMES.INSTALL?mO.join(fde,tp.LOG_NAMES.INSTALL):mO.join(n,s);return lde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(hde,"validateReadLogPath")});var pO=M((xve,HV)=>{"use strict";var oT=(k(),v(W)),pde=Q(),Ede=oe(),_de=BV(),hO=require("path"),FV=require("fs-extra"),{once:gde}=require("events"),{handleHDBError:Sde,hdbErrors:Tde}=ge(),{PACKAGE_ROOT:Rde}=bt(),{replicateOperation:yde}=(is(),v(Go)),Ade=hO.join(Rde,"logs"),bde=1e3,Ide=200;HV.exports=Nde;async function Nde(e){let t=_de(e);if(t)throw Sde(t,t.message,Tde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yde(e),n=Ede.get(oT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?oT.LOG_NAMES.HDB:e.log_name,i=s===oT.LOG_NAMES.INSTALL?hO.join(Ade,oT.LOG_NAMES.INSTALL):hO.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?bde:e.limit,h=e.order===void 0?void 0:e.order,p=e.start===void 0?0:e.start,_=p+m,g=0;h==="desc"&&!u&&!f&&(g=Math.max(FV.statSync(i).size-(_+5)*Ide,0));let R=FV.createReadStream(i,{start:g});R.on("error",G=>{pde.error(G)});let T=0,y=[],N="",O;R.on("data",G=>{let Y=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let K=0,$;for(;($=Y.exec(G))&&!R.destroyed;){O&&(O.message=G.slice(K,$.index),F(O));let[le,ue,se]=$,me=se.split("] ["),Pe=me[0],De=me[1];me.splice(0,2),O={timestamp:ue,thread:Pe,level:De,tags:me,message:""},K=$.index+le.length}N=G.slice(K)}),R.on("end",G=>{R.destroyed||O&&(O.message=N.trim(),F(O))}),R.resume();function F(G){let Y,K,$;switch(!0){case(a&&l&&d):Y=new Date(G.timestamp),K=new Date(u),$=new Date(f),G.level===c&&Y>=K&&Y<=$&&T<p?T++:G.level===c&&Y>=K&&Y<=$&&(ro(G,h,y),T++,T===_&&R.destroy());break;case(a&&l):Y=new Date(G.timestamp),K=new Date(u),G.level===c&&Y>=K&&T<p?T++:G.level===c&&Y>=K&&(ro(G,h,y),T++,T===_&&R.destroy());break;case(a&&d):Y=new Date(G.timestamp),$=new Date(f),G.level===c&&Y<=$&&T<p?T++:G.level===c&&Y<=$&&(ro(G,h,y),T++,T===_&&R.destroy());break;case(l&&d):Y=new Date(G.timestamp),K=new Date(u),$=new Date(f),Y>=K&&Y<=$&&T<p?T++:Y>=K&&Y<=$&&(ro(G,h,y),T++,T===_&&R.destroy());break;case a:G.level===c&&T<p?T++:G.level===c&&(ro(G,h,y),T++,T===_&&R.destroy());break;case l:Y=new Date(G.timestamp),K=new Date(u),Y>=K&&T<p?T++:Y>=K&&T>=p&&(ro(G,h,y),T++,T===_&&R.destroy());break;case d:Y=new Date(G.timestamp),$=new Date(f),Y<=$&&T<p?T++:Y<=$&&T>=p&&(ro(G,h,y),T++,T===_&&R.destroy());break;default:T<p?T++:(ro(G,h,y),T++,T===_&&R.destroy())}}o(F,"onLogMessage"),await gde(R,"close");let Z=await r;if(Z.replicated){for(let G of y)G.node=server.hostname;for(let G of Z.replicated){let Y=G.node;if(G.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:Y,message:`Error retrieving logs: ${G.reason}`},h,y);else for(let K of G.results)K.node=Y,ro(K,h,y)}}return y}o(Nde,"readLog");function ro(e,t,r){t==="desc"?wde(e,r):t==="asc"?Ode(e,r):r.push(e)}o(ro,"pushLineToResult");function wde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(wde,"insertDescending");function Ode(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(Ode,"insertAscending")});var aT=M((qve,$V)=>{"use strict";var EO=require("joi"),{string:kd,boolean:kV,date:Cde}=EO.types(),Pde=ut(),{validateSchemaExists:Fve,validateTableExists:Hve,validateSchemaName:kve}=Hi(),Lde=(k(),v(W)),Dde=Ot(),GV=oe();GV.initSync();var Gve=kd.invalid(GV.get(Lde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Dde.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),qV={operation:kd.valid("add_node","update_node","set_node_replication"),node_name:kd.optional(),subscriptions:EO.array().items({table:kd.optional(),schema:kd.optional(),database:kd.optional(),subscribe:kV.required(),publish:kV.required().custom(vde),start_time:Cde.iso()})};function Mde(e){return Pde.validateBySchema(e,EO.object(qV))}o(Mde,"addUpdateNodeValidator");function vde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(vde,"checkForFalsy");$V.exports={addUpdateNodeValidator:Mde,validationSchema:qV}});var Gd=M((Vve,VV)=>{"use strict";var _O=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},gO=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};VV.exports={Node:_O,NodeSubscription:gO}});var YV=M((Yve,KV)=>{"use strict";var Ude=(k(),v(W)).OPERATIONS_ENUM,SO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ude.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};KV.exports=SO});var rp=M((zve,WV)=>{"use strict";var TO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},RO=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};WV.exports={RemotePayloadObject:TO,RemotePayloadSubscription:RO}});var jV=M((Qve,zV)=>{"use strict";var yO=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};zV.exports=yO});var JV=M((rUe,QV)=>{"use strict";var xde=jV(),Xve=Vt(),Zve=Tt(),Bde=Q(),{getSchemaPath:eUe,getTransactionAuditStorePath:tUe}=It(),{getDatabases:Fde}=(Me(),v(Et));QV.exports=Hde;async function Hde(e){let t=new xde;try{let r=Fde()[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){Bde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Hde,"lmdbGetTableSize")});var ZV=M((sUe,XV)=>{"use strict";var AO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};XV.exports=AO});var $d=M((uUe,n1)=>{"use strict";var kde=require("fs-extra"),Gde=require("path"),mn=require("systeminformation"),sc=Q(),e1=mr(),oUe=Ot(),qd=(k(),v(W)),qde=JV(),$de=Ua(),{getThreadInfo:t1}=nt(),np=oe();np.initSync();var Vde=ZV(),{openEnvironment:aUe}=Tt(),{getSchemaPath:cUe}=It(),{database:lUe,databases:bO}=(Me(),v(Et)),cT;n1.exports={getHDBProcessInfo:OO,getNetworkInfo:PO,getDiskInfo:CO,getMemoryInfo:wO,getCPUInfo:NO,getTimeInfo:IO,getSystemInformation:LO,systemInformation:Kde,getTableSize:DO,getMetrics:MO};function IO(){return mn.time()}o(IO,"getTimeInfo");async function NO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await mn.cpu();d.cpu_speed=await mn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:R,...T}=await mn.currentLoad();return T.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:Z,rawLoadSystem:G,rawLoadUser:Y,...K}=y;T.cpus.push(K)}),d.current_load=T,d}catch(e){return sc.error(`error in getCPUInfo: ${e}`),{}}}o(NO,"getCPUInfo");async function wO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await mn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return sc.error(`error in getMemoryInfo: ${e}`),{}}}o(wO,"getMemoryInfo");async function OO(){let e={core:[],clustering:[]};try{let t=await mn.processes(),r;try{r=Number.parseInt(await kde.readFile(Gde.join(np.get(qd.CONFIG_PARAMS.ROOTPATH),qd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===qd.NODE_ERROR_CODES.ENOENT)sc.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 sc.error(`error in getHDBProcessInfo: ${t}`),e}}o(OO,"getHDBProcessInfo");async function CO(){let e={};try{if(!np.get(qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await mn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await mn.fsStats();return e.read_write=u,e.size=await mn.fsSize(),e}catch(t){return sc.error(`error in getDiskInfo: ${t}`),e}}o(CO,"getDiskInfo");async function PO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return np.get(qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await mn.networkInterfaceDefault(),e.latency=await mn.inetChecksite("google.com"),(await mn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await mn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return sc.error(`error in getNetworkInfo: ${t}`),e}}o(PO,"getNetworkInfo");async function LO(){if(cT!==void 0)return cT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await mn.osInfo();e=c;let l=await mn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,cT=e,cT}catch(t){return sc.error(`error in getSystemInformation: ${t}`),e}}o(LO,"getSystemInformation");async function DO(){let e=[],t=await $de.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await qde(n));return e}o(DO,"getTableSize");async function MO(){let e={};for(let t in bO){let r=e[t]={},n=r.tables={};for(let s in bO[t])try{let i=bO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){sc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(MO,"getMetrics");async function r1(){if(np.get(qd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await e1.getNATSReferences(),t=await e1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(r1,"getNatsStreamInfo");async function Kde(e){let t=new Vde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LO(),t.time=IO(),t.cpu=await NO(),t.memory=await wO(),t.disk=await CO(),t.network=await PO(),t.harperdb_processes=await OO(),t.table_size=await DO(),t.metrics=await MO(),t.threads=await t1(),t.replication=await r1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LO();break;case"time":t.time=IO();break;case"cpu":t.cpu=await NO();break;case"memory":t.memory=await wO();break;case"disk":t.disk=await CO();break;case"network":t.network=await PO();break;case"harperdb_processes":t.harperdb_processes=await OO();break;case"table_size":t.table_size=await DO();break;case"database_metrics":case"metrics":t.metrics=await MO();break;case"threads":t.threads=await t1();break;case"replication":t.replication=await r1();break;default:break}return t}o(Kde,"systemInformation")});var Ko=M((pUe,a1)=>{"use strict";var Yde=Dn(),vO=ie(),Wde=require("util"),Hl=(k(),v(W)),s1=oe();s1.initSync();var zde=Ew(),i1=sn(),{Node:fUe,NodeSubscription:mUe}=Gd(),jde=Ku(),Qde=YV(),{RemotePayloadObject:Jde,RemotePayloadSubscription:Xde}=rp(),{handleHDBError:Zde,hdbErrors:efe}=ge(),{HTTP_STATUS_CODES:tfe,HDB_ERROR_MSGS:rfe}=efe,nfe=ai(),sfe=$d(),{packageJson:ife}=bt(),{getDatabases:ofe}=(Me(),v(Et)),hUe=Wde.promisify(zde.authorize),afe=i1.searchByHash,cfe=i1.searchByValue;a1.exports={isEmpty:lfe,getNodeRecord:ufe,upsertNodeRecord:dfe,buildNodePayloads:ffe,checkClusteringEnabled:mfe,getAllNodeRecords:hfe,getSystemInfo:pfe,reverseSubscription:o1};function lfe(e){return e==null}o(lfe,"isEmpty");async function ufe(e){let t=new jde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return afe(t)}o(ufe,"getNodeRecord");async function dfe(e){let t=new Qde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Yde.upsert(t)}o(dfe,"upsertNodeRecord");function o1(e){if(vO.isEmpty(e.subscribe)||vO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(o1,"reverseSubscription");function ffe(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=vO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=o1(c),h=ofe()[l]?.[u],p=new Xde(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new Jde(r,t,s,n)}o(ffe,"buildNodePayloads");function mfe(){if(!s1.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zde(new Error,rfe.CLUSTERING_NOT_ENABLED,tfe.BAD_REQUEST,void 0,void 0,!0)}o(mfe,"checkClusteringEnabled");async function hfe(){let e=new nfe(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await cfe(e))}o(hfe,"getAllNodeRecords");async function pfe(){let e=await sfe.getSystemInformation();return{hdb_version:ife.version,node_version:e.node_version,platform:e.platform}}o(pfe,"getSystemInfo")});var UO=M((_Ue,p1)=>{"use strict";var lT=mr(),c1=ie(),l1=Ot(),u1=(k(),v(W)),uT=Q(),d1=ep(),Efe=km(),{RemotePayloadObject:_fe}=rp(),{handleHDBError:f1,hdbErrors:gfe}=ge(),{HTTP_STATUS_CODES:m1}=gfe,{NodeSubscription:h1}=Gd();p1.exports=Sfe;async function Sfe(e,t){let r;try{r=await lT.request(`${t}.${l1.REQUEST_SUFFIX}`,new _fe(u1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),uT.trace("Response from remote describe all request:",r)}catch(a){uT.error(`addNode received error from describe all request to remote node: ${a}`);let c=lT.requestErrorHandler(a,"add_node",t);throw f1(new Error,c,m1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===l1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw f1(new Error,a,m1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===u1.SYSTEM_SCHEMA_NAME){await lT.createLocalTableStream(l,c);let p=new h1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=c1.doesSchemaExist(l),d=n[l]!==void 0,f=c?c1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(uT.trace(`addNode creating schema: ${l}`),await d1.createSchema({operation:"create_schema",schema:l})),!f&&m){uT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Efe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await d1.createTable(p)}await lT.createLocalTableStream(l,c);let h=new h1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(Sfe,"reviewSubscriptions")});var Vd={};we(Vd,{addNodeBack:()=>xO,removeNodeBack:()=>BO,setNode:()=>Afe});async function Afe(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=pi(t)):t=ZS(r);let n=(0,_1.validateBySchema)(e,yfe);if(n)throw(0,Yo.handleHDBError)(n,n.message,Rfe.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 h=r,p=Wt(),_=await p.get(h);if(!_)throw new Yo.ClientError(h+" does not exist");try{await Xh({url:_.url},{operation:q.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?Ze():h},void 0)}catch(g){cs.warn(`Error removing node from target node ${h}, 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(h),`Successfully removed '${h}' from cluster`}if(!t)throw new Yo.ClientError("url required for this operation");let s=ja();if(s==null)throw new Yo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Ms.getReplicationCert)();let h=await(0,Ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Ms.createCsr)(),cs.info("Sending CSR to target node:",t)):h&&(c=h.certificate,cs.info("Sending CA named",h.name,"to target node",t))}let l={operation:q.ADD_NODE_BACK,hostname:(0,oc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(E1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=E1(e);l.subscribe=h.subscribe,l.publish=h.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Xh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,cs.warn("Error adding node:",t,"to cluster:",h),d=h}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(cs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ms.setCertTable)({name:Tfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ms.setCertTable)({name:Ze(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Ho(Ze(),h)}await Ho(u?u.nodeName:f.name??pi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function xO(e){cs.trace("addNodeBack received request:",e);let t=await(0,Ms.signCertificate)(e),r;e.csr?(r=t.signingCA,cs.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,cs.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,Ms.getReplicationCertAuth)();if(n.replicates){let i={url:ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,oc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Ho(Ze(),i)}return await Ho(e.hostname,n),t.nodeName=Ze(),t.usingCA=s?.certificate,cs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function BO(e){cs.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function E1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ms,_1,ic,oc,cs,Yo,Tfe,Rfe,yfe,Kd=ce(()=>{Ms=w(as()),_1=w(ut()),ic=w(require("joi")),oc=w(oe());k();Wh();Dl();is();cs=w(Q()),Yo=w(ge()),{pki:Tfe}=require("node-forge"),{HTTP_STATUS_CODES:Rfe}=Yo.hdbErrors,yfe=ic.default.object({hostname:ic.default.string(),verify_tls:ic.default.boolean(),replicates:ic.default.boolean(),subscriptions:ic.default.array(),revoked_certificates:ic.default.array(),shard:ic.default.number()});o(Afe,"setNode");o(xO,"addNodeBack");o(BO,"removeNodeBack");o(E1,"reverseSubscription")});var pT=M((NUe,S1)=>{"use strict";var{handleHDBError:dT,hdbErrors:bfe}=ge(),{HTTP_STATUS_CODES:fT}=bfe,{addUpdateNodeValidator:Ife}=aT(),mT=Q(),hT=(k(),v(W)),g1=Ot(),Nfe=ie(),sp=mr(),ip=Ko(),FO=oe(),wfe=UO(),{Node:Ofe,NodeSubscription:Cfe}=Gd(),{broadcast:Pfe}=nt(),{setNode:Lfe}=(Kd(),v(Vd)),bUe=oe(),IUe=(k(),v(W)),Dfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Mfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",vfe=FO.get(hT.CONFIG_PARAMS.CLUSTERING_NODENAME);S1.exports=Ufe;async function Ufe(e,t=!1){if(mT.trace("addNode called with:",e),FO.get(hT.CONFIG_PARAMS.REPLICATION_URL)||FO.get(hT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Lfe(e);ip.checkClusteringEnabled();let r=Ife(e);if(r)throw dT(r,r.message,fT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await ip.getNodeRecord(n);if(!Nfe.isEmptyOrZeroLength(f))throw dT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,fT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await wfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Dfe,a;let c=ip.buildNodePayloads(s,vfe,hT.OPERATIONS_ENUM.ADD_NODE,await ip.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let h=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Cfe(h.schema,h.table,h.publish,h.subscribe))}mT.trace("addNode sending remote payload:",c);let u;try{u=await sp.request(`${n}.${g1.REQUEST_SUFFIX}`,c)}catch(f){mT.error(`addNode received error from request: ${f}`);for(let h=0,p=s.length;h<p;h++){let _=s[h];_.publish=!1,_.subscribe=!1,await sp.updateRemoteConsumer(_,n)}let m=sp.requestErrorHandler(f,"add_node",n);throw dT(new Error,m,fT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===g1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw dT(new Error,f,fT.INTERNAL_SERVER_ERROR,"error",f)}mT.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await sp.updateRemoteConsumer(h,n),h.subscribe===!0&&await sp.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new Ofe(n,l,u.system_info);return await ip.upsertNodeRecord(d),Pfe({type:"nats_update"}),i.length>0?a.message=Mfe:a.message=`Successfully added '${n}' to manifest`,a}o(Ufe,"addNode")});var qO=M((CUe,R1)=>{"use strict";var{handleHDBError:HO,hdbErrors:xfe}=ge(),{HTTP_STATUS_CODES:kO}=xfe,{addUpdateNodeValidator:Bfe}=aT(),op=Q(),ET=(k(),v(W)),T1=Ot(),OUe=ie(),ap=mr(),cp=Ko(),GO=oe(),{cloneDeep:Ffe}=require("lodash"),Hfe=UO(),{Node:kfe,NodeSubscription:Gfe}=Gd(),{broadcast:qfe}=nt(),{setNode:$fe}=(Kd(),v(Vd)),Vfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Kfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Yfe=GO.get(ET.CONFIG_PARAMS.CLUSTERING_NODENAME);R1.exports=Wfe;async function Wfe(e){if(op.trace("updateNode called with:",e),GO.get(ET.CONFIG_PARAMS.REPLICATION_URL)??GO.get(ET.CONFIG_PARAMS.REPLICATION_HOSTNAME))return $fe(e);cp.checkClusteringEnabled();let t=Bfe(e);if(t)throw HO(t,t.message,kO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await cp.getNodeRecord(r);s.length>0&&(n=Ffe(s));let{added:i,skipped:a}=await Hfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Vfe,c;let l=cp.buildNodePayloads(i,Yfe,ET.OPERATIONS_ENUM.UPDATE_NODE,await cp.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];op.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}op.trace("updateNode sending remote payload:",l);let u;try{u=await ap.request(`${r}.${T1.REQUEST_SUFFIX}`,l)}catch(d){op.error(`updateNode received error from request: ${d}`);let f=ap.requestErrorHandler(d,"update_node",r);throw HO(new Error,f,kO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===T1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw HO(new Error,d,kO.INTERNAL_SERVER_ERROR,"error",d)}op.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await ap.updateRemoteConsumer(m,r),m.subscribe===!0?await ap.updateConsumerIterator(m.schema,m.table,r,"start"):await ap.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new kfe(r,[],u.system_info)]),await zfe(n[0],i,u.system_info),a.length>0?c.message=Kfe:c.message=`Successfully updated '${r}'`,c}o(Wfe,"updateNode");async function zfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Gfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await cp.upsertNodeRecord(n),qfe({type:"nats_update"})}o(zfe,"updateNodeTable")});var N1=M((LUe,I1)=>{"use strict";var b1=require("joi"),{string:y1}=b1.types(),jfe=ut(),A1=(k(),v(W)),Qfe=oe(),Jfe=Ot();I1.exports=Xfe;function Xfe(e){let t=y1.invalid(Qfe.get(A1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Jfe.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=b1.object({operation:y1.valid(A1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return jfe.validateBySchema(e,r)}o(Xfe,"removeNodeValidator")});var _T=M((MUe,L1)=>{"use strict";var{handleHDBError:w1,hdbErrors:Zfe}=ge(),{HTTP_STATUS_CODES:O1}=Zfe,eme=N1(),lp=Q(),C1=Ko(),tme=ie(),Yd=(k(),v(W)),P1=Ot(),$O=mr(),VO=oe(),{RemotePayloadObject:rme}=rp(),{NodeSubscription:nme}=Gd(),sme=Hm(),ime=El(),{broadcast:ome}=nt(),{setNode:ame}=(Kd(),v(Vd)),cme=VO.get(Yd.CONFIG_PARAMS.CLUSTERING_NODENAME);L1.exports=lme;async function lme(e){if(lp.trace("removeNode called with:",e),VO.get(Yd.CONFIG_PARAMS.REPLICATION_URL)??VO.get(Yd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ame(e);C1.checkClusteringEnabled();let t=eme(e);if(t)throw w1(t,t.message,O1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await C1.getNodeRecord(r);if(tme.isEmptyOrZeroLength(n))throw w1(new Error,`Node '${r}' was not found.`,O1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new rme(Yd.OPERATIONS_ENUM.REMOVE_NODE,cme,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await $O.updateConsumerIterator(d.schema,d.table,r,"stop");try{await $O.updateRemoteConsumer(new nme(d.schema,d.table,!1,!1),r)}catch(f){lp.error(f)}}try{i=await $O.request(`${r}.${P1.REQUEST_SUFFIX}`,s),lp.trace("Remove node reply from remote node:",r,i)}catch(l){lp.error("removeNode received error from request:",l),a=!0}let c=new sme(Yd.SYSTEM_SCHEMA_NAME,Yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ime.deleteRecord(c),ome({type:"nats_update"}),i?.status===P1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(lp.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(lme,"removeNode")});var v1=M((UUe,M1)=>{"use strict";var D1=require("joi"),{string:ume,array:dme}=D1.types(),fme=ut(),mme=aT();M1.exports=hme;function hme(e){let t=D1.object({operation:ume.valid("configure_cluster").required(),connections:dme.items(mme.validationSchema).required()});return fme.validateBySchema(e,t)}o(hme,"configureClusterValidator")});var KO=M((BUe,H1)=>{"use strict";var U1=(k(),v(W)),gT=Q(),pme=ie(),Eme=oe(),_me=_T(),gme=pT(),Sme=Ko(),Tme=v1(),{handleHDBError:x1,hdbErrors:Rme}=ge(),{HTTP_STATUS_CODES:B1}=Rme,yme="Configure cluster complete.",Ame="Failed to configure the cluster. Check the logs for more details.",bme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";H1.exports=Ime;async function Ime(e){gT.trace("configure cluster called with:",e);let t=Tme(e);if(t)throw x1(t,t.message,B1.BAD_REQUEST,void 0,void 0,!0);let r=await Sme.getAllNodeRecords(),n=[];if(Eme.get(U1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await F1(_me,{operation:U1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}gT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await F1(gme,f,f.node_name);s.push(m)}gT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(gT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(pme.isEmptyOrZeroLength(a))return{message:yme,connections:c};if(l)return{message:bme,failed_nodes:a,connections:c};throw x1(new Error,Ame,B1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(Ime,"configureCluster");async function F1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(F1,"functionWrapper")});var $1=M((HUe,q1)=>{"use strict";var up=require("joi"),Nme=ut(),{validateSchemaExists:k1,validateTableExists:wme,validateSchemaName:G1}=Hi(),Ome=up.object({operation:up.string().valid("purge_stream"),schema:up.string().custom(k1).custom(G1).optional(),database:up.string().custom(k1).custom(G1).optional(),table:up.string().custom(wme).required()});function Cme(e){return Nme.validateBySchema(e,Ome)}o(Cme,"purgeStreamValidator");q1.exports=Cme});var YO=M((GUe,V1)=>{"use strict";var{handleHDBError:Pme,hdbErrors:Lme}=ge(),{HTTP_STATUS_CODES:Dme}=Lme,Mme=$1(),vme=mr(),Ume=Ko();V1.exports=xme;async function xme(e){e.schema=e.schema??e.database;let t=Mme(e);if(t)throw Pme(t,t.message,Dme.BAD_REQUEST,void 0,void 0,!0);Ume.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await vme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(xme,"purgeStream")});var jO=M(($Ue,J1)=>{"use strict";var zO=Ko(),Bme=mr(),TT=oe(),Wd=(k(),v(W)),kl=Ot(),Fme=ie(),WO=Q(),{RemotePayloadObject:Hme}=rp(),{ErrorCode:K1}=require("nats"),{parentPort:Y1}=require("worker_threads"),{onMessageByType:kme}=nt(),{getThisNodeName:Gme}=(is(),v(Go)),{requestClusterStatus:qme}=(Wh(),v(E$)),{getReplicationSharedStatus:$me,getHDBNodeTable:Vme}=(Dl(),v(Fw)),{CONFIRMATION_STATUS_POSITION:Kme,RECEIVED_VERSION_POSITION:Yme,RECEIVED_TIME_POSITION:Wme,SENDING_TIME_POSITION:zme,RECEIVING_STATUS_POSITION:jme,RECEIVING_STATUS_RECEIVING:Qme}=(oO(),v(iV)),W1=TT.get(Wd.CONFIG_PARAMS.CLUSTERING_ENABLED),z1=TT.get(Wd.CONFIG_PARAMS.CLUSTERING_NODENAME);J1.exports={clusterStatus:Jme,buildNodeStatus:Q1};var j1;kme("cluster-status",async e=>{j1(e)});async function Jme(){if(TT.get(Wd.CONFIG_PARAMS.REPLICATION_URL)||TT.get(Wd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(Y1){Y1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{j1=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=$me(u,l,a);c.lastCommitConfirmed=ST(d[Kme]),c.lastReceivedRemoteTime=ST(d[Yme]),c.lastReceivedLocalTime=ST(d[Wme]),c.sendingMessage=ST(d[zme]),c.lastReceivedStatus=d[jme]===Qme?"Receiving":"Waiting"}}}else n=qme();n.node_name=Gme();let s=Vme().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:z1,is_enabled:W1,connections:[]};if(!W1)return e;let t=await zO.getAllNodeRecords();if(Fme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(Q1(t[n],e.connections));return await Promise.allSettled(r),e}o(Jme,"clusterStatus");function ST(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(ST,"asDate");async function Q1(e,t){let r=e.name,n=new Hme(Wd.OPERATIONS_ENUM.CLUSTER_STATUS,z1,void 0,await zO.getSystemInfo()),s,i,a=kl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Bme.request(kl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===kl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=kl.CLUSTER_STATUS_STATUSES.CLOSED,WO.error(`Error getting node status from ${r} `,s))}catch(l){WO.warn(`Error getting node status from ${r}`,l),l.code===K1.NoResponders?a=kl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===K1.Timeout?a=kl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=kl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Xme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Wd.PRE_4_0_0_VERSION&&await zO.upsertNodeRecord(l)}catch(l){WO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(Q1,"buildNodeStatus");function Xme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Xme,"NodeStatusObject")});var JO=M((KUe,X1)=>{"use strict";var{handleHDBError:Zme,hdbErrors:ehe}=ge(),{HTTP_STATUS_CODES:the}=ehe,rhe=mr(),nhe=Ko(),QO=ie(),RT=require("joi"),she=ut(),ihe=2e3,ohe=RT.object({timeout:RT.number().min(1),connected_nodes:RT.boolean(),routes:RT.boolean()});X1.exports=ahe;async function ahe(e){nhe.checkClusteringEnabled();let t=she.validateBySchema(e,ohe);if(t)throw Zme(t,t.message,the.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||QO.autoCastBoolean(n),a=s===void 0||QO.autoCastBoolean(s),c={nodes:[]},l=await rhe.getServerList(r??ihe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,h=l[d].data;if(m.name.endsWith("-hub")){let p={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(p.connected_nodes=[],u[m.name]&&u[m.name].forEach(_=>{p.connected_nodes.includes(_.name.slice(0,-4))||p.connected_nodes.push(_.name.slice(0,-4))})),a&&(p.routes=h.cluster?.urls?h.cluster?.urls.map(_=>({host:_.split(":")[0],port:QO.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(ahe,"clusterNetwork")});var rK=M((WUe,tK)=>{"use strict";var XO=require("joi"),Z1=ut(),{routeConstraints:eK}=VI();tK.exports={setRoutesValidator:che,deleteRoutesValidator:lhe};function che(e){let t=XO.object({server:XO.valid("hub","leaf"),routes:eK.required()});return Z1.validateBySchema(e,t)}o(che,"setRoutesValidator");function lhe(e){let t=XO.object({routes:eK.required()});return Z1.validateBySchema(e,t)}o(lhe,"deleteRoutesValidator")});var yT=M((jUe,lK)=>{"use strict";var Wo=wt(),ZO=ie(),vs=(k(),v(W)),zd=oe(),nK=rK(),{handleHDBError:sK,hdbErrors:uhe}=ge(),{HTTP_STATUS_CODES:iK}=uhe,oK="cluster routes successfully set",aK="cluster routes successfully deleted";lK.exports={setRoutes:fhe,getRoutes:mhe,deleteRoutes:hhe};function dhe(e){let t=Wo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=ZO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:oK,set:i,skipped:s}}o(dhe,"setRoutesNats");function fhe(e){let t=nK.setRoutesValidator(e);if(t)throw sK(t,t.message,iK.BAD_REQUEST,void 0,void 0,!0);if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return dhe(e);let r=[],n=[],s=zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{cK(s,i)?n.push(i):(s.push(i),r.push(i))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:oK,set:r,skipped:n}}o(fhe,"setRoutes");function cK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(cK,"existsInArray");function mhe(){if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Wo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(mhe,"getRoutes");function hhe(e){let t=nK.deleteRoutesValidator(e);if(t)throw sK(t,t.message,iK.BAD_REQUEST,void 0,void 0,!0);if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return phe(e);let r=[],n=[],s=zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{cK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:aK,deleted:r,skipped:n}}o(hhe,"deleteRoutes");function phe(e){let t=Wo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,h=r.length;m<h;m++){let p=r[m];if(d.host===p.host&&d.port===p.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let h=0,p=n.length;h<p;h++){let _=n[h];if(d.host===_.host&&d.port===_.port){n.splice(h,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=ZO.isEmptyOrZeroLength(r)?null:r,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ZO.isEmptyOrZeroLength(n)?null:n,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:aK,deleted:s,skipped:i}}o(phe,"deleteRoutesNats")});var dK=M((JUe,uK)=>{"use strict";var dp=require("alasql"),Gl=require("recursive-iterator"),gi=Q(),Ehe=ie(),fp=(k(),v(W)),eC=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,ghe(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=>fp.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=>!fp.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][fp.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=_he(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!fp.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new dp.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function _he(e){return e.filter(t=>t[fp.PERMS_CRUD_ENUM.READ])}o(_he,"filterReadRestrictedAttrs");function ghe(e,t,r,n,s){She(e,t,r,n,s)}o(ghe,"interpretAST");function mp(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(mp,"addSchemaTableToMap");function She(e,t,r,n,s){if(!e){gi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof dp.yy.Insert?Ahe(e,t,r):e instanceof dp.yy.Select?The(e,t,r,n,s):e instanceof dp.yy.Update?Rhe(e,t,r):e instanceof dp.yy.Delete?yhe(e,t,r):gi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(She,"getRecordAttributesAST");function The(e,t,r,n,s){if(!e){gi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Ehe.isEmptyOrZeroLength(i)){gi.error("No schema specified");return}e.from.forEach(c=>{mp(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),mp(c.table,t,r,n,s)});let a=new Gl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{gi.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 Gl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Gl(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Gl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{gi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(The,"getSelectAttributes");function Rhe(e,t,r){if(!e){gi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.table.tableid,s,i.columnid,t,r)}o(Rhe,"getUpdateAttributes");function yhe(e,t,r){if(!e){gi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gl(e.where),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.table.tableid,s,i.columnid,t,r)}o(yhe,"getDeleteAttributes");function Ahe(e,t,r){if(!e){gi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.into.databaseid;mp(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.into.tableid,s,i.columnid,t,r)}o(Ahe,"getInsertAttributes");function tC(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(tC,"pushAttribute");uK.exports=eC});var mK=M((ZUe,fK)=>{"use strict";var AT=(k(),v(W)),bT=class{static{o(this,"BaseLicense")}constructor(t=0,r=AT.RAM_ALLOCATION_ENUM.DEFAULT,n=AT.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},rC=class extends bT{static{o(this,"ExtendedLicense")}constructor(t=0,r=AT.RAM_ALLOCATION_ENUM.DEFAULT,n=AT.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};fK.exports={BaseLicense:bT,ExtendedLicense:rC}});var Jd=M((t0e,SK)=>{"use strict";var Qd=require("fs-extra"),IT=(mg(),v(fg)),pK=require("crypto"),bhe=require("moment"),Ihe=require("uuid").v4,hn=Q(),sC=require("path"),Nhe=ie(),ql=(k(),v(W)),{totalmem:hK}=require("os"),whe=mK().ExtendedLicense,jd="invalid license key format",Ohe="061183",Che="mofi25",Phe="aes-256-cbc",Lhe=16,Dhe=32,EK=oe(),{resolvePath:_K}=wt();EK.initSync();var nC;SK.exports={validateLicense:gK,generateFingerPrint:vhe,licenseSearch:aC,getLicense:Bhe,checkMemoryLimit:Fhe};function iC(){return sC.join(EK.getHdbBasePath(),ql.LICENSE_KEY_DIR_NAME,ql.LICENSE_FILE_NAME)}o(iC,"getLicenseDirPath");function Mhe(){let e=iC();return _K(sC.join(e,ql.LICENSE_FILE_NAME))}o(Mhe,"getLicenseFilePath");function oC(){let e=iC();return _K(sC.join(e,ql.REG_KEY_FILE_NAME))}o(oC,"getFingerPrintFilePath");async function vhe(){let e=oC();try{return await Qd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Uhe();throw hn.error(`Error writing fingerprint file to ${e}`),hn.error(t),new Error("There was an error generating the fingerprint")}}o(vhe,"generateFingerPrint");async function Uhe(){let e=Ihe(),t=IT.hash(e,IT.HASH_FUNCTION.MD5),r=oC();try{await Qd.mkdirp(iC()),await Qd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw hn.error(`Error writing fingerprint file to ${r}`),hn.error(n),new Error("There was an error generating the fingerprint")}return t}o(Uhe,"writeFingerprint");function gK(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ql.RAM_ALLOCATION_ENUM.DEFAULT,version:ql.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return hn.error("empty license key passed to validate."),r;let n=oC(),s=!1;try{s=Qd.statSync(n)}catch(i){hn.error(i)}if(s){let i;try{i=Qd.readFileSync(n,"utf8")}catch{hn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Che),c=a[1];c=Buffer.concat([Buffer.from(c)],Lhe);let l=Buffer.concat([Buffer.from(i)],Dhe),u=pK.createDecipheriv(Phe,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let h=xhe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(jd),hn.error(jd),new Error(jd)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(jd),hn.error(jd),new Error(jd)}else r.exp_date=d;r.exp_date<bhe().valueOf()&&(r.valid_date=!1),IT.validate(a[1],`${Ohe}${i}${t}`,IT.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||hn.error("Invalid licence"),r}o(gK,"validateLicense");function xhe(e,t){try{let r=pK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{hn.warn("Check old license failed")}}o(xhe,"checkOldLicense");function aC(){let e=new whe,t=[];try{t=Qd.readFileSync(Mhe(),"utf-8").split(`\r
24
+ `)}catch(r){r.code==="ENOENT"?hn.debug("no license file found"):hn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Nhe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=gK(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){hn.error("There was an error parsing the license string."),hn.error(s),e.ram_allocation=ql.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return nC=e,e}o(aC,"licenseSearch");async function Bhe(){return nC||await aC(),nC}o(Bhe,"getLicense");function Fhe(){let e=aC().ram_allocation,t=process.constrainedMemory?.()||hK();if(t=Math.round(Math.min(t,hK())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(Fhe,"checkMemoryLimit")});var uC=M((n0e,AK)=>{var NT=Jd(),TK=require("chalk"),ls=Q(),RK=require("prompt"),{promisify:Hhe}=require("util"),cC=(k(),v(W)),khe=require("fs-extra"),Ghe=require("path"),qhe=ie(),{packageJson:$he}=bt(),yK=oe();yK.initSync();var Vhe=require("moment"),Khe=Hhe(RK.get),Yhe=Ghe.join(yK.getHdbBasePath(),cC.LICENSE_KEY_DIR_NAME,cC.LICENSE_FILE_NAME,cC.LICENSE_FILE_NAME);AK.exports={getFingerprint:zhe,setLicense:Whe,parseLicense:lC,register:jhe,getRegistrationInfo:Jhe};async function Whe(e){if(e&&e.key&&e.company){try{ls.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await lC(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ls.error(r),ls.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Whe,"setLicense");async function zhe(){let e={};try{e=await NT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ls.error(r),ls.error(t),new Error(r)}return e}o(zhe,"getFingerprint");async function lC(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ls.info("Validating license input...");let r=NT.validateLicense(e,t);if(ls.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ls.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ls.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ls.info("writing license to disk"),await khe.writeFile(Yhe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ls.error("Failed to write License"),n}return"Registration successful."}o(lC,"parseLicense");async function jhe(){let e=await Qhe();return lC(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(jhe,"register");async function Qhe(){let e=await NT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{RK.start()}catch(n){ls.error(n)}let r;try{r=await Khe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(Qhe,"promptForRegistration");async function Jhe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await NT.getLicense()}catch(r){throw ls.error(`There was an error when searching licenses due to: ${r.message}`),r}if(qhe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=$he.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Vhe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Jhe,"getRegistrationInfo")});var IK=M((i0e,bK)=>{"use strict";var Xhe=Ot(),dC=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,h,p){this.port=t,a===null&&(a=void 0),this.server_name=r+Xhe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:h},HDB:{users:p}},this.system_account="SYS"}};bK.exports=dC});var OK=M((a0e,wK)=>{"use strict";var NK=Ot(),fC=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+NK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+NK.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};wK.exports=fC});var PK=M((l0e,CK)=>{"use strict";var mC=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};CK.exports=mC});var DK=M((d0e,LK)=>{"use strict";var Zhe=Ot(),hC=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Zhe.SERVER_SUFFIX.ADMIN,this.password=r}};LK.exports=hC});var PT=M((m0e,UK)=>{"use strict";var $l=require("path"),Vl=require("fs-extra"),epe=IK(),tpe=OK(),rpe=PK(),npe=DK(),pC=ts(),Zd=ie(),Bn=wt(),OT=(k(),v(W)),hp=Ot(),{CONFIG_PARAMS:nr}=OT,ef=Q(),pp=oe(),MK=$i(),EC=mr(),spe=as(),Xd="clustering",ipe=1e4,vK=50;UK.exports={generateNatsConfig:ape,removeNatsConfig:cpe,getHubConfigPath:ope};function ope(){let e=pp.get(nr.ROOTPATH);return $l.join(e,Xd,hp.NATS_CONFIG_FILES.HUB_SERVER)}o(ope,"getHubConfigPath");async function ape(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=pp.get(nr.ROOTPATH);Vl.ensureDirSync($l.join(r,"clustering","leaf")),pp.initSync();let n=Bn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Bn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Bn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Vl.exists(i)&&!await Vl.exists(!n)&&await spe.createNatsCerts();let a=$l.join(r,Xd,hp.PID_FILES.HUB),c=$l.join(r,Xd,hp.PID_FILES.LEAF),l=Bn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=$l.join(r,Xd,hp.NATS_CONFIG_FILES.HUB_SERVER),d=$l.join(r,Xd,hp.NATS_CONFIG_FILES.LEAF_SERVER),f=Bn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Bn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),h=Bn.getConfigFromFile(nr.CLUSTERING_NODENAME),p=Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await EC.checkNATSServerInstalled()||CT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await pC.listUsers(),g=Bn.getConfigFromFile(nr.CLUSTERING_USER),R=await pC.getClusterUser();(Zd.isEmpty(R)||R.active!==!0)&&CT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await wT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await wT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await wT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await wT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],y=[];for(let[K,$]of _.entries())$.role?.role===OT.ROLE_TYPES_ENUM.CLUSTER_USER&&$.active&&(T.push(new npe($.username,MK.decrypt($.hash))),y.push(new rpe($.username,MK.decrypt($.hash))));let N=[],{hub_routes:O}=Bn.getClusteringRoutes();if(!Zd.isEmptyOrZeroLength(O))for(let K of O)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${K.host}:${K.port}`);let F=new epe(Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,y);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Zd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vl.writeJson(u,F),ef.trace(`Hub server config written to ${u}`));let Z=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,Y=new tpe(Bn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[Z],[G],T,y,i,s,n,f);n==null&&delete Y.tls.ca_file,(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vl.writeJson(d,Y),ef.trace(`Leaf server config written to ${d}`))}o(ape,"generateNatsConfig");async function wT(e){let t=pp.get(e);return Zd.isEmpty(t)&&CT(`port undefined for '${e}'`),await Zd.isPortTaken(t)&&CT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(wT,"isPortAvailable");function CT(e){let t=`Error generating clustering config: ${e}`;ef.error(t),console.error(t),process.exit(1)}o(CT,"generateNatsConfigError");async function cpe(e){let{port:t,config_file:r}=EC.getServerConfig(e),{username:n,decrypt_hash:s}=await pC.getClusterUser(),i=0,a=2e3;for(;i<vK;){try{let d=await EC.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){ef.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=vK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&ef.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Zd.asyncSetTimeout(u)}let c="0".repeat(ipe),l=$l.join(pp.get(nr.ROOTPATH),Xd,r);await Vl.writeFile(l,c),await Vl.remove(l),ef.notify(e,"started.")}o(cpe,"removeNatsConfig")});var GK=M((p0e,kK)=>{"use strict";var us=oe(),lpe=Jd(),Ve=(k(),v(W)),Ep=Ot(),zo=require("path"),{PACKAGE_ROOT:DT}=bt(),xK=oe(),LT=ie(),tf="/dev/null",upe=zo.join(DT,"launchServiceScripts"),BK=zo.join(DT,"utility/scripts"),dpe=zo.join(BK,Ve.HDB_RESTART_SCRIPT),FK=zo.resolve(DT,"dependencies",`${process.platform}-${process.arch}`,Ep.NATS_BINARY_NAME);function HK(){let t=lpe.licenseSearch().ram_allocation||Ve.RAM_ALLOCATION_ENUM.DEFAULT,r=Ve.MEM_SETTING_KEY+t,n={[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return LT.noBootFile()&&(n[Ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{name:Ve.PROCESS_DESCRIPTORS.HDB,script:Ve.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:DT}}o(HK,"generateMainServerConfig");var fpe=9930;function mpe(){us.initSync(!0);let e=us.get(Ve.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.HUB_SERVER),r=zo.join(us.get(Ve.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ve.LOG_NAMES.HDB),n=xK.get(Ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==fpe?"-"+n:""),script:FK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tf,i.error_file=tf),i}o(mpe,"generateNatsHubServerConfig");var hpe=9940;function ppe(){us.initSync(!0);let e=us.get(Ve.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.LEAF_SERVER),r=zo.join(us.get(Ve.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ve.LOG_NAMES.HDB),n=xK.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==hpe?"-"+n:""),script:FK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tf,i.error_file=tf),i}o(ppe,"generateNatsLeafServerConfig");function Epe(){us.initSync();let e=zo.join(us.get(Ve.CONFIG_PARAMS.LOGGING_ROOT),Ve.LOG_NAMES.HDB),t={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:upe,autorestart:!1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=tf,t.error_file=tf),t}o(Epe,"generateClusteringUpgradeV4ServiceConfig");function _pe(){let e={[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.RESTART_HDB};return LT.noBootFile()&&(e[Ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{...{name:Ve.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BK},script:dpe}}o(_pe,"generateRestart");function gpe(){return{apps:[HK()]}}o(gpe,"generateAllServiceConfigs");kK.exports={generateAllServiceConfigs:gpe,generateMainServerConfig:HK,generateRestart:_pe,generateNatsHubServerConfig:mpe,generateNatsLeafServerConfig:ppe,generateClusteringUpgradeV4ServiceConfig:Epe}});var gp=M((g0e,tY)=>{"use strict";var ct=(k(),v(W)),Spe=ie(),Qo=PT(),MT=mr(),jo=Ot(),ac=GK(),vT=oe(),Kl=Q(),Tpe=Ko(),{startWorker:qK,onMessageFromWorkers:Rpe}=nt(),ype=$d(),_0e=require("util"),Ape=require("child_process"),bpe=require("fs"),{execFile:Ipe}=Ape,Je;tY.exports={enterPM2Mode:Npe,start:cc,stop:_C,reload:VK,restart:KK,list:gC,describe:zK,connect:Jo,kill:Lpe,startAllServices:Dpe,startService:SC,getUniqueServicesList:jK,restartAllServices:Mpe,isServiceRegistered:QK,reloadStopStart:JK,restartHdb:WK,deleteProcess:Cpe,startClusteringProcesses:ZK,startClusteringThreads:eY,isHdbRestartRunning:Ppe,isClusteringRunning:Upe,stopClustering:vpe,reloadClustering:xpe,expectedRestartOfChildren:YK};var _p=!1;Rpe(e=>{e.type==="restart"&&vT.initSync(!0)});function Npe(){_p=!0}o(Npe,"enterPM2Mode");function Jo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(Jo,"connect");var pn,wpe=10,$K;function cc(e,t=!1){if(_p)return Ope(e);let r=Ipe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=pn.indexOf(r);a>-1&&pn.splice(a,1),!$K&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<wpe&&(bpe.existsSync(Qo.getHubConfigPath())?cc(e):(await Qo.generateNatsConfig(!0),cc(e),await new Promise(c=>setTimeout(c,3e3)),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=vT.get(ct.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Kl.OUTPUTS.STDERR:Kl.OUTPUTS.STDOUT;Kl.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=jo.LOG_LEVELS[m]}if(jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Kl.OUTPUTS.STDERR:Kl.OUTPUTS.STDOUT;Kl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!pn&&(pn=[],!t)){let i=o(()=>{$K=!0,pn&&(pn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}pn.push(r)}o(cc,"start");function Ope(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Ope,"startWithPM2");function _C(e){if(!_p){for(let t of pn||[])t.name===e&&(pn.splice(pn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,a)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(a)})})})}o(_C,"stop");function VK(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(VK,"reload");function KK(e){if(!_p){YK();for(let t of pn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(KK,"restart");function YK(){for(let e of pn||[])e.config&&(e.config.restarts=0)}o(YK,"expectedRestartOfChildren");function Cpe(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Cpe,"deleteProcess");async function WK(){await cc(ac.generateRestart())}o(WK,"restartHdb");async function Ppe(){let e=await gC();for(let t in e)if(e[t].name===ct.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Ppe,"isHdbRestartRunning");function gC(){return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(gC,"list");function zK(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(zK,"describe");function Lpe(){if(!_p){for(let e of pn||[])e.kill();pn=[];return}return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(Lpe,"kill");async function Dpe(){try{await ZK(),await eY(),await cc(ac.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(Dpe,"startAllServices");async function SC(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ct.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ac.generateMainServerConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ac.generateNatsIngestServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ac.generateNatsReplyServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ac.generateNatsHubServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ac.generateNatsLeafServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ac.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await cc(r)}catch(r){throw Je?.disconnect(),r}}o(SC,"startService");async function jK(){try{let e=await gC(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Je?.disconnect(),e}}o(jK,"getUniqueServicesList");async function Mpe(e=[]){try{let t=!1,r=await jK();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===ct.PROCESS_DESCRIPTORS.HDB?t=!0:await KK(a))}t&&await JK(ct.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(Mpe,"restartAllServices");async function QK(e){if(pn?.find(r=>r.name===e))return!0;let t=await ype.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(QK,"isServiceRegistered");async function JK(e){let t=vT.get(ct.CONFIG_PARAMS.THREADS_COUNT)??vT.get(ct.CONFIG_PARAMS.THREADS),r=await zK(e),n=Spe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await _C(e),await SC(e)):e===ct.PROCESS_DESCRIPTORS.HDB?await WK():await VK(e)}o(JK,"reloadStopStart");var XK;async function ZK(e=!1){for(let t in ct.CLUSTERING_PROCESSES){let r=ct.CLUSTERING_PROCESSES[t];await SC(r,e)}}o(ZK,"startClusteringProcesses");async function eY(){XK=qK(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await MT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await MT.updateLocalStreams();let e=await Tpe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ct.PRE_4_0_0_VERSION){Kl.info("Starting clustering upgrade 4.0.0 process"),qK(ct.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(eY,"startClusteringThreads");async function vpe(){for(let e in ct.CLUSTERING_PROCESSES)if(e!==ct.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ct.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await XK.terminate();else{let t=ct.CLUSTERING_PROCESSES[e];await _C(t)}}o(vpe,"stopClustering");async function Upe(){for(let e in ct.CLUSTERING_PROCESSES){let t=ct.CLUSTERING_PROCESSES[e];if(await QK(t)===!1)return!1}return!0}o(Upe,"isClusteringRunning");async function xpe(){await Qo.generateNatsConfig(!0),await MT.reloadNATSHub(),await MT.reloadNATSLeaf(),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(xpe,"reloadClustering")});var yC={};we(yC,{compactOnStart:()=>Bpe,copyDb:()=>aY});async function Bpe(){lc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,TC.get)(U.ROOTPATH),t=new Map,r=st();(0,RC.updateConfigValue)(U.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,UT.join)(e,"backup",n+".mdb"),a=(0,UT.join)(e,Uc,n+"-copy.mdb"),c=0;try{c=await rY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){lc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await aY(n,a),console.log("Backing up",n,"to",i);try{await(0,Yl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,Yl.move)(a,s,{overwrite:!0}),await(0,Yl.remove)((0,UT.join)(e,Uc,`${n}-copy.mdb-lock`))}try{ld()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{ld()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){lc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,RC.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Yl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw ld(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=await rY(n);if(console.log("Database",n,"after compact has a total record count of",a),i!==a){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
25
25
  Total record count before compaction: ${i}, total after: ${a}.
26
- Database backup has not been removed and can be found here: ${s}`;lc.error(c),console.error(c)}(0,TC.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,Kl.remove)(s))}}async function tY(e){let t=await(0,iY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function tf(){}async function oY(e,t){console.log(`Copying database ${e} to ${t}`);let r=nt()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=tf,m.primaryStore.remove=tf;for(let h in m.indices){let p=m.indices[h];p.put=tf,p.remove=tf}m.auditStore&&(m.auditStore.put=tf,m.auditStore.remove=tf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,rY.open)(new nY.default(t)),c=a.openDB(xT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:h}of s.getRange({transaction:d})){let p=h.is_hash_attribute||h.isPrimaryKey,_,g;if(p&&(_=h.compression,g=Gg(),g?h.compression=g:delete h.compression,_?.dictionary?.toString()===g?.dictionary?.toString()&&(_=null,g=null)),c.put(m,h),!(p||h.indexed))continue;let y=new sY.default(!p,p);y.encoding="binary",y.compression=_;let T=n.openDB(m,y);T.decoder=null,T.decoderCopies=!1,T.encoding="binary",y.compression=g;let R=a.openDB(m,y);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(T,R,p,d)}if(i){let m=n.openDB(xT.AUDIT_STORE_NAME,Em);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,h,p,_){let g=0,y=0,T=0,R=1e7,N=null;for(;R-- >0;)try{for(let O of m.getKeys({start:N,transaction:_}))try{N=O;let{value:F,version:Z}=m.getEntry(O,{transaction:_});if(F?.length<14&&p){T++;continue}l=h.put(O,F,p?Z:void 0),g++,_.openTimer&&(_.openTimer=0),y+=(O?.length||10)+F.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"delete records,",y,"bytes"),u=0)}catch(F){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,F)}console.log("finish copying, copied",g,"entries",T,"delete records,",y,"bytes");return}catch{if(typeof N=="string"){if(N==="z")return console.error("Reached end of dbi",N,"for",e,"to",t);N=N.slice(0,-2)+"z"}else if(typeof N=="number")N++;else return console.error("Unknown key type",N,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var rY,UT,Kl,TC,nY,sY,xT,iY,RC,lc,AC=ue(()=>{De();rY=require("lmdb"),UT=require("path"),Kl=require("fs-extra"),TC=w(oe()),nY=w(Nm()),sY=w(Im()),xT=w(qt());k();Li();iY=w(Ua()),RC=w(bt()),lc=w(Q());o(xpe,"compactOnStart");o(tY,"getTotalDBRecordCount");o(tf,"noop");o(oY,"copyDb")});var nf=M((N0e,mY)=>{"use strict";var Bpe=require("minimist"),{isMainThread:IC,parentPort:Tp,threadId:A0e}=require("worker_threads"),dt=(k(),v(W)),no=Q(),NC=ie(),FT=PT(),BT=mr(),b0e=It(),uY=bt(),Si=gp(),aY=qd(),{compactOnStart:Fpe}=(AC(),v(yC)),Hpe=Uc(),{restartWorkers:HT,onMessageByType:kpe}=rt(),{handleHDBError:Gpe,hdbErrors:qpe}=ge(),{HTTP_STATUS_CODES:$pe}=qpe,Rp=oe(),{sendOperationToNode:cY,getThisNodeName:Vpe,monitorNodeCAs:Kpe}=(is(),v(Go)),{getHDBNodeTable:I0e}=(Ll(),v(Fw));Rp.initSync();var Sp=`Restarting HarperDB. This may take up to ${dt.RESTART_TIMEOUT_MS/1e3} seconds.`,Ype="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lY="Clustering is not enabled so cannot be restarted",Wpe="Invalid service",rf,Us;mY.exports={restart:dY,restartService:wC};IC&&kpe(dt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await wC({service:e.workerType}):dY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function dY(e){Us=Object.keys(e).length===0,rf=await Si.isServiceRegistered(dt.PROCESS_DESCRIPTORS.HDB);let t=Bpe(process.argv);if(t.service){await wC(t);return}if(Us&&!rf){console.error(Ype);return}if(Us&&console.log(Sp),rf){Si.enterPM2Mode(),no.notify(Sp);let r=Hpe(Object.keys(dt.CONFIG_PARAM_MAP),!0);return NC.isEmptyOrZeroLength(Object.keys(r))||uY.updateConfigValue(void 0,void 0,r,!0,!0),zpe(),Sp}return IC?(no.notify(Sp),Rp.get(dt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Fpe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{HT()},50)):Tp.postMessage({type:dt.ITC_EVENT_TYPES.RESTART}),Sp}o(dY,"restart");async function wC(e){let{service:t}=e;if(dt.HDB_PROCESS_SERVICES[t]===void 0)throw Gpe(new Error,Wpe,$pe.BAD_REQUEST,void 0,void 0,!0);if(Si.expectedRestartOfChildren(),rf=await Si.isServiceRegistered(dt.PROCESS_DESCRIPTORS.HDB),!IC){e.replicated&&Kpe(),Tp.postMessage({type:dt.ITC_EVENT_TYPES.RESTART,workerType:t}),Tp.ref(),await new Promise(s=>{Tp.on("message",i=>{i.type==="restart-complete"&&(s(),Tp.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Vpe())continue;let i;try{({job_id:i}=await cY(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let h=new Error("Timed out waiting for restart job to complete");h.replicated=n,c(h)}let m=(await cY(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let h=new Error(m.message);h.replicated=n,c(h)}},250)}))}return{replicated:n}}return}let r;switch(t){case dt.HDB_PROCESS_SERVICES.clustering:if(!Rp.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lY;break}Us&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await fY();break;case dt.HDB_PROCESS_SERVICES.clustering_config:case dt.HDB_PROCESS_SERVICES["clustering config"]:if(!Rp.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lY;break}Us&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Si.reloadClustering();break;case"custom_functions":case"custom functions":case dt.HDB_PROCESS_SERVICES.harperdb:case dt.HDB_PROCESS_SERVICES.http_workers:case dt.HDB_PROCESS_SERVICES.http:if(Us&&!rf){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}Us&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),Us?await Si.restart(dt.PROCESS_DESCRIPTORS.HDB):await HT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),Us&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(wC,"restartService");async function zpe(){await fY(),await Si.restart(dt.PROCESS_DESCRIPTORS.HDB),await NC.asyncSetTimeout(2e3),Rp.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await bC(),Us&&(await BT.closeConnection(),process.exit(0))}o(zpe,"restartPM2Mode");async function fY(){if(!uY.getConfigFromFile(dt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await aY.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await FT.generateNatsConfig(!0),await Si.startClusteringProcesses(),await Si.startClusteringThreads(),await bC(),Us&&await BT.closeConnection();else{await FT.generateNatsConfig(!0),rf?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Si.restart(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Si.restart(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await aY.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await NC.asyncSetTimeout(3e3),await bC(),await BT.updateLocalStreams(),Us&&await BT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=HT(dt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=HT(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(fY,"restartClustering");async function bC(){await FT.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await FT.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(bC,"removeNatsConfig")});var bY=M((C0e,AY)=>{"use strict";var O0e=require("lodash"),Hn=(k(),v(W)),{handleHDBError:hY,hdbErrors:jpe}=ge(),{HDB_ERROR_MSGS:Qpe,HTTP_STATUS_CODES:Jpe}=jpe,OC=Q();AY.exports={getRolePermissions:Zpe};var Yl=Object.create(null),Xpe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),gY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),SY=o((e=!1,t=!1,r=!1,n=!1)=>({[Hn.PERMS_CRUD_ENUM.READ]:e,[Hn.PERMS_CRUD_ENUM.INSERT]:t,[Hn.PERMS_CRUD_ENUM.UPDATE]:r,[Hn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),CC=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...SY(t,r,n,s)}),"tablePermsTemplate"),pY=o((e,t=SY())=>({attribute_name:e,describe:yY(t),[yp]:t[yp],[PC]:t[PC],[LC]:t[LC]}),"attrPermsTemplate"),EY=o((e,t=!1)=>({attribute_name:e,describe:t,[yp]:t}),"timestampAttrPermsTemplate"),{READ:yp,INSERT:PC,UPDATE:LC}=Hn.PERMS_CRUD_ENUM,TY=Object.values(Hn.PERMS_CRUD_ENUM),RY=[yp,PC,LC];function Zpe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Hn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Yl[t]&&Yl[t].key===n)return Yl[t].perms;let s=eEe(e,r);return Yl[t]?Yl[t].key=n:Yl[t]=Xpe(n),Yl[t].perms=s,s}catch(r){if(!e[Hn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Hn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Hn.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 OC.error(n),OC.debug(r),hY(new Error,Qpe.OUTDATED_PERMS_TRANSLATION_ERROR,Jpe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
- ${r.stack}`;throw OC.error(n),hY(new Error)}}}o(Zpe,"getRolePermissions");function eEe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Hn.SYSTEM_SCHEMA_NAME]=n[Hn.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]=tEe(t[i]);return}r[i]=gY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=rEe(c,l);r[i].describe||TY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=CC()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=CC()})}),r}o(eEe,"translateRolePermissions");function tEe(e){let t=gY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CC(!0,!0,!0,!0,!0)}),t}o(tEe,"createStructureUserPermissions");function rEe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return Hn.TIME_STAMP_NAMES.includes(f)&&(m=EY(f,d[yp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=pY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=yY(d),s.attribute_permissions.push(d),c||nEe(d,l)}else if(u!==a){let d;Hn.TIME_STAMP_NAMES.includes(u)?d=EY(u):d=pY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=_Y(s),s}else return e.describe=_Y(e),e}o(rEe,"getTableAttrPerms");function _Y(e){return TY.filter(t=>e[t]).length>0}o(_Y,"getSchemaTableDescribePerm");function yY(e){return RY.filter(t=>e[t]).length>0}o(yY,"getAttributeDescribePerm");function nEe(e,t){RY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(nEe,"checkForHashPerms")});var Ap={};Oe(Ap,{authentication:()=>DY,bypassAuth:()=>fEe,login:()=>vC,logout:()=>UC,start:()=>mEe});function fEe(){LY=!0}async function DY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?cEe?aEe:[]:oEe?iEe:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=_n.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Os([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return kT&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),kT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(kT){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let _ of p)if(_.startsWith(h)){let g=_.indexOf(";");l=_.slice(h.length,g===-1?_.length:g),u=await IY.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new GT.AuthAuditLog(h,p,ya.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=_,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Zs.SUCCESS?DC.notify(g):DC.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&DC.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Le.getUser(h,null,e),d(h,Zs.SUCCESS,"mTLS")):sEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Wl.get(n),!f){let h=n.indexOf(" "),p=n.slice(0,h),_=n.slice(h+1),g,y;try{switch(p){case"Basic":let T=atob(_),R=T.indexOf(":");g=T.slice(0,R),y=T.slice(R+1),f=g||y?await Le.getUser(g,y,e):null;break;case"Bearer":try{f=await pw(_)}catch(N){if(N.message==="invalid token")try{return await _S(_),c({status:-1})}catch{throw N}}break}}catch(T){return uEe&&(Wl.get(_)||(Wl.set(_,_),d(g,Zs.FAILURE,p))),c({status:401,body:ba({error:T.message},e)})}Wl.set(n,f),lEe&&d(f.username,Zs.SUCCESS,p)}e.user=f}else u?.user?e.user=await Le.getUser(u.user,null,e):(LY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,wY.getSuperUser)());kT&&(e.session.update=function(h){let p=_n.get(U.AUTHENTICATION_COOKIE_EXPIRES),_=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,OY.v4)();let g=_n.get(U.AUTHENTICATION_COOKIE_DOMAINS),y=p?new Date(Date.now()+(0,MC.convertToMS)(p)).toUTCString():dEe,T=g?.find(O=>r.host?.endsWith(O)),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${y}; HttpOnly`;T&&(N+=`; Domain=${T}`),_&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return _&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),h.id=l,IY.put(h,{expiresAt:p?Date.now()+(0,MC.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await Le.authenticateUser(h,p,e);e.session.update({user:_&&(_.getId?.()??_.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&bs.loginPath?(m.status=302,m.headers.set("Location",bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Os);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function mEe({server:e,port:t,securePort:r}){e.http(DY,t||r?{port:t,securePort:r}:{port:"all"}),NY||(NY=!0,setInterval(()=>{Wl=new Map},_n.get(U.AUTHENTICATION_CACHETTL)).unref(),CY.user.addListener(()=>{Wl=new Map}))}async function vC(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 UC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var wY,OY,_n,GT,CY,MC,PY,sEe,DC,iEe,oEe,aEe,cEe,IY,kT,LY,lEe,uEe,dEe,Wl,NY,qT=ue(()=>{wY=w(ts());Mr();Bu();Sd();De();OY=require("uuid"),_n=w(oe());k();GT=w(Q()),CY=w(sh());uh();MC=w(ie());Ro();PY=(0,GT.forComponent)("authentication"),{debug:sEe}=PY,DC=PY.withTag("auth-event");_n.initSync();iEe=_n.get(U.HTTP_CORSACCESSLIST),oEe=_n.get(U.HTTP_CORS),aEe=_n.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),cEe=_n.get(U.OPERATIONSAPI_NETWORK_CORS),IY=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),kT=_n.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,LY=process.env.AUTHENTICATION_AUTHORIZELOCAL??_n.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,lEe=_n.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,uEe=_n.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,dEe="Tue, 01 Oct 8307 19:33:20 GMT",Wl=new Map;Le.onInvalidatedUser(()=>{Wl=new Map});o(fEe,"bypassAuth");o(DY,"authentication");o(mEe,"start");o(vC,"login");o(UC,"logout")});var HY=M((H0e,FY)=>{"use strict";var we=require("joi"),MY=require("fs-extra"),vY=require("path"),ds=lt(),UY=oe(),xY=(k(),v(W)),BY=Q(),{hdbErrors:hEe}=ge(),{HDB_ERROR_MSGS:gn}=hEe,Xo=/^[a-zA-Z0-9-_]+$/,pEe=/^[a-zA-Z0-9-_]+$/;FY.exports={getDropCustomFunctionValidator:_Ee,setCustomFunctionValidator:gEe,addComponentValidator:yEe,dropCustomFunctionProjectValidator:AEe,packageComponentValidator:bEe,deployComponentValidator:IEe,setComponentFileValidator:SEe,getComponentFileValidator:REe,dropComponentFileValidator:TEe,addSSHKeyValidator:NEe,updateSSHKeyValidator:wEe,deleteSSHKeyValidator:OEe,setSSHKnownHostsValidator:CEe};function $T(e,t,r){try{let n=UY.get(xY.CONFIG_PARAMS.COMPONENTSROOT),s=vY.join(n,t);return MY.existsSync(s)?e?t:r.message(gn.PROJECT_EXISTS):e?r.message(gn.NO_PROJECT):t}catch(n){return BY.error(n),r.message(gn.VALIDATION_ERR)}}o($T,"checkProjectExists");function bp(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(bp,"checkFilePath");function EEe(e,t,r,n){try{let s=UY.get(xY.CONFIG_PARAMS.COMPONENTSROOT),i=vY.join(s,e,t,r+".js");return MY.existsSync(i)?r:n.message(gn.NO_FILE)}catch(s){return BY.error(s),n.message(gn.VALIDATION_ERR)}}o(EEe,"checkFileExists");function _Ee(e){let t=we.object({project:we.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(Xo).custom(EEe.bind(null,e.project,e.type)).custom(bp).required().messages({"string.pattern.base":gn.BAD_FILE_NAME})});return ds.validateBySchema(e,t)}o(_Ee,"getDropCustomFunctionValidator");function gEe(e){let t=we.object({project:we.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(bp).required(),function_content:we.string().required()});return ds.validateBySchema(e,t)}o(gEe,"setCustomFunctionValidator");function SEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),file:we.string().custom(bp).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(SEe,"setComponentFileValidator");function TEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),file:we.string().custom(bp).optional()});return ds.validateBySchema(e,t)}o(TEe,"dropComponentFileValidator");function REe(e){let t=we.object({project:we.string().required(),file:we.string().custom(bp).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(REe,"getComponentFileValidator");function yEe(e){let t=we.object({project:we.string().pattern(Xo).custom($T.bind(null,!1)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(yEe,"addComponentValidator");function AEe(e){let t=we.object({project:we.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(AEe,"dropCustomFunctionProjectValidator");function bEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),skip_node_modules:we.boolean(),skip_symlinks:we.boolean()});return ds.validateBySchema(e,t)}o(bEe,"packageComponentValidator");function IEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),package:we.string().optional(),restart:we.alternatives().try(we.boolean(),we.string().valid("rolling")).optional()});return ds.validateBySchema(e,t)}o(IEe,"deployComponentValidator");function NEe(e){let t=we.object({name:we.string().pattern(pEe).required().messages({"string.pattern.base":gn.BAD_SSH_KEY_NAME}),key:we.string().required(),host:we.string().required(),hostname:we.string().required(),known_hosts:we.string().optional()});return ds.validateBySchema(e,t)}o(NEe,"addSSHKeyValidator");function wEe(e){let t=we.object({name:we.string().required(),key:we.string().required()});return ds.validateBySchema(e,t)}o(wEe,"updateSSHKeyValidator");function OEe(e){let t=we.object({name:we.string().required()});return ds.validateBySchema(e,t)}o(OEe,"deleteSSHKeyValidator");function CEe(e){let t=we.object({known_hosts:we.string().required()});return ds.validateBySchema(e,t)}o(CEe,"setSSHKnownHostsValidator")});var wp=M((G0e,VY)=>{"use strict";var VT=require("joi"),uc=require("path"),sf=require("fs-extra"),{exec:PEe,spawn:LEe}=require("child_process"),DEe=require("util"),MEe=DEe.promisify(PEe),of=(k(),v(W)),{PACKAGE_ROOT:vEe}=Rt(),{handleHDBError:Ip,hdbErrors:UEe}=ge(),{HTTP_STATUS_CODES:Np}=UEe,zl=oe(),xEe=lt(),dc=Q(),{once:BEe}=require("events");zl.initSync();var xC=zl.get(of.CONFIG_PARAMS.COMPONENTSROOT),kY="npm install --force --omit=dev --json",FEe=`${kY} --dry-run`,HEe=zl.get(of.CONFIG_PARAMS.ROOTPATH),KT=uc.join(HEe,"ssh");VY.exports={installModules:$Ee,auditModules:VEe,installAllRootModules:kEe,uninstallRootModule:GEe,linkHarperdb:qEe,runCommand:af};async function kEe(e=!1,t=zl.get(of.CONFIG_PARAMS.ROOTPATH)){await YT();let r=!1,n=process.env;sf.pathExistsSync(KT)&&sf.readdirSync(KT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+uc.join(KT,"config")+" -o UserKnownHostsFile="+uc.join(KT,"known_hosts"),...process.env},r=!0)});try{let s=zl.get(of.CONFIG_PARAMS.ROOTPATH),i=uc.join(s,"node_modules","harperdb");sf.lstatSync(i).isSymbolicLink()&&sf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&dc.error("Error removing symlink:",s)}await af(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(kEe,"installAllRootModules");async function GEe(e){await af(`npm uninstall ${e}`,zl.get(of.CONFIG_PARAMS.ROOTPATH))}o(GEe,"uninstallRootModule");async function qEe(){await YT(),await af(`npm link ${vEe}`,zl.get(of.CONFIG_PARAMS.ROOTPATH))}o(qEe,"linkHarperdb");async function af(e,t=void 0,r=process.env){dc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=LEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();dc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();dc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await BEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(af,"runCommand");async function $Ee(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";dc.warn(t,e.projects);let r=$Y(e);if(r)throw Ip(r,r.message,Np.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?FEe:kY;await YT(),await qY(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=uc.join(xC,u),f,m=null;try{let{stdout:h,stderr:p}=await MEe(i,{cwd:d});f=h?h.replace(`
26
+ Database backup has not been removed and can be found here: ${s}`;lc.error(c),console.error(c)}(0,TC.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,Yl.remove)(s))}}async function rY(e){let t=await(0,oY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function rf(){}async function aY(e,t){console.log(`Copying database ${e} to ${t}`);let r=st()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=rf,m.primaryStore.remove=rf;for(let h in m.indices){let p=m.indices[h];p.put=rf,p.remove=rf}m.auditStore&&(m.auditStore.put=rf,m.auditStore.remove=rf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,nY.open)(new sY.default(t)),c=a.openDB(xT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:h}of s.getRange({transaction:d})){let p=h.is_hash_attribute||h.isPrimaryKey,_,g;if(p&&(_=h.compression,g=Gg(),g?h.compression=g:delete h.compression,_?.dictionary?.toString()===g?.dictionary?.toString()&&(_=null,g=null)),c.put(m,h),!(p||h.indexed))continue;let R=new iY.default(!p,p);R.encoding="binary",R.compression=_;let T=n.openDB(m,R);T.decoder=null,T.decoderCopies=!1,T.encoding="binary",R.compression=g;let y=a.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(T,y,p,d)}if(i){let m=n.openDB(xT.AUDIT_STORE_NAME,Em);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,h,p,_){let g=0,R=0,T=0,y=1e7,N=null;for(;y-- >0;)try{for(let O of m.getKeys({start:N,transaction:_}))try{N=O;let{value:F,version:Z}=m.getEntry(O,{transaction:_});if(F?.length<14&&p){T++;continue}l=h.put(O,F,p?Z:void 0),g++,_.openTimer&&(_.openTimer=0),R+=(O?.length||10)+F.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"delete records,",R,"bytes"),u=0)}catch(F){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,F)}console.log("finish copying, copied",g,"entries",T,"delete records,",R,"bytes");return}catch{if(typeof N=="string"){if(N==="z")return console.error("Reached end of dbi",N,"for",e,"to",t);N=N.slice(0,-2)+"z"}else if(typeof N=="number")N++;else return console.error("Unknown key type",N,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var nY,UT,Yl,TC,sY,iY,xT,oY,RC,lc,AC=ce(()=>{Me();nY=require("lmdb"),UT=require("path"),Yl=require("fs-extra"),TC=w(oe()),sY=w(Nm()),iY=w(Im()),xT=w(Vt());k();Li();oY=w(Ua()),RC=w(wt()),lc=w(Q());o(Bpe,"compactOnStart");o(rY,"getTotalDBRecordCount");o(rf,"noop");o(aY,"copyDb")});var sf=M((w0e,hY)=>{"use strict";var Fpe=require("minimist"),{isMainThread:IC,parentPort:Tp,threadId:b0e}=require("worker_threads"),mt=(k(),v(W)),no=Q(),NC=ie(),FT=PT(),BT=mr(),I0e=Ot(),dY=wt(),Si=gp(),cY=$d(),{compactOnStart:Hpe}=(AC(),v(yC)),kpe=xc(),{restartWorkers:HT,onMessageByType:Gpe}=nt(),{handleHDBError:qpe,hdbErrors:$pe}=ge(),{HTTP_STATUS_CODES:Vpe}=$pe,Rp=oe(),{sendOperationToNode:lY,getThisNodeName:Kpe,monitorNodeCAs:Ype}=(is(),v(Go)),{getHDBNodeTable:N0e}=(Dl(),v(Fw));Rp.initSync();var Sp=`Restarting HarperDB. This may take up to ${mt.RESTART_TIMEOUT_MS/1e3} seconds.`,Wpe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",uY="Clustering is not enabled so cannot be restarted",zpe="Invalid service",nf,Us;hY.exports={restart:fY,restartService:wC};IC&&Gpe(mt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await wC({service:e.workerType}):fY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function fY(e){Us=Object.keys(e).length===0,nf=await Si.isServiceRegistered(mt.PROCESS_DESCRIPTORS.HDB);let t=Fpe(process.argv);if(t.service){await wC(t);return}if(Us&&!nf){console.error(Wpe);return}if(Us&&console.log(Sp),nf){Si.enterPM2Mode(),no.notify(Sp);let r=kpe(Object.keys(mt.CONFIG_PARAM_MAP),!0);return NC.isEmptyOrZeroLength(Object.keys(r))||dY.updateConfigValue(void 0,void 0,r,!0,!0),jpe(),Sp}return IC?(no.notify(Sp),Rp.get(mt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Hpe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{HT()},50)):Tp.postMessage({type:mt.ITC_EVENT_TYPES.RESTART}),Sp}o(fY,"restart");async function wC(e){let{service:t}=e;if(mt.HDB_PROCESS_SERVICES[t]===void 0)throw qpe(new Error,zpe,Vpe.BAD_REQUEST,void 0,void 0,!0);if(Si.expectedRestartOfChildren(),nf=await Si.isServiceRegistered(mt.PROCESS_DESCRIPTORS.HDB),!IC){e.replicated&&Ype(),Tp.postMessage({type:mt.ITC_EVENT_TYPES.RESTART,workerType:t}),Tp.ref(),await new Promise(s=>{Tp.on("message",i=>{i.type==="restart-complete"&&(s(),Tp.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Kpe())continue;let i;try{({job_id:i}=await lY(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let h=new Error("Timed out waiting for restart job to complete");h.replicated=n,c(h)}let m=(await lY(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let h=new Error(m.message);h.replicated=n,c(h)}},250)}))}return{replicated:n}}return}let r;switch(t){case mt.HDB_PROCESS_SERVICES.clustering:if(!Rp.get(mt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=uY;break}Us&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await mY();break;case mt.HDB_PROCESS_SERVICES.clustering_config:case mt.HDB_PROCESS_SERVICES["clustering config"]:if(!Rp.get(mt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=uY;break}Us&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Si.reloadClustering();break;case"custom_functions":case"custom functions":case mt.HDB_PROCESS_SERVICES.harperdb:case mt.HDB_PROCESS_SERVICES.http_workers:case mt.HDB_PROCESS_SERVICES.http:if(Us&&!nf){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}Us&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),Us?await Si.restart(mt.PROCESS_DESCRIPTORS.HDB):await HT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),Us&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(wC,"restartService");async function jpe(){await mY(),await Si.restart(mt.PROCESS_DESCRIPTORS.HDB),await NC.asyncSetTimeout(2e3),Rp.get(mt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await bC(),Us&&(await BT.closeConnection(),process.exit(0))}o(jpe,"restartPM2Mode");async function mY(){if(!dY.getConfigFromFile(mt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await cY.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await FT.generateNatsConfig(!0),await Si.startClusteringProcesses(),await Si.startClusteringThreads(),await bC(),Us&&await BT.closeConnection();else{await FT.generateNatsConfig(!0),nf?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Si.restart(mt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Si.restart(mt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await cY.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await NC.asyncSetTimeout(3e3),await bC(),await BT.updateLocalStreams(),Us&&await BT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=HT(mt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=HT(mt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(mY,"restartClustering");async function bC(){await FT.removeNatsConfig(mt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await FT.removeNatsConfig(mt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(bC,"removeNatsConfig")});var IY=M((P0e,bY)=>{"use strict";var C0e=require("lodash"),Fn=(k(),v(W)),{handleHDBError:pY,hdbErrors:Qpe}=ge(),{HDB_ERROR_MSGS:Jpe,HTTP_STATUS_CODES:Xpe}=Qpe,OC=Q();bY.exports={getRolePermissions:eEe};var Wl=Object.create(null),Zpe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),SY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),TY=o((e=!1,t=!1,r=!1,n=!1)=>({[Fn.PERMS_CRUD_ENUM.READ]:e,[Fn.PERMS_CRUD_ENUM.INSERT]:t,[Fn.PERMS_CRUD_ENUM.UPDATE]:r,[Fn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),CC=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...TY(t,r,n,s)}),"tablePermsTemplate"),EY=o((e,t=TY())=>({attribute_name:e,describe:AY(t),[yp]:t[yp],[PC]:t[PC],[LC]:t[LC]}),"attrPermsTemplate"),_Y=o((e,t=!1)=>({attribute_name:e,describe:t,[yp]:t}),"timestampAttrPermsTemplate"),{READ:yp,INSERT:PC,UPDATE:LC}=Fn.PERMS_CRUD_ENUM,RY=Object.values(Fn.PERMS_CRUD_ENUM),yY=[yp,PC,LC];function eEe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Fn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Wl[t]&&Wl[t].key===n)return Wl[t].perms;let s=tEe(e,r);return Wl[t]?Wl[t].key=n:Wl[t]=Zpe(n),Wl[t].perms=s,s}catch(r){if(!e[Fn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Fn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Fn.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 OC.error(n),OC.debug(r),pY(new Error,Jpe.OUTDATED_PERMS_TRANSLATION_ERROR,Xpe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
+ ${r.stack}`;throw OC.error(n),pY(new Error)}}}o(eEe,"getRolePermissions");function tEe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Fn.SYSTEM_SCHEMA_NAME]=n[Fn.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]=rEe(t[i]);return}r[i]=SY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=nEe(c,l);r[i].describe||RY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=CC()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=CC()})}),r}o(tEe,"translateRolePermissions");function rEe(e){let t=SY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CC(!0,!0,!0,!0,!0)}),t}o(rEe,"createStructureUserPermissions");function nEe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return Fn.TIME_STAMP_NAMES.includes(f)&&(m=_Y(f,d[yp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=EY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=AY(d),s.attribute_permissions.push(d),c||sEe(d,l)}else if(u!==a){let d;Fn.TIME_STAMP_NAMES.includes(u)?d=_Y(u):d=EY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=gY(s),s}else return e.describe=gY(e),e}o(nEe,"getTableAttrPerms");function gY(e){return RY.filter(t=>e[t]).length>0}o(gY,"getSchemaTableDescribePerm");function AY(e){return yY.filter(t=>e[t]).length>0}o(AY,"getAttributeDescribePerm");function sEe(e,t){yY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(sEe,"checkForHashPerms")});var Ap={};we(Ap,{authentication:()=>MY,bypassAuth:()=>mEe,login:()=>vC,logout:()=>UC,start:()=>hEe});function mEe(){DY=!0}async function MY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?lEe?cEe:[]:aEe?oEe:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=En.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Os([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return kT&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),kT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(kT){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let _ of p)if(_.startsWith(h)){let g=_.indexOf(";");l=_.slice(h.length,g===-1?_.length:g),u=await NY.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new GT.AuthAuditLog(h,p,ya.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=_,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Zs.SUCCESS?DC.notify(g):DC.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&DC.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Le.getUser(h,null,e),d(h,Zs.SUCCESS,"mTLS")):iEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=zl.get(n),!f){let h=n.indexOf(" "),p=n.slice(0,h),_=n.slice(h+1),g,R;try{switch(p){case"Basic":let T=atob(_),y=T.indexOf(":");g=T.slice(0,y),R=T.slice(y+1),f=g||R?await Le.getUser(g,R,e):null;break;case"Bearer":try{f=await pw(_)}catch(N){if(N.message==="invalid token")try{return await _S(_),c({status:-1})}catch{throw N}}break}}catch(T){return dEe&&(zl.get(_)||(zl.set(_,_),d(g,Zs.FAILURE,p))),c({status:401,body:ba({error:T.message},e)})}zl.set(n,f),uEe&&d(f.username,Zs.SUCCESS,p)}e.user=f}else u?.user?e.user=await Le.getUser(u.user,null,e):(DY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,OY.getSuperUser)());kT&&(e.session.update=function(h){let p=En.get(U.AUTHENTICATION_COOKIE_EXPIRES),_=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,CY.v4)();let g=En.get(U.AUTHENTICATION_COOKIE_DOMAINS),R=p?new Date(Date.now()+(0,MC.convertToMS)(p)).toUTCString():fEe,T=g?.find(O=>r.host?.endsWith(O)),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;T&&(N+=`; Domain=${T}`),_&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return _&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),h.id=l,NY.put(h,{expiresAt:p?Date.now()+(0,MC.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await Le.authenticateUser(h,p,e);e.session.update({user:_&&(_.getId?.()??_.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&bs.loginPath?(m.status=302,m.headers.set("Location",bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Os);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function hEe({server:e,port:t,securePort:r}){e.http(MY,t||r?{port:t,securePort:r}:{port:"all"}),wY||(wY=!0,setInterval(()=>{zl=new Map},En.get(U.AUTHENTICATION_CACHETTL)).unref(),PY.user.addListener(()=>{zl=new Map}))}async function vC(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 UC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var OY,CY,En,GT,PY,MC,LY,iEe,DC,oEe,aEe,cEe,lEe,NY,kT,DY,uEe,dEe,fEe,zl,wY,qT=ce(()=>{OY=w(ts());Dr();Fu();Td();Me();CY=require("uuid"),En=w(oe());k();GT=w(Q()),PY=w(sh());uh();MC=w(ie());Ro();LY=(0,GT.forComponent)("authentication"),{debug:iEe}=LY,DC=LY.withTag("auth-event");En.initSync();oEe=En.get(U.HTTP_CORSACCESSLIST),aEe=En.get(U.HTTP_CORS),cEe=En.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),lEe=En.get(U.OPERATIONSAPI_NETWORK_CORS),NY=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),kT=En.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,DY=process.env.AUTHENTICATION_AUTHORIZELOCAL??En.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,uEe=En.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,dEe=En.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fEe="Tue, 01 Oct 8307 19:33:20 GMT",zl=new Map;Le.onInvalidatedUser(()=>{zl=new Map});o(mEe,"bypassAuth");o(MY,"authentication");o(hEe,"start");o(vC,"login");o(UC,"logout")});var kY=M((k0e,HY)=>{"use strict";var Ne=require("joi"),vY=require("fs-extra"),UY=require("path"),ds=ut(),xY=oe(),BY=(k(),v(W)),FY=Q(),{hdbErrors:pEe}=ge(),{HDB_ERROR_MSGS:_n}=pEe,Xo=/^[a-zA-Z0-9-_]+$/,EEe=/^[a-zA-Z0-9-_]+$/;HY.exports={getDropCustomFunctionValidator:gEe,setCustomFunctionValidator:SEe,addComponentValidator:AEe,dropCustomFunctionProjectValidator:bEe,packageComponentValidator:IEe,deployComponentValidator:NEe,setComponentFileValidator:TEe,getComponentFileValidator:yEe,dropComponentFileValidator:REe,addSSHKeyValidator:wEe,updateSSHKeyValidator:OEe,deleteSSHKeyValidator:CEe,setSSHKnownHostsValidator:PEe};function $T(e,t,r){try{let n=xY.get(BY.CONFIG_PARAMS.COMPONENTSROOT),s=UY.join(n,t);return vY.existsSync(s)?e?t:r.message(_n.PROJECT_EXISTS):e?r.message(_n.NO_PROJECT):t}catch(n){return FY.error(n),r.message(_n.VALIDATION_ERR)}}o($T,"checkProjectExists");function bp(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(bp,"checkFilePath");function _Ee(e,t,r,n){try{let s=xY.get(BY.CONFIG_PARAMS.COMPONENTSROOT),i=UY.join(s,e,t,r+".js");return vY.existsSync(i)?r:n.message(_n.NO_FILE)}catch(s){return FY.error(s),n.message(_n.VALIDATION_ERR)}}o(_Ee,"checkFileExists");function gEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Xo).custom(_Ee.bind(null,e.project,e.type)).custom(bp).required().messages({"string.pattern.base":_n.BAD_FILE_NAME})});return ds.validateBySchema(e,t)}o(gEe,"getDropCustomFunctionValidator");function SEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(bp).required(),function_content:Ne.string().required()});return ds.validateBySchema(e,t)}o(SEe,"setCustomFunctionValidator");function TEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),file:Ne.string().custom(bp).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(TEe,"setComponentFileValidator");function REe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),file:Ne.string().custom(bp).optional()});return ds.validateBySchema(e,t)}o(REe,"dropComponentFileValidator");function yEe(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(bp).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(yEe,"getComponentFileValidator");function AEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!1)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(AEe,"addComponentValidator");function bEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(bEe,"dropCustomFunctionProjectValidator");function IEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return ds.validateBySchema(e,t)}o(IEe,"packageComponentValidator");function NEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return ds.validateBySchema(e,t)}o(NEe,"deployComponentValidator");function wEe(e){let t=Ne.object({name:Ne.string().pattern(EEe).required().messages({"string.pattern.base":_n.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return ds.validateBySchema(e,t)}o(wEe,"addSSHKeyValidator");function OEe(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return ds.validateBySchema(e,t)}o(OEe,"updateSSHKeyValidator");function CEe(e){let t=Ne.object({name:Ne.string().required()});return ds.validateBySchema(e,t)}o(CEe,"deleteSSHKeyValidator");function PEe(e){let t=Ne.object({known_hosts:Ne.string().required()});return ds.validateBySchema(e,t)}o(PEe,"setSSHKnownHostsValidator")});var wp=M((q0e,KY)=>{"use strict";var VT=require("joi"),uc=require("path"),of=require("fs-extra"),{exec:LEe,spawn:DEe}=require("child_process"),MEe=require("util"),vEe=MEe.promisify(LEe),af=(k(),v(W)),{PACKAGE_ROOT:UEe}=bt(),{handleHDBError:Ip,hdbErrors:xEe}=ge(),{HTTP_STATUS_CODES:Np}=xEe,jl=oe(),BEe=ut(),dc=Q(),{once:FEe}=require("events");jl.initSync();var xC=jl.get(af.CONFIG_PARAMS.COMPONENTSROOT),GY="npm install --force --omit=dev --json",HEe=`${GY} --dry-run`,kEe=jl.get(af.CONFIG_PARAMS.ROOTPATH),KT=uc.join(kEe,"ssh");KY.exports={installModules:VEe,auditModules:KEe,installAllRootModules:GEe,uninstallRootModule:qEe,linkHarperdb:$Ee,runCommand:cf};async function GEe(e=!1,t=jl.get(af.CONFIG_PARAMS.ROOTPATH)){await YT();let r=!1,n=process.env;of.pathExistsSync(KT)&&of.readdirSync(KT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+uc.join(KT,"config")+" -o UserKnownHostsFile="+uc.join(KT,"known_hosts"),...process.env},r=!0)});try{let s=jl.get(af.CONFIG_PARAMS.ROOTPATH),i=uc.join(s,"node_modules","harperdb");of.lstatSync(i).isSymbolicLink()&&of.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&dc.error("Error removing symlink:",s)}await cf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(GEe,"installAllRootModules");async function qEe(e){await cf(`npm uninstall ${e}`,jl.get(af.CONFIG_PARAMS.ROOTPATH))}o(qEe,"uninstallRootModule");async function $Ee(){await YT(),await cf(`npm link ${UEe}`,jl.get(af.CONFIG_PARAMS.ROOTPATH))}o($Ee,"linkHarperdb");async function cf(e,t=void 0,r=process.env){dc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=DEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();dc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();dc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await FEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(cf,"runCommand");async function VEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";dc.warn(t,e.projects);let r=VY(e);if(r)throw Ip(r,r.message,Np.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?HEe:GY;await YT(),await $Y(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=uc.join(xC,u),f,m=null;try{let{stdout:h,stderr:p}=await vEe(i,{cwd:d});f=h?h.replace(`
28
28
  `,""):null,m=p?p.replace(`
29
- `,""):null}catch(h){h.stderr?a[u].npm_error=GY(h.stderr):a[u].npm_error=h.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return dc.info(`finished installModules with response ${a}`),a.warning=t,a}o($Ee,"installModules");function GY(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}o(GY,"parseNPMStdErr");async function VEe(e){dc.info(`starting auditModules for request: ${e}`);let t=$Y(e);if(t)throw Ip(t,t.message,Np.BAD_REQUEST);let{projects:r}=e;await YT(),await qY(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=uc.join(xC,a);n[a]={npm_output:null,npm_error:null};try{let l=await af("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=GY(l.stderr)}}return dc.info(`finished auditModules with response ${n}`),n}o(VEe,"auditModules");async function YT(){return await af("npm -v"),!0}o(YT,"checkNPMInstalled");async function qY(e){if(!Array.isArray(e)||e.length===0)throw Ip(new Error,"projects argument must be an array with at least 1 element",Np.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=uc.join(xC,i.toString());if(!await sf.pathExists(a)){t.push(i);continue}let l=uc.join(a,"package.json");await sf.pathExists(l)||r.push(i)}if(t.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Np.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Np.BAD_REQUEST,void 0,void 0,!0)}o(qY,"checkProjectPaths");function $Y(e){let t=VT.object({projects:VT.array().min(1).items(VT.string()).required(),dry_run:VT.boolean().default(!1)});return xEe.validateBySchema(e,t)}o($Y,"modulesValidator")});var FC=M(($0e,QY)=>{"use strict";var xs=require("fs-extra"),Cp=require("path"),Op=Q(),KY=ie(),{PACKAGE_ROOT:KEe}=Rt(),BC=(k(),v(W)),jY=oe(),YEe=bt();QY.exports=WEe;async function WEe(){let e=zEe(),t=jY.get(BC.CONFIG_PARAMS.ROOTPATH),r=Cp.join(t,"package.json"),n={dependencies:{harperdb:"file:"+KEe}},s=Cp.join(t,"node_modules");xs.ensureDirSync(s);let i,a=!0,c=!1;try{i=xs.readJsonSync(r)}catch(l){if(KY.isEmptyOrZeroLength(e))return;if(l.code!==BC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!KY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=WY(u);n.dependencies[l]=d+u}if(!a){Op.notify("Installing components"),await zY(r,n,null),await YY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=WY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(xs.statSync(new URL(u+"/package.json")).mtimeMs>xs.statSync(r).mtimeMs){c=!0;break}}catch(m){Op.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Op.notify("Removing component",l),c=!0);c&&(Op.notify("Updating components."),await zY(r,n,i),await YY(t,e))}o(WEe,"installComponents");function YY(e,t){return Promise.all(t.map(({name:r})=>{let n=Cp.join(e,"node_modules",r),s=Cp.join(e,"components",r);if(xs.existsSync(n)&&xs.lstatSync(n).isDirectory())return xs.move(n,s,{overwrite:!0}).then(()=>{xs.symlink(s,n)})}))}o(YY,"moveModuleToComponents");function zEe(){let e=YEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(zEe,"getComponentsConfig");function WY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Cp.extname(e)||xs.existsSync(e)?"file:":"github:"}o(WY,"getPkgPrefix");async function zY(e,t,r){Op.trace("npm installing components package.json",t),xs.writeFileSync(e,JSON.stringify(t,null," "));try{await wp().installAllRootModules(jY.get(BC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?xs.writeFileSync(e,JSON.stringify(r,null," ")):xs.unlinkSync(e),n}}o(zY,"installPackages")});var eW={};Oe(eW,{packageDirectory:()=>jEe});function jEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];XY.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,JY.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,ZY.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var JY,XY,ZY,tW=ue(()=>{JY=require("path"),XY=w(require("tar-fs")),ZY=require("node:zlib");o(jEe,"packageDirectory")});var GC=M(ir=>{"use strict";var Ie=require("fs-extra"),HC=require("fast-glob"),Ce=require("path"),QEe=require("tar-fs"),JEe=require("gunzip-maybe"),kC=require("normalize-path"),kn=HY(),Wt=Q(),pt=(k(),v(W)),sr=oe(),WT=bt(),XEe=ie(),{PACKAGE_ROOT:ZEe}=Rt(),{handleHDBError:zt,hdbErrors:e_e}=ge(),{basename:t_e}=require("path"),r_e=FC(),nW=oe(),{Readable:n_e}=require("stream"),{isMainThread:s_e}=require("worker_threads"),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:jt}=e_e,sW=rt(),{replicateOperation:Ti}=(is(),v(Go)),{packageDirectory:i_e}=(tW(),v(eW)),rW=wp(),o_e=Ce.join(ZEe,"application-template"),a_e=sr.get(pt.CONFIG_PARAMS.ROOTPATH),fc=Ce.join(a_e,"ssh"),Zo=Ce.join(fc,"known_hosts");function c_e(){Wt.trace("getting custom api status");let e={};try{e={port:sr.get(pt.CONFIG_PARAMS.HTTP_PORT),directory:sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw zt(new Error,jl.FUNCTION_STATUS,jt.INTERNAL_SERVER_ERROR,Wt.ERR,t)}return e}o(c_e,"customFunctionsStatus");function l_e(){Wt.trace("getting custom api endpoints");let e={},t=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT);try{HC.sync(kC(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:HC.sync(kC(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:HC.sync(kC(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw zt(new Error,jl.GET_FUNCTIONS,jt.INTERNAL_SERVER_ERROR,Wt.ERR,r)}return e}o(l_e,"getCustomFunctions");function u_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=kn.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);Wt.trace("getting custom api endpoint file content");let r=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Ce.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw zt(new Error,jl.GET_FUNCTION,jt.INTERNAL_SERVER_ERROR,Wt.ERR,c)}}o(u_e,"getCustomFunction");async function d_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=kn.setCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);Wt.trace("setting custom function file content");let r=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Ce.join(r,n,s,i+".js"),a);let c=await Ti(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw zt(new Error,jl.SET_FUNCTION,jt.INTERNAL_SERVER_ERROR,Wt.ERR,c)}}o(d_e,"setCustomFunction");async function f_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=kn.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);Wt.trace("dropping custom function file");let r=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Ce.join(r,n,s,i+".js"));let a=await Ti(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw zt(new Error,jl.DROP_FUNCTION,jt.INTERNAL_SERVER_ERROR,Wt.ERR,a)}}o(f_e,"dropCustomFunction");async function m_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=kn.addComponentValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);Wt.trace("adding component");let r=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ce.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(o_e,s);let i=await Ti(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw zt(new Error,jl.ADD_FUNCTION,jt.INTERNAL_SERVER_ERROR,Wt.ERR,s)}}o(m_e,"addComponent");async function h_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=kn.dropCustomFunctionProjectValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);Wt.trace("dropping custom function project");let r=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=sr.get(pt.CONFIG_PARAMS.APPS);if(!XEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return WT.updateConfigValue(pt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Ce.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await Ti(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw zt(new Error,jl.DROP_FUNCTION_PROJECT,jt.INTERNAL_SERVER_ERROR,Wt.ERR,i)}}o(h_e,"dropCustomFunctionProject");async function p_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=kn.packageComponentValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Wt.trace("packaging component",n);let s;try{s=await Ie.realpath(Ce.join(r,n))}catch(a){if(a.code!==pt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Ce.join(sr.get(pt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===pt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await i_e(s,e)).toString("base64");return{project:n,payload:i}}o(p_e,"packageComponent");async function E_e(e){e.project?e.project=Ce.parse(e.project).name:e.package&&(e.project=__e(e.package));let t=kn.deployComponentValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Wt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Ce.join(r,n),i="file:"+c,await Ie.emptyDir(c);let _=n_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,R)=>{_.pipe(JEe()).pipe(QEe.extract(c,{finish:T})).on("error",R)});let g=await Ie.readdir(c);g.length===1&&g[0]==="package"&&(await Ie.copy(Ce.join(c,"package"),c),await Ie.remove(Ce.join(c,"package")));let y=Ce.join(c,"node_modules");a?await rW.runCommand(a,c):Ie.existsSync(y)||await rW.installAllRootModules(!1,c)}else{await WT.addConfig(n,{package:i}),await r_e();let _=nW.get(pt.CONFIG_PARAMS.ROOTPATH);c=Ce.join(_,"node_modules",n)}if(s_e)return;let l=new Map;l.isWorker=!0;let u=(cf(),v(Pp)),d;u.setErrorReporter(_=>d=_);let f=t_e(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;Wt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await Ti(e);if(e.restart===!0)sW.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await($C(),v(qC)).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}o(E_e,"deployComponent");function __e(e){if(e.startsWith("git+ssh://"))return Ce.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Ce.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Ce.join(e,"package.json"),"utf8"));return Ce.basename(t)}catch{}return Ce.basename(e)}o(__e,"getProjectNameFromPackage");async function g_e(){let e=o(async(s,i)=>{try{let a=await Ie.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Ce.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ie.stat(u),f={name:Ce.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Wt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),{name:sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT).split(Ce.sep).slice(-1).pop(),entries:[]}),n=(cf(),v(Pp)).componentErrors;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}o(g_e,"getComponents");async function S_e(e){let t=kn.getComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let n=WT.getConfigObj()[e.project]||e.project==="harperdb"?Ce.join(nW.get(pt.CONFIG_PARAMS.ROOTPATH),"node_modules"):sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Ce.join(n,e.project,e.file));return{message:await Ie.readFile(Ce.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===pt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ce.join(e.project,e.file)}'`):i}}o(S_e,"getComponentFile");async function T_e(e){let t=kn.setComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Ce.join(sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ie.ensureFile(n),await Ie.outputFile(n,e.payload,r)):await Ie.ensureDir(n);let s=await Ti(e);return s.message="Successfully set component: "+e.file,s}o(T_e,"setComponentFile");async function R_e(e){let t=kn.dropComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Ce.join(r,n):r,i=Ce.join(sr.get(pt.CONFIG_PARAMS.COMPONENTSROOT),s),a=Ce.join(sr.get(pt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Ce.join(sr.get(pt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ie.pathExists(c)){let u=JSON.parse(await Ie.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ie.writeFile(c,JSON.stringify(u,null,2),"utf8")}WT.deleteConfigFromFile([r]);let l=await Ti(e);return e.restart===!0?(sW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(R_e,"dropComponent");async function y_e(e){let t=kn.addSSHKeyValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Wt.trace("adding ssh key",r);let c=Ce.join(fc,r+".key"),l=Ce.join(fc,"config");if(await Ie.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ie.outputFile(c,n),await Ie.chmod(c,"0600");let u=`#${r}
29
+ `,""):null}catch(h){h.stderr?a[u].npm_error=qY(h.stderr):a[u].npm_error=h.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return dc.info(`finished installModules with response ${a}`),a.warning=t,a}o(VEe,"installModules");function qY(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}o(qY,"parseNPMStdErr");async function KEe(e){dc.info(`starting auditModules for request: ${e}`);let t=VY(e);if(t)throw Ip(t,t.message,Np.BAD_REQUEST);let{projects:r}=e;await YT(),await $Y(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=uc.join(xC,a);n[a]={npm_output:null,npm_error:null};try{let l=await cf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=qY(l.stderr)}}return dc.info(`finished auditModules with response ${n}`),n}o(KEe,"auditModules");async function YT(){return await cf("npm -v"),!0}o(YT,"checkNPMInstalled");async function $Y(e){if(!Array.isArray(e)||e.length===0)throw Ip(new Error,"projects argument must be an array with at least 1 element",Np.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=uc.join(xC,i.toString());if(!await of.pathExists(a)){t.push(i);continue}let l=uc.join(a,"package.json");await of.pathExists(l)||r.push(i)}if(t.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Np.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Np.BAD_REQUEST,void 0,void 0,!0)}o($Y,"checkProjectPaths");function VY(e){let t=VT.object({projects:VT.array().min(1).items(VT.string()).required(),dry_run:VT.boolean().default(!1)});return BEe.validateBySchema(e,t)}o(VY,"modulesValidator")});var FC=M((V0e,JY)=>{"use strict";var xs=require("fs-extra"),Cp=require("path"),Op=Q(),YY=ie(),{PACKAGE_ROOT:YEe}=bt(),BC=(k(),v(W)),QY=oe(),WEe=wt();JY.exports=zEe;async function zEe(){let e=jEe(),t=QY.get(BC.CONFIG_PARAMS.ROOTPATH),r=Cp.join(t,"package.json"),n={dependencies:{harperdb:"file:"+YEe}},s=Cp.join(t,"node_modules");xs.ensureDirSync(s);let i,a=!0,c=!1;try{i=xs.readJsonSync(r)}catch(l){if(YY.isEmptyOrZeroLength(e))return;if(l.code!==BC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!YY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=zY(u);n.dependencies[l]=d+u}if(!a){Op.notify("Installing components"),await jY(r,n,null),await WY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=zY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(xs.statSync(new URL(u+"/package.json")).mtimeMs>xs.statSync(r).mtimeMs){c=!0;break}}catch(m){Op.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Op.notify("Removing component",l),c=!0);c&&(Op.notify("Updating components."),await jY(r,n,i),await WY(t,e))}o(zEe,"installComponents");function WY(e,t){return Promise.all(t.map(({name:r})=>{let n=Cp.join(e,"node_modules",r),s=Cp.join(e,"components",r);if(xs.existsSync(n)&&xs.lstatSync(n).isDirectory())return xs.move(n,s,{overwrite:!0}).then(()=>{xs.symlink(s,n)})}))}o(WY,"moveModuleToComponents");function jEe(){let e=WEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(jEe,"getComponentsConfig");function zY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Cp.extname(e)||xs.existsSync(e)?"file:":"github:"}o(zY,"getPkgPrefix");async function jY(e,t,r){Op.trace("npm installing components package.json",t),xs.writeFileSync(e,JSON.stringify(t,null," "));try{await wp().installAllRootModules(QY.get(BC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?xs.writeFileSync(e,JSON.stringify(r,null," ")):xs.unlinkSync(e),n}}o(jY,"installPackages")});var tW={};we(tW,{packageDirectory:()=>QEe});function QEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];ZY.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,XY.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,eW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var XY,ZY,eW,rW=ce(()=>{XY=require("path"),ZY=w(require("tar-fs")),eW=require("node:zlib");o(QEe,"packageDirectory")});var GC=M(ir=>{"use strict";var Ie=require("fs-extra"),HC=require("fast-glob"),Oe=require("path"),JEe=require("tar-fs"),XEe=require("gunzip-maybe"),kC=require("normalize-path"),Hn=kY(),jt=Q(),gt=(k(),v(W)),sr=oe(),WT=wt(),ZEe=ie(),{PACKAGE_ROOT:e_e}=bt(),{handleHDBError:Qt,hdbErrors:t_e}=ge(),{basename:r_e}=require("path"),n_e=FC(),sW=oe(),{Readable:s_e}=require("stream"),{isMainThread:i_e}=require("worker_threads"),{HDB_ERROR_MSGS:Ql,HTTP_STATUS_CODES:Jt}=t_e,iW=nt(),{replicateOperation:Ti}=(is(),v(Go)),{packageDirectory:o_e}=(rW(),v(tW)),nW=wp(),a_e=Oe.join(e_e,"application-template"),c_e=sr.get(gt.CONFIG_PARAMS.ROOTPATH),fc=Oe.join(c_e,"ssh"),Zo=Oe.join(fc,"known_hosts");function l_e(){jt.trace("getting custom api status");let e={};try{e={port:sr.get(gt.CONFIG_PARAMS.HTTP_PORT),directory:sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Qt(new Error,Ql.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,t)}return e}o(l_e,"customFunctionsStatus");function u_e(){jt.trace("getting custom api endpoints");let e={},t=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT);try{HC.sync(kC(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:HC.sync(kC(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:HC.sync(kC(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,Ql.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,r)}return e}o(u_e,"getCustomFunctions");function d_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Hn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("getting custom api endpoint file content");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Oe.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw Qt(new Error,Ql.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}o(d_e,"getCustomFunction");async function f_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Hn.setCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("setting custom function file content");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Oe.join(r,n,s,i+".js"),a);let c=await Ti(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,Ql.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}o(f_e,"setCustomFunction");async function m_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Hn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function file");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Oe.join(r,n,s,i+".js"));let a=await Ti(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Qt(new Error,Ql.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,a)}}o(m_e,"dropCustomFunction");async function h_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Hn.addComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("adding component");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(a_e,s);let i=await Ti(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Qt(new Error,Ql.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,s)}}o(h_e,"addComponent");async function p_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Hn.dropCustomFunctionProjectValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function project");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=sr.get(gt.CONFIG_PARAMS.APPS);if(!ZEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return WT.updateConfigValue(gt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await Ti(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Qt(new Error,Ql.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,jt.ERR,i)}}o(p_e,"dropCustomFunctionProject");async function E_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Hn.packageComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;jt.trace("packaging component",n);let s;try{s=await Ie.realpath(Oe.join(r,n))}catch(a){if(a.code!==gt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Oe.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===gt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await o_e(s,e)).toString("base64");return{project:n,payload:i}}o(E_e,"packageComponent");async function __e(e){e.project?e.project=Oe.parse(e.project).name:e.package&&(e.project=g_e(e.package));let t=Hn.deployComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(jt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Oe.join(r,n),i="file:"+c,await Ie.emptyDir(c);let _=s_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,y)=>{_.pipe(XEe()).pipe(JEe.extract(c,{finish:T})).on("error",y)});let g=await Ie.readdir(c);g.length===1&&g[0]==="package"&&(await Ie.copy(Oe.join(c,"package"),c),await Ie.remove(Oe.join(c,"package")));let R=Oe.join(c,"node_modules");a?await nW.runCommand(a,c):Ie.existsSync(R)||await nW.installAllRootModules(!1,c)}else{await WT.addConfig(n,{package:i}),await n_e();let _=sW.get(gt.CONFIG_PARAMS.ROOTPATH);c=Oe.join(_,"node_modules",n)}if(i_e)return;let l=new Map;l.isWorker=!0;let u=(lf(),v(Pp)),d;u.setErrorReporter(_=>d=_);let f=r_e(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;jt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await Ti(e);if(e.restart===!0)iW.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await($C(),v(qC)).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}o(__e,"deployComponent");function g_e(e){if(e.startsWith("git+ssh://"))return Oe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Oe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Oe.join(e,"package.json"),"utf8"));return Oe.basename(t)}catch{}return Oe.basename(e)}o(g_e,"getProjectNameFromPackage");async function S_e(){let e=o(async(s,i)=>{try{let a=await Ie.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Oe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ie.stat(u),f={name:Oe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return jt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{name:sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:[]}),n=(lf(),v(Pp)).componentErrors;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}o(S_e,"getComponents");async function T_e(e){let t=Hn.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let n=WT.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(sW.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules"):sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Oe.join(n,e.project,e.file));return{message:await Ie.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===gt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}o(T_e,"getComponentFile");async function R_e(e){let t=Hn.setComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ie.ensureFile(n),await Ie.outputFile(n,e.payload,r)):await Ie.ensureDir(n);let s=await Ti(e);return s.message="Successfully set component: "+e.file,s}o(R_e,"setComponentFile");async function y_e(e){let t=Hn.dropComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Oe.join(r,n):r,i=Oe.join(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),s),a=Oe.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Oe.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ie.pathExists(c)){let u=JSON.parse(await Ie.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ie.writeFile(c,JSON.stringify(u,null,2),"utf8")}WT.deleteConfigFromFile([r]);let l=await Ti(e);return e.restart===!0?(iW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(y_e,"dropComponent");async function A_e(e){let t=Hn.addSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;jt.trace("adding ssh key",r);let c=Oe.join(fc,r+".key"),l=Oe.join(fc,"config");if(await Ie.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ie.outputFile(c,n),await Ie.chmod(c,"0600");let u=`#${r}
31
31
  Host ${s}
32
32
  HostName ${i}
33
33
  User git
34
34
  IdentityFile ${c}
35
35
  IdentitiesOnly yes`;await Ie.pathExists(l)?await Ie.appendFile(l,`
36
36
  `+u):await Ie.outputFile(l,u);let d="";if(await Ie.pathExists(Zo)||(await Ie.writeFile(Zo,""),await Ie.chmod(Zo,"0600")),i=="github.com"&&!(await Ie.readFile(Zo,"utf8")).includes("github.com"))try{let _=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of _)Ie.appendFile(Zo,"github.com "+g+`
37
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(Zo,a);let f=await Ti(e);return f.message=`Added ssh key: ${r}${d}`,f}o(y_e,"addSSHKey");async function A_e(e){let t=kn.updateSSHKeyValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{name:r,key:n}=e;Wt.trace("updating ssh key",r);let s=Ce.join(fc,r+".key");if(!await Ie.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ie.outputFile(s,n);let i=await Ti(e);return i.message=`Updated ssh key: ${r}`,i}o(A_e,"updateSSHKey");async function b_e(e){let t=kn.deleteSSHKeyValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{name:r}=e;Wt.trace("deleting ssh key",r);let n=Ce.join(fc,r+".key"),s=Ce.join(fc,"config");if(!await Ie.pathExists(n))throw new Error("Key does not exist");let i=await Ie.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ie.outputFile(s,i),Ie.removeSync(n);let c=await Ti(e);return c.message=`Deleted ssh key: ${r}`,c}o(b_e,"deleteSSHKey");async function I_e(e){let t=[];return await Ie.pathExists(fc)&&(await Ie.readdir(fc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(I_e,"listSSHKeys");async function N_e(e){let t=kn.setSSHKnownHostsValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(Zo,r);let n=await Ti(e);return n.message="Known hosts successfully set",n}o(N_e,"setSSHKnownHosts");async function w_e(e){return await Ie.pathExists(Zo)?{known_hosts:await Ie.readFile(Zo,"utf8")}:{known_hosts:null}}o(w_e,"getSSHKnownHosts");ir.customFunctionsStatus=c_e;ir.getCustomFunctions=l_e;ir.getCustomFunction=u_e;ir.setCustomFunction=d_e;ir.dropCustomFunction=f_e;ir.addComponent=m_e;ir.dropCustomFunctionProject=h_e;ir.packageComponent=p_e;ir.deployComponent=E_e;ir.getComponents=g_e;ir.getComponentFile=S_e;ir.setComponentFile=T_e;ir.dropComponent=R_e;ir.addSSHKey=y_e;ir.updateSSHKey=A_e;ir.deleteSSHKey=b_e;ir.listSSHKeys=I_e;ir.setSSHKnownHosts=N_e;ir.getSSHKnownHosts=w_e});var VC=M((z0e,oW)=>{"use strict";var Bs=require("joi"),iW=lt();oW.exports={readTransactionLogValidator:O_e,deleteTransactionLogsBeforeValidator:C_e};function O_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),from:Bs.date().timestamp(),to:Bs.date().timestamp(),limit:Bs.number().min(1)});return iW.validateBySchema(e,t)}o(O_e,"readTransactionLogValidator");function C_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),timestamp:Bs.date().timestamp().required()});return iW.validateBySchema(e,t)}o(C_e,"deleteTransactionLogsBeforeValidator")});var QT=M((Q0e,fW)=>{"use strict";var KC=(k(),v(W)),Lp=mr(),aW=ie(),cW=oe(),lW=$i(),uW=Q(),{handleHDBError:zT,hdbErrors:P_e}=ge(),{HTTP_STATUS_CODES:jT}=P_e,{readTransactionLogValidator:L_e,deleteTransactionLogsBeforeValidator:D_e}=VC(),dW=Jn(),M_e="Logs successfully deleted from transaction log.",v_e="All logs successfully deleted from transaction log.";fW.exports={readTransactionLog:U_e,deleteTransactionLogsBefore:B_e};async function U_e(e){let t=L_e(e);if(t)throw zT(t,t.message,jT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=aW.checkSchemaTableExist(e.database,e.table);if(r)throw zT(new Error,r,jT.NOT_FOUND,void 0,void 0,!0);return cW.get(KC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await x_e(e):(uW.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)),dW.readAuditLog(e))}o(U_e,"readTransactionLog");async function*x_e(e){let t=lW.createNatsTableStreamName(e.database,e.table),r=await Lp.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===KC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(x_e,"readTransactionLogNats");async function B_e(e){let t=D_e(e);if(t)throw zT(t,t.message,jT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!cW.get(KC.CONFIG_PARAMS.CLUSTERING_ENABLED))return uW.info("Delete transaction logs called for Plexus"),dW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=aW.checkSchemaTableExist(r,n);if(i)throw zT(new Error,i,jT.NOT_FOUND,void 0,void 0,!0);let a=lW.createNatsTableStreamName(r,n),{jsm:c}=await Lp.getNATSReferences(),l=await Lp.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=M_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=v_e):f=(await Lp.viewStream(a,parseInt(s),1))[0].nats_sequence,await Lp.purgeTableStream(r,n,{seq:f}),d}o(B_e,"deleteTransactionLogsBefore")});var jC={};Oe(jC,{describeMetric:()=>gW,describeMetricOp:()=>zC,get:()=>EW,getOp:()=>YC,listMetrics:()=>_W,listMetricsOp:()=>WC});async function H_e(e){return(await yg().get(e)).hostname}function mW(e,t){return e.length===0||e.includes(t)}function YC(e){return Dp.trace?.("get_analytics request:",e),EW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function pW(e){return"conditions"in e?{...e,conditions:e.conditions.map(pW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function EW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(pW));let a=t??[];mW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),Dp.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],mW(a,"node")&&(Dp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await H_e(d)),Dp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function WC(e){return _W(e.metric_types,e.custom_metrics_window)}async function _W(e=["builtin"],t=F_e){let r=[],n=Object.values(vo);if(e.includes("builtin")&&(r=n),e.includes("custom")){let i=[{attribute:"id",comparator:"greater_than",value:Date.now()-t}],a=n.map(d=>({attribute:"metric",comparator:"not_equal",value:d}));i.push(...a);let c={select:["metric"],conditions:i},l=new Set,u=await databases.system.hdb_analytics.search(c);for await(let d of u)l.add(d.metric);r.push(...Array.from(l.values()))}return r}function zC(e){return gW(e.metric)}async function gW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Dp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var hW,F_e,Dp,QC=ue(()=>{hW=w(Q());cN();lN();F_e=1e3*60*60*24*7,Dp=(0,hW.forComponent)("analytics").conditional;o(H_e,"lookupHostname");o(mW,"isSelected");o(YC,"getOp");o(pW,"conformCondition");o(EW,"get");o(WC,"listMetricsOp");o(_W,"listMetrics");o(zC,"describeMetricOp");o(gW,"describeMetric")});var JT,XT,Mp,ZT=ue(()=>{JT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},XT=Object.keys(JT),Mp="primary"});function TW(e){return SW.validateBySchema(e,$_e)}var vp,SW,k_e,G_e,q_e,$_e,RW=ue(()=>{vp=w(require("joi")),SW=w(lt());ZT();k_e=XT,G_e=Object.entries(JT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),q_e=o(()=>{let e=vp.default.string().min(1).max(512);return Object.entries(JT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:vp.default.string().valid(...r.allowedValues).messages({"any.only":G_e[t]})}))}),e.required()},"createStatusValidationSchema"),$_e=vp.default.object({id:vp.default.string().valid(...k_e).required(),status:q_e()});o(TW,"validateStatus")});var tP={};Oe(tP,{DEFAULT_STATUS_ID:()=>Mp,STATUS_IDS:()=>XT,Status:()=>ea,clear:()=>XC,get:()=>ZC,set:()=>eP});function xp(){return JC||(JC=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),JC}function XC({id:e}){return Up.debug?.("clearStatus",e),xp().delete(e)}function K_e(){return Up.debug?.("getAllStatus"),xp().get({})}function ZC({id:e}){return e?(Up.debug?.("getStatus",e),xp().get(e)):(Up.debug?.("getStatus","all"),K_e())}function eP({status:e,id:t=Mp}){let r=TW({status:e,id:t});if(r)throw(0,eR.handleHDBError)(r,r.message,V_e.BAD_REQUEST);return Up.debug?.("setStatus",t,e),xp().put(t,{status:e})}var eR,yW,V_e,JC,ea,Up,Bp=ue(()=>{De();eR=w(ge()),yW=w(ei());RW();ZT();ZT();({HTTP_STATUS_CODES:V_e}=eR.hdbErrors);o(xp,"getStatusTable");ea={get primaryStore(){return xp().primaryStore}},Up=(0,yW.loggerWithTag)("status");o(XC,"clearStatus");o(K_e,"getAllStatus");o(ZC,"getStatus");o(eP,"setStatus")});var bW=M((hxe,AW)=>{"use strict";var rP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};AW.exports=rP});var NW=M((Exe,IW)=>{"use strict";var nP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};IW.exports=nP});var iP=M((gxe,OW)=>{"use strict";var wW=bW(),Y_e=NW(),{HDB_ERROR_MSGS:W_e}=rn(),sP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=W_e.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new wW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Y_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new wW(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};OW.exports=sP});var sR=M((Txe,KW)=>{"use strict";var oP=Mn(),tR=on(),Fs=ep(),kp=Ua(),aP=pl(),z_e=uO(),j_e=DV(),Gp=ts(),rR=Oh(),wr=Q(),Q_e=pO(),J_e=pT(),X_e=qO(),Z_e=_T(),ege=KO(),tge=YO(),rge=jO(),nge=JO(),cP=yT(),ta=ie(),sge=uK(),lP=uC(),LW=nf(),Sn=(k(),v(W)),DW=bY(),ige=qd(),MW=(Sd(),v(vh)),vW=(qT(),v(Ap)),UW=bt(),Er=GC(),oge=require("alasql"),xW=QT(),BW=wp(),lf=as(),FW=(Vd(),v($d)),uP=(QC(),v(jC)),dP=(Bp(),v(tP)),HW=iP(),{handleHDBError:Gn,hdbErrors:kW}=ge(),{HDB_ERROR_MSGS:Xr,HTTP_STATUS_CODES:Fp}=kW,{cleanupOrphanBlobs:age}=ep(),X=new Map,GW="delete",mc="insert",Hs="read",Ql="update",Hp="describe",CW=kp.describeSchema.name,PW=kp.describeTable.name,qW={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},cge={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},lge="catchup",uge="handleGetJob",dge="handleGetJobsByStartDate",nR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},fge=[Fs.createTable.name,Fs.createAttribute.name,Fs.dropTable.name,Fs.dropAttribute.name],$W={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},te=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};X.set(oP.insert.name,new te(!1,[mc]));X.set(oP.update.name,new te(!1,[Ql]));X.set(oP.upsert.name,new te(!1,[mc,Ql]));X.set(tR.searchByConditions.name,new te(!1,[Hs]));X.set(tR.searchByHash.name,new te(!1,[Hs]));X.set(tR.searchByValue.name,new te(!1,[Hs]));X.set(tR.search.name,new te(!1,[Hs]));X.set(Fs.createSchema.name,new te(!0,[]));X.set(Fs.createTable.name,new te(!0,[]));X.set(Fs.createAttribute.name,new te(!1,[mc]));X.set(Fs.dropSchema.name,new te(!0,[]));X.set(Fs.dropTable.name,new te(!0,[]));X.set(Fs.dropAttribute.name,new te(!0,[]));X.set(kp.describeSchema.name,new te(!1,[Hs]));X.set(kp.describeTable.name,new te(!1,[Hs]));X.set(aP.deleteRecord.name,new te(!1,[GW]));X.set(Gp.addUser.name,new te(!0,[]));X.set(Gp.alterUser.name,new te(!0,[]));X.set(Gp.dropUser.name,new te(!0,[]));X.set(Gp.listUsersExternal.name,new te(!0,[]));X.set(rR.listRoles.name,new te(!0,[]));X.set(rR.addRole.name,new te(!0,[]));X.set(rR.alterRole.name,new te(!0,[]));X.set(rR.dropRole.name,new te(!0,[]));X.set(Q_e.name,new te(!0,[]));X.set(J_e.name,new te(!0,[]));X.set(X_e.name,new te(!0,[]));X.set(Z_e.name,new te(!0,[]));X.set(ege.name,new te(!0,[]));X.set(tge.name,new te(!0,[]));X.set(cP.setRoutes.name,new te(!0,[]));X.set(cP.getRoutes.name,new te(!0,[]));X.set(cP.deleteRoutes.name,new te(!0,[]));X.set(UW.setConfiguration.name,new te(!0,[]));X.set(rge.clusterStatus.name,new te(!0,[]));X.set(nge.name,new te(!0,[]));X.set(lP.getFingerprint.name,new te(!0,[]));X.set(lP.setLicense.name,new te(!0,[]));X.set(aP.deleteFilesBefore.name,new te(!0,[]));X.set(aP.deleteAuditLogsBefore.name,new te(!0,[]));X.set(LW.restart.name,new te(!0,[]));X.set(LW.restartService.name,new te(!0,[]));X.set(z_e.name,new te(!0,[]));X.set(j_e.name,new te(!0,[Hs]));X.set(age.name,new te(!0,[]));X.set(ige.systemInformation.name,new te(!0,[]));X.set(UW.getConfiguration.name,new te(!0,[]));X.set(xW.readTransactionLog.name,new te(!0,[]));X.set(xW.deleteTransactionLogsBefore.name,new te(!0,[]));X.set(BW.installModules.name,new te(!0,[]));X.set(BW.auditModules.name,new te(!0,[]));X.set(lf.createCsr.name,new te(!0,[]));X.set(lf.signCertificate.name,new te(!0,[]));X.set(lf.listCertificates.name,new te(!0,[]));X.set(lf.addCertificate.name,new te(!0,[]));X.set(lf.removeCertificate.name,new te(!0,[]));X.set(lf.getKey.name,new te(!0,[]));X.set(FW.addNodeBack.name,new te(!0,[]));X.set(FW.removeNodeBack.name,new te(!0,[]));X.set(uP.getOp.name,new te(!1,[Hs]));X.set(uP.listMetricsOp.name,new te(!1,[Hs]));X.set(uP.describeMetricOp.name,new te(!1,[Hs]));X.set(dP.clear.name,new te(!0,[]));X.set(dP.get.name,new te(!0,[]));X.set(dP.set.name,new te(!0,[]));X.set(MW.createTokens.name,new te(!1,[]));X.set(MW.refreshOperationToken.name,new te(!1,[]));X.set(vW.login.name,new te(!1,[]));X.set(vW.logout.name,new te(!1,[]));X.set(Er.customFunctionsStatus.name,new te(!0,[]));X.set(Er.getCustomFunctions.name,new te(!0,[]));X.set(Er.getComponents.name,new te(!0,[]));X.set(Er.getComponentFile.name,new te(!0,[]));X.set(Er.setComponentFile.name,new te(!0,[]));X.set(Er.dropComponent.name,new te(!0,[]));X.set(Er.getCustomFunction.name,new te(!0,[]));X.set(Er.setCustomFunction.name,new te(!0,[]));X.set(Er.dropCustomFunction.name,new te(!0,[]));X.set(Er.addComponent.name,new te(!0,[]));X.set(Er.dropCustomFunctionProject.name,new te(!0,[]));X.set(Er.packageComponent.name,new te(!0,[]));X.set(Er.deployComponent.name,new te(!0,[]));X.set(Er.addSSHKey.name,new te(!0,[]));X.set(Er.updateSSHKey.name,new te(!0,[]));X.set(Er.deleteSSHKey.name,new te(!0,[]));X.set(Er.listSSHKeys.name,new te(!0,[]));X.set(Er.setSSHKnownHosts.name,new te(!0,[]));X.set(Er.getSSHKnownHosts.name,new te(!0,[]));X.set(lP.getRegistrationInfo.name,new te(!1,[]));X.set(Gp.userInfo.name,new te(!1,[]));X.set(kp.describeAll.name,new te(!1,[]));X.set(uge,new te(!1,[]));X.set(dge,new te(!0,[]));X.set(lge,new te(!0,[]));X.set(nR.CSV_DATA_LOAD,new te(!1,[mc,Ql]));X.set(nR.CSV_URL_LOAD,new te(!1,[mc,Ql]));X.set(nR.CSV_FILE_LOAD,new te(!1,[mc,Ql]));X.set(nR.IMPORT_FROM_S3,new te(!1,[mc,Ql]));X.set($W.EXPORT_TO_S3,new te(!0,[]));X.set($W.EXPORT_LOCAL,new te(!0,[]));X.set(Sn.VALID_SQL_OPS_ENUM.DELETE,new te(!1,[GW]));X.set(Sn.VALID_SQL_OPS_ENUM.SELECT,new te(!1,[Hs]));X.set(Sn.VALID_SQL_OPS_ENUM.INSERT,new te(!1,[mc]));X.set(Sn.VALID_SQL_OPS_ENUM.UPDATE,new te(!1,[Ql]));KW.exports={verifyPerms:hge,verifyPermsAst:mge,verifyBulkLoadAttributePerms:Ege};function mge(e,t,r){if(ta.isEmptyOrZeroLength(e))throw wr.info("verify_perms_ast has an empty user parameter"),Gn(new Error);if(ta.isEmptyOrZeroLength(t))throw wr.info("verify_perms_ast has an empty user parameter"),Gn(new Error);if(ta.isEmptyOrZeroLength(r))throw wr.info("verify_perms_ast has a null operation parameter"),Gn(new Error);try{let n=new HW,s=new sge(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw wr.info("No schemas defined in verifyPermsAst(), will not continue."),Gn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&qW[r])throw Gn(new Error,Xr.DROP_SYSTEM,Fp.FORBIDDEN);if(c&&!l)return null;let u=DW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof oge.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=VW(t,r,a,n);return d||(a.forEach((f,m)=>{for(let h=0;h<f.length;h++){let p=s.getAttributesBySchemaTableName(m,f[h]),_=mP(t.role.permission,m,f[h]);fP(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw Gn(n)}}o(mge,"verifyPermsAst");function hge(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw wr.info("null required parameter in verifyPerms"),Gn(new Error,Xr.DEFAULT_INVALID_REQUEST,Fp.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new HW;if(ta.isEmptyOrZeroLength(e.hdb_user?.role)||ta.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return wr.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,d=a.has(Sn.SYSTEM_SCHEMA_NAME)||s===Sn.SYSTEM_SCHEMA_NAME;if(l&&d&&cge[e.operation]&&(i===Sn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Sn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&qW[r])throw Gn(new Error,Xr.DROP_SYSTEM,Fp.FORBIDDEN);if(l&&!d||u===!0&&(r===Fs.createSchema.name||r===Fs.dropSchema.name))return null;if(fge.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=DW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===CW||r===PW)&&!f.super_user){if(s===Sn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Xr.SCHEMA_PERM_ERROR(s));if(r===CW&&(!f[s]||!f[s][Hp]))return c.handleInvalidItem(Xr.SCHEMA_NOT_FOUND(s));if(r===PW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Hp]))return c.handleInvalidItem(Xr.TABLE_NOT_FOUND(s,i))}let m=VW(e.hdb_user,r,a,c,n);if(m)return m;if(X.get(r)&&X.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Sn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[Sn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[Sn.PERMS_CRUD_ENUM.READ]).forEach(T=>{_.push(T.attribute_name)}):_=global.hdb_schema[s][i].attributes.map(y=>y.attribute),e.get_attributes=_)}let h=pge(e),p=mP(e.hdb_user?.role?.permission,s,i);return fP(h,p,r,i,s,c,n),c.getPermsResponse()}o(hge,"verifyPerms");function VW(e,t,r,n,s){if(ta.arrayHasEmptyValues([e,t,r]))throw wr.info("hasPermissions has an invalid parameter"),Gn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||X.get(t).requires_su))return null;if(!X.get(t))throw wr.info(`operation ${t} not found.`),Gn(new Error,Xr.OP_NOT_FOUND(t),Fp.BAD_REQUEST);if(X.get(t)&&X.get(t).requires_su)return wr.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&&!a[l]||a[l][Hp]===!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 d of u){let f=a[l].tables[d];if(!f||f[Hp]===!1)n.addInvalidItem(Xr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=X.get(t).perms;!ta.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(wr.info(`Required ${_} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(_))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let h=Xr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw wr.error(h),wr.error(m),Gn(kW.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(VW,"hasPermissions");function fP(e,t,r,n,s,i,a){if(!e||!t)throw wr.info("no attributes specified in checkAttributePerms."),Gn(new Error);let c=X.get(r).perms;if(!c||c==="")throw wr.info(`no permissions found for ${r} in checkAttributePerms().`),Gn(new Error);if(ta.isEmptyOrZeroLength(t))return wr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Hp]===!1){i.addInvalidItem(Xr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Sn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Hs)throw Gn(new Error,Xr.SYSTEM_TIMESTAMP_PERMS_ERR,Fp.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(Xr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(fP,"checkAttributePerms");function pge(e){let t=new Set;try{if(e.action)return t;if(e.operation===Sn.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){wr.info(r)}return t}o(pge,"getRecordAttributes");function mP(e,t,r){let n=new Map;if(ta.isEmpty(e))return wr.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{wr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(mP,"getAttributePermissions");function Ege(e,t,r,n,s,i,a){let c=new Set(i),l=mP(e,n,s);fP(c,l,t,s,n,a,r)}o(Ege,"verifyBulkLoadAttributePerms")});var oR=M((yxe,QW)=>{"use strict";QW.exports={evaluateSQL:Cge,processAST:jW,convertSQLToAST:zW,checkASTPermissions:WW};var _ge=Mn(),YW=require("util"),gge=YW.callbackify(_ge.insert),Sge=on().search,Tge=Aq().update,Rge=YW.callbackify(Tge),yge=Iq().convertDelete,hc=require("alasql"),Age=sR(),iR=Q(),bge=rg(),Ige=ie(),qp=(k(),v(W)),{hdbErrors:Nge,handleHDBError:hP}=ge(),{HTTP_STATUS_CODES:pP}=Nge;bge(hc);var wge=403,Oge="There was a problem performing this insert. Please check the logs and try again.",EP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Cge(e,t){let r=e.parsed_sql_object;if(!r){r=zW(e.sql);let n,s=r.ast.statements[0];if(s instanceof hc.yy.Insert?n=s.into.databaseid:s instanceof hc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof hc.yy.Update||s instanceof hc.yy.Delete?n=s.table.databaseid:iR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof hc.yy.Select)&&Ige.isEmptyOrZeroLength(n))return t("No schema specified",null)}jW(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Cge,"evaluateSQL");function WW(e,t){let r;try{r=Age.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(WW,"checkASTPermissions");function zW(e){let t=new EP;if(!e)throw hP(new Error,"The 'sql' parameter is missing from the request body",pP.BAD_REQUEST);try{let r=e.trim(),n=hc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
38
- `);throw n[1]?hP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,pP.BAD_REQUEST):hP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",pP.BAD_REQUEST)}return t}o(zW,"convertSQLToAST");function jW(e,t,r){try{let n=Pge;if(!e.bypass_auth&&!t.permissions_checked){let i=WW(e,t);if(i&&i.length>0)return r(wge,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case qp.VALID_SQL_OPS_ENUM.SELECT:n=Sge,s=t.ast.statements[0];break;case qp.VALID_SQL_OPS_ENUM.INSERT:n=Lge;break;case qp.VALID_SQL_OPS_ENUM.UPDATE:n=Rge;break;case qp.VALID_SQL_OPS_ENUM.DELETE:n=yge;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(jW,"processAST");function Pge(e,t){iR.info(e),t("unknown sql statement")}o(Pge,"nullFunction");function Lge({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=Dge(i,e.values)}catch(a){return r(a)}gge(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){iR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Lge,"convertInsert");function Dge(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=hc.compile(`SELECT ${s.toString()} AS [${qp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iR.error(r),new Error(Oge)}}o(Dge,"createDataObjects")});var yP=M((Nxe,ez)=>{var uR=require("clone"),dR=lt(),Mge=ie(),cR=(k(),v(W)),bxe=Q(),_P=require("fs"),SP=require("joi"),{string:lR}=SP.types(),{hdbErrors:vge,handleHDBError:aR}=ge(),{HDB_ERROR_MSGS:Ixe,HTTP_STATUS_CODES:gP}=vge,{commonValidators:uf}=Hi(),JW=" is required",Uge=["insert","update","upsert"],TP={database:{presence:!1,format:uf.schema_format,length:uf.schema_length},schema:{presence:!1,format:uf.schema_format,length:uf.schema_length},table:{presence:!0,format:uf.schema_format,length:uf.schema_length},action:{inclusion:{within:Uge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},xge={schema:lR.required(),table:lR.required(),action:lR.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Bge,AWS_SECRET:Fge,AWS_BUCKET:Hge,AWS_FILE_KEY:kge,REGION:Gge}=cR.S3_BUCKET_AUTH_KEYS,qge={s3:{presence:!0},[`s3.${Bge}`]:{presence:!0,type:"String"},[`s3.${Fge}`]:{presence:!0,type:"String"},[`s3.${Hge}`]:{presence:!0,type:"String"},[`s3.${kge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Gge}`]:{presence:!0,type:"String"}},XW=uR(TP);XW.data.presence={message:JW};var ZW=uR(TP);ZW.file_path.presence={message:JW};var $ge=Object.assign(uR(TP),qge),RP=uR(xge);RP.csv_url=lR.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();RP.passthrough_headers=SP.object();function Vge(e){let t=dR.validateObject(e,XW);return fR(e,t)}o(Vge,"dataObject");function Kge(e){let t=dR.validateBySchema(e,SP.object(RP));return fR(e,t)}o(Kge,"urlObject");function Yge(e){let t=dR.validateObject(e,ZW);return fR(e,t)}o(Yge,"fileObject");function Wge(e){let t=dR.validateObject(e,$ge);return fR(e,t)}o(Wge,"s3FileObject");function fR(e,t){if(!t){let r=Mge.checkGlobalSchemaTable(e.schema,e.table);if(r)return aR(new Error,r,gP.BAD_REQUEST);if(e.operation===cR.OPERATIONS_ENUM.CSV_FILE_LOAD)try{_P.accessSync(e.file_path,_P.constants.R_OK|_P.constants.F_OK)}catch(n){return n.code===cR.NODE_ERROR_CODES.ENOENT?aR(n,`No such file or directory ${n.path}`,gP.BAD_REQUEST):n.code===cR.NODE_ERROR_CODES.EACCES?aR(n,`Permission denied ${n.path}`,gP.BAD_REQUEST):aR(n)}}return t}o(fR,"postValidateChecks");ez.exports={dataObject:Vge,urlObject:Kge,fileObject:Yge,s3FileObject:Wge}});var AP=M((Oxe,tz)=>{"use strict";var $p=Q(),mR=(k(),v(W));async function zge(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===mR.OPERATIONS_ENUM.INSERT||t.operation===mR.OPERATIONS_ENUM.UPDATE||t.operation===mR.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===mR.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?($p.info(i.message),i):i.http_resp_msg?($p.error(`Error calling operation: ${e.name}`),$p.error(i.http_resp_msg),i):($p.error(`Error calling operation: ${e.name}`),$p.error(i),i)}}o(zge,"callOperationFunctionAsAwait");tz.exports={callOperationFunctionAsAwait:zge}});var bP=M((Pxe,nz)=>{"use strict";var{S3:jge,GetObjectCommand:Qge}=require("@aws-sdk/client-s3");nz.exports={getFileStreamFromS3:Jge,getS3AuthObj:rz};async function Jge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await rz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Qge(r))).Body}o(Jge,"getFileStreamFromS3");function rz(e,t,r){return new jge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(rz,"getS3AuthObj")});var iz=M((Dxe,sz)=>{"use strict";var IP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},NP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};sz.exports={BulkLoadFileObject:IP,BulkLoadDataObject:NP}});var OP=M((vxe,oz)=>{"use strict";var wP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};oz.exports=wP});var vP=M((kxe,Az)=>{"use strict";var hR=Mn(),ER=yP(),Xge=require("needle"),Ri=(k(),v(W)),xxe=It(),df=ie(),{handleHDBError:Qt,hdbErrors:pz}=ge(),{HTTP_STATUS_CODES:Zr,HDB_ERROR_MSGS:Or,CHECK_LOGS_WRAPPER:Xl}=pz,ff=Q(),CP=require("papaparse");df.promisifyPapaParse();var yi=require("fs-extra"),Zge=require("path"),{chain:az}=require("stream-chain"),cz=require("stream-json/streamers/StreamArray"),lz=require("stream-json/utils/Batch"),uz=require("stream-chain/utils/comp"),{finished:dz}=require("stream"),eSe=oe(),Ez=AP(),tSe=bP(),{BulkLoadFileObject:LP,BulkLoadDataObject:rSe}=iz(),DP=iP(),{verifyBulkLoadAttributePerms:_z}=sR(),Bxe=OP(),Fxe=mr(),Hxe=$i(),{databases:nSe}=(De(),v(mt)),{coerceType:sSe}=(w_(),v(lk)),fz="No records parsed from csv file.",Jl=`${eSe.get("HDB_ROOT")}/tmp`,{schemaRegex:iSe}=Hi(),mz=1024*1024*2,hz=5e3,oSe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Az.exports={csvDataLoad:aSe,csvURLLoad:cSe,csvFileLoad:lSe,importFromS3:uSe};async function aSe(e,t){let r=ER.dataObject(e);if(r)throw Qt(r,r.message,Zr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Tz(e.schema,e.table),i=CP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:PP.bind(null,s),dynamicTyping:!1}),a=new DP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&_z(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Qt(new Error,c,Zr.BAD_REQUEST,void 0,void 0,!0);let l=new rSe(e.action,e.schema,e.table,i.data);return n=await Ez.callOperationFunctionAsAwait(Rz,l,null),n.message===fz?fz:yz(n.records,n.number_written)}catch(s){throw Zl(s)}}o(aSe,"csvDataLoad");async function cSe(e){let t=ER.urlObject(e);if(t)throw Qt(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Jl}/${r}`;try{await dSe(e,r)}catch(s){throw ff.error(Or.DOWNLOAD_FILE_ERR(r)+" - "+s),Qt(s,Xl(Or.DOWNLOAD_FILE_ERR(r)))}try{let s=new LP(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 MP(s);return await pR(n),i}catch(s){throw await pR(n),Zl(s)}}o(cSe,"csvURLLoad");async function lSe(e){let t=ER.fileObject(e);if(t)throw Qt(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);let r=new LP(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 MP(r)}catch(n){throw Zl(n)}}o(lSe,"csvFileLoad");async function uSe(e){let t=ER.s3FileObject(e);if(t)throw Qt(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Zge.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Jl}/${s}`;let i=new LP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await fSe(s,e);let a=await MP(i);return await pR(r),a}catch(n){throw await pR(r),Zl(n)}}o(uSe,"importFromS3");async function dSe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Xge("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)}hSe(r,e.csv_url),await mSe(t,r.raw)}o(dSe,"downloadCSVFile");async function fSe(e,t){try{let r=`${Jl}/${e}`;await yi.mkdirp(Jl),await yi.writeFile(`${Jl}/${e}`,"",{flag:"a+"});let n=await yi.createWriteStream(r),s=await tSe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){ff.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ff.error(Or.S3_DOWNLOAD_ERR+" - "+r),Qt(r,Xl(Or.S3_DOWNLOAD_ERR))}}o(fSe,"downloadFileFromS3");async function mSe(e,t){try{await yi.mkdirp(Jl),await yi.writeFile(`${Jl}/${e}`,t)}catch(r){throw ff.error(Or.WRITE_TEMP_FILE_ERR),Qt(r,Xl(Or.DEFAULT_BULK_LOAD_ERR))}}o(mSe,"writeFileToTempFolder");async function pR(e){if(e)try{await yi.access(e),await yi.unlink(e)}catch{ff.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(pR,"deleteTempFile");function hSe(e,t){if(e.statusCode!==pz.HTTP_STATUS_CODES.OK)throw Qt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Zr.BAD_REQUEST);if(!oSe[e.headers["content-type"]])throw Qt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Zr.BAD_REQUEST);if(!e.raw)throw Qt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Zr.BAD_REQUEST)}o(hSe,"validateURLResponse");async function MP(e){try{let t;switch(e.file_type){case Ri.VALID_S3_FILE_TYPES.CSV:t=await pSe(e);break;case Ri.VALID_S3_FILE_TYPES.JSON:t=await ESe(e);break;default:throw Qt(new Error,Or.DEFAULT_BULK_LOAD_ERR,Zr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,Or.INVALID_FILE_EXT_ERR(e))}return yz(t.records,t.number_written)}catch(t){throw Zl(t)}}o(MP,"fileLoad");async function gz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await hR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&_z(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Qt(c);r(l)}}o(gz,"validateChunk");async function Sz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;df.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!df.isEmpty(c)&&!df.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await Ez.callOperationFunctionAsAwait(Rz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Qt(c,Xl(Or.INSERT_CSV_ERR),Zr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,Or.INSERT_CSV_ERR+" - "+c);r(l)}}o(Sz,"insertChunk");async function pSe(e){let t={records:0,number_written:0},r=Tz(e.schema,e.table);try{let n=new DP,s=yi.createReadStream(e.file_path,{highWaterMark:mz});s.setEncoding("utf8"),await CP.parsePromise(s,gz.bind(null,e,n),PP.bind(null,r));let i=n.getPermsResponse();if(i)throw Qt(new Error,i,Zr.BAD_REQUEST);return s=yi.createReadStream(e.file_path,{highWaterMark:mz}),s.setEncoding("utf8"),await CP.parsePromise(s,Sz.bind(null,e,t),PP.bind(null,r)),s.destroy(),t}catch(n){throw Qt(n,Xl(Or.PAPA_PARSE_ERR),Zr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,Or.PAPA_PARSE_ERR+n)}}o(pSe,"callPapaParse");function Tz(e,t){let r=nSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>sSe(i,s));return n}o(Tz,"createTransformMap");function PP(e,t,r){let n=e.get(r);return n?n(t):df.autoCast(t)}o(PP,"typeFunction");async function ESe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new DP,s=az([yi.createReadStream(e.file_path,{encoding:"utf-8"}),cz.withParser(),c=>c.value,new lz({batchSize:hz}),uz(async c=>{await gz(e,n,r,c)})]);await new Promise((c,l)=>{dz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Qt(new Error,i,Zr.BAD_REQUEST);let a=az([yi.createReadStream(e.file_path,{encoding:"utf-8"}),cz.withParser(),c=>c.value,new lz({batchSize:hz}),uz(async c=>{await Sz(e,t,r,c)})]);return await new Promise((c,l)=>{dz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Qt(n,Xl(Or.INSERT_JSON_ERR),Zr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,Or.INSERT_JSON_ERR+n)}}o(ESe,"insertJson");async function Rz(e){let t={};try{e.data&&e.data.length>0&&_Se(e.data[0])?t=await gSe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ff.info(t.message))}catch(r){throw Zl(r)}return t}o(Rz,"callBulkFileLoad");function _Se(e){let t=Object.keys(e);for(let r of t)if(!iSe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(_Se,"validateColumnNames");async function gSe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=hR.insert;break;case"update":i=hR.update;break;case"upsert":i=hR.upsert;break;default:throw Qt(new Error,Or.INVALID_ACTION_PARAM_ERR(n),Zr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,Or.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=df.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw Zl(a)}}o(gSe,"bulkFileLoad");function yz(e,t){return`successfully loaded ${t} of ${e} records`}o(yz,"buildResponseMsg");function Zl(e){return Qt(e,Xl(Or.DEFAULT_BULK_LOAD_ERR),Zr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,Or.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(Zl,"buildTopLevelErrMsg")});var BP=M((qxe,Lz)=>{"use strict";var xP=on(),SSe=bP(),{AsyncParser:TSe}=require("json2csv"),_R=require("stream"),fs=ie(),UP=require("fs-extra"),RSe=require("path"),ks=Q(),{promisify:Nz}=require("util"),Vp=ie(),{handleHDBError:_r,hdbErrors:ySe}=ge(),{HDB_ERROR_MSGS:qn,HTTP_STATUS_CODES:gr}=ySe,{streamAsJSON:ASe}=(EA(),v(fv)),{Upload:bSe}=require("@aws-sdk/lib-storage"),{toCsvStream:ISe}=(Ro(),v(yv)),bz=["search_by_value","search_by_hash","sql","search_by_conditions"],Iz=["json","csv"],wz="json",Oz="csv",NSe="Successfully exported JSON locally.",wSe="Successfully exported CSV locally.",OSe=1e3,CSe=xP.searchByHash,PSe=xP.searchByValue,LSe=Nz(_R.finished);Lz.exports={export_to_s3:USe,export_local:DSe};async function DSe(e){ks.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Cz(e);if(!fs.isEmpty(t))throw ks.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(fs.isEmpty(e.path))throw ks.error(qn.MISSING_VALUE("path")),_r(new Error,qn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(fs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(RSe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=fs.buildFolderPath(e.path,r);await MSe(e.path);let s=await Pz(e);return await vSe(n,e.format,s)}o(DSe,"export_local");async function MSe(e){if(ks.trace("in confirmPath"),fs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await UP.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,ks.error(n),_r(new Error,n,gr.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 ks.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(MSe,"confirmPath");async function vSe(e,t,r){if(ks.trace("in saveToLocal"),Vp.isEmptyOrZeroLength(e))throw _r(new Error,qn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmptyOrZeroLength(t))throw _r(new Error,qn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmpty(r))throw _r(new Error,qn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===wz){let n=UP.createWriteStream(e);return ASe(r).pipe(n),await LSe(n),{message:NSe,path:e}}else if(t===Oz){let n=UP.createWriteStream(e),s=_R.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new TSe(i,c).fromInput(s).toOutput(n).promise(!1),{message:wSe,path:e}}throw _r(new Error,qn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(vSe,"saveToLocal");async function USe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,qn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,qn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,qn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,qn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,qn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,qn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Cz(e);if(!fs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);ks.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Pz(e)}catch(l){throw ks.error(l),l}let n,s=await SSe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new _R.PassThrough;if(e.format===Oz){i=e.s3.key+".csv";let l=ISe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===wz){i=e.s3.key+".json";let l=new _R.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let h=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=h,f!==0&&f%OSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,qn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new bSe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(USe,"export_to_s3");function Cz(e){if(ks.trace("in exportCoreValidation"),fs.isEmpty(e.format))return"format missing";if(Iz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Iz.join(", ")}`;let t=e.search_operation.operation;if(fs.isEmpty(t))return"search_operation.operation missing";if(bz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${bz.join(", ")}`}o(Cz,"exportCoreValidation");async function Pz(e){ks.trace("in getRecords");let t,r;if(Vp.isEmpty(e.search_operation)||Vp.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,qn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=PSe;break;case"search_by_hash":t=CSe;break;case"search_by_conditions":t=xP.searchByConditions;break;case"sql":{let n=oR();t=Nz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ks.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Pz,"getRecords")});var Mz=M((Vxe,Dz)=>{"use strict";var FP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Dz.exports=FP});var xz=M((Yxe,Uz)=>{"use strict";var xSe=(k(),v(W)),vz=require("moment"),BSe=require("uuid").v4,HP=class{static{o(this,"JobObject")}constructor(){this.id=BSe(),this.type=void 0,this.start_datetime=vz().valueOf(),this.created_datetime=vz().valueOf(),this.end_datetime=void 0,this.status=xSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Uz.exports=HP});var kP=M((zxe,Vz)=>{"use strict";var FSe=require("uuid").v4,Gz=Mn(),qz=on(),HSe=ai(),kSe=Vu(),GSe=Mz(),Pt=(k(),v(W)),qSe=xz(),$Se=dS(),Ai=Q(),VSe=Zf(),mf=ie(),{promisify:KSe}=require("util"),eu=require("moment"),YSe=oR(),gR=yP(),Bz=OI(),{deleteTransactionLogsBeforeValidator:WSe}=VC(),{handleHDBError:Fz,hdbErrors:zSe,ClientError:jSe}=ge(),{HTTP_STATUS_CODES:Hz}=zSe,kz=qz.searchByValue,QSe=qz.searchByHash,JSe=Gz.insert,XSe=KSe(YSe.evaluateSQL),ZSe=Gz.update;Vz.exports={addJob:rTe,updateJob:sTe,handleGetJob:eTe,handleGetJobsByStartDate:tTe,getJobById:$z};async function eTe(e){if(e.id===void 0)throw new jSe("'id' is required");let t=await $z(e.id);return mf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(eTe,"handleGetJob");async function tTe(e){try{let t=await nTe(e);if(Ai.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=eu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=eu(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 Ai.error(r),new Error(r)}}o(tTe,"handleGetJobsByStartDate");async function rTe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||mf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ai.info(d),t.error=d,t}if(!Pt.JOB_TYPE_ENUM[e.operation])return Ai.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Pt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=gR.fileObject(e);break;case Pt.OPERATIONS_ENUM.CSV_URL_LOAD:n=gR.urlObject(e);break;case Pt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=gR.dataObject(e);break;case Pt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=gR.s3FileObject(e);break;case Pt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Pt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Bz(e,"date");break;case Pt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Bz(e,"timestamp");break;case Pt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=WSe(e);break;case Pt.OPERATIONS_ENUM.RESTART_SERVICE:if(Pt.HDB_PROCESS_SERVICES[e.service]===void 0)throw Fz(new Error,"Invalid service",Hz.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Fz(n,n.message,Hz.BAD_REQUEST,void 0,void 0,!0);let s=new qSe;s.type=e.operation===Pt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Pt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new HSe(Pt.SYSTEM_SCHEMA_NAME,Pt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await kz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=FSe();try{a=await kz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ai.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new VSe(Pt.SYSTEM_SCHEMA_NAME,Pt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await JSe(l)}catch(d){return Ai.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ai.trace(d)}return t}o(rTe,"addJob");async function nTe(e){let t=eu(e.from_date,eu.ISO_8601),r=eu(e.to_date,eu.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 GSe(n,e.hdb_user);try{return await XSe(s)}catch(i){throw Ai.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(nTe,"getJobsInDateRange");async function $z(e){if(mf.isEmptyOrZeroLength(e))return mf.errorizeMessage("Invalid job ID specified.");let t=new kSe(Pt.SYSTEM_SCHEMA_NAME,Pt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await QSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ai.error(n),mf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o($z,"getJobById");async function sTe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(mf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Pt.JOB_STATUS_ENUM.COMPLETE||e.status===Pt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=eu().valueOf());let t=new $Se(Pt.SYSTEM_SCHEMA_NAME,Pt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await ZSe(t),r}o(sTe,"updateJob")});var Xz=M((Qxe,Jz)=>{"use strict";var Kz=ie(),Cr=(k(),v(W)),iTe=require("moment"),SR=vP(),Kp=Q(),Yz=kP(),Wz=BP(),zz=pl(),jz=rt(),oTe=QT(),aTe=nf(),{parentPort:cTe,isMainThread:Qz}=require("worker_threads"),{onMessageByType:lTe}=rt(),GP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function uTe(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(Kz.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Kz.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Cr.JOB_TYPE_ENUM.csv_file_load:await so(e,SR.csvFileLoad);break;case Cr.JOB_TYPE_ENUM.csv_url_load:await so(e,SR.csvURLLoad);break;case Cr.JOB_TYPE_ENUM.csv_data_load:await so(e,SR.csvDataLoad);break;case Cr.JOB_TYPE_ENUM.import_from_s3:await so(e,SR.importFromS3);break;case Cr.JOB_TYPE_ENUM.empty_trash:break;case Cr.JOB_TYPE_ENUM.export_local:await so(e,Wz.export_local);break;case Cr.JOB_TYPE_ENUM.export_to_s3:await so(e,Wz.export_to_s3);break;case Cr.JOB_TYPE_ENUM.delete_files_before:case Cr.JOB_TYPE_ENUM.delete_records_before:await so(e,zz.deleteFilesBefore);break;case Cr.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,zz.deleteAuditLogsBefore);break;case Cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,oTe.deleteTransactionLogsBefore);break;case Cr.JOB_TYPE_ENUM.restart_service:return await so(e,aTe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(uTe,"parseMessage");async function so(e,t){try{e.job.status=Cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=iTe().valueOf(),await Yz.updateJob(e.job),await dTe(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):Kp.error(`There was an error running ${t.name} job with id ${e.job.id}`),Kp.error(n),e.job.message=n,e.job.status=Cr.JOB_STATUS_ENUM.ERROR;try{await Yz.updateJob(e.job)}catch(s){throw Kp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function dTe(e){Kp.trace("launching job thread:",e),Qz?jz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):cTe.postMessage({type:Cr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(dTe,"launchJobThread");Qz&&lTe(Cr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{jz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Cr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Kp.error(r)}});Jz.exports={parseMessage:uTe,RunnerMessage:GP}});var ej=M((Xxe,Zz)=>{"use strict";var fTe=ie(),qP=oe(),pc=(k(),v(W)),mTe=It(),hTe=mr(),io=Q(),pTe=OP(),ETe=$i();qP.initSync();Zz.exports={postOperationHandler:gTe,sendOperationTransaction:Yp};async function Yp(e,t,r,n){if(e.schema===pc.SYSTEM_SCHEMA_NAME)return;let s=_Te(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await hTe.publishToStream(`${mTe.SUBJECT_PREFIXES.TXN}.${e.schema}`,ETe.createNatsTableStreamName(e.schema,e.table),n,s))}o(Yp,"sendOperationTransaction");function _Te(e,t,r){if(fTe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(_Te,"convertCRUDOperationToTransaction");async function gTe(e,t,r){if(!qP.get(pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=qP.get(pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new pTe(t.txn_time,n,s);switch(e.operation){case pc.OPERATIONS_ENUM.INSERT:try{await Yp(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case pc.OPERATIONS_ENUM.DELETE:try{await Yp(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPDATE:try{await Yp(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPSERT:try{await Yp(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(gTe,"postOperationHandler")});var J,tj=ue(()=>{J=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var qC={};Oe(qC,{chooseOperation:()=>Tj,executeJob:()=>Gs,getOperationFunction:()=>Rj,operation:()=>JP,processLocalTransaction:()=>Sj});async function Sj(e,t){try{if(e.body.operation!=="read_log"&&(Qp.default.log_level===Vf.INFO||Qp.default.log_level===Vf.DEBUG||Qp.default.log_level===Vf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Tn.info(c)}}catch(n){Tn.error(n)}let r=await _j.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return RTe[e.body.operation]&&mj.default.setSchemaDataToGlobal(n=>{n&&Tn.error(n)}),r}function Tj(e){let t;try{t=Rj(e)}catch(s){throw Tn.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=yR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=yR.default.checkASTPermissions(e,i);if(a)throw Tn.error(`${rj.FORBIDDEN} from operation ${e.operation}`),Tn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.LOGIN&&e.operation!==$.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=fj.default.verifyPerms(i,s);if(a)throw Tn.error(`${rj.FORBIDDEN} from operation ${e.operation}`),Tn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function Rj(e){if(Tn.trace(`getOperationFunction with operation: ${e.operation}`),nj.has(e.operation))return nj.get(e.operation);throw(0,qs.handleHDBError)(new Error,qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function JP(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Tj(e);return Sj({body:e},n)}async function yTe(e){Tn.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[Jy]=!0;let a;switch(i.operation){case $.INSERT:a=await ru.default.insert(i);break;case $.UPDATE:a=await ru.default.update(i);break;case $.UPSERT:a=await ru.default.upsert(i);break;case $.DELETE:a=await Ef.default.deleteRecord(i);break;default:Tn.warn("invalid operation in catchup");break}await gj.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){Tn.info("Invalid operation in transaction"),Tn.error(a)}}async function Gs(e){(0,Ej.transformReq)(e);let t,r;try{if(r=await AR.default.addJob(e),r){t=r.createdJob,Tn.info("addJob result",r);let n=new YP.default.RunnerMessage(t,e);return{message:await YP.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Tn.error(i),(0,qs.handleHDBError)(n,i)}}function ATe(){let e=new Map;return e.set($.INSERT,new J(ru.default.insert)),e.set($.UPDATE,new J(ru.default.update)),e.set($.UPSERT,new J(ru.default.upsert)),e.set($.SEARCH_BY_CONDITIONS,new J(pf.default.searchByConditions)),e.set($.SEARCH_BY_HASH,new J(pf.default.searchByHash)),e.set($.SEARCH_BY_ID,new J(pf.default.searchByHash)),e.set($.SEARCH_BY_VALUE,new J(pf.default.searchByValue)),e.set($.SEARCH,new J(STe)),e.set($.SQL,new J(TTe)),e.set($.CSV_DATA_LOAD,new J(Gs,Wp.default.csvDataLoad)),e.set($.CSV_FILE_LOAD,new J(Gs,Wp.default.csvFileLoad)),e.set($.CSV_URL_LOAD,new J(Gs,Wp.default.csvURLLoad)),e.set($.IMPORT_FROM_S3,new J(Gs,Wp.default.importFromS3)),e.set($.CREATE_SCHEMA,new J(bi.default.createSchema)),e.set($.CREATE_DATABASE,new J(bi.default.createSchema)),e.set($.CREATE_TABLE,new J(bi.default.createTable)),e.set($.CREATE_ATTRIBUTE,new J(bi.default.createAttribute)),e.set($.DROP_SCHEMA,new J(bi.default.dropSchema)),e.set($.DROP_DATABASE,new J(bi.default.dropSchema)),e.set($.DROP_TABLE,new J(bi.default.dropTable)),e.set($.DROP_ATTRIBUTE,new J(bi.default.dropAttribute)),e.set($.DESCRIBE_SCHEMA,new J(zp.default.describeSchema)),e.set($.DESCRIBE_DATABASE,new J(zp.default.describeSchema)),e.set($.DESCRIBE_TABLE,new J(zp.default.describeTable)),e.set($.DESCRIBE_ALL,new J(zp.default.describeAll)),e.set($.DELETE,new J(Ef.default.deleteRecord)),e.set($.ADD_USER,new J(hf.default.addUser)),e.set($.ALTER_USER,new J(hf.default.alterUser)),e.set($.DROP_USER,new J(hf.default.dropUser)),e.set($.LIST_USERS,new J(hf.default.listUsersExternal)),e.set($.LIST_ROLES,new J(jp.default.listRoles)),e.set($.ADD_ROLE,new J(jp.default.addRole)),e.set($.ALTER_ROLE,new J(jp.default.alterRole)),e.set($.DROP_ROLE,new J(jp.default.dropRole)),e.set($.USER_INFO,new J(hf.default.userInfo)),e.set($.READ_LOG,new J(ij.default)),e.set($.ADD_NODE,new J(oj.default)),e.set($.UPDATE_NODE,new J($P.default)),e.set($.SET_NODE_REPLICATION,new J($P.default)),e.set($.REMOVE_NODE,new J(aj.default)),e.set($.CONFIGURE_CLUSTER,new J(cj.default)),e.set($.PURGE_STREAM,new J(lj.default)),e.set($.SET_CONFIGURATION,new J(WP.default.setConfiguration)),e.set($.CLUSTER_STATUS,new J(uj.default.clusterStatus)),e.set($.CLUSTER_NETWORK,new J(dj.default)),e.set($.CLUSTER_SET_ROUTES,new J(TR.default.setRoutes)),e.set($.CLUSTER_GET_ROUTES,new J(TR.default.getRoutes)),e.set($.CLUSTER_DELETE_ROUTES,new J(TR.default.deleteRoutes)),e.set($.EXPORT_TO_S3,new J(Gs,VP.default.export_to_s3)),e.set($.CREATE_CSR,new J(tu.default.createCsr)),e.set($.SIGN_CERTIFICATE,new J(tu.default.signCertificate)),e.set($.LIST_CERTIFICATES,new J(tu.default.listCertificates)),e.set($.ADD_CERTIFICATES,new J(tu.default.addCertificate)),e.set($.REMOVE_CERTIFICATE,new J(tu.default.removeCertificate)),e.set($.GET_KEY,new J(tu.default.getKey)),e.set($.ADD_NODE_BACK,new J(xO)),e.set($.REMOVE_NODE_BACK,new J(BO)),e.set($.DELETE_FILES_BEFORE,new J(Gs,Ef.default.deleteFilesBefore)),e.set($.DELETE_RECORDS_BEFORE,new J(Gs,Ef.default.deleteFilesBefore)),e.set($.EXPORT_LOCAL,new J(Gs,VP.default.export_local)),e.set($.SEARCH_JOBS_BY_START_DATE,new J(AR.default.handleGetJobsByStartDate)),e.set($.GET_JOB,new J(AR.default.handleGetJob)),e.set($.GET_FINGERPRINT,new J(RR.default.getFingerprint)),e.set($.SET_LICENSE,new J(RR.default.setLicense)),e.set($.GET_REGISTRATION_INFO,new J(RR.default.getRegistrationInfo)),e.set($.RESTART,new J(KP.default.restart)),e.set($.RESTART_SERVICE,new J(Gs,KP.default.restartService)),e.set($.CATCHUP,new J(yTe)),e.set($.SYSTEM_INFORMATION,new J(hj.default.systemInformation)),e.set($.DELETE_AUDIT_LOGS_BEFORE,new J(Gs,Ef.default.deleteAuditLogsBefore)),e.set($.READ_AUDIT_LOG,new J(sj.default)),e.set($.CREATE_AUTHENTICATION_TOKENS,new J(mw)),e.set($.REFRESH_OPERATION_TOKEN,new J(hw)),e.set($.LOGIN,new J(vC)),e.set($.LOGOUT,new J(UC)),e.set($.GET_CONFIGURATION,new J(WP.default.getConfiguration)),e.set($.CUSTOM_FUNCTIONS_STATUS,new J(Lt.default.customFunctionsStatus)),e.set($.GET_CUSTOM_FUNCTIONS,new J(Lt.default.getCustomFunctions)),e.set($.GET_COMPONENT_FILE,new J(Lt.default.getComponentFile)),e.set($.GET_COMPONENTS,new J(Lt.default.getComponents)),e.set($.SET_COMPONENT_FILE,new J(Lt.default.setComponentFile)),e.set($.DROP_COMPONENT,new J(Lt.default.dropComponent)),e.set($.GET_CUSTOM_FUNCTION,new J(Lt.default.getCustomFunction)),e.set($.SET_CUSTOM_FUNCTION,new J(Lt.default.setCustomFunction)),e.set($.DROP_CUSTOM_FUNCTION,new J(Lt.default.dropCustomFunction)),e.set($.ADD_CUSTOM_FUNCTION_PROJECT,new J(Lt.default.addComponent)),e.set($.ADD_COMPONENT,new J(Lt.default.addComponent)),e.set($.DROP_CUSTOM_FUNCTION_PROJECT,new J(Lt.default.dropCustomFunctionProject)),e.set($.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Lt.default.packageComponent)),e.set($.PACKAGE_COMPONENT,new J(Lt.default.packageComponent)),e.set($.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Lt.default.deployComponent)),e.set($.DEPLOY_COMPONENT,new J(Lt.default.deployComponent)),e.set($.READ_TRANSACTION_LOG,new J(zP.default.readTransactionLog)),e.set($.DELETE_TRANSACTION_LOGS_BEFORE,new J(Gs,zP.default.deleteTransactionLogsBefore)),e.set($.INSTALL_NODE_MODULES,new J(jP.default.installModules)),e.set($.AUDIT_NODE_MODULES,new J(jP.default.auditModules)),e.set($.GET_BACKUP,new J(bi.default.getBackup)),e.set($.CLEANUP_ORPHAN_BLOBS,new J(bi.default.cleanupOrphanBlobs)),e.set($.ADD_SSH_KEY,new J(Lt.default.addSSHKey)),e.set($.UPDATE_SSH_KEY,new J(Lt.default.updateSSHKey)),e.set($.DELETE_SSH_KEY,new J(Lt.default.deleteSSHKey)),e.set($.LIST_SSH_KEYS,new J(Lt.default.listSSHKeys)),e.set($.SET_SSH_KNOWN_HOSTS,new J(Lt.default.setSSHKnownHosts)),e.set($.GET_SSH_KNOWN_HOSTS,new J(Lt.default.getSSHKnownHosts)),e.set($.GET_ANALYTICS,new J(YC)),e.set($.LIST_METRICS,new J(WC)),e.set($.DESCRIBE_METRIC,new J(zC)),e.set($.GET_STATUS,new J(ZC)),e.set($.SET_STATUS,new J(eP)),e.set($.CLEAR_STATUS,new J(XC)),e}var pf,yR,Wp,bi,zp,Ef,sj,hf,jp,Lt,Qp,ij,oj,$P,aj,cj,lj,uj,dj,TR,VP,fj,AR,qs,RR,KP,QP,ru,mj,hj,YP,WP,zP,jP,pj,Ej,tu,_j,gj,rj,Tn,STe,TTe,RTe,nj,$C=ue(()=>{pf=w(on()),yR=w(oR()),Wp=w(vP()),bi=w(ep()),zp=w(Ua()),Ef=w(pl()),sj=w(uO()),hf=w(ts()),jp=w(Oh()),Lt=w(GC()),Qp=w(Q()),ij=w(pO()),oj=w(pT()),$P=w(qO()),aj=w(_T()),cj=w(KO()),lj=w(YO()),uj=w(jO()),dj=w(JO()),TR=w(yT()),VP=w(BP()),fj=w(sR()),AR=w(kP());k();qs=w(ge()),RR=w(uC()),KP=w(nf()),QP=w(require("util")),ru=w(Mn()),mj=w(ii()),hj=w(qd()),YP=w(Xz());Sd();qT();WP=w(bt()),zP=w(QT()),jP=w(wp()),pj=w(Xs()),Ej=w(ie());Mr();tu=w(as());Vd();QC();_j=w(AP()),gj=w(ej());Bp();tj();({HTTP_STATUS_CODES:rj}=qs.hdbErrors),Tn=Qp.default.loggerWithTag("operation"),STe=QP.promisify(pf.default.search),TTe=QP.promisify(yR.default.evaluateSQL),RTe={[$.CREATE_ATTRIBUTE]:!0,[$.CREATE_TABLE]:!0,[$.CREATE_SCHEMA]:!0,[$.DROP_ATTRIBUTE]:!0,[$.DROP_TABLE]:!0,[$.DROP_SCHEMA]:!0};o(Sj,"processLocalTransaction");nj=ATe();Le.operation=JP;o(Tj,"chooseOperation");o(Rj,"getOperationFunction");(0,pj._assignPackageExport)("operation",JP);o(JP,"operation");o(yTe,"catchup");o(Gs,"executeJob");o(ATe,"initializeOperationFunctionMap")});var NR=M((iBe,bj)=>{"use strict";var bR=(k(),v(W)),bTe=ie(),Jp=Q(),{handleHDBError:XP,hdbErrors:IR}=ge(),{isMainThread:ITe}=require("worker_threads"),{Readable:NTe}=require("stream"),yj=require("os"),wTe=require("util"),OTe=Ew(),CTe=wTe.promisify(OTe.authorize),Aj=($C(),v(qC)),{createGzip:PTe,constants:LTe}=require("zlib"),DTe=[bR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,bR.OPERATIONS_ENUM.LOGIN,bR.OPERATIONS_ENUM.LOGOUT];function MTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${yj.EOL}Stack: ${e.stack} ${yj.EOL}Terminating ${ITe?"HDB":"thread"}.`;console.error(t),Jp.fatal(t),process.exit(1)}o(MTe,"handleServerUncaughtException");function vTe(e,t,r){if(Jp[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:IR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(vTe,"serverErrorHandler");function UTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=XP(new Error,"Invalid JSON.",IR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(bTe.isEmpty(e.body.operation)){let n=XP(new Error,"Request body must include an 'operation' property.",IR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(UTe,"reqBodyValidationHandler");function xTe(e,t,r){let n;!DTe.includes(e.body.operation)||e.body.operation===bR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?CTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Jp.warn(i),Jp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(XP(i,a,IR.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(xTe,"authHandler");async function BTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Aj.chooseOperation(e.body);let s=await Aj.processLocalTransaction(e,n);if(s instanceof NTe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(PTe({level:LTe.Z_BEST_SPEED})))}return s}catch(s){throw Jp.error(s),s}}o(BTe,"handlePostRequest");bj.exports={authHandler:xTe,handlePostRequest:BTe,handleServerUncaughtException:MTe,serverErrorHandler:vTe,reqBodyValidationHandler:UTe}});var Oj=M((aBe,wj)=>{"use strict";var FTe=require("fastify-plugin"),{handlePostRequest:Ij,authHandler:HTe,reqBodyValidationHandler:kTe}=NR();async function GTe(e){e.decorate("hdbCore",{preValidation:[kTe,HTe],request:o((t,r)=>Nj(Ij(t,r)),"request"),requestWithoutAuthentication:o((t,r)=>Nj(Ij(t,r,!0)),"requestWithoutAuthentication")})}o(GTe,"hdbCore");async function Nj(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(Nj,"convertAsyncIterators");wj.exports=FTe(GTe)});var Pj=M((uBe,Cj)=>{"use strict";var lBe=require("fs"),wR=oe();wR.initSync();var{CONFIG_PARAMS:ZP}=(k(),v(W)),qTe=1024*1024*1024;function $Te(e){let t=wR.get(ZP.HTTP_TIMEOUT),r=wR.get(ZP.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:qTe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:wR.get(ZP.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o($Te,"getServerOptions");Cj.exports=$Te});var Mj=M((fBe,Dj)=>{"use strict";var eL=oe();eL.initSync();var{CONFIG_PARAMS:Lj}=(k(),v(W));function VTe(){let e=eL.get(Lj.HTTP_CORSACCESSLIST),t=eL.get(Lj.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(VTe,"getCORSOptions");Dj.exports=VTe});var xj=M((hBe,Uj)=>{"use strict";var vj=oe();vj.initSync();var KTe=(k(),v(W));function YTe(){return vj.get(KTe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(YTe,"getHeaderTimeoutConfig");Uj.exports=YTe});var rL={};Oe(rL,{customFunctionsServer:()=>jTe,ready:()=>Qj,start:()=>zTe});function zTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ra||(ra=jj(t),Le.http((await ra).server));let a=await ra,c=(0,tL.dirname)(s),l=(0,tL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Bj.has(c)){Bj.add(c);try{a.register(JTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")St.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Qj}}async function jTe(){try{St.info("In Custom Functions Fastify server"+process.cwd()),St.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),St.debug(`Custom Functions server process ${process.pid} starting up.`),await QTe();let e=$j.get(U.HTTP_SECUREPORT)>0,t;try{t=ra=await jj(e)}catch(r){throw St.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw St.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){St.error(`Custom Functions ${process.pid} Error: ${e}`),St.error(e),process.exit(1)}}async function QTe(){try{St.info("Custom Functions starting configuration."),await Vj.setUsersWithRolesCache(),St.info("Custom Functions completed configuration.")}catch(e){St.error(e)}}function JTe(e,t){return async function(r){try{St.info("Custom Functions starting buildRoutes"),St.trace("Loading fastify routes folder "+e),(0,Fj.existsSync)(e)&&r.register(qj.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:St.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?St.error(s.message):s&&St.error(s),a()})}catch(n){St.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function jj(e){St.info("Custom Functions starting buildServer.");let t=(0,Kj.default)(e),r=(0,Hj.default)(t);r.server.headersTimeout=(0,Wj.default)(),r.setErrorHandler(zj.serverErrorHandler);let n=(0,Yj.default)();return n&&r.register(kj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(Gj.default),await r.register(WTe),await r.after(),am(r),St.info("Custom Functions completed buildServer."),r}function Qj(){if(ra)return ra.then?ra.then(e=>e.ready()):ra.ready()}var tL,Fj,Hj,kj,Gj,qj,$j,St,WTe,Vj,Kj,Yj,Wj,zj,ra,Bj,Jj=ue(()=>{tL=require("path"),Fj=require("fs"),Hj=w(require("fastify")),kj=w(require("@fastify/cors")),Gj=w(lw()),qj=w(require("@fastify/autoload")),$j=w(oe());k();St=w(Q()),WTe=w(Oj()),Vj=w(ts()),Kj=w(Pj()),Yj=w(Mj()),Wj=w(xj()),zj=w(NR());Ro();Mr();Bj=new Set;o(zTe,"start");o(jTe,"customFunctionsServer");o(QTe,"setUp");o(JTe,"buildRouteFolder");o(jj,"buildServer");o(Qj,"ready")});var nL={};Oe(nL,{start:()=>XTe});function XTe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,r2.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(a=>n(s._nodeRequest,s._nodeResponse,()=>{a(i(s))}))}),!0}},handleFile(t,r,n){Zj||(Zj=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=Xj.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,e2.default)(s,(0,t2.realpathSync)(a))}}return i(s)},{runFirst:!0})),Xj.set(r,n)}}}var e2,t2,r2,Xj,Zj,n2=ue(()=>{e2=w(require("send")),t2=require("fs"),r2=w(require("serve-static")),Xj=new Map;o(XTe,"start")});var sL={};Oe(sL,{start:()=>ZTe});function ZTe({override:e}){return{handleFile:o((t,r,n)=>{OR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,s2.parse)(t))){if(process.env[s]!==void 0)if(OR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)OR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var s2,OR,i2=ue(()=>{s2=require("dotenv"),OR=w(Q());o(ZTe,"start")});var aL={};Oe(aL,{DataLoaderError:()=>ms,DataLoaderResult:()=>_f,EmptyFileError:()=>DR,FileParseError:()=>LR,InvalidPropertyTypeError:()=>MR,MissingRequiredPropertyError:()=>Xp,RecordProcessingError:()=>Zp,SystemDatabaseError:()=>vR,UnsupportedFileExtensionError:()=>PR,computeRecordHash:()=>oL,handleApplication:()=>rRe,loadDataFile:()=>m2,suppressHandleApplicationWarning:()=>tRe});function oL(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,a2.createHash)("sha256").update(n).digest("hex")}function f2(e){return e.system&&e.system[iL]?e.system[iL]:CR||(CR=ze({database:"system",table:iL,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),CR)}async function eRe(e,t,r,n){try{let s=f2(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return $s.error?.(`Failed to get stored hash: ${s.message}`),null}}async function o2(e,t,r,n,s){try{let i=f2(s),a=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:a,hash:n})}catch(i){$s.error?.(`Failed to store hash: ${i.message}`)}}function rRe(e){if((0,l2.getWorkerIndex)()!==0){$s.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||m2(t,un,ke).then(r=>{$s.debug?.("Data loader processed file: %s: %s",(0,na.basename)(t.absolutePath),r.message)})})}async function m2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,na.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,c2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new PR(t,i)}catch(f){throw f instanceof ms?f:new LR(t,f)}if(!a)throw new DR(t);let{database:c,table:l,records:u}=a;if(!l)throw new Xp(t,"table");if(!u)throw new Xp(t,"records");if(!Array.isArray(u))throw new MR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new vR(c,l);try{let f;if(c&&s[c]&&s[c][l])$s.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])$s.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{$s.debug?.(`Table ${d} not found, creating new table`);let y=[];if(u.length>0){let T=u[0];Object.keys(T).map(R=>{let N={name:R,type:typeof T[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{y.push(R)})}f=await ze({database:c,table:l,attributes:y})}let m=u.length,h=0,p=0,_=0,g=100;for(let y=0;y<u.length;y+=g){let T=u.slice(y,y+g),R=[];for(let N of T)R.push(async()=>{try{let O=null,F=N.id;F!==void 0&&(O=await f.get(F));let Z=oL(N);if(!O){h++;let K=await f.put(N);return await o2(c,l,F,Z,s),K}let G=await eRe(c,l,F,s);if(!G)return _++,Promise.resolve({inserted:0,updated:0});let Y={};for(let K of Object.keys(N))K in O&&(Y[K]=O[K]);return oL(Y)!==G?(_++,Promise.resolve({inserted:0,updated:0})):Z!==G?(p++,await f.patch(F,N),await o2(c,l,F,Z,s),{updated:1}):(_++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof ms)$s.error?.(`Record processing error: ${O.message}`);else{let F=new Zp(d,O);$s.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(N=>N()))}if(h>0||p>0){let y=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(y+=` (${_} records skipped)`),$s.info?.(y),new _f(t,c,l,"success",h+p,y)}else if(_>0){let y=`All ${_} records in ${d} already up-to-date`;return $s.info?.(y),new _f(t,c,l,"skipped",m,y)}else{let y=`No records to process in ${d}`;return $s.info?.(y),new _f(t,c,l,"success",0,y)}}catch(f){throw f instanceof ms?f:new Zp(d,f)}}var na,a2,c2,l2,sa,u2,d2,$s,iL,CR,tRe,ms,PR,LR,DR,Xp,MR,vR,Zp,_f,h2=ue(()=>{na=require("node:path"),a2=require("node:crypto"),c2=require("yaml");De();l2=w(rt()),sa=w(rn()),u2=w(ge()),d2=w(Q()),$s=d2.default.forComponent("dataLoader"),iL="hdb_dataloader_hash";o(oL,"computeRecordHash");o(f2,"getHashTrackingTable");o(eRe,"getStoredHash");o(o2,"storeHash");tRe=!0;o(rRe,"handleApplication");o(m2,"loadDataFile");ms=class extends u2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=sa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},PR=class extends ms{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},LR=class extends ms{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,na.basename)(t)}: ${r.message}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},DR=class extends ms{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,na.basename)(t)} is empty or invalid`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},Xp=class extends ms{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,na.basename)(t)} is missing required "${r}" property`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},MR=class extends ms{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,na.basename)(t)} has invalid "${r}" property, expected ${n}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},vR=class extends ms{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,sa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Zp=class extends ms{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},_f=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var cL={};Oe(cL,{hdbServer:()=>oRe,start:()=>oRe});async function oRe(e){try{oo.default.debug("In Fastify server"+process.cwd()),oo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),oo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=p2.default.isMaster,await aRe();let t=e.securePort>0;gf=cRe(t),await gf.ready(),e||(e={}),e.isOperationsServer=!0;try{Le.http(gf.server,e),gf.server.closeIdleConnections||await gf.listen({port:0,host:"::"})}catch(r){throw gf.close(),oo.default.error(r),oo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),oo.default.fatal(t),process.exit(1)}}async function aRe(){oo.default.trace("Configuring HarperDB process."),A2.default.setSchemaDataToGlobal(),await I2.default.setUsersWithRolesCache(),await N2.default.getLicense()}function cRe(e){oo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=lRe(e),r=(0,E2.default)(t);r.server.headersTimeout=dRe(),r.setErrorHandler(_c.serverErrorHandler);let n=uRe();n&&r.register(_2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(T2.default),r.register(g2.default),r.register(S2.default,{root:R2.default.join(y2.PACKAGE_ROOT,"studio/build-local")}),am(r);let s=Ec.default.get(jy.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!b2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[_c.reqBodyValidationHandler,_c.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,_c.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),oo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function lRe(e){let t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ec.default.get(eE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:sRe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function uRe(){let e=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORS),t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===iRe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function dRe(){return Ec.default.get(eE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??nRe}var p2,Ec,oo,E2,_2,g2,S2,T2,R2,y2,A2,b2,I2,N2,_c,nRe,sRe,iRe,eE,gf,w2=ue(()=>{p2=w(require("cluster")),Ec=w(oe());k();oo=w(Q()),E2=w(require("fastify")),_2=w(require("@fastify/cors")),g2=w(require("@fastify/compress")),S2=w(require("@fastify/static")),T2=w(lw()),R2=w(require("path")),y2=w(Rt()),A2=w(ii()),b2=w(ie()),I2=w(ts()),N2=w(Qd());Mr();_c=w(NR());Ro();Ec.default.initSync();nRe=6e4,sRe=1024*1024*1024,iRe="TRUE",{CONFIG_PARAMS:eE}=W;o(oRe,"operationsServer");o(aRe,"setUp");o(cRe,"buildServer");o(lRe,"getServerOptions");o(uRe,"getCORSOpts");o(dRe,"getHeaderTimeoutConfig")});var hL={};Oe(hL,{disableNATS:()=>mRe,publishToStream:()=>BR,setNATSReplicator:()=>lL,setPublishToStream:()=>hRe,setSubscription:()=>mL,start:()=>fRe});function fRe(){tE.default.get(U.CLUSTERING_ENABLED)&&ERe()}function mRe(e=!0){D2=e}function hRe(e,t){BR=e,mL=t}function ERe(){if(D2||process.env._DISABLE_NATS)return;let e=nt(),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];lL(s,r,i)}}bl((r,n)=>{lL(r.tableName,r.databaseName,r),n&&v2(r)}),!O2&&(O2=!0)}function lL(e,t,r){if(t==="system"&&_Re.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 xr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){v2(i)}static subscribe(){let i=new Vn;return mL(t,e,i),i}static subscribeOnThisThread(i){return i<(tE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??pRe)}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 UR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=M2;return i}o(n,"getNATSTransaction")}function v2(e){let t=tE.default.get(U.CLUSTERING_NODENAME);BR(`${dL.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,fL.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 C2,dL,fL,P2,L2,tE,xR,D2,BR,mL,pRe,M2,O2,_Re,UR,uL,U2=ue(()=>{De();Pa();C2=w(mr()),dL=w(It()),fL=w($i());Tu();P2=w(Iw()),L2=w(An()),tE=w(oe());k();xR=w(Q());o(fRe,"start");o(mRe,"disableNATS");BR=C2.publishToStream,mL=P2.setSubscription;o(hRe,"setPublishToStream");pRe=2;o(ERe,"assignReplicationSource");_Re=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(lL,"setNATSReplicator");o(v2,"publishSchema");UR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=tE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(xR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(BR(`${dL.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,fL.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw xR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},uL=class extends UR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,L2.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};M2=new uL});var EL=M((UBe,x2)=>{"use strict";var rE=oe();rE.initSync();var Sf=require("fs-extra"),pL=require("path"),Tf=(k(),v(W)),gRe=require("crypto"),SRe=require("uuid").v4;x2.exports=TRe;function TRe(){if(rE.getHdbBasePath()!==void 0){let e=pL.join(rE.getHdbBasePath(),Tf.LICENSE_KEY_DIR_NAME,Tf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=pL.join(rE.getHdbBasePath(),Tf.LICENSE_KEY_DIR_NAME,Tf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=pL.join(rE.getHdbBasePath(),Tf.LICENSE_KEY_DIR_NAME,Tf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Sf.accessSync(r),Sf.accessSync(e),Sf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=SRe(),i=gRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Sf.writeFileSync(r,s),Sf.writeFileSync(e,i.privateKey),Sf.writeFileSync(t,i.publicKey)}else throw n}}}o(TRe,"checkJWTTokenExist")});var F2=M((BBe,B2)=>{"use strict";var _L=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};B2.exports={HdbInfoInsertObject:_L}});var G2=M((HBe,k2)=>{"use strict";var H2=(k(),v(W)),gL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[H2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[H2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};k2.exports={UpgradeObject:gL}});var FR=M((GBe,$2)=>{"use strict";var Vs=require("prompt"),Rf=require("chalk"),q2=Q(),Ii=require("os"),SL=Uc(),TL=["yes","y"];async function RRe(e){let t=`${Ii.EOL}`+Rf.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}`;Vs.override=SL(["CONFIRM_UPGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Rf.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 Vs.get([r])}catch(s){return q2.error("There was an error when prompting user about an upgrade."),q2.error(s),!1}return TL.includes(n.CONFIRM_UPGRADE)}o(RRe,"forceUpdatePrompt");async function yRe(e){let t=`${Ii.EOL}`+Rf.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}`);Vs.override=SL(["CONFIRM_DOWNGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Rf.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 Vs.get([r]);return TL.includes(n.CONFIRM_DOWNGRADE)}o(yRe,"forceDowngradePrompt");async function ARe(){let e=`${Ii.EOL}`+Rf.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");Vs.override=SL(["GENERATE_CERTS"]),Vs.start(),Vs.message=e;let t={properties:{GENERATE_CERTS:{description:Rf.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 Vs.get([t]);return TL.includes(r.GENERATE_CERTS)}o(ARe,"upgradeCertsPrompt");$2.exports={forceUpdatePrompt:RRe,forceDowngradePrompt:yRe,upgradeCertsPrompt:ARe}});var yL=M(($Be,V2)=>{"use strict";var RL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};V2.exports=RL});var Y2=M((jBe,K2)=>{"use strict";var bRe=ie(),IRe=bt(),KBe=Q(),YBe=require("path"),WBe=require("fs"),zBe=(k(),v(W));K2.exports={getOldPropsValue:NRe};function NRe(e,t,r=!1){let n=t.getRaw(e);return bRe.isNotEmptyAndHasValue(n)?n:r?IRe.getDefaultConfig(e):""}o(NRe,"getOldPropsValue")});var Q2=M((JBe,j2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),wRe=require("properties-reader"),ORe=yL(),Sr=Q(),{getOldPropsValue:Tt}=Y2(),{HDB_SETTINGS_NAMES:ye,CONFIG_PARAMS:nu}=(k(),v(W)),su=bt(),HR=oe(),W2=ie(),ao=(k(),v(W)),AL=new ORe("3.1.0"),z2=[];function CRe(){let e=wRe(HR.get(ye.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
37
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(Zo,a);let f=await Ti(e);return f.message=`Added ssh key: ${r}${d}`,f}o(A_e,"addSSHKey");async function b_e(e){let t=Hn.updateSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n}=e;jt.trace("updating ssh key",r);let s=Oe.join(fc,r+".key");if(!await Ie.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ie.outputFile(s,n);let i=await Ti(e);return i.message=`Updated ssh key: ${r}`,i}o(b_e,"updateSSHKey");async function I_e(e){let t=Hn.deleteSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r}=e;jt.trace("deleting ssh key",r);let n=Oe.join(fc,r+".key"),s=Oe.join(fc,"config");if(!await Ie.pathExists(n))throw new Error("Key does not exist");let i=await Ie.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ie.outputFile(s,i),Ie.removeSync(n);let c=await Ti(e);return c.message=`Deleted ssh key: ${r}`,c}o(I_e,"deleteSSHKey");async function N_e(e){let t=[];return await Ie.pathExists(fc)&&(await Ie.readdir(fc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(N_e,"listSSHKeys");async function w_e(e){let t=Hn.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(Zo,r);let n=await Ti(e);return n.message="Known hosts successfully set",n}o(w_e,"setSSHKnownHosts");async function O_e(e){return await Ie.pathExists(Zo)?{known_hosts:await Ie.readFile(Zo,"utf8")}:{known_hosts:null}}o(O_e,"getSSHKnownHosts");ir.customFunctionsStatus=l_e;ir.getCustomFunctions=u_e;ir.getCustomFunction=d_e;ir.setCustomFunction=f_e;ir.dropCustomFunction=m_e;ir.addComponent=h_e;ir.dropCustomFunctionProject=p_e;ir.packageComponent=E_e;ir.deployComponent=__e;ir.getComponents=S_e;ir.getComponentFile=T_e;ir.setComponentFile=R_e;ir.dropComponent=y_e;ir.addSSHKey=A_e;ir.updateSSHKey=b_e;ir.deleteSSHKey=I_e;ir.listSSHKeys=N_e;ir.setSSHKnownHosts=w_e;ir.getSSHKnownHosts=O_e});var VC=M((j0e,aW)=>{"use strict";var Bs=require("joi"),oW=ut();aW.exports={readTransactionLogValidator:C_e,deleteTransactionLogsBeforeValidator:P_e};function C_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),from:Bs.date().timestamp(),to:Bs.date().timestamp(),limit:Bs.number().min(1)});return oW.validateBySchema(e,t)}o(C_e,"readTransactionLogValidator");function P_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),timestamp:Bs.date().timestamp().required()});return oW.validateBySchema(e,t)}o(P_e,"deleteTransactionLogsBeforeValidator")});var QT=M((J0e,mW)=>{"use strict";var KC=(k(),v(W)),Lp=mr(),cW=ie(),lW=oe(),uW=$i(),dW=Q(),{handleHDBError:zT,hdbErrors:L_e}=ge(),{HTTP_STATUS_CODES:jT}=L_e,{readTransactionLogValidator:D_e,deleteTransactionLogsBeforeValidator:M_e}=VC(),fW=Jn(),v_e="Logs successfully deleted from transaction log.",U_e="All logs successfully deleted from transaction log.";mW.exports={readTransactionLog:x_e,deleteTransactionLogsBefore:F_e};async function x_e(e){let t=D_e(e);if(t)throw zT(t,t.message,jT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=cW.checkSchemaTableExist(e.database,e.table);if(r)throw zT(new Error,r,jT.NOT_FOUND,void 0,void 0,!0);return lW.get(KC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await B_e(e):(dW.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)),fW.readAuditLog(e))}o(x_e,"readTransactionLog");async function*B_e(e){let t=uW.createNatsTableStreamName(e.database,e.table),r=await Lp.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===KC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(B_e,"readTransactionLogNats");async function F_e(e){let t=M_e(e);if(t)throw zT(t,t.message,jT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!lW.get(KC.CONFIG_PARAMS.CLUSTERING_ENABLED))return dW.info("Delete transaction logs called for Plexus"),fW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=cW.checkSchemaTableExist(r,n);if(i)throw zT(new Error,i,jT.NOT_FOUND,void 0,void 0,!0);let a=uW.createNatsTableStreamName(r,n),{jsm:c}=await Lp.getNATSReferences(),l=await Lp.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=v_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=U_e):f=(await Lp.viewStream(a,parseInt(s),1))[0].nats_sequence,await Lp.purgeTableStream(r,n,{seq:f}),d}o(F_e,"deleteTransactionLogsBefore")});var jC={};we(jC,{describeMetric:()=>SW,describeMetricOp:()=>zC,get:()=>_W,getOp:()=>YC,listMetrics:()=>gW,listMetricsOp:()=>WC});async function k_e(e){return(await yg().get(e)).hostname}function hW(e,t){return e.length===0||e.includes(t)}function YC(e){return Dp.trace?.("get_analytics request:",e),_W(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function EW(e){return"conditions"in e?{...e,conditions:e.conditions.map(EW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function _W(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(EW));let a=t??[];hW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),Dp.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],hW(a,"node")&&(Dp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await k_e(d)),Dp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function WC(e){return gW(e.metric_types,e.custom_metrics_window)}async function gW(e=["builtin"],t=H_e){let r=[],n=Object.values(vo);if(e.includes("builtin")&&(r=n),e.includes("custom")){let i=[{attribute:"id",comparator:"greater_than",value:Date.now()-t}],a=n.map(d=>({attribute:"metric",comparator:"not_equal",value:d}));i.push(...a);let c={select:["metric"],conditions:i},l=new Set,u=await databases.system.hdb_analytics.search(c);for await(let d of u)l.add(d.metric);r.push(...Array.from(l.values()))}return r}function zC(e){return SW(e.metric)}async function SW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Dp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var pW,H_e,Dp,QC=ce(()=>{pW=w(Q());cN();lN();H_e=1e3*60*60*24*7,Dp=(0,pW.forComponent)("analytics").conditional;o(k_e,"lookupHostname");o(hW,"isSelected");o(YC,"getOp");o(EW,"conformCondition");o(_W,"get");o(WC,"listMetricsOp");o(gW,"listMetrics");o(zC,"describeMetricOp");o(SW,"describeMetric")});var JT,XT,Mp,ZT=ce(()=>{JT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},XT=Object.keys(JT),Mp="primary"});function RW(e){return TW.validateBySchema(e,V_e)}var vp,TW,G_e,q_e,$_e,V_e,yW=ce(()=>{vp=w(require("joi")),TW=w(ut());ZT();G_e=XT,q_e=Object.entries(JT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),$_e=o(()=>{let e=vp.default.string().min(1).max(512);return Object.entries(JT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:vp.default.string().valid(...r.allowedValues).messages({"any.only":q_e[t]})}))}),e.required()},"createStatusValidationSchema"),V_e=vp.default.object({id:vp.default.string().valid(...G_e).required(),status:$_e()});o(RW,"validateStatus")});var tP={};we(tP,{DEFAULT_STATUS_ID:()=>Mp,STATUS_IDS:()=>XT,Status:()=>ea,clear:()=>XC,get:()=>ZC,set:()=>eP});function xp(){return JC||(JC=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),JC}function XC({id:e}){return Up.debug?.("clearStatus",e),xp().delete(e)}function Y_e(){return Up.debug?.("getAllStatus"),xp().get({})}function ZC({id:e}){return e?(Up.debug?.("getStatus",e),xp().get(e)):(Up.debug?.("getStatus","all"),Y_e())}function eP({status:e,id:t=Mp}){let r=RW({status:e,id:t});if(r)throw(0,eR.handleHDBError)(r,r.message,K_e.BAD_REQUEST);return Up.debug?.("setStatus",t,e),xp().put(t,{status:e})}var eR,AW,K_e,JC,ea,Up,Bp=ce(()=>{Me();eR=w(ge()),AW=w(ei());yW();ZT();ZT();({HTTP_STATUS_CODES:K_e}=eR.hdbErrors);o(xp,"getStatusTable");ea={get primaryStore(){return xp().primaryStore}},Up=(0,AW.loggerWithTag)("status");o(XC,"clearStatus");o(Y_e,"getAllStatus");o(ZC,"getStatus");o(eP,"setStatus")});var IW=M((pxe,bW)=>{"use strict";var rP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};bW.exports=rP});var wW=M((_xe,NW)=>{"use strict";var nP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};NW.exports=nP});var iP=M((Sxe,CW)=>{"use strict";var OW=IW(),W_e=wW(),{HDB_ERROR_MSGS:z_e}=tn(),sP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=z_e.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new OW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new W_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new OW(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};CW.exports=sP});var sR=M((Rxe,YW)=>{"use strict";var oP=Dn(),tR=sn(),Fs=ep(),kp=Ua(),aP=El(),j_e=uO(),Q_e=MV(),Gp=ts(),rR=Oh(),Nr=Q(),J_e=pO(),X_e=pT(),Z_e=qO(),ege=_T(),tge=KO(),rge=YO(),nge=jO(),sge=JO(),cP=yT(),ta=ie(),ige=dK(),lP=uC(),DW=sf(),gn=(k(),v(W)),MW=IY(),oge=$d(),vW=(Td(),v(vh)),UW=(qT(),v(Ap)),xW=wt(),Er=GC(),age=require("alasql"),BW=QT(),FW=wp(),uf=as(),HW=(Kd(),v(Vd)),uP=(QC(),v(jC)),dP=(Bp(),v(tP)),kW=iP(),{handleHDBError:kn,hdbErrors:GW}=ge(),{HDB_ERROR_MSGS:Jr,HTTP_STATUS_CODES:Fp}=GW,{cleanupOrphanBlobs:cge}=ep(),X=new Map,qW="delete",mc="insert",Hs="read",Jl="update",Hp="describe",PW=kp.describeSchema.name,LW=kp.describeTable.name,$W={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},lge={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},uge="catchup",dge="handleGetJob",fge="handleGetJobsByStartDate",nR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mge=[Fs.createTable.name,Fs.createAttribute.name,Fs.dropTable.name,Fs.dropAttribute.name],VW={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},te=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};X.set(oP.insert.name,new te(!1,[mc]));X.set(oP.update.name,new te(!1,[Jl]));X.set(oP.upsert.name,new te(!1,[mc,Jl]));X.set(tR.searchByConditions.name,new te(!1,[Hs]));X.set(tR.searchByHash.name,new te(!1,[Hs]));X.set(tR.searchByValue.name,new te(!1,[Hs]));X.set(tR.search.name,new te(!1,[Hs]));X.set(Fs.createSchema.name,new te(!0,[]));X.set(Fs.createTable.name,new te(!0,[]));X.set(Fs.createAttribute.name,new te(!1,[mc]));X.set(Fs.dropSchema.name,new te(!0,[]));X.set(Fs.dropTable.name,new te(!0,[]));X.set(Fs.dropAttribute.name,new te(!0,[]));X.set(kp.describeSchema.name,new te(!1,[Hs]));X.set(kp.describeTable.name,new te(!1,[Hs]));X.set(aP.deleteRecord.name,new te(!1,[qW]));X.set(Gp.addUser.name,new te(!0,[]));X.set(Gp.alterUser.name,new te(!0,[]));X.set(Gp.dropUser.name,new te(!0,[]));X.set(Gp.listUsersExternal.name,new te(!0,[]));X.set(rR.listRoles.name,new te(!0,[]));X.set(rR.addRole.name,new te(!0,[]));X.set(rR.alterRole.name,new te(!0,[]));X.set(rR.dropRole.name,new te(!0,[]));X.set(J_e.name,new te(!0,[]));X.set(X_e.name,new te(!0,[]));X.set(Z_e.name,new te(!0,[]));X.set(ege.name,new te(!0,[]));X.set(tge.name,new te(!0,[]));X.set(rge.name,new te(!0,[]));X.set(cP.setRoutes.name,new te(!0,[]));X.set(cP.getRoutes.name,new te(!0,[]));X.set(cP.deleteRoutes.name,new te(!0,[]));X.set(xW.setConfiguration.name,new te(!0,[]));X.set(nge.clusterStatus.name,new te(!0,[]));X.set(sge.name,new te(!0,[]));X.set(lP.getFingerprint.name,new te(!0,[]));X.set(lP.setLicense.name,new te(!0,[]));X.set(aP.deleteFilesBefore.name,new te(!0,[]));X.set(aP.deleteAuditLogsBefore.name,new te(!0,[]));X.set(DW.restart.name,new te(!0,[]));X.set(DW.restartService.name,new te(!0,[]));X.set(j_e.name,new te(!0,[]));X.set(Q_e.name,new te(!0,[Hs]));X.set(cge.name,new te(!0,[]));X.set(oge.systemInformation.name,new te(!0,[]));X.set(xW.getConfiguration.name,new te(!0,[]));X.set(BW.readTransactionLog.name,new te(!0,[]));X.set(BW.deleteTransactionLogsBefore.name,new te(!0,[]));X.set(FW.installModules.name,new te(!0,[]));X.set(FW.auditModules.name,new te(!0,[]));X.set(uf.createCsr.name,new te(!0,[]));X.set(uf.signCertificate.name,new te(!0,[]));X.set(uf.listCertificates.name,new te(!0,[]));X.set(uf.addCertificate.name,new te(!0,[]));X.set(uf.removeCertificate.name,new te(!0,[]));X.set(uf.getKey.name,new te(!0,[]));X.set(HW.addNodeBack.name,new te(!0,[]));X.set(HW.removeNodeBack.name,new te(!0,[]));X.set(uP.getOp.name,new te(!1,[Hs]));X.set(uP.listMetricsOp.name,new te(!1,[Hs]));X.set(uP.describeMetricOp.name,new te(!1,[Hs]));X.set(dP.clear.name,new te(!0,[]));X.set(dP.get.name,new te(!0,[]));X.set(dP.set.name,new te(!0,[]));X.set(vW.createTokens.name,new te(!1,[]));X.set(vW.refreshOperationToken.name,new te(!1,[]));X.set(UW.login.name,new te(!1,[]));X.set(UW.logout.name,new te(!1,[]));X.set(Er.customFunctionsStatus.name,new te(!0,[]));X.set(Er.getCustomFunctions.name,new te(!0,[]));X.set(Er.getComponents.name,new te(!0,[]));X.set(Er.getComponentFile.name,new te(!0,[]));X.set(Er.setComponentFile.name,new te(!0,[]));X.set(Er.dropComponent.name,new te(!0,[]));X.set(Er.getCustomFunction.name,new te(!0,[]));X.set(Er.setCustomFunction.name,new te(!0,[]));X.set(Er.dropCustomFunction.name,new te(!0,[]));X.set(Er.addComponent.name,new te(!0,[]));X.set(Er.dropCustomFunctionProject.name,new te(!0,[]));X.set(Er.packageComponent.name,new te(!0,[]));X.set(Er.deployComponent.name,new te(!0,[]));X.set(Er.addSSHKey.name,new te(!0,[]));X.set(Er.updateSSHKey.name,new te(!0,[]));X.set(Er.deleteSSHKey.name,new te(!0,[]));X.set(Er.listSSHKeys.name,new te(!0,[]));X.set(Er.setSSHKnownHosts.name,new te(!0,[]));X.set(Er.getSSHKnownHosts.name,new te(!0,[]));X.set(lP.getRegistrationInfo.name,new te(!1,[]));X.set(Gp.userInfo.name,new te(!1,[]));X.set(kp.describeAll.name,new te(!1,[]));X.set(dge,new te(!1,[]));X.set(fge,new te(!0,[]));X.set(uge,new te(!0,[]));X.set(nR.CSV_DATA_LOAD,new te(!1,[mc,Jl]));X.set(nR.CSV_URL_LOAD,new te(!1,[mc,Jl]));X.set(nR.CSV_FILE_LOAD,new te(!1,[mc,Jl]));X.set(nR.IMPORT_FROM_S3,new te(!1,[mc,Jl]));X.set(VW.EXPORT_TO_S3,new te(!0,[]));X.set(VW.EXPORT_LOCAL,new te(!0,[]));X.set(gn.VALID_SQL_OPS_ENUM.DELETE,new te(!1,[qW]));X.set(gn.VALID_SQL_OPS_ENUM.SELECT,new te(!1,[Hs]));X.set(gn.VALID_SQL_OPS_ENUM.INSERT,new te(!1,[mc]));X.set(gn.VALID_SQL_OPS_ENUM.UPDATE,new te(!1,[Jl]));YW.exports={verifyPerms:pge,verifyPermsAst:hge,verifyBulkLoadAttributePerms:_ge};function hge(e,t,r){if(ta.isEmptyOrZeroLength(e))throw Nr.info("verify_perms_ast has an empty user parameter"),kn(new Error);if(ta.isEmptyOrZeroLength(t))throw Nr.info("verify_perms_ast has an empty user parameter"),kn(new Error);if(ta.isEmptyOrZeroLength(r))throw Nr.info("verify_perms_ast has a null operation parameter"),kn(new Error);try{let n=new kW,s=new ige(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Nr.info("No schemas defined in verifyPermsAst(), will not continue."),kn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&$W[r])throw kn(new Error,Jr.DROP_SYSTEM,Fp.FORBIDDEN);if(c&&!l)return null;let u=MW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof age.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=KW(t,r,a,n);return d||(a.forEach((f,m)=>{for(let h=0;h<f.length;h++){let p=s.getAttributesBySchemaTableName(m,f[h]),_=mP(t.role.permission,m,f[h]);fP(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw kn(n)}}o(hge,"verifyPermsAst");function pge(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Nr.info("null required parameter in verifyPerms"),kn(new Error,Jr.DEFAULT_INVALID_REQUEST,Fp.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new kW;if(ta.isEmptyOrZeroLength(e.hdb_user?.role)||ta.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Nr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Jr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(gn.SYSTEM_SCHEMA_NAME)||s===gn.SYSTEM_SCHEMA_NAME;if(l&&d&&lge[e.operation]&&(i===gn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&$W[r])throw kn(new Error,Jr.DROP_SYSTEM,Fp.FORBIDDEN);if(l&&!d||u===!0&&(r===Fs.createSchema.name||r===Fs.dropSchema.name))return null;if(mge.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=MW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===PW||r===LW)&&!f.super_user){if(s===gn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Jr.SCHEMA_PERM_ERROR(s));if(r===PW&&(!f[s]||!f[s][Hp]))return c.handleInvalidItem(Jr.SCHEMA_NOT_FOUND(s));if(r===LW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Hp]))return c.handleInvalidItem(Jr.TABLE_NOT_FOUND(s,i))}let m=KW(e.hdb_user,r,a,c,n);if(m)return m;if(X.get(r)&&X.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&gn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[gn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[gn.PERMS_CRUD_ENUM.READ]).forEach(T=>{_.push(T.attribute_name)}):_=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=_)}let h=Ege(e),p=mP(e.hdb_user?.role?.permission,s,i);return fP(h,p,r,i,s,c,n),c.getPermsResponse()}o(pge,"verifyPerms");function KW(e,t,r,n,s){if(ta.arrayHasEmptyValues([e,t,r]))throw Nr.info("hasPermissions has an invalid parameter"),kn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||X.get(t).requires_su))return null;if(!X.get(t))throw Nr.info(`operation ${t} not found.`),kn(new Error,Jr.OP_NOT_FOUND(t),Fp.BAD_REQUEST);if(X.get(t)&&X.get(t).requires_su)return Nr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Jr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][Hp]===!1){n.addInvalidItem(Jr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Jr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[Hp]===!1)n.addInvalidItem(Jr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=X.get(t).perms;!ta.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(Nr.info(`Required ${_} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(_))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let h=Jr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Nr.error(h),Nr.error(m),kn(GW.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(KW,"hasPermissions");function fP(e,t,r,n,s,i,a){if(!e||!t)throw Nr.info("no attributes specified in checkAttributePerms."),kn(new Error);let c=X.get(r).perms;if(!c||c==="")throw Nr.info(`no permissions found for ${r} in checkAttributePerms().`),kn(new Error);if(ta.isEmptyOrZeroLength(t))return Nr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Hp]===!1){i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(gn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Hs)throw kn(new Error,Jr.SYSTEM_TIMESTAMP_PERMS_ERR,Fp.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(fP,"checkAttributePerms");function Ege(e){let t=new Set;try{if(e.action)return t;if(e.operation===gn.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){Nr.info(r)}return t}o(Ege,"getRecordAttributes");function mP(e,t,r){let n=new Map;if(ta.isEmpty(e))return Nr.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{Nr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(mP,"getAttributePermissions");function _ge(e,t,r,n,s,i,a){let c=new Set(i),l=mP(e,n,s);fP(c,l,t,s,n,a,r)}o(_ge,"verifyBulkLoadAttributePerms")});var oR=M((Axe,JW)=>{"use strict";JW.exports={evaluateSQL:Pge,processAST:QW,convertSQLToAST:jW,checkASTPermissions:zW};var gge=Dn(),WW=require("util"),Sge=WW.callbackify(gge.insert),Tge=sn().search,Rge=bq().update,yge=WW.callbackify(Rge),Age=Nq().convertDelete,hc=require("alasql"),bge=sR(),iR=Q(),Ige=rg(),Nge=ie(),qp=(k(),v(W)),{hdbErrors:wge,handleHDBError:hP}=ge(),{HTTP_STATUS_CODES:pP}=wge;Ige(hc);var Oge=403,Cge="There was a problem performing this insert. Please check the logs and try again.",EP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Pge(e,t){let r=e.parsed_sql_object;if(!r){r=jW(e.sql);let n,s=r.ast.statements[0];if(s instanceof hc.yy.Insert?n=s.into.databaseid:s instanceof hc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof hc.yy.Update||s instanceof hc.yy.Delete?n=s.table.databaseid:iR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof hc.yy.Select)&&Nge.isEmptyOrZeroLength(n))return t("No schema specified",null)}QW(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Pge,"evaluateSQL");function zW(e,t){let r;try{r=bge.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(zW,"checkASTPermissions");function jW(e){let t=new EP;if(!e)throw hP(new Error,"The 'sql' parameter is missing from the request body",pP.BAD_REQUEST);try{let r=e.trim(),n=hc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
38
+ `);throw n[1]?hP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,pP.BAD_REQUEST):hP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",pP.BAD_REQUEST)}return t}o(jW,"convertSQLToAST");function QW(e,t,r){try{let n=Lge;if(!e.bypass_auth&&!t.permissions_checked){let i=zW(e,t);if(i&&i.length>0)return r(Oge,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case qp.VALID_SQL_OPS_ENUM.SELECT:n=Tge,s=t.ast.statements[0];break;case qp.VALID_SQL_OPS_ENUM.INSERT:n=Dge;break;case qp.VALID_SQL_OPS_ENUM.UPDATE:n=yge;break;case qp.VALID_SQL_OPS_ENUM.DELETE:n=Age;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(QW,"processAST");function Lge(e,t){iR.info(e),t("unknown sql statement")}o(Lge,"nullFunction");function Dge({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=Mge(i,e.values)}catch(a){return r(a)}Sge(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){iR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Dge,"convertInsert");function Mge(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]]=hc.compile(`SELECT ${s.toString()} AS [${qp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iR.error(r),new Error(Cge)}}o(Mge,"createDataObjects")});var yP=M((wxe,tz)=>{var uR=require("clone"),dR=ut(),vge=ie(),cR=(k(),v(W)),Ixe=Q(),_P=require("fs"),SP=require("joi"),{string:lR}=SP.types(),{hdbErrors:Uge,handleHDBError:aR}=ge(),{HDB_ERROR_MSGS:Nxe,HTTP_STATUS_CODES:gP}=Uge,{commonValidators:df}=Hi(),XW=" is required",xge=["insert","update","upsert"],TP={database:{presence:!1,format:df.schema_format,length:df.schema_length},schema:{presence:!1,format:df.schema_format,length:df.schema_length},table:{presence:!0,format:df.schema_format,length:df.schema_length},action:{inclusion:{within:xge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Bge={schema:lR.required(),table:lR.required(),action:lR.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Fge,AWS_SECRET:Hge,AWS_BUCKET:kge,AWS_FILE_KEY:Gge,REGION:qge}=cR.S3_BUCKET_AUTH_KEYS,$ge={s3:{presence:!0},[`s3.${Fge}`]:{presence:!0,type:"String"},[`s3.${Hge}`]:{presence:!0,type:"String"},[`s3.${kge}`]:{presence:!0,type:"String"},[`s3.${Gge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${qge}`]:{presence:!0,type:"String"}},ZW=uR(TP);ZW.data.presence={message:XW};var ez=uR(TP);ez.file_path.presence={message:XW};var Vge=Object.assign(uR(TP),$ge),RP=uR(Bge);RP.csv_url=lR.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();RP.passthrough_headers=SP.object();function Kge(e){let t=dR.validateObject(e,ZW);return fR(e,t)}o(Kge,"dataObject");function Yge(e){let t=dR.validateBySchema(e,SP.object(RP));return fR(e,t)}o(Yge,"urlObject");function Wge(e){let t=dR.validateObject(e,ez);return fR(e,t)}o(Wge,"fileObject");function zge(e){let t=dR.validateObject(e,Vge);return fR(e,t)}o(zge,"s3FileObject");function fR(e,t){if(!t){let r=vge.checkGlobalSchemaTable(e.schema,e.table);if(r)return aR(new Error,r,gP.BAD_REQUEST);if(e.operation===cR.OPERATIONS_ENUM.CSV_FILE_LOAD)try{_P.accessSync(e.file_path,_P.constants.R_OK|_P.constants.F_OK)}catch(n){return n.code===cR.NODE_ERROR_CODES.ENOENT?aR(n,`No such file or directory ${n.path}`,gP.BAD_REQUEST):n.code===cR.NODE_ERROR_CODES.EACCES?aR(n,`Permission denied ${n.path}`,gP.BAD_REQUEST):aR(n)}}return t}o(fR,"postValidateChecks");tz.exports={dataObject:Kge,urlObject:Yge,fileObject:Wge,s3FileObject:zge}});var AP=M((Cxe,rz)=>{"use strict";var $p=Q(),mR=(k(),v(W));async function jge(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===mR.OPERATIONS_ENUM.INSERT||t.operation===mR.OPERATIONS_ENUM.UPDATE||t.operation===mR.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===mR.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?($p.info(i.message),i):i.http_resp_msg?($p.error(`Error calling operation: ${e.name}`),$p.error(i.http_resp_msg),i):($p.error(`Error calling operation: ${e.name}`),$p.error(i),i)}}o(jge,"callOperationFunctionAsAwait");rz.exports={callOperationFunctionAsAwait:jge}});var bP=M((Lxe,sz)=>{"use strict";var{S3:Qge,GetObjectCommand:Jge}=require("@aws-sdk/client-s3");sz.exports={getFileStreamFromS3:Xge,getS3AuthObj:nz};async function Xge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await nz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Jge(r))).Body}o(Xge,"getFileStreamFromS3");function nz(e,t,r){return new Qge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(nz,"getS3AuthObj")});var oz=M((Mxe,iz)=>{"use strict";var IP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},NP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};iz.exports={BulkLoadFileObject:IP,BulkLoadDataObject:NP}});var OP=M((Uxe,az)=>{"use strict";var wP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};az.exports=wP});var vP=M((Gxe,bz)=>{"use strict";var hR=Dn(),ER=yP(),Zge=require("needle"),Ri=(k(),v(W)),Bxe=Ot(),ff=ie(),{handleHDBError:Xt,hdbErrors:Ez}=ge(),{HTTP_STATUS_CODES:Xr,HDB_ERROR_MSGS:wr,CHECK_LOGS_WRAPPER:Zl}=Ez,mf=Q(),CP=require("papaparse");ff.promisifyPapaParse();var yi=require("fs-extra"),eSe=require("path"),{chain:cz}=require("stream-chain"),lz=require("stream-json/streamers/StreamArray"),uz=require("stream-json/utils/Batch"),dz=require("stream-chain/utils/comp"),{finished:fz}=require("stream"),tSe=oe(),_z=AP(),rSe=bP(),{BulkLoadFileObject:LP,BulkLoadDataObject:nSe}=oz(),DP=iP(),{verifyBulkLoadAttributePerms:gz}=sR(),Fxe=OP(),Hxe=mr(),kxe=$i(),{databases:sSe}=(Me(),v(Et)),{coerceType:iSe}=(w_(),v(uk)),mz="No records parsed from csv file.",Xl=`${tSe.get("HDB_ROOT")}/tmp`,{schemaRegex:oSe}=Hi(),hz=1024*1024*2,pz=5e3,aSe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};bz.exports={csvDataLoad:cSe,csvURLLoad:lSe,csvFileLoad:uSe,importFromS3:dSe};async function cSe(e,t){let r=ER.dataObject(e);if(r)throw Xt(r,r.message,Xr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Rz(e.schema,e.table),i=CP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:PP.bind(null,s),dynamicTyping:!1}),a=new DP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&gz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Xt(new Error,c,Xr.BAD_REQUEST,void 0,void 0,!0);let l=new nSe(e.action,e.schema,e.table,i.data);return n=await _z.callOperationFunctionAsAwait(yz,l,null),n.message===mz?mz:Az(n.records,n.number_written)}catch(s){throw eu(s)}}o(cSe,"csvDataLoad");async function lSe(e){let t=ER.urlObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Xl}/${r}`;try{await fSe(e,r)}catch(s){throw mf.error(wr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,Zl(wr.DOWNLOAD_FILE_ERR(r)))}try{let s=new LP(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 MP(s);return await pR(n),i}catch(s){throw await pR(n),eu(s)}}o(lSe,"csvURLLoad");async function uSe(e){let t=ER.fileObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=new LP(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 MP(r)}catch(n){throw eu(n)}}o(uSe,"csvFileLoad");async function dSe(e){let t=ER.s3FileObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=eSe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Xl}/${s}`;let i=new LP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await mSe(s,e);let a=await MP(i);return await pR(r),a}catch(n){throw await pR(r),eu(n)}}o(dSe,"importFromS3");async function fSe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Zge("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Xt(n,s,n.statusCode,Ri.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}pSe(r,e.csv_url),await hSe(t,r.raw)}o(fSe,"downloadCSVFile");async function mSe(e,t){try{let r=`${Xl}/${e}`;await yi.mkdirp(Xl),await yi.writeFile(`${Xl}/${e}`,"",{flag:"a+"});let n=await yi.createWriteStream(r),s=await rSe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){mf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw mf.error(wr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,Zl(wr.S3_DOWNLOAD_ERR))}}o(mSe,"downloadFileFromS3");async function hSe(e,t){try{await yi.mkdirp(Xl),await yi.writeFile(`${Xl}/${e}`,t)}catch(r){throw mf.error(wr.WRITE_TEMP_FILE_ERR),Xt(r,Zl(wr.DEFAULT_BULK_LOAD_ERR))}}o(hSe,"writeFileToTempFolder");async function pR(e){if(e)try{await yi.access(e),await yi.unlink(e)}catch{mf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(pR,"deleteTempFile");function pSe(e,t){if(e.statusCode!==Ez.HTTP_STATUS_CODES.OK)throw Xt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Xr.BAD_REQUEST);if(!aSe[e.headers["content-type"]])throw Xt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Xr.BAD_REQUEST);if(!e.raw)throw Xt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Xr.BAD_REQUEST)}o(pSe,"validateURLResponse");async function MP(e){try{let t;switch(e.file_type){case Ri.VALID_S3_FILE_TYPES.CSV:t=await ESe(e);break;case Ri.VALID_S3_FILE_TYPES.JSON:t=await _Se(e);break;default:throw Xt(new Error,wr.DEFAULT_BULK_LOAD_ERR,Xr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,wr.INVALID_FILE_EXT_ERR(e))}return Az(t.records,t.number_written)}catch(t){throw eu(t)}}o(MP,"fileLoad");async function Sz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await hR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&gz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Xt(c);r(l)}}o(Sz,"validateChunk");async function Tz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ff.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!ff.isEmpty(c)&&!ff.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await _z.callOperationFunctionAsAwait(yz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,Zl(wr.INSERT_CSV_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.INSERT_CSV_ERR+" - "+c);r(l)}}o(Tz,"insertChunk");async function ESe(e){let t={records:0,number_written:0},r=Rz(e.schema,e.table);try{let n=new DP,s=yi.createReadStream(e.file_path,{highWaterMark:hz});s.setEncoding("utf8"),await CP.parsePromise(s,Sz.bind(null,e,n),PP.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,Xr.BAD_REQUEST);return s=yi.createReadStream(e.file_path,{highWaterMark:hz}),s.setEncoding("utf8"),await CP.parsePromise(s,Tz.bind(null,e,t),PP.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,Zl(wr.PAPA_PARSE_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.PAPA_PARSE_ERR+n)}}o(ESe,"callPapaParse");function Rz(e,t){let r=sSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>iSe(i,s));return n}o(Rz,"createTransformMap");function PP(e,t,r){let n=e.get(r);return n?n(t):ff.autoCast(t)}o(PP,"typeFunction");async function _Se(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new DP,s=cz([yi.createReadStream(e.file_path,{encoding:"utf-8"}),lz.withParser(),c=>c.value,new uz({batchSize:pz}),dz(async c=>{await Sz(e,n,r,c)})]);await new Promise((c,l)=>{fz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,Xr.BAD_REQUEST);let a=cz([yi.createReadStream(e.file_path,{encoding:"utf-8"}),lz.withParser(),c=>c.value,new uz({batchSize:pz}),dz(async c=>{await Tz(e,t,r,c)})]);return await new Promise((c,l)=>{fz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Xt(n,Zl(wr.INSERT_JSON_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.INSERT_JSON_ERR+n)}}o(_Se,"insertJson");async function yz(e){let t={};try{e.data&&e.data.length>0&&gSe(e.data[0])?t=await SSe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",mf.info(t.message))}catch(r){throw eu(r)}return t}o(yz,"callBulkFileLoad");function gSe(e){let t=Object.keys(e);for(let r of t)if(!oSe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(gSe,"validateColumnNames");async function SSe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=hR.insert;break;case"update":i=hR.update;break;case"upsert":i=hR.upsert;break;default:throw Xt(new Error,wr.INVALID_ACTION_PARAM_ERR(n),Xr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,wr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=ff.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw eu(a)}}o(SSe,"bulkFileLoad");function Az(e,t){return`successfully loaded ${t} of ${e} records`}o(Az,"buildResponseMsg");function eu(e){return Xt(e,Zl(wr.DEFAULT_BULK_LOAD_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(eu,"buildTopLevelErrMsg")});var BP=M(($xe,Dz)=>{"use strict";var xP=sn(),TSe=bP(),{AsyncParser:RSe}=require("json2csv"),_R=require("stream"),fs=ie(),UP=require("fs-extra"),ySe=require("path"),ks=Q(),{promisify:wz}=require("util"),Vp=ie(),{handleHDBError:_r,hdbErrors:ASe}=ge(),{HDB_ERROR_MSGS:Gn,HTTP_STATUS_CODES:gr}=ASe,{streamAsJSON:bSe}=(EA(),v(fv)),{Upload:ISe}=require("@aws-sdk/lib-storage"),{toCsvStream:NSe}=(Ro(),v(yv)),Iz=["search_by_value","search_by_hash","sql","search_by_conditions"],Nz=["json","csv"],Oz="json",Cz="csv",wSe="Successfully exported JSON locally.",OSe="Successfully exported CSV locally.",CSe=1e3,PSe=xP.searchByHash,LSe=xP.searchByValue,DSe=wz(_R.finished);Dz.exports={export_to_s3:xSe,export_local:MSe};async function MSe(e){ks.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Pz(e);if(!fs.isEmpty(t))throw ks.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(fs.isEmpty(e.path))throw ks.error(Gn.MISSING_VALUE("path")),_r(new Error,Gn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(fs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(ySe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=fs.buildFolderPath(e.path,r);await vSe(e.path);let s=await Lz(e);return await USe(n,e.format,s)}o(MSe,"export_local");async function vSe(e){if(ks.trace("in confirmPath"),fs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await UP.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,ks.error(n),_r(new Error,n,gr.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 ks.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(vSe,"confirmPath");async function USe(e,t,r){if(ks.trace("in saveToLocal"),Vp.isEmptyOrZeroLength(e))throw _r(new Error,Gn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmptyOrZeroLength(t))throw _r(new Error,Gn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmpty(r))throw _r(new Error,Gn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===Oz){let n=UP.createWriteStream(e);return bSe(r).pipe(n),await DSe(n),{message:wSe,path:e}}else if(t===Cz){let n=UP.createWriteStream(e),s=_R.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new RSe(i,c).fromInput(s).toOutput(n).promise(!1),{message:OSe,path:e}}throw _r(new Error,Gn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(USe,"saveToLocal");async function xSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Gn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Gn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Gn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Gn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Gn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Gn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Pz(e);if(!fs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);ks.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Lz(e)}catch(l){throw ks.error(l),l}let n,s=await TSe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new _R.PassThrough;if(e.format===Cz){i=e.s3.key+".csv";let l=NSe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Oz){i=e.s3.key+".json";let l=new _R.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let h=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=h,f!==0&&f%CSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Gn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new ISe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(xSe,"export_to_s3");function Pz(e){if(ks.trace("in exportCoreValidation"),fs.isEmpty(e.format))return"format missing";if(Nz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Nz.join(", ")}`;let t=e.search_operation.operation;if(fs.isEmpty(t))return"search_operation.operation missing";if(Iz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Iz.join(", ")}`}o(Pz,"exportCoreValidation");async function Lz(e){ks.trace("in getRecords");let t,r;if(Vp.isEmpty(e.search_operation)||Vp.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Gn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=LSe;break;case"search_by_hash":t=PSe;break;case"search_by_conditions":t=xP.searchByConditions;break;case"sql":{let n=oR();t=wz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ks.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Lz,"getRecords")});var vz=M((Kxe,Mz)=>{"use strict";var FP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Mz.exports=FP});var Bz=M((Wxe,xz)=>{"use strict";var BSe=(k(),v(W)),Uz=require("moment"),FSe=require("uuid").v4,HP=class{static{o(this,"JobObject")}constructor(){this.id=FSe(),this.type=void 0,this.start_datetime=Uz().valueOf(),this.created_datetime=Uz().valueOf(),this.end_datetime=void 0,this.status=BSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};xz.exports=HP});var kP=M((jxe,Kz)=>{"use strict";var HSe=require("uuid").v4,qz=Dn(),$z=sn(),kSe=ai(),GSe=Ku(),qSe=vz(),Mt=(k(),v(W)),$Se=Bz(),VSe=dS(),Ai=Q(),KSe=Zf(),hf=ie(),{promisify:YSe}=require("util"),tu=require("moment"),WSe=oR(),gR=yP(),Fz=OI(),{deleteTransactionLogsBeforeValidator:zSe}=VC(),{handleHDBError:Hz,hdbErrors:jSe,ClientError:QSe}=ge(),{HTTP_STATUS_CODES:kz}=jSe,Gz=$z.searchByValue,JSe=$z.searchByHash,XSe=qz.insert,ZSe=YSe(WSe.evaluateSQL),eTe=qz.update;Kz.exports={addJob:nTe,updateJob:iTe,handleGetJob:tTe,handleGetJobsByStartDate:rTe,getJobById:Vz};async function tTe(e){if(e.id===void 0)throw new QSe("'id' is required");let t=await Vz(e.id);return hf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(tTe,"handleGetJob");async function rTe(e){try{let t=await sTe(e);if(Ai.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=tu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=tu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ai.error(r),new Error(r)}}o(rTe,"handleGetJobsByStartDate");async function nTe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||hf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ai.info(d),t.error=d,t}if(!Mt.JOB_TYPE_ENUM[e.operation])return Ai.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Mt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=gR.fileObject(e);break;case Mt.OPERATIONS_ENUM.CSV_URL_LOAD:n=gR.urlObject(e);break;case Mt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=gR.dataObject(e);break;case Mt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=gR.s3FileObject(e);break;case Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Fz(e,"date");break;case Mt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Fz(e,"timestamp");break;case Mt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=zSe(e);break;case Mt.OPERATIONS_ENUM.RESTART_SERVICE:if(Mt.HDB_PROCESS_SERVICES[e.service]===void 0)throw Hz(new Error,"Invalid service",kz.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Hz(n,n.message,kz.BAD_REQUEST,void 0,void 0,!0);let s=new $Se;s.type=e.operation===Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new kSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Gz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=HSe();try{a=await Gz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ai.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new KSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await XSe(l)}catch(d){return Ai.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ai.trace(d)}return t}o(nTe,"addJob");async function sTe(e){let t=tu(e.from_date,tu.ISO_8601),r=tu(e.to_date,tu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new qSe(n,e.hdb_user);try{return await ZSe(s)}catch(i){throw Ai.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(sTe,"getJobsInDateRange");async function Vz(e){if(hf.isEmptyOrZeroLength(e))return hf.errorizeMessage("Invalid job ID specified.");let t=new GSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await JSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ai.error(n),hf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Vz,"getJobById");async function iTe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(hf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Mt.JOB_STATUS_ENUM.COMPLETE||e.status===Mt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=tu().valueOf());let t=new VSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await eTe(t),r}o(iTe,"updateJob")});var Zz=M((Jxe,Xz)=>{"use strict";var Yz=ie(),Or=(k(),v(W)),oTe=require("moment"),SR=vP(),Kp=Q(),Wz=kP(),zz=BP(),jz=El(),Qz=nt(),aTe=QT(),cTe=sf(),{parentPort:lTe,isMainThread:Jz}=require("worker_threads"),{onMessageByType:uTe}=nt(),GP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function dTe(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(Yz.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Yz.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await so(e,SR.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await so(e,SR.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await so(e,SR.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await so(e,SR.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await so(e,zz.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await so(e,zz.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await so(e,jz.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,jz.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,aTe.deleteTransactionLogsBefore);break;case Or.JOB_TYPE_ENUM.restart_service:return await so(e,cTe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(dTe,"parseMessage");async function so(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=oTe().valueOf(),await Wz.updateJob(e.job),await fTe(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):Kp.error(`There was an error running ${t.name} job with id ${e.job.id}`),Kp.error(n),e.job.message=n,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await Wz.updateJob(e.job)}catch(s){throw Kp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function fTe(e){Kp.trace("launching job thread:",e),Jz?Qz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):lTe.postMessage({type:Or.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(fTe,"launchJobThread");Jz&&uTe(Or.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Qz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Kp.error(r)}});Xz.exports={parseMessage:dTe,RunnerMessage:GP}});var tj=M((Zxe,ej)=>{"use strict";var mTe=ie(),qP=oe(),pc=(k(),v(W)),hTe=Ot(),pTe=mr(),io=Q(),ETe=OP(),_Te=$i();qP.initSync();ej.exports={postOperationHandler:STe,sendOperationTransaction:Yp};async function Yp(e,t,r,n){if(e.schema===pc.SYSTEM_SCHEMA_NAME)return;let s=gTe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await pTe.publishToStream(`${hTe.SUBJECT_PREFIXES.TXN}.${e.schema}`,_Te.createNatsTableStreamName(e.schema,e.table),n,s))}o(Yp,"sendOperationTransaction");function gTe(e,t,r){if(mTe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(gTe,"convertCRUDOperationToTransaction");async function STe(e,t,r){if(!qP.get(pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=qP.get(pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new ETe(t.txn_time,n,s);switch(e.operation){case pc.OPERATIONS_ENUM.INSERT:try{await Yp(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case pc.OPERATIONS_ENUM.DELETE:try{await Yp(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPDATE:try{await Yp(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPSERT:try{await Yp(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(STe,"postOperationHandler")});var J,rj=ce(()=>{J=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var qC={};we(qC,{chooseOperation:()=>Rj,executeJob:()=>Gs,getOperationFunction:()=>yj,operation:()=>JP,processLocalTransaction:()=>Tj});async function Tj(e,t){try{if(e.body.operation!=="read_log"&&(Qp.default.log_level===Vf.INFO||Qp.default.log_level===Vf.DEBUG||Qp.default.log_level===Vf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Sn.info(c)}}catch(n){Sn.error(n)}let r=await gj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return yTe[e.body.operation]&&hj.default.setSchemaDataToGlobal(n=>{n&&Sn.error(n)}),r}function Rj(e){let t;try{t=yj(e)}catch(s){throw Sn.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=yR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=yR.default.checkASTPermissions(e,i);if(a)throw Sn.error(`${nj.FORBIDDEN} from operation ${e.operation}`),Sn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.LOGIN&&e.operation!==q.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=mj.default.verifyPerms(i,s);if(a)throw Sn.error(`${nj.FORBIDDEN} from operation ${e.operation}`),Sn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function yj(e){if(Sn.trace(`getOperationFunction with operation: ${e.operation}`),sj.has(e.operation))return sj.get(e.operation);throw(0,qs.handleHDBError)(new Error,qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function JP(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Rj(e);return Tj({body:e},n)}async function ATe(e){Sn.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[Jy]=!0;let a;switch(i.operation){case q.INSERT:a=await nu.default.insert(i);break;case q.UPDATE:a=await nu.default.update(i);break;case q.UPSERT:a=await nu.default.upsert(i);break;case q.DELETE:a=await _f.default.deleteRecord(i);break;default:Sn.warn("invalid operation in catchup");break}await Sj.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){Sn.info("Invalid operation in transaction"),Sn.error(a)}}async function Gs(e){(0,_j.transformReq)(e);let t,r;try{if(r=await AR.default.addJob(e),r){t=r.createdJob,Sn.info("addJob result",r);let n=new YP.default.RunnerMessage(t,e);return{message:await YP.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Sn.error(i),(0,qs.handleHDBError)(n,i)}}function bTe(){let e=new Map;return e.set(q.INSERT,new J(nu.default.insert)),e.set(q.UPDATE,new J(nu.default.update)),e.set(q.UPSERT,new J(nu.default.upsert)),e.set(q.SEARCH_BY_CONDITIONS,new J(Ef.default.searchByConditions)),e.set(q.SEARCH_BY_HASH,new J(Ef.default.searchByHash)),e.set(q.SEARCH_BY_ID,new J(Ef.default.searchByHash)),e.set(q.SEARCH_BY_VALUE,new J(Ef.default.searchByValue)),e.set(q.SEARCH,new J(TTe)),e.set(q.SQL,new J(RTe)),e.set(q.CSV_DATA_LOAD,new J(Gs,Wp.default.csvDataLoad)),e.set(q.CSV_FILE_LOAD,new J(Gs,Wp.default.csvFileLoad)),e.set(q.CSV_URL_LOAD,new J(Gs,Wp.default.csvURLLoad)),e.set(q.IMPORT_FROM_S3,new J(Gs,Wp.default.importFromS3)),e.set(q.CREATE_SCHEMA,new J(bi.default.createSchema)),e.set(q.CREATE_DATABASE,new J(bi.default.createSchema)),e.set(q.CREATE_TABLE,new J(bi.default.createTable)),e.set(q.CREATE_ATTRIBUTE,new J(bi.default.createAttribute)),e.set(q.DROP_SCHEMA,new J(bi.default.dropSchema)),e.set(q.DROP_DATABASE,new J(bi.default.dropSchema)),e.set(q.DROP_TABLE,new J(bi.default.dropTable)),e.set(q.DROP_ATTRIBUTE,new J(bi.default.dropAttribute)),e.set(q.DESCRIBE_SCHEMA,new J(zp.default.describeSchema)),e.set(q.DESCRIBE_DATABASE,new J(zp.default.describeSchema)),e.set(q.DESCRIBE_TABLE,new J(zp.default.describeTable)),e.set(q.DESCRIBE_ALL,new J(zp.default.describeAll)),e.set(q.DELETE,new J(_f.default.deleteRecord)),e.set(q.ADD_USER,new J(pf.default.addUser)),e.set(q.ALTER_USER,new J(pf.default.alterUser)),e.set(q.DROP_USER,new J(pf.default.dropUser)),e.set(q.LIST_USERS,new J(pf.default.listUsersExternal)),e.set(q.LIST_ROLES,new J(jp.default.listRoles)),e.set(q.ADD_ROLE,new J(jp.default.addRole)),e.set(q.ALTER_ROLE,new J(jp.default.alterRole)),e.set(q.DROP_ROLE,new J(jp.default.dropRole)),e.set(q.USER_INFO,new J(pf.default.userInfo)),e.set(q.READ_LOG,new J(oj.default)),e.set(q.ADD_NODE,new J(aj.default)),e.set(q.UPDATE_NODE,new J($P.default)),e.set(q.SET_NODE_REPLICATION,new J($P.default)),e.set(q.REMOVE_NODE,new J(cj.default)),e.set(q.CONFIGURE_CLUSTER,new J(lj.default)),e.set(q.PURGE_STREAM,new J(uj.default)),e.set(q.SET_CONFIGURATION,new J(WP.default.setConfiguration)),e.set(q.CLUSTER_STATUS,new J(dj.default.clusterStatus)),e.set(q.CLUSTER_NETWORK,new J(fj.default)),e.set(q.CLUSTER_SET_ROUTES,new J(TR.default.setRoutes)),e.set(q.CLUSTER_GET_ROUTES,new J(TR.default.getRoutes)),e.set(q.CLUSTER_DELETE_ROUTES,new J(TR.default.deleteRoutes)),e.set(q.EXPORT_TO_S3,new J(Gs,VP.default.export_to_s3)),e.set(q.CREATE_CSR,new J(ru.default.createCsr)),e.set(q.SIGN_CERTIFICATE,new J(ru.default.signCertificate)),e.set(q.LIST_CERTIFICATES,new J(ru.default.listCertificates)),e.set(q.ADD_CERTIFICATES,new J(ru.default.addCertificate)),e.set(q.REMOVE_CERTIFICATE,new J(ru.default.removeCertificate)),e.set(q.GET_KEY,new J(ru.default.getKey)),e.set(q.ADD_NODE_BACK,new J(xO)),e.set(q.REMOVE_NODE_BACK,new J(BO)),e.set(q.DELETE_FILES_BEFORE,new J(Gs,_f.default.deleteFilesBefore)),e.set(q.DELETE_RECORDS_BEFORE,new J(Gs,_f.default.deleteFilesBefore)),e.set(q.EXPORT_LOCAL,new J(Gs,VP.default.export_local)),e.set(q.SEARCH_JOBS_BY_START_DATE,new J(AR.default.handleGetJobsByStartDate)),e.set(q.GET_JOB,new J(AR.default.handleGetJob)),e.set(q.GET_FINGERPRINT,new J(RR.default.getFingerprint)),e.set(q.SET_LICENSE,new J(RR.default.setLicense)),e.set(q.GET_REGISTRATION_INFO,new J(RR.default.getRegistrationInfo)),e.set(q.RESTART,new J(KP.default.restart)),e.set(q.RESTART_SERVICE,new J(Gs,KP.default.restartService)),e.set(q.CATCHUP,new J(ATe)),e.set(q.SYSTEM_INFORMATION,new J(pj.default.systemInformation)),e.set(q.DELETE_AUDIT_LOGS_BEFORE,new J(Gs,_f.default.deleteAuditLogsBefore)),e.set(q.READ_AUDIT_LOG,new J(ij.default)),e.set(q.CREATE_AUTHENTICATION_TOKENS,new J(mw)),e.set(q.REFRESH_OPERATION_TOKEN,new J(hw)),e.set(q.LOGIN,new J(vC)),e.set(q.LOGOUT,new J(UC)),e.set(q.GET_CONFIGURATION,new J(WP.default.getConfiguration)),e.set(q.CUSTOM_FUNCTIONS_STATUS,new J(vt.default.customFunctionsStatus)),e.set(q.GET_CUSTOM_FUNCTIONS,new J(vt.default.getCustomFunctions)),e.set(q.GET_COMPONENT_FILE,new J(vt.default.getComponentFile)),e.set(q.GET_COMPONENTS,new J(vt.default.getComponents)),e.set(q.SET_COMPONENT_FILE,new J(vt.default.setComponentFile)),e.set(q.DROP_COMPONENT,new J(vt.default.dropComponent)),e.set(q.GET_CUSTOM_FUNCTION,new J(vt.default.getCustomFunction)),e.set(q.SET_CUSTOM_FUNCTION,new J(vt.default.setCustomFunction)),e.set(q.DROP_CUSTOM_FUNCTION,new J(vt.default.dropCustomFunction)),e.set(q.ADD_CUSTOM_FUNCTION_PROJECT,new J(vt.default.addComponent)),e.set(q.ADD_COMPONENT,new J(vt.default.addComponent)),e.set(q.DROP_CUSTOM_FUNCTION_PROJECT,new J(vt.default.dropCustomFunctionProject)),e.set(q.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(vt.default.packageComponent)),e.set(q.PACKAGE_COMPONENT,new J(vt.default.packageComponent)),e.set(q.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(vt.default.deployComponent)),e.set(q.DEPLOY_COMPONENT,new J(vt.default.deployComponent)),e.set(q.READ_TRANSACTION_LOG,new J(zP.default.readTransactionLog)),e.set(q.DELETE_TRANSACTION_LOGS_BEFORE,new J(Gs,zP.default.deleteTransactionLogsBefore)),e.set(q.INSTALL_NODE_MODULES,new J(jP.default.installModules)),e.set(q.AUDIT_NODE_MODULES,new J(jP.default.auditModules)),e.set(q.GET_BACKUP,new J(bi.default.getBackup)),e.set(q.CLEANUP_ORPHAN_BLOBS,new J(bi.default.cleanupOrphanBlobs)),e.set(q.ADD_SSH_KEY,new J(vt.default.addSSHKey)),e.set(q.UPDATE_SSH_KEY,new J(vt.default.updateSSHKey)),e.set(q.DELETE_SSH_KEY,new J(vt.default.deleteSSHKey)),e.set(q.LIST_SSH_KEYS,new J(vt.default.listSSHKeys)),e.set(q.SET_SSH_KNOWN_HOSTS,new J(vt.default.setSSHKnownHosts)),e.set(q.GET_SSH_KNOWN_HOSTS,new J(vt.default.getSSHKnownHosts)),e.set(q.GET_ANALYTICS,new J(YC)),e.set(q.LIST_METRICS,new J(WC)),e.set(q.DESCRIBE_METRIC,new J(zC)),e.set(q.GET_STATUS,new J(ZC)),e.set(q.SET_STATUS,new J(eP)),e.set(q.CLEAR_STATUS,new J(XC)),e}var Ef,yR,Wp,bi,zp,_f,ij,pf,jp,vt,Qp,oj,aj,$P,cj,lj,uj,dj,fj,TR,VP,mj,AR,qs,RR,KP,QP,nu,hj,pj,YP,WP,zP,jP,Ej,_j,ru,gj,Sj,nj,Sn,TTe,RTe,yTe,sj,$C=ce(()=>{Ef=w(sn()),yR=w(oR()),Wp=w(vP()),bi=w(ep()),zp=w(Ua()),_f=w(El()),ij=w(uO()),pf=w(ts()),jp=w(Oh()),vt=w(GC()),Qp=w(Q()),oj=w(pO()),aj=w(pT()),$P=w(qO()),cj=w(_T()),lj=w(KO()),uj=w(YO()),dj=w(jO()),fj=w(JO()),TR=w(yT()),VP=w(BP()),mj=w(sR()),AR=w(kP());k();qs=w(ge()),RR=w(uC()),KP=w(sf()),QP=w(require("util")),nu=w(Dn()),hj=w(ii()),pj=w($d()),YP=w(Zz());Td();qT();WP=w(wt()),zP=w(QT()),jP=w(wp()),Ej=w(Xs()),_j=w(ie());Dr();ru=w(as());Kd();QC();gj=w(AP()),Sj=w(tj());Bp();rj();({HTTP_STATUS_CODES:nj}=qs.hdbErrors),Sn=Qp.default.loggerWithTag("operation"),TTe=QP.promisify(Ef.default.search),RTe=QP.promisify(yR.default.evaluateSQL),yTe={[q.CREATE_ATTRIBUTE]:!0,[q.CREATE_TABLE]:!0,[q.CREATE_SCHEMA]:!0,[q.DROP_ATTRIBUTE]:!0,[q.DROP_TABLE]:!0,[q.DROP_SCHEMA]:!0};o(Tj,"processLocalTransaction");sj=bTe();Le.operation=JP;o(Rj,"chooseOperation");o(yj,"getOperationFunction");(0,Ej._assignPackageExport)("operation",JP);o(JP,"operation");o(ATe,"catchup");o(Gs,"executeJob");o(bTe,"initializeOperationFunctionMap")});var NR=M((oBe,Ij)=>{"use strict";var bR=(k(),v(W)),ITe=ie(),Jp=Q(),{handleHDBError:XP,hdbErrors:IR}=ge(),{isMainThread:NTe}=require("worker_threads"),{Readable:wTe}=require("stream"),Aj=require("os"),OTe=require("util"),CTe=Ew(),PTe=OTe.promisify(CTe.authorize),bj=($C(),v(qC)),{createGzip:LTe,constants:DTe}=require("zlib"),MTe=[bR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,bR.OPERATIONS_ENUM.LOGIN,bR.OPERATIONS_ENUM.LOGOUT];function vTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Aj.EOL}Stack: ${e.stack} ${Aj.EOL}Terminating ${NTe?"HDB":"thread"}.`;console.error(t),Jp.fatal(t),process.exit(1)}o(vTe,"handleServerUncaughtException");function UTe(e,t,r){if(Jp[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:IR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(UTe,"serverErrorHandler");function xTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=XP(new Error,"Invalid JSON.",IR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(ITe.isEmpty(e.body.operation)){let n=XP(new Error,"Request body must include an 'operation' property.",IR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(xTe,"reqBodyValidationHandler");function BTe(e,t,r){let n;!MTe.includes(e.body.operation)||e.body.operation===bR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?PTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Jp.warn(i),Jp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(XP(i,a,IR.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(BTe,"authHandler");async function FTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=bj.chooseOperation(e.body);let s=await bj.processLocalTransaction(e,n);if(s instanceof wTe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(LTe({level:DTe.Z_BEST_SPEED})))}return s}catch(s){throw Jp.error(s),s}}o(FTe,"handlePostRequest");Ij.exports={authHandler:BTe,handlePostRequest:FTe,handleServerUncaughtException:vTe,serverErrorHandler:UTe,reqBodyValidationHandler:xTe}});var Cj=M((cBe,Oj)=>{"use strict";var HTe=require("fastify-plugin"),{handlePostRequest:Nj,authHandler:kTe,reqBodyValidationHandler:GTe}=NR();async function qTe(e){e.decorate("hdbCore",{preValidation:[GTe,kTe],request:o((t,r)=>wj(Nj(t,r)),"request"),requestWithoutAuthentication:o((t,r)=>wj(Nj(t,r,!0)),"requestWithoutAuthentication")})}o(qTe,"hdbCore");async function wj(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(wj,"convertAsyncIterators");Oj.exports=HTe(qTe)});var Lj=M((dBe,Pj)=>{"use strict";var uBe=require("fs"),wR=oe();wR.initSync();var{CONFIG_PARAMS:ZP}=(k(),v(W)),$Te=1024*1024*1024;function VTe(e){let t=wR.get(ZP.HTTP_TIMEOUT),r=wR.get(ZP.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:$Te,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:wR.get(ZP.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(VTe,"getServerOptions");Pj.exports=VTe});var vj=M((mBe,Mj)=>{"use strict";var eL=oe();eL.initSync();var{CONFIG_PARAMS:Dj}=(k(),v(W));function KTe(){let e=eL.get(Dj.HTTP_CORSACCESSLIST),t=eL.get(Dj.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(KTe,"getCORSOptions");Mj.exports=KTe});var Bj=M((pBe,xj)=>{"use strict";var Uj=oe();Uj.initSync();var YTe=(k(),v(W));function WTe(){return Uj.get(YTe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(WTe,"getHeaderTimeoutConfig");xj.exports=WTe});var rL={};we(rL,{customFunctionsServer:()=>QTe,ready:()=>Jj,start:()=>jTe});function jTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ra||(ra=Qj(t),Le.http((await ra).server));let a=await ra,c=(0,tL.dirname)(s),l=(0,tL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Fj.has(c)){Fj.add(c);try{a.register(XTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")yt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Jj}}async function QTe(){try{yt.info("In Custom Functions Fastify server"+process.cwd()),yt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yt.debug(`Custom Functions server process ${process.pid} starting up.`),await JTe();let e=Vj.get(U.HTTP_SECUREPORT)>0,t;try{t=ra=await Qj(e)}catch(r){throw yt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw yt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){yt.error(`Custom Functions ${process.pid} Error: ${e}`),yt.error(e),process.exit(1)}}async function JTe(){try{yt.info("Custom Functions starting configuration."),await Kj.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function XTe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,Hj.existsSync)(e)&&r.register($j.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:yt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?yt.error(s.message):s&&yt.error(s),a()})}catch(n){yt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Qj(e){yt.info("Custom Functions starting buildServer.");let t=(0,Yj.default)(e),r=(0,kj.default)(t);r.server.headersTimeout=(0,zj.default)(),r.setErrorHandler(jj.serverErrorHandler);let n=(0,Wj.default)();return n&&r.register(Gj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(qj.default),await r.register(zTe),await r.after(),am(r),yt.info("Custom Functions completed buildServer."),r}function Jj(){if(ra)return ra.then?ra.then(e=>e.ready()):ra.ready()}var tL,Hj,kj,Gj,qj,$j,Vj,yt,zTe,Kj,Yj,Wj,zj,jj,ra,Fj,Xj=ce(()=>{tL=require("path"),Hj=require("fs"),kj=w(require("fastify")),Gj=w(require("@fastify/cors")),qj=w(lw()),$j=w(require("@fastify/autoload")),Vj=w(oe());k();yt=w(Q()),zTe=w(Cj()),Kj=w(ts()),Yj=w(Lj()),Wj=w(vj()),zj=w(Bj()),jj=w(NR());Ro();Dr();Fj=new Set;o(jTe,"start");o(QTe,"customFunctionsServer");o(JTe,"setUp");o(XTe,"buildRouteFolder");o(Qj,"buildServer");o(Jj,"ready")});var nL={};we(nL,{start:()=>ZTe});function ZTe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,n2.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(a=>n(s._nodeRequest,s._nodeResponse,()=>{a(i(s))}))}),!0}},handleFile(t,r,n){e2||(e2=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=Zj.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,t2.default)(s,(0,r2.realpathSync)(a))}}return i(s)},{runFirst:!0})),Zj.set(r,n)}}}var t2,r2,n2,Zj,e2,s2=ce(()=>{t2=w(require("send")),r2=require("fs"),n2=w(require("serve-static")),Zj=new Map;o(ZTe,"start")});var sL={};we(sL,{start:()=>eRe});function eRe({override:e}){return{handleFile:o((t,r,n)=>{OR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,i2.parse)(t))){if(process.env[s]!==void 0)if(OR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)OR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var i2,OR,o2=ce(()=>{i2=require("dotenv"),OR=w(Q());o(eRe,"start")});var aL={};we(aL,{DataLoaderError:()=>ms,DataLoaderResult:()=>gf,EmptyFileError:()=>DR,FileParseError:()=>LR,InvalidPropertyTypeError:()=>MR,MissingRequiredPropertyError:()=>Xp,RecordProcessingError:()=>Zp,SystemDatabaseError:()=>vR,UnsupportedFileExtensionError:()=>PR,computeRecordHash:()=>oL,handleApplication:()=>nRe,loadDataFile:()=>h2,suppressHandleApplicationWarning:()=>rRe});function oL(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,c2.createHash)("sha256").update(n).digest("hex")}function m2(e){return e.system&&e.system[iL]?e.system[iL]:CR||(CR=ze({database:"system",table:iL,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),CR)}async function tRe(e,t,r,n){try{let s=m2(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return $s.error?.(`Failed to get stored hash: ${s.message}`),null}}async function a2(e,t,r,n,s){try{let i=m2(s),a=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:a,hash:n})}catch(i){$s.error?.(`Failed to store hash: ${i.message}`)}}function nRe(e){if((0,u2.getWorkerIndex)()!==0){$s.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||h2(t,ln,He).then(r=>{$s.debug?.("Data loader processed file: %s: %s",(0,na.basename)(t.absolutePath),r.message)})})}async function h2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,na.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,l2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new PR(t,i)}catch(f){throw f instanceof ms?f:new LR(t,f)}if(!a)throw new DR(t);let{database:c,table:l,records:u}=a;if(!l)throw new Xp(t,"table");if(!u)throw new Xp(t,"records");if(!Array.isArray(u))throw new MR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new vR(c,l);try{let f;if(c&&s[c]&&s[c][l])$s.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])$s.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{$s.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let T=u[0];Object.keys(T).map(y=>{let N={name:y,type:typeof T[y]};return y==="id"&&(N.isPrimaryKey=!0),N}).forEach(y=>{R.push(y)})}f=await ze({database:c,table:l,attributes:R})}let m=u.length,h=0,p=0,_=0,g=100;for(let R=0;R<u.length;R+=g){let T=u.slice(R,R+g),y=[];for(let N of T)y.push(async()=>{try{let O=null,F=N.id;F!==void 0&&(O=await f.get(F));let Z=oL(N);if(!O){h++;let $=await f.put(N);return await a2(c,l,F,Z,s),$}let G=await tRe(c,l,F,s);if(!G)return _++,Promise.resolve({inserted:0,updated:0});let Y={};for(let $ of Object.keys(N))$ in O&&(Y[$]=O[$]);return oL(Y)!==G?(_++,Promise.resolve({inserted:0,updated:0})):Z!==G?(p++,await f.patch(F,N),await a2(c,l,F,Z,s),{updated:1}):(_++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof ms)$s.error?.(`Record processing error: ${O.message}`);else{let F=new Zp(d,O);$s.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(y.map(N=>N()))}if(h>0||p>0){let R=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(R+=` (${_} records skipped)`),$s.info?.(R),new gf(t,c,l,"success",h+p,R)}else if(_>0){let R=`All ${_} records in ${d} already up-to-date`;return $s.info?.(R),new gf(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return $s.info?.(R),new gf(t,c,l,"success",0,R)}}catch(f){throw f instanceof ms?f:new Zp(d,f)}}var na,c2,l2,u2,sa,d2,f2,$s,iL,CR,rRe,ms,PR,LR,DR,Xp,MR,vR,Zp,gf,p2=ce(()=>{na=require("node:path"),c2=require("node:crypto"),l2=require("yaml");Me();u2=w(nt()),sa=w(tn()),d2=w(ge()),f2=w(Q()),$s=f2.default.forComponent("dataLoader"),iL="hdb_dataloader_hash";o(oL,"computeRecordHash");o(m2,"getHashTrackingTable");o(tRe,"getStoredHash");o(a2,"storeHash");rRe=!0;o(nRe,"handleApplication");o(h2,"loadDataFile");ms=class extends d2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=sa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},PR=class extends ms{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},LR=class extends ms{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,na.basename)(t)}: ${r.message}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},DR=class extends ms{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,na.basename)(t)} is empty or invalid`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},Xp=class extends ms{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,na.basename)(t)} is missing required "${r}" property`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},MR=class extends ms{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,na.basename)(t)} has invalid "${r}" property, expected ${n}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},vR=class extends ms{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,sa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Zp=class extends ms{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},gf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var cL={};we(cL,{hdbServer:()=>aRe,start:()=>aRe});async function aRe(e){try{oo.default.debug("In Fastify server"+process.cwd()),oo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),oo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=E2.default.isMaster,await cRe();let t=e.securePort>0;Sf=lRe(t),await Sf.ready(),e||(e={}),e.isOperationsServer=!0;try{Le.http(Sf.server,e),Sf.server.closeIdleConnections||await Sf.listen({port:0,host:"::"})}catch(r){throw Sf.close(),oo.default.error(r),oo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),oo.default.fatal(t),process.exit(1)}}async function cRe(){oo.default.trace("Configuring HarperDB process."),b2.default.setSchemaDataToGlobal(),await N2.default.setUsersWithRolesCache(),await w2.default.getLicense()}function lRe(e){oo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=uRe(e),r=(0,_2.default)(t);r.server.headersTimeout=fRe(),r.setErrorHandler(_c.serverErrorHandler);let n=dRe();n&&r.register(g2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){u.sent||u.raw.headersSent||u.raw.writableEnded||r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(R2.default),r.register(S2.default),r.register(T2.default,{root:y2.default.join(A2.PACKAGE_ROOT,"studio/build-local")}),am(r);let s=Ec.default.get(jy.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!I2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[_c.reqBodyValidationHandler,_c.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,_c.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),oo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function uRe(e){let t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ec.default.get(eE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:iRe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function dRe(){let e=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORS),t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===oRe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function fRe(){return Ec.default.get(eE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??sRe}var E2,Ec,oo,_2,g2,S2,T2,R2,y2,A2,b2,I2,N2,w2,_c,sRe,iRe,oRe,eE,Sf,O2=ce(()=>{E2=w(require("cluster")),Ec=w(oe());k();oo=w(Q()),_2=w(require("fastify")),g2=w(require("@fastify/cors")),S2=w(require("@fastify/compress")),T2=w(require("@fastify/static")),R2=w(lw()),y2=w(require("path")),A2=w(bt()),b2=w(ii()),I2=w(ie()),N2=w(ts()),w2=w(Jd());Dr();_c=w(NR());Ro();Ec.default.initSync();sRe=6e4,iRe=1024*1024*1024,oRe="TRUE",{CONFIG_PARAMS:eE}=W;o(aRe,"operationsServer");o(cRe,"setUp");o(lRe,"buildServer");o(uRe,"getServerOptions");o(dRe,"getCORSOpts");o(fRe,"getHeaderTimeoutConfig")});var hL={};we(hL,{disableNATS:()=>hRe,publishToStream:()=>BR,setNATSReplicator:()=>lL,setPublishToStream:()=>pRe,setSubscription:()=>mL,start:()=>mRe});function mRe(){tE.default.get(U.CLUSTERING_ENABLED)&&_Re()}function hRe(e=!0){M2=e}function pRe(e,t){BR=e,mL=t}function _Re(){if(M2||process.env._DISABLE_NATS)return;let e=st(),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];lL(s,r,i)}}Il((r,n)=>{lL(r.tableName,r.databaseName,r),n&&U2(r)}),!C2&&(C2=!0)}function lL(e,t,r){if(t==="system"&&gRe.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 Ur{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){U2(i)}static subscribe(){let i=new Vn;return mL(t,e,i),i}static subscribeOnThisThread(i){return i<(tE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ERe)}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 UR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=v2;return i}o(n,"getNATSTransaction")}function U2(e){let t=tE.default.get(U.CLUSTERING_NODENAME);BR(`${dL.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,fL.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 P2,dL,fL,L2,D2,tE,xR,M2,BR,mL,ERe,v2,C2,gRe,UR,uL,x2=ce(()=>{Me();Pa();P2=w(mr()),dL=w(Ot()),fL=w($i());Ru();L2=w(Iw()),D2=w(yn()),tE=w(oe());k();xR=w(Q());o(mRe,"start");o(hRe,"disableNATS");BR=P2.publishToStream,mL=L2.setSubscription;o(pRe,"setPublishToStream");ERe=2;o(_Re,"assignReplicationSource");gRe=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(lL,"setNATSReplicator");o(U2,"publishSchema");UR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=tE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(xR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(BR(`${dL.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,fL.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw xR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},uL=class extends UR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,D2.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};v2=new uL});var EL=M((xBe,B2)=>{"use strict";var rE=oe();rE.initSync();var Tf=require("fs-extra"),pL=require("path"),Rf=(k(),v(W)),SRe=require("crypto"),TRe=require("uuid").v4;B2.exports=RRe;function RRe(){if(rE.getHdbBasePath()!==void 0){let e=pL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=pL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=pL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Tf.accessSync(r),Tf.accessSync(e),Tf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=TRe(),i=SRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Tf.writeFileSync(r,s),Tf.writeFileSync(e,i.privateKey),Tf.writeFileSync(t,i.publicKey)}else throw n}}}o(RRe,"checkJWTTokenExist")});var H2=M((FBe,F2)=>{"use strict";var _L=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};F2.exports={HdbInfoInsertObject:_L}});var q2=M((kBe,G2)=>{"use strict";var k2=(k(),v(W)),gL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[k2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[k2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};G2.exports={UpgradeObject:gL}});var FR=M((qBe,V2)=>{"use strict";var Vs=require("prompt"),yf=require("chalk"),$2=Q(),Ii=require("os"),SL=xc(),TL=["yes","y"];async function yRe(e){let t=`${Ii.EOL}`+yf.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}`;Vs.override=SL(["CONFIRM_UPGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:yf.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 Vs.get([r])}catch(s){return $2.error("There was an error when prompting user about an upgrade."),$2.error(s),!1}return TL.includes(n.CONFIRM_UPGRADE)}o(yRe,"forceUpdatePrompt");async function ARe(e){let t=`${Ii.EOL}`+yf.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}`);Vs.override=SL(["CONFIRM_DOWNGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:yf.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 Vs.get([r]);return TL.includes(n.CONFIRM_DOWNGRADE)}o(ARe,"forceDowngradePrompt");async function bRe(){let e=`${Ii.EOL}`+yf.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");Vs.override=SL(["GENERATE_CERTS"]),Vs.start(),Vs.message=e;let t={properties:{GENERATE_CERTS:{description:yf.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 Vs.get([t]);return TL.includes(r.GENERATE_CERTS)}o(bRe,"upgradeCertsPrompt");V2.exports={forceUpdatePrompt:yRe,forceDowngradePrompt:ARe,upgradeCertsPrompt:bRe}});var yL=M((VBe,K2)=>{"use strict";var RL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};K2.exports=RL});var W2=M((QBe,Y2)=>{"use strict";var IRe=ie(),NRe=wt(),YBe=Q(),WBe=require("path"),zBe=require("fs"),jBe=(k(),v(W));Y2.exports={getOldPropsValue:wRe};function wRe(e,t,r=!1){let n=t.getRaw(e);return IRe.isNotEmptyAndHasValue(n)?n:r?NRe.getDefaultConfig(e):""}o(wRe,"getOldPropsValue")});var J2=M((XBe,Q2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),ORe=require("properties-reader"),CRe=yL(),Sr=Q(),{getOldPropsValue:At}=W2(),{HDB_SETTINGS_NAMES:ye,CONFIG_PARAMS:su}=(k(),v(W)),iu=wt(),HR=oe(),z2=ie(),ao=(k(),v(W)),AL=new CRe("3.1.0"),j2=[];function PRe(){let e=ORe(HR.get(ye.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
39
39
 
40
40
  ;The directory selected during install where the database files reside.
41
- ${ye.HDB_ROOT_KEY} = ${Tt(ye.HDB_ROOT_KEY,e)}
41
+ ${ye.HDB_ROOT_KEY} = ${At(ye.HDB_ROOT_KEY,e)}
42
42
  ;The port the HarperDB REST interface will listen on.
43
- ${ye.SERVER_PORT_KEY} = ${Tt(ye.SERVER_PORT_KEY,e)}
43
+ ${ye.SERVER_PORT_KEY} = ${At(ye.SERVER_PORT_KEY,e)}
44
44
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
45
- ${ye.HTTP_SECURE_ENABLED_KEY} = ${Tt(ye.HTTP_SECURE_ENABLED_KEY,e)}
45
+ ${ye.HTTP_SECURE_ENABLED_KEY} = ${At(ye.HTTP_SECURE_ENABLED_KEY,e)}
46
46
  ;The path to the SSL certificate used when running with HTTPS enabled.
47
- ${ye.CERT_KEY} = ${Tt(ye.CERT_KEY,e)}
47
+ ${ye.CERT_KEY} = ${At(ye.CERT_KEY,e)}
48
48
  ;The path to the SSL private key used when running with HTTPS enabled.
49
- ${ye.PRIVATE_KEY_KEY} = ${Tt(ye.PRIVATE_KEY_KEY,e)}
49
+ ${ye.PRIVATE_KEY_KEY} = ${At(ye.PRIVATE_KEY_KEY,e)}
50
50
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
51
- ${ye.CORS_ENABLED_KEY} = ${Tt(ye.CORS_ENABLED_KEY,e)}
51
+ ${ye.CORS_ENABLED_KEY} = ${At(ye.CORS_ENABLED_KEY,e)}
52
52
  ;Allows for setting allowable domains with CORS. Comma separated list.
53
- ${ye.CORS_WHITELIST_KEY} = ${Tt(ye.CORS_WHITELIST_KEY,e)}
53
+ ${ye.CORS_WHITELIST_KEY} = ${At(ye.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
- ${ye.SERVER_TIMEOUT_KEY} = ${Tt(ye.SERVER_TIMEOUT_KEY,e,!0)}
55
+ ${ye.SERVER_TIMEOUT_KEY} = ${At(ye.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
- ${ye.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Tt(ye.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
57
+ ${ye.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${At(ye.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
- ${ye.SERVER_HEADERS_TIMEOUT_KEY} = ${Tt(ye.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
59
+ ${ye.SERVER_HEADERS_TIMEOUT_KEY} = ${At(ye.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
60
60
  ;Define whether to log to file or not.
61
- ${ye.LOG_TO_FILE} = ${su.getDefaultConfig(nu.LOGGING_FILE)}
61
+ ${ye.LOG_TO_FILE} = ${iu.getDefaultConfig(su.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
- ${ye.LOG_TO_STDSTREAMS} = ${su.getDefaultConfig(nu.LOGGING_STDSTREAMS)}
63
+ ${ye.LOG_TO_STDSTREAMS} = ${iu.getDefaultConfig(su.LOGGING_STDSTREAMS)}
64
64
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
65
- ${ye.LOG_LEVEL_KEY} = ${Tt(ye.LOG_LEVEL_KEY,e)}
65
+ ${ye.LOG_LEVEL_KEY} = ${At(ye.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
- ${ye.LOG_PATH_KEY} = ${Tt(ye.LOG_PATH_KEY,e)}
67
+ ${ye.LOG_PATH_KEY} = ${At(ye.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
- ${ye.LOG_DAILY_ROTATE_KEY} = ${Tt(ye.LOG_DAILY_ROTATE_KEY,e)}
69
+ ${ye.LOG_DAILY_ROTATE_KEY} = ${At(ye.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
- ${ye.LOG_MAX_DAILY_FILES_KEY} = ${Tt(ye.LOG_MAX_DAILY_FILES_KEY,e)}
72
+ ${ye.LOG_MAX_DAILY_FILES_KEY} = ${At(ye.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
- ${ye.PROPS_ENV_KEY} = ${Tt(ye.PROPS_ENV_KEY,e)}
74
+ ${ye.PROPS_ENV_KEY} = ${At(ye.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
- ${ye.ALLOW_SELF_SIGNED_SSL_CERTS} = ${Tt(ye.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
78
+ ${ye.ALLOW_SELF_SIGNED_SSL_CERTS} = ${At(ye.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
- ${ye.MAX_HDB_PROCESSES} = ${Tt(ye.MAX_HDB_PROCESSES,e)}
80
+ ${ye.MAX_HDB_PROCESSES} = ${At(ye.MAX_HDB_PROCESSES,e)}
81
81
  ;Set to true to enable clustering. Requires a valid enterprise license.
82
- ${ye.CLUSTERING_ENABLED_KEY} = ${Tt(ye.CLUSTERING_ENABLED_KEY,e,!0)}
82
+ ${ye.CLUSTERING_ENABLED_KEY} = ${At(ye.CLUSTERING_ENABLED_KEY,e,!0)}
83
83
  ;The port that will be used for HarperDB clustering.
84
- ${ye.CLUSTERING_PORT_KEY} = ${Tt(ye.CLUSTERING_PORT_KEY,e)}
84
+ ${ye.CLUSTERING_PORT_KEY} = ${At(ye.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
- ${ye.CLUSTERING_NODE_NAME_KEY} = ${Tt(ye.CLUSTERING_NODE_NAME_KEY,e)}
86
+ ${ye.CLUSTERING_NODE_NAME_KEY} = ${At(ye.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
- ${ye.CLUSTERING_USER_KEY} = ${Tt(ye.CLUSTERING_USER_KEY,e)}
88
+ ${ye.CLUSTERING_USER_KEY} = ${At(ye.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
- ${ye.DISABLE_TRANSACTION_LOG_KEY} = ${Tt(ye.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
90
+ ${ye.DISABLE_TRANSACTION_LOG_KEY} = ${At(ye.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
- ${ye.OPERATION_TOKEN_TIMEOUT_KEY} = ${Tt(ye.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
92
+ ${ye.OPERATION_TOKEN_TIMEOUT_KEY} = ${At(ye.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
- ${ye.REFRESH_TOKEN_TIMEOUT_KEY} = ${Tt(ye.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
94
+ ${ye.REFRESH_TOKEN_TIMEOUT_KEY} = ${At(ye.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
95
95
  ;The port the IPC server will run on.
96
- ${ye.IPC_SERVER_PORT} = ${su.getDefaultConfig(nu.IPC_NETWORK_PORT)}
96
+ ${ye.IPC_SERVER_PORT} = ${iu.getDefaultConfig(su.IPC_NETWORK_PORT)}
97
97
  ;Run HDB in the foreground.
98
- ${ye.RUN_IN_FOREGROUND} = ${su.getDefaultConfig(nu.OPERATIONSAPI_FOREGROUND)}
98
+ ${ye.RUN_IN_FOREGROUND} = ${iu.getDefaultConfig(su.OPERATIONSAPI_FOREGROUND)}
99
99
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
100
- ${ye.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${su.getDefaultConfig(nu.CUSTOMFUNCTIONS_ENABLED)}
100
+ ${ye.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${iu.getDefaultConfig(su.CUSTOMFUNCTIONS_ENABLED)}
101
101
  ;The port used to access the custom functions server.
102
- ${ye.CUSTOM_FUNCTIONS_PORT_KEY} = ${su.getDefaultConfig(nu.HTTP_PORT)}
102
+ ${ye.CUSTOM_FUNCTIONS_PORT_KEY} = ${iu.getDefaultConfig(su.HTTP_PORT)}
103
103
  ;The path to the folder containing HarperDB custom function files.
104
- ${ye.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${gc.join(Tt(ye.HDB_ROOT_KEY,e),"custom_functions")}
104
+ ${ye.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${gc.join(At(ye.HDB_ROOT_KEY,e),"custom_functions")}
105
105
  ;Set the max number of processes HarperDB will start for the Custom Functions server
106
- ${ye.MAX_CUSTOM_FUNCTION_PROCESSES} = ${su.getDefaultConfig(nu.HTTP_THREADS)}
107
- `,n=HR.get("settings_path"),s=gc.dirname(n),i=gc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Sc.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Sc.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Sc.copySync(i,n),c}HR.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(CRe,"updateSettingsFile310");function PRe(){let e=gc.join(W2.getHomeDir(),ao.HDB_HOME_DIR_NAME,ao.LICENSE_KEY_DIR_NAME,ao.LICENSE_FILE_NAME),t=gc.join(W2.getHomeDir(),ao.HDB_HOME_DIR_NAME,ao.LICENSE_KEY_DIR_NAME,ao.REG_KEY_FILE_NAME),r=gc.join(HR.getHdbBasePath(),ao.LICENSE_KEY_DIR_NAME,ao.LICENSE_FILE_NAME),n=gc.join(r,ao.LICENSE_FILE_NAME),s=gc.join(r,ao.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Sc.mkdirpSync(r);try{Sc.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Sc.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(PRe,"moveLicenseFiles");AL.sync_functions.push(CRe);AL.sync_functions.push(PRe);z2.push(AL);j2.exports=z2});var tQ=M((ZBe,eQ)=>{"use strict";var hs=_t(),{insertRecords:LRe}=tl(),DRe=An(),Tc=qt(),MRe=ie(),ia=Q(),vRe=ie(),co=require("fs-extra"),oa=require("path"),URe=require("cli-progress"),nE=require("assert"),xRe=require("pino"),BRe=oe();eQ.exports=FRe;var kR,J2,GR,bL,Rn,sE=!1;async function FRe(e=!0){return kR=BRe.getHdbBasePath(),J2=oa.join(kR,"schema"),GR=oa.join(kR,"4_0_0_upgrade_tmp"),bL=oa.join(kR,"transactions"),console.info("Reindexing upgrade started for schemas"),ia.notify("Reindexing upgrade started for schemas"),await X2(J2,!1,e),await co.pathExists(bL)&&(console.info(`
106
+ ${ye.MAX_CUSTOM_FUNCTION_PROCESSES} = ${iu.getDefaultConfig(su.HTTP_THREADS)}
107
+ `,n=HR.get("settings_path"),s=gc.dirname(n),i=gc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Sc.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Sc.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Sc.copySync(i,n),c}HR.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(PRe,"updateSettingsFile310");function LRe(){let e=gc.join(z2.getHomeDir(),ao.HDB_HOME_DIR_NAME,ao.LICENSE_KEY_DIR_NAME,ao.LICENSE_FILE_NAME),t=gc.join(z2.getHomeDir(),ao.HDB_HOME_DIR_NAME,ao.LICENSE_KEY_DIR_NAME,ao.REG_KEY_FILE_NAME),r=gc.join(HR.getHdbBasePath(),ao.LICENSE_KEY_DIR_NAME,ao.LICENSE_FILE_NAME),n=gc.join(r,ao.LICENSE_FILE_NAME),s=gc.join(r,ao.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Sc.mkdirpSync(r);try{Sc.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Sc.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(LRe,"moveLicenseFiles");AL.sync_functions.push(PRe);AL.sync_functions.push(LRe);j2.push(AL);Q2.exports=j2});var rQ=M((eFe,tQ)=>{"use strict";var hs=Tt(),{insertRecords:DRe}=rl(),MRe=yn(),Tc=Vt(),vRe=ie(),ia=Q(),URe=ie(),co=require("fs-extra"),oa=require("path"),xRe=require("cli-progress"),nE=require("assert"),BRe=require("pino"),FRe=oe();tQ.exports=HRe;var kR,X2,GR,bL,Tn,sE=!1;async function HRe(e=!0){return kR=FRe.getHdbBasePath(),X2=oa.join(kR,"schema"),GR=oa.join(kR,"4_0_0_upgrade_tmp"),bL=oa.join(kR,"transactions"),console.info("Reindexing upgrade started for schemas"),ia.notify("Reindexing upgrade started for schemas"),await Z2(X2,!1,e),await co.pathExists(bL)&&(console.info(`
108
108
 
109
- Reindexing upgrade started for transaction logs`),ia.notify("Reindexing upgrade started for transaction logs"),await X2(bL,!0,e)),ia.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(sE?", but errors occurred":"")}o(FRe,"reindexUpgrade");async function X2(e,t,r){let n=await co.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=oa.join(e,a.toString());if(a===".DS_Store")continue;let l=await co.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&co.statSync(oa.join(c,f)).isDirectory())try{await HRe(a,f,t),Rn.info(`Reindexing started for ${a}.${f}`),ia.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await GRe(a,f,c,t,r),Rn.info(`Reindexing completed for ${a}.${f}`),ia.notify(`Reindexing completed for ${a}.${f}`)}catch(m){sE=!0,m.schema_path=c,m.table_name=f,ia.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ia.error(m),Rn.error(m),console.error(m)}}}if(!sE)try{await co.rm(GR,{recursive:!0})}catch{}}o(X2,"processTables");async function HRe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=oa.join(GR,s);await co.ensureDir(GR),await co.writeFile(i,""),Rn=xRe({level:"debug",formatters:{bindings(){}}},i)}o(HRe,"initPinoLogger");var kRe=20;async function GRe(e,t,r,n,s){let i;try{i=await hs.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){ia.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`),Rn.error(T);return}throw T}let a=VRe(i.dbis),c=hs.openDBI(i,a),l=Object.keys(i.dbis),u=hs.statDBI(i,a);Rn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new URe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await hs.createEnvironment(r,t,!1);hs.createDBI(f,a,!1,!0);let m=[];try{for(let T of c.getRange({start:!1}))T.value={...T.value},m.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),m.length>kRe&&await h();await h()}catch(T){throw sE=!0,Rn.error(T),T}async function h(){let T,R=m.map(({value:O})=>O);n?T=await Promise.all(R.map(O=>qRe(f,O))):T=await LRe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,F=m.length;O<F;O++){let{key:Z,value:G}=m[O];Rn.info(`Record hash value: ${Z} hash: ${a}`);let Y;n?Y=T[O]:Y=T.written_hashes.indexOf(Z)>-1,nE(Y,!0),$Re(f,a,G[a],n),Rn.info(`Insert success, written hashes: ${T.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ia.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Rn.info(`${d.value}/${d.total} records inserted`)}o(h,"finishOutstanding"),d.stop();let p=hs.statDBI(i,a),_=hs.statDBI(f,a);if(Rn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${_.entryCount}`),nE.deepStrictEqual(p.entryCount,_.entryCount),await hs.closeEnvironment(i),await hs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let T=oa.join(r,t),R=oa.join(T,"data.mdb"),N=oa.join(T,"lock.mdb");await co.unlink(R),await co.unlink(N),await co.rmdir(T),Rn.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await hs.openEnvironment(r,t),y=hs.statDBI(g,a);Rn.info(`New stats: ${JSON.stringify(_)}. New stats after move: ${JSON.stringify(y)}`),nE.deepStrictEqual(y.entryCount,_.entryCount),await hs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(GRe,"processTable");async function qRe(e,t){hs.initializeDBIs(e,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),vRe.isEmpty(t.user_name)||e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(qRe,"insertTransaction");function $Re(e,t,r,n){let i=e.dbis[t].get(r);nE.deepStrictEqual(typeof i,"object");let a;if(n){let c={[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!MRe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];Z2(e,c,f,r)}else Z2(e,c,l,r)}o($Re,"validateIndices");function Z2(e,t,r,n){try{let s=!1,i=DRe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Rn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),nE.deepStrictEqual(s,!0)}catch(s){sE=!0,Rn.error(s),console.error(s)}}o(Z2,"validateIndex");function VRe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(VRe,"getHashDBI")});var oQ=M((rFe,iQ)=>{"use strict";var qR=require("path"),Rc=require("fs-extra"),KRe=yL(),iu=Q(),rQ=bt(),IL=oe(),Ni=(k(),v(W)),$R=ie(),YRe=require("properties-reader"),WRe=ai(),zRe=dS(),jRe=on(),tFe=require("util"),QRe=jRe.searchByValue,JRe=Mn(),XRe=yT(),ZRe=It(),eye=tQ(),nQ=as(),tye=FR(),aE=new KRe("4.0.0"),sQ=[],iE,oE;async function rye(){try{if(await tye.upgradeCertsPrompt()){if(console.log("Generating new certificates."),iE){let t=$R.changeExtension(iE,".bak");await Rc.move(iE,t)}if(oE){let t=$R.changeExtension(oE,".bak");await Rc.move(oE,t)}await nQ.generateKeys()}else console.log("Using existing certificates."),nQ.updateConfigCert(iE,oE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(rye,"generateNewKeys");async function nye(){console.log("Updating HarperDB nodes."),iu.info("Updating HarperDB nodes.");let e=[];try{let t=new WRe(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await QRe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!ZRe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],h=m.channel.split(":");u.push({schema:h[0],table:h[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ni.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if($R.isEmptyOrZeroLength(n))return;let s=new zRe(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await JRe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{XRe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(nye,"updateNodes");async function sye(){let e=IL.get(Ni.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(qR.join("config","settings.js"))){iu.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),iu.info(t);let r=qR.dirname(e),n=IL.get(Ni.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=qR.join(n,"backup","4_0_0_upgrade_settings.bak"),i=qR.join(n,Ni.HDB_CONFIG_FILE);try{iu.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Rc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{iu.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),iu.info("Updating env variables with new settings values");let f=rQ.initOldConfig(e);iE=f[Ni.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],oE=f[Ni.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],rQ.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=$R.getPropsFilePath();Rc.accessSync(a,Rc.constants.F_OK|Rc.constants.R_OK);let l=YRe(a).get(Ni.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
- install_user = ${l}`;try{Rc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{IL.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{Rc.removeSync(r),console.log(d),iu.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(sye,"updateSettingsFile400");aE.async_functions.push(sye);aE.async_functions.push(rye);aE.async_functions.push(eye);aE.async_functions.push(nye);sQ.push(aE);iQ.exports=sQ});var NL=M((sFe,uQ)=>{"use strict";var ou=ie(),iye=(k(),v(W)),aQ=Q(),{DATA_VERSION:oye,UPGRADE_VERSION:aye}=iye.UPGRADE_JSON_FIELD_NAMES_ENUM,cQ=Q2(),VR=oQ(),au=new Map;cQ&&cQ.forEach(e=>{au.set(e.version,e)});VR&&VR.forEach(e=>{au.set(e.version,e)});VR&&VR.forEach(e=>{au.set(e.version,e)});function cye(){return[...au.keys()].sort(ou.compareVersions)}o(cye,"getSortedVersions");function lQ(e){let t=e[oye],r=e[aye];return ou.isEmptyOrZeroLength(t)||ou.isEmptyOrZeroLength(r)?(aQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),aQ.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."),[]):[...au.keys()].sort(ou.compareVersions).filter(function(n){return ou.compareVersions(n,t)>0&&ou.compareVersions(n,r)<=0})}o(lQ,"getVersionsForUpgrade");function lye(e){return lQ(e).length>0}o(lye,"hasUpgradesRequired");function uye(e){return ou.isEmptyOrZeroLength(e)?null:au.has(e)?au.get(e):null}o(uye,"getDirectiveByVersion");uQ.exports={getSortedVersions:cye,getDirectiveByVersion:uye,getVersionsForUpgrade:lQ,hasUpgradesRequired:lye}});var YR=M((oFe,pQ)=>{"use strict";var dye=require("util"),wL=require("chalk"),fye=require("os"),fQ=Mn(),mye=on(),ps=(k(),v(W)),mQ=F2(),CL=MI(),{UpgradeObject:dQ}=G2(),{forceDowngradePrompt:hye}=FR(),{packageJson:pye}=Rt(),KR=Q(),yf=ie(),PL=ii(),Eye=(De(),v(mt)),_ye=NL(),gye=dye.promisify(PL.setSchemaDataToGlobal),Sye=mye.searchByValue,Tye="info_id",Rye="2.9.9",yye="3.0.0";async function Aye(e){let t=new mQ.HdbInfoInsertObject(1,e,e),r=new CL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return PL.setSchemaDataToGlobal(),fQ.insert(r)}o(Aye,"insertHdbInstallInfo");async function OL(e){let t,r=await hQ(),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 mQ.HdbInfoInsertObject(i,e,e);let a=new CL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await gye(),fQ.insert(a)}o(OL,"insertHdbUpgradeInfo");async function hQ(){let e=new CL.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Tye,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Sye(e))}catch(r){console.error(r)}return t}o(hQ,"getAllHdbInfoRecords");async function bye(){let e=await hQ();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(bye,"getLatestHdbInfoRecord");async function Iye(){KR.info("Checking if HDB software has been updated");try{let e=pye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await bye(),r;if(yf.isEmpty(t))r=Rye;else if(r=t.data_version_num,yf.compareVersions(r.toString(),e.toString())>0){if(!yf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(wL.yellow(`This instance's data was last run on version ${r}`)),console.error(wL.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.${fye.EOL}${ps.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");yf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(wL.yellow(`This instance's data was last run on version ${r}`)),await hye(new dQ(r,e))?await OL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(PL.setSchemaDataToGlobal(),Nye(r),e.toString()===r.toString())return;let n=new dQ(r,e);if(_ye.hasUpgradesRequired(n))return n;yf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await OL(n.upgrade_version),KR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw KR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),KR.fatal(e),e}}o(Iye,"getVersionUpdateInfo");function Nye(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 ${ps.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Eye.databases.system))throw console.log(t),new Error(t);if(!yf.isEmpty(e)&&e<yye)throw console.log(t),new Error(t)}o(Nye,"checkIfInstallIsSupported");pQ.exports={insertHdbInstallInfo:Aye,insertHdbUpgradeInfo:OL,getVersionUpdateInfo:Iye}});var SQ=M((cFe,gQ)=>{"use strict";var WR=require("joi"),{boolean:wye,string:LL,number:Oye}=WR.types(),EQ=require("fs-extra"),cE=(k(),v(W)),_Q=require("path"),Cye=lt();gQ.exports=Pye;function Pye(e){let t=LL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=WR.object({[cE.INSTALL_PROMPTS.ROOTPATH]:WR.custom(Lye),[cE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:WR.alternatives([Oye.min(0),LL]).allow("null",null),[cE.INSTALL_PROMPTS.TC_AGREEMENT]:LL.valid("yes","YES","Yes"),[cE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[cE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:wye});return Cye.validateBySchema(e,r)}o(Pye,"installValidator");function Lye(e,t){if(EQ.existsSync(_Q.join(e,"system/hdb_user/data.mdb"))||EQ.existsSync(_Q.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(Lye,"validateRootAvailable")});var RQ=M((uFe,TQ)=>{"use strict";var{mkdirpSync:Dye,copySync:Mye}=require("fs-extra"),yc=require("path"),lE=(k(),v(W)),{PACKAGE_ROOT:vye}=Rt(),ML=Q(),Uye=Jn(),DL=No(),xye=yt();TQ.exports=Bye;async function Bye(e){ML.trace("Mounting HarperDB"),cu(e),cu(yc.join(e,"backup")),cu(yc.join(e,"keys")),cu(yc.join(e,"keys",lE.LICENSE_FILE_NAME)),cu(yc.join(e,"log")),cu(yc.join(e,"database")),cu(yc.join(e,"components")),Mye(yc.resolve(vye,"./utility/install/README.md"),yc.join(e,"README.md")),await Fye()}o(Bye,"mountHdb");async function Fye(){let e=km(),t=Object.keys(DL);for(let r=0;r<t.length;r++){let n=t[r],s=DL[n].hash_attribute;try{xye.initSystemSchemaPaths(lE.SYSTEM_SCHEMA_NAME,n);let i=new e(lE.SYSTEM_SCHEMA_NAME,n,s);i.attributes=DL[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(n)&&(i.audit=!0),await Uye.createTable(n,i)}catch(i){throw ML.error(`issue creating environment for ${lE.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(Fye,"createLMDBTables");function cu(e){Dye(e,{mode:lE.HDB_FILE_PERMISSIONS}),ML.info(`Directory ${e} created`)}o(cu,"makeDirectory")});var UQ=M((hFe,vQ)=>{"use strict";var UL=require("os"),NQ=require("inquirer"),Ys=require("fs-extra"),Hye=require("properties-reader"),uu=require("chalk"),uo=require("path"),kye=require("human-readable-ids").hri,Gye=require("ora"),qye=require("yaml"),Tr=Q(),Ac=oe(),uE=ie(),jR=Uc(),wQ=YR(),{packageJson:OQ}=Rt(),_e=(k(),v(W)),{CONFIG_PARAM_MAP:fFe,CONFIG_PARAMS:kt}=_e,$ye=SQ(),Vye=RQ(),xL=bt(),Kye=ts(),Yye=Oh(),Wye=EL(),zye=ii(),jye=require("util").promisify,Qye=jye(zye.setSchemaDataToGlobal),yQ=as(),lu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tn=o(e=>uu.magenta.bold(e),"HDB_PROMPT_MSG"),Jye="https://harperdb.io/legal/end-user-license-agreement",bc=UL.EOL,aa="",Xye="yes",AQ="Starting HarperDB install...",bQ="HarperDB installation was successful.",IQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Zye="An out of date version of HarperDB is already installed.",vL="It appears that HarperDB is already installed. Exiting install...",eAe="Aborting install",mFe=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])$/),tAe=new RegExp(/^[^\s.,*>]+$/),rAe=UL.homedir(),nAe=uo.join(rAe,_e.HDB_ROOT_DIR_NAME),sAe="HDB_ADMIN",iAe="CLUSTER_USER",oAe="dev",aAe="localhost",zR={[kt.HTTP_CORS]:!0,[kt.HTTP_CORSACCESSLIST]:["*"],[kt.HTTP_PORT]:9926,[kt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[kt.THREADS_COUNT]:1,[kt.THREADS_DEBUG]:!0,[kt.LOGGING_STDSTREAMS]:!0,[kt.LOGGING_LEVEL]:"info",[kt.OPERATIONSAPI_NETWORK_PORT]:9925,[kt.LOCALSTUDIO_ENABLED]:!0},en={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:"},Ic=jR([_e.INSTALL_PROMPTS.HDB_CONFIG]),lo,CQ=!1,BL=!1,PQ=!1;vQ.exports={install:LQ,updateConfigEnv:gAe,setIgnoreExisting:SAe};LQ.createSuperUser=MQ;async function LQ(){console.log(tn(bc+AQ+bc)),Tr.notify(AQ);let e;Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&(e=cAe());let t=uAe();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&&(PQ=!0,t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=$ye(t);if(r)throw r.message;await dAe(),await fAe(t);let n=await lAe(t);lo=n[_e.INSTALL_PROMPTS.ROOTPATH],Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&uo.dirname(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG])===lo&&(CQ=!0),!BL&&!Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&await Ys.pathExists(uo.join(lo,_e.HDB_CONFIG_FILE))&&(console.error(vL),process.exit());let s=Gye({prefixText:tn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),uE.isEmpty(lo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(lo),await Vye(lo),await mAe(),await hAe(n),Tr.initLogSettings(!0),await MQ(n),await EAe(n),await yQ.updateConfigCert(),await yQ.generateCertsKeys(),await _Ae(),Wye(),s.stop(),console.log(tn(bc+bQ+bc)),Tr.notify(bQ)}o(LQ,"install");function cAe(){let e=qye.parseDocument(Ys.readFileSync(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=xL.flattenConfig(e.toJSON());return t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(cAe,"getConfigFromFile");async function lAe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:lu,when:ca(e[_e.INSTALL_PROMPTS.ROOTPATH],en.DESTINATION),name:_e.INSTALL_PROMPTS.ROOTPATH,prefix:aa,default:nAe,validate:o(async s=>Ks(s)?Ks(s):await Ys.pathExists(uo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:tn(en.DESTINATION)},{type:"input",transformer:lu,when:ca(e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],en.HDB_USERNAME),name:_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:aa,default:sAe,validate:o(s=>Ks(s)?Ks(s):(t=s,!0),"validate"),message:tn(en.HDB_USERNAME)},{type:"password",when:ca(e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],en.HDB_PASS),name:_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:aa,validate:o(s=>Ks(s)?Ks(s):!0,"validate"),message:tn(en.HDB_PASS)},{type:"input",transformer:lu,when:ca(e[_e.INSTALL_PROMPTS.DEFAULTS_MODE],en.DEFAULTS_MODE),name:_e.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:aa,default:oAe,validate:o(s=>Ks(s)?Ks(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:tn(en.DEFAULTS_MODE)}];if(PQ||r.push({type:"input",name:_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:lu,when:ca(e[_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME],en.REPLICATION_HOSTNAME),prefix:aa,default:aAe,message:tn(en.REPLICATION_HOSTNAME)}),uE.autoCastBoolean(e[_e.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:lu,when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_NODENAME],en.NODE_NAME),name:_e.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:aa,default:kye.random(),validate:o(i=>tAe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:tn(en.NODE_NAME)},{type:"input",transformer:lu,when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_USER],en.CLUSTER_USERNAME),name:_e.INSTALL_PROMPTS.CLUSTERING_USER,prefix:aa,default:iAe,validate:o(i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:tn(en.CLUSTER_USERNAME)},{type:"password",when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD],en.CLUSTER_PASS),name:_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:aa,validate:o(i=>Ks(i)?Ks(i):!0,"validate"),message:tn(en.CLUSTER_PASS)}];r.push(...s)}let n=await NQ.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(lAe,"installPrompts");function ca(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tn(t)} ${uu.gray("[hidden]")}`),Tr.trace(`${tn(t)} [hidden]`)):(console.log(`${tn(t)} ${e}`),Tr.trace(`${tn(t)} ${e}`)),!1):!0}o(ca,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Ks,"checkForEmptyValue");function uAe(){let e=Object.keys(_e.INSTALL_PROMPTS),t=jR(e),r=jR(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}o(uAe,"checkForPromptOverride");async function dAe(){Tr.trace("Checking for existing install.");let e=uE.getPropsFilePath(),t=await Ys.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=Hye(e),s=xL.getConfigValue(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ys.pathExists(s)}if(!t&&uE.noBootFile()&&(r=!0),r&&!BL){if(Tr.trace(`Install found existing HDB config at:${e}`),await wQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${OQ.version}. Exiting install...`;console.log(bc+uu.magenta.bold(Zye)),console.log(uu.magenta.bold(s)),Tr.error(s)}else console.log(bc+uu.magenta.bold(vL)),Tr.error(vL);process.exit(0)}}o(dAe,"checkForExistingInstall");async function fAe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Jye}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:aa,transformer:lu,when:ca(e[_e.INSTALL_PROMPTS.TC_AGREEMENT],t),name:_e.INSTALL_PROMPTS.TC_AGREEMENT,message:tn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:uu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await NQ.prompt([r]);n[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&n[_e.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Xye&&(console.log(uu.yellow(IQ)),Tr.error(IQ),process.exit(0))}o(fAe,"termsAgreement");async function mAe(){let e=uo.join(lo,_e.HDB_CONFIG_FILE),t;try{t=UL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
- install_user = ${t}`,n=uE.getHomeDir(),s=uo.join(n,_e.HDB_HOME_DIR_NAME),i=uo.join(s,_e.LICENSE_KEY_DIR_NAME);try{Ys.mkdirpSync(s,{mode:_e.HDB_FILE_PERMISSIONS}),Ys.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 a=uo.join(s,_e.BOOT_PROPS_FILE_NAME);try{await Ys.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(_e.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(mAe,"createBootPropertiesFile");async function hAe(e){Tr.trace("Creating HarperDB config file");let t=jR(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 zR){if(r===kt.HTTP_PORT&&t[kt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zR[r],t[kt.HTTP_SECUREPORT]=null;continue}else if(r===kt.HTTP_PORT)continue;if(r===kt.OPERATIONSAPI_NETWORK_PORT&&t[kt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zR[r],t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===kt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=zR[r])}}else t[kt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[kt.HTTP_PORT.toLowerCase()]&&(t[kt.HTTP_SECUREPORT]=null);try{Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]||xL.createConfigFile(t),Ac.initSync()}catch(r){pAe(r)}}o(hAe,"createConfigFile");function pAe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(eAe);let t=uo.resolve(Ac.get(Ac.BOOT_PROPS_FILE_PATH),"../");t&&Ys.removeSync(t),lo&&(CQ?Ys.readdirSync(lo,{withFileTypes:!0}).forEach(n=>{let s=uo.join(n.path,n.name);s!==Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&Ys.removeSync(s)}):Ys.removeSync(lo)),process.exit(1)}o(pAe,"rollbackInstall");async function DQ(e,t){Tr.trace("Creating admin user"),await Qye();let r;try{r=await Yye.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 Kye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(DQ,"createAdminUser");async function MQ(e){Tr.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 DQ(t,r),delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(MQ,"createSuperUser");async function EAe(e){Tr.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 DQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[_e.INSTALL_PROMPTS.CLUSTERING_USER],delete e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(EAe,"createClusterUser");async function _Ae(){let e=OQ.version;if(e)await wQ.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(_Ae,"insertHdbVersionInfo");function gAe(e){Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]=e}o(gAe,"updateConfigEnv");function SAe(e){BL=e}o(SAe,"setIgnoreExisting")});var FQ=M((EFe,BQ)=>{"use strict";var FL=ie(),Es=Q(),xQ=NL();BQ.exports={processDirectives:TAe};async function TAe(e){console.log("Starting upgrade process...");let t=xQ.getVersionsForUpgrade(e),r=AAe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Es.notify(c),console.log(c);let l=[],u=[];try{l=RAe(a.sync_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await yAe(a.async_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(TAe,"processDirectives");function RAe(e){if(FL.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}o(RAe,"runSyncFunctions");async function yAe(e){if(FL.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}o(yAe,"runAsyncFunctions");function AAe(e){if(FL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=xQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(AAe,"getUpgradeDirectivesToInstall")});var KQ=M((gFe,VQ)=>{"use strict";var QR=oe();QR.initSync();var qQ=require("chalk"),HQ=require("fs-extra"),ua=Q(),la=(k(),v(W)),bAe=FQ(),HL=ie(),$Q=YR(),IAe=FR(),kQ=tA(),NAe=ii(),{packageJson:GQ}=Rt(),wAe=require("util").promisify,OAe=wAe(NAe.setSchemaDataToGlobal),kL,{UPGRADE_VERSION:GL}=la.UPGRADE_JSON_FIELD_NAMES_ENUM;VQ.exports={upgrade:CAe};async function CAe(e){await OAe(),kL===void 0&&(kL=gp()),HQ.existsSync(QR.get(QR.BOOT_PROPS_FILE_PATH))||(dE("The hdb_boot_properties file was not found. Please install HDB.",la.LOG_LEVELS.ERROR),process.exit(1)),HQ.existsSync(QR.get(la.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(dE("The hdb settings file was not found. Please make sure HDB is installed.",la.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await $Q.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),dE(`This version of HarperDB is ${GQ.version}`,la.LOG_LEVELS.INFO);let r=t[GL]??GQ.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${la.HDB_SUPPORT_ADDRESS}`),ua.notify("Missing new version field from upgrade info object"),process.exit(1)),await PAe();let n,s=0;try{n=await IAe.forceUpdatePrompt(t)}catch(i){ua.error("There was an error when prompting user about upgrade."),ua.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),ua.info(`Starting upgrade to version ${r}`),await LAe(t),dE(`HarperDB was successfully upgraded to version ${t[GL]}`,la.LOG_LEVELS.INFO)}o(CAe,"upgrade");async function PAe(){let e=!1,t=await kQ.findPs(la.HDB_PROC_NAME);if(HL.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await kQ.findPs("hdb_express");HL.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await kL.list();HL.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(qQ.red(r)),ua.error(r),process.exit(1)}}o(PAe,"checkIfRunning");async function LAe(e){try{await bAe.processDirectives(e)}catch(t){throw dE("There was an error during the data upgrade. Please check the logs.",la.LOG_LEVELS.ERROR),t}try{await $Q.insertHdbUpgradeInfo(e[GL])}catch(t){ua.error("Error updating the 'hdb_info' system table."),ua.error(t)}}o(LAe,"runUpgrade");function dE(e,t=void 0){t||(t=ua.info),ua[t](e),console.log(qQ.magenta(e))}o(dE,"printToLogAndConsole")});var XQ=M(fE=>{"use strict";var Ae=oe();Ae.initSync();nf();var or=(k(),v(W)),{CONFIG_PARAMS:ve}=or,_s=Q(),da=require("fs-extra"),fa=require("path"),DAe=EL(),{install:MAe}=UQ(),qL=require("chalk"),{packageJson:vAe,PACKAGE_ROOT:UAe}=Rt(),ma=ie(),$L=bt(),WQ=Uc(),YQ=PT(),xAe=KQ(),{compactOnStart:BAe}=(AC(),v(yC)),FAe=require("minimist"),HAe=as(),{startHTTPThreads:kAe}=(XR(),v(VL)),GAe=YR(),{isMainThread:qAe}=require("worker_threads"),TFe=No(),RFe=Ua(),yFe=Zb(),AFe=km(),JR=(k(),v(W)),fo,Af,zQ=!1,$Ae="Upgrade complete. Starting HarperDB.",VAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",KAe="HarperDB not found, starting install process.",YAe="There was an error during install, check install_log.log for more details. Exiting.",WAe="HarperDB successfully started.";function zAe(){if(!zQ){let e=o(()=>{da.removeSync(fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(zAe,"addExitListeners");async function jQ(e=!1,t=!1){if(console.log(qL.magenta("Starting HarperDB...")),_s.suppressLogging?.(()=>{console.log(qL.magenta(""+da.readFileSync(fa.join(UAe,"utility/install/ascii_logo.txt"))))}),await JQ()===!1){console.log(KAe);try{await MAe()}catch(l){console.error(YAe,l),_s.error(l),process.exit(1)}}if(!e){let l=WQ(Object.keys(or.CONFIG_PARAM_MAP),!0);!ma.isEmpty(l)&&!ma.isEmptyOrZeroLength(Object.keys(l))&&$L.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Af?.service==="clustering";Af?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE),i=ZAe(s);i&&i!==1&&ebe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),fo===void 0&&(fo=gp()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await YQ.generateNatsConfig(),await fo.startClusteringProcesses(!0),process.exit()),zAe(),await da.writeFile(fa.join(Ae.get(JR.CONFIG_PARAMS.ROOTPATH),JR.HDB_PID_FILE),`${process.pid}`),_s.info("HarperDB PID",process.pid);let a;try{let l=await GAe.getVersionUpdateInfo();l!==void 0&&(a=l[or.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await xAe.upgrade(l),console.log($Ae))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),_s.error(l)):(console.error(VAe,l),_s.error(l)),process.exit(1)}DAe(),JAe(),await HAe.reviewSelfSignedCert(),ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&qAe&&await YQ.generateNatsConfig(t)}o(jQ,"initialize");async function jAe(e=!1){try{Af=FAe(process.argv),Af.ROOTPATH&&$L.updateConfigObject("settings_path",fa.join(Af.ROOTPATH,or.HDB_CONFIG_FILE)),await jQ(e,!0),Ae.get(or.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await BAe();let t=process.env.IS_SCRIPTED_SERVICE&&!Af.service;ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await fo.startClusteringProcesses(),await fo.startClusteringThreads()),await kAe(process.env.DEV_MODE?1:Ae.get(JR.CONFIG_PARAMS.THREADS_COUNT)??Ae.get(JR.CONFIG_PARAMS.THREADS)),t||QQ()}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(jAe,"main");function QQ(){_s.suppressLogging(()=>{console.log(qL.magenta(`HarperDB ${vAe.version} successfully started`))}),_s.notify(WAe)}o(QQ,"started");async function QAe(e=!0){zQ=!e;try{fo===void 0&&(fo=gp()),fo.enterPM2Mode(),await jQ(),ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await fo.startClusteringProcesses(),await fo.startService(or.PROCESS_DESCRIPTORS.HDB),QQ(),e&&process.exit(0)}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(QAe,"launch");function JAe(){let e=fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.LICENSE_KEY_DIR_NAME,or.LICENSE_FILE_NAME),t=fa.join(e,or.LICENSE_FILE_NAME),r=fa.join(e,or.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=WQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ma.isEmpty(n)||ma.isEmpty(s))return;da.mkdirpSync(e),da.writeFileSync(r,n),da.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),_s.error(s)}}o(JAe,"writeLicenseFromVars");fE.launch=QAe;fE.main=jAe;fE.isHdbInstalled=JQ;fE.startupLog=XAe;async function JQ(){try{await da.stat(ma.getPropsFilePath()),await da.stat(Ae.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ma.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw _s.error(`Error checking for HDB install - ${e}`),e}return!0}o(JQ,"isHdbInstalled");function XAe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
112
- `;Ae.get(ve.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Ae.get(ve.REPLICATION_HOSTNAME)}
113
- `),Ae.get(ve.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Ae.get(ve.REPLICATION_URL)}
114
- `),n+=`${r("Worker Threads:")}${Ae.get(ve.THREADS_COUNT)}
115
- `,n+=`${r("Root Path:")}${Ae.get(ve.ROOTPATH)}
116
- `,Ae.get(ve.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=Ae.get(ve.THREADS_DEBUG_PORT)?`, TCP: ${Ae.get(ve.THREADS_DEBUG_PORT)}
109
+ Reindexing upgrade started for transaction logs`),ia.notify("Reindexing upgrade started for transaction logs"),await Z2(bL,!0,e)),ia.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(sE?", but errors occurred":"")}o(HRe,"reindexUpgrade");async function Z2(e,t,r){let n=await co.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=oa.join(e,a.toString());if(a===".DS_Store")continue;let l=await co.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&co.statSync(oa.join(c,f)).isDirectory())try{await kRe(a,f,t),Tn.info(`Reindexing started for ${a}.${f}`),ia.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await qRe(a,f,c,t,r),Tn.info(`Reindexing completed for ${a}.${f}`),ia.notify(`Reindexing completed for ${a}.${f}`)}catch(m){sE=!0,m.schema_path=c,m.table_name=f,ia.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ia.error(m),Tn.error(m),console.error(m)}}}if(!sE)try{await co.rm(GR,{recursive:!0})}catch{}}o(Z2,"processTables");async function kRe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=oa.join(GR,s);await co.ensureDir(GR),await co.writeFile(i,""),Tn=BRe({level:"debug",formatters:{bindings(){}}},i)}o(kRe,"initPinoLogger");var GRe=20;async function qRe(e,t,r,n,s){let i;try{i=await hs.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){ia.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(T);return}throw T}let a=KRe(i.dbis),c=hs.openDBI(i,a),l=Object.keys(i.dbis),u=hs.statDBI(i,a);Tn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new xRe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await hs.createEnvironment(r,t,!1);hs.createDBI(f,a,!1,!0);let m=[];try{for(let T of c.getRange({start:!1}))T.value={...T.value},m.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),m.length>GRe&&await h();await h()}catch(T){throw sE=!0,Tn.error(T),T}async function h(){let T,y=m.map(({value:O})=>O);n?T=await Promise.all(y.map(O=>$Re(f,O))):T=await DRe(f,a,l.filter(O=>O!=="__blob__"),y,!1);for(let O=0,F=m.length;O<F;O++){let{key:Z,value:G}=m[O];Tn.info(`Record hash value: ${Z} hash: ${a}`);let Y;n?Y=T[O]:Y=T.written_hashes.indexOf(Z)>-1,nE(Y,!0),VRe(f,a,G[a],n),Tn.info(`Insert success, written hashes: ${T.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ia.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Tn.info(`${d.value}/${d.total} records inserted`)}o(h,"finishOutstanding"),d.stop();let p=hs.statDBI(i,a),_=hs.statDBI(f,a);if(Tn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${_.entryCount}`),nE.deepStrictEqual(p.entryCount,_.entryCount),await hs.closeEnvironment(i),await hs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let T=oa.join(r,t),y=oa.join(T,"data.mdb"),N=oa.join(T,"lock.mdb");await co.unlink(y),await co.unlink(N),await co.rmdir(T),Tn.info(`Deleted old environment files from schema folder: ${y}, ${N}`)}let g=await hs.openEnvironment(r,t),R=hs.statDBI(g,a);Tn.info(`New stats: ${JSON.stringify(_)}. New stats after move: ${JSON.stringify(R)}`),nE.deepStrictEqual(R.entryCount,_.entryCount),await hs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(qRe,"processTable");async function $Re(e,t){hs.initializeDBIs(e,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),URe.isEmpty(t.user_name)||e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o($Re,"insertTransaction");function VRe(e,t,r,n){let i=e.dbis[t].get(r);nE.deepStrictEqual(typeof i,"object");let a;if(n){let c={[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!vRe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];eQ(e,c,f,r)}else eQ(e,c,l,r)}o(VRe,"validateIndices");function eQ(e,t,r,n){try{let s=!1,i=MRe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Tn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),nE.deepStrictEqual(s,!0)}catch(s){sE=!0,Tn.error(s),console.error(s)}}o(eQ,"validateIndex");function KRe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(KRe,"getHashDBI")});var aQ=M((nFe,oQ)=>{"use strict";var qR=require("path"),Rc=require("fs-extra"),YRe=yL(),ou=Q(),nQ=wt(),IL=oe(),Ni=(k(),v(W)),$R=ie(),WRe=require("properties-reader"),zRe=ai(),jRe=dS(),QRe=sn(),rFe=require("util"),JRe=QRe.searchByValue,XRe=Dn(),ZRe=yT(),eye=Ot(),tye=rQ(),sQ=as(),rye=FR(),aE=new YRe("4.0.0"),iQ=[],iE,oE;async function nye(){try{if(await rye.upgradeCertsPrompt()){if(console.log("Generating new certificates."),iE){let t=$R.changeExtension(iE,".bak");await Rc.move(iE,t)}if(oE){let t=$R.changeExtension(oE,".bak");await Rc.move(oE,t)}await sQ.generateKeys()}else console.log("Using existing certificates."),sQ.updateConfigCert(iE,oE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(nye,"generateNewKeys");async function sye(){console.log("Updating HarperDB nodes."),ou.info("Updating HarperDB nodes.");let e=[];try{let t=new zRe(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await JRe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!eye.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],h=m.channel.split(":");u.push({schema:h[0],table:h[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ni.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if($R.isEmptyOrZeroLength(n))return;let s=new jRe(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await XRe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{ZRe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(sye,"updateNodes");async function iye(){let e=IL.get(Ni.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(qR.join("config","settings.js"))){ou.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),ou.info(t);let r=qR.dirname(e),n=IL.get(Ni.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=qR.join(n,"backup","4_0_0_upgrade_settings.bak"),i=qR.join(n,Ni.HDB_CONFIG_FILE);try{ou.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Rc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{ou.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ou.info("Updating env variables with new settings values");let f=nQ.initOldConfig(e);iE=f[Ni.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],oE=f[Ni.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],nQ.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=$R.getPropsFilePath();Rc.accessSync(a,Rc.constants.F_OK|Rc.constants.R_OK);let l=WRe(a).get(Ni.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
+ install_user = ${l}`;try{Rc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{IL.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{Rc.removeSync(r),console.log(d),ou.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(iye,"updateSettingsFile400");aE.async_functions.push(iye);aE.async_functions.push(nye);aE.async_functions.push(tye);aE.async_functions.push(sye);iQ.push(aE);oQ.exports=iQ});var NL=M((iFe,dQ)=>{"use strict";var au=ie(),oye=(k(),v(W)),cQ=Q(),{DATA_VERSION:aye,UPGRADE_VERSION:cye}=oye.UPGRADE_JSON_FIELD_NAMES_ENUM,lQ=J2(),VR=aQ(),cu=new Map;lQ&&lQ.forEach(e=>{cu.set(e.version,e)});VR&&VR.forEach(e=>{cu.set(e.version,e)});VR&&VR.forEach(e=>{cu.set(e.version,e)});function lye(){return[...cu.keys()].sort(au.compareVersions)}o(lye,"getSortedVersions");function uQ(e){let t=e[aye],r=e[cye];return au.isEmptyOrZeroLength(t)||au.isEmptyOrZeroLength(r)?(cQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),cQ.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."),[]):[...cu.keys()].sort(au.compareVersions).filter(function(n){return au.compareVersions(n,t)>0&&au.compareVersions(n,r)<=0})}o(uQ,"getVersionsForUpgrade");function uye(e){return uQ(e).length>0}o(uye,"hasUpgradesRequired");function dye(e){return au.isEmptyOrZeroLength(e)?null:cu.has(e)?cu.get(e):null}o(dye,"getDirectiveByVersion");dQ.exports={getSortedVersions:lye,getDirectiveByVersion:dye,getVersionsForUpgrade:uQ,hasUpgradesRequired:uye}});var YR=M((aFe,EQ)=>{"use strict";var fye=require("util"),wL=require("chalk"),mye=require("os"),mQ=Dn(),hye=sn(),ps=(k(),v(W)),hQ=H2(),CL=MI(),{UpgradeObject:fQ}=q2(),{forceDowngradePrompt:pye}=FR(),{packageJson:Eye}=bt(),KR=Q(),Af=ie(),PL=ii(),_ye=(Me(),v(Et)),gye=NL(),Sye=fye.promisify(PL.setSchemaDataToGlobal),Tye=hye.searchByValue,Rye="info_id",yye="2.9.9",Aye="3.0.0";async function bye(e){let t=new hQ.HdbInfoInsertObject(1,e,e),r=new CL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return PL.setSchemaDataToGlobal(),mQ.insert(r)}o(bye,"insertHdbInstallInfo");async function OL(e){let t,r=await pQ(),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 hQ.HdbInfoInsertObject(i,e,e);let a=new CL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await Sye(),mQ.insert(a)}o(OL,"insertHdbUpgradeInfo");async function pQ(){let e=new CL.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Rye,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Tye(e))}catch(r){console.error(r)}return t}o(pQ,"getAllHdbInfoRecords");async function Iye(){let e=await pQ();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(Iye,"getLatestHdbInfoRecord");async function Nye(){KR.info("Checking if HDB software has been updated");try{let e=Eye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Iye(),r;if(Af.isEmpty(t))r=yye;else if(r=t.data_version_num,Af.compareVersions(r.toString(),e.toString())>0){if(!Af.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(wL.yellow(`This instance's data was last run on version ${r}`)),console.error(wL.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.${mye.EOL}${ps.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Af.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(wL.yellow(`This instance's data was last run on version ${r}`)),await pye(new fQ(r,e))?await OL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(PL.setSchemaDataToGlobal(),wye(r),e.toString()===r.toString())return;let n=new fQ(r,e);if(gye.hasUpgradesRequired(n))return n;Af.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await OL(n.upgrade_version),KR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw KR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),KR.fatal(e),e}}o(Nye,"getVersionUpdateInfo");function wye(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 ${ps.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in _ye.databases.system))throw console.log(t),new Error(t);if(!Af.isEmpty(e)&&e<Aye)throw console.log(t),new Error(t)}o(wye,"checkIfInstallIsSupported");EQ.exports={insertHdbInstallInfo:bye,insertHdbUpgradeInfo:OL,getVersionUpdateInfo:Nye}});var TQ=M((lFe,SQ)=>{"use strict";var WR=require("joi"),{boolean:Oye,string:LL,number:Cye}=WR.types(),_Q=require("fs-extra"),cE=(k(),v(W)),gQ=require("path"),Pye=ut();SQ.exports=Lye;function Lye(e){let t=LL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=WR.object({[cE.INSTALL_PROMPTS.ROOTPATH]:WR.custom(Dye),[cE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:WR.alternatives([Cye.min(0),LL]).allow("null",null),[cE.INSTALL_PROMPTS.TC_AGREEMENT]:LL.valid("yes","YES","Yes"),[cE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[cE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Oye});return Pye.validateBySchema(e,r)}o(Lye,"installValidator");function Dye(e,t){if(_Q.existsSync(gQ.join(e,"system/hdb_user/data.mdb"))||_Q.existsSync(gQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(Dye,"validateRootAvailable")});var yQ=M((dFe,RQ)=>{"use strict";var{mkdirpSync:Mye,copySync:vye}=require("fs-extra"),yc=require("path"),lE=(k(),v(W)),{PACKAGE_ROOT:Uye}=bt(),ML=Q(),xye=Jn(),DL=No(),Bye=It();RQ.exports=Fye;async function Fye(e){ML.trace("Mounting HarperDB"),lu(e),lu(yc.join(e,"backup")),lu(yc.join(e,"keys")),lu(yc.join(e,"keys",lE.LICENSE_FILE_NAME)),lu(yc.join(e,"log")),lu(yc.join(e,"database")),lu(yc.join(e,"components")),vye(yc.resolve(Uye,"./utility/install/README.md"),yc.join(e,"README.md")),await Hye()}o(Fye,"mountHdb");async function Hye(){let e=km(),t=Object.keys(DL);for(let r=0;r<t.length;r++){let n=t[r],s=DL[n].hash_attribute;try{Bye.initSystemSchemaPaths(lE.SYSTEM_SCHEMA_NAME,n);let i=new e(lE.SYSTEM_SCHEMA_NAME,n,s);i.attributes=DL[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(n)&&(i.audit=!0),await xye.createTable(n,i)}catch(i){throw ML.error(`issue creating environment for ${lE.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(Hye,"createLMDBTables");function lu(e){Mye(e,{mode:lE.HDB_FILE_PERMISSIONS}),ML.info(`Directory ${e} created`)}o(lu,"makeDirectory")});var xQ=M((pFe,UQ)=>{"use strict";var UL=require("os"),wQ=require("inquirer"),Ys=require("fs-extra"),kye=require("properties-reader"),du=require("chalk"),uo=require("path"),Gye=require("human-readable-ids").hri,qye=require("ora"),$ye=require("yaml"),Tr=Q(),Ac=oe(),uE=ie(),jR=xc(),OQ=YR(),{packageJson:CQ}=bt(),_e=(k(),v(W)),{CONFIG_PARAM_MAP:mFe,CONFIG_PARAMS:qt}=_e,Vye=TQ(),Kye=yQ(),xL=wt(),Yye=ts(),Wye=Oh(),zye=EL(),jye=ii(),Qye=require("util").promisify,Jye=Qye(jye.setSchemaDataToGlobal),AQ=as(),uu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),en=o(e=>du.magenta.bold(e),"HDB_PROMPT_MSG"),Xye="https://harperdb.io/legal/end-user-license-agreement",bc=UL.EOL,aa="",Zye="yes",bQ="Starting HarperDB install...",IQ="HarperDB installation was successful.",NQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",eAe="An out of date version of HarperDB is already installed.",vL="It appears that HarperDB is already installed. Exiting install...",tAe="Aborting install",hFe=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])$/),rAe=new RegExp(/^[^\s.,*>]+$/),nAe=UL.homedir(),sAe=uo.join(nAe,_e.HDB_ROOT_DIR_NAME),iAe="HDB_ADMIN",oAe="CLUSTER_USER",aAe="dev",cAe="localhost",zR={[qt.HTTP_CORS]:!0,[qt.HTTP_CORSACCESSLIST]:["*"],[qt.HTTP_PORT]:9926,[qt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[qt.THREADS_COUNT]:1,[qt.THREADS_DEBUG]:!0,[qt.LOGGING_STDSTREAMS]:!0,[qt.LOGGING_LEVEL]:"info",[qt.OPERATIONSAPI_NETWORK_PORT]:9925,[qt.LOCALSTUDIO_ENABLED]:!0},Zr={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:"},Ic=jR([_e.INSTALL_PROMPTS.HDB_CONFIG]),lo,PQ=!1,BL=!1,LQ=!1;UQ.exports={install:DQ,updateConfigEnv:SAe,setIgnoreExisting:TAe};DQ.createSuperUser=vQ;async function DQ(){console.log(en(bc+bQ+bc)),Tr.notify(bQ);let e;Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&(e=lAe());let t=dAe();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&&(LQ=!0,t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Vye(t);if(r)throw r.message;await fAe(),await mAe(t);let n=await uAe(t);lo=n[_e.INSTALL_PROMPTS.ROOTPATH],Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&uo.dirname(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG])===lo&&(PQ=!0),!BL&&!Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&await Ys.pathExists(uo.join(lo,_e.HDB_CONFIG_FILE))&&(console.error(vL),process.exit());let s=qye({prefixText:en("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),uE.isEmpty(lo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(lo),await Kye(lo),await hAe(),await pAe(n),Tr.initLogSettings(!0),await vQ(n),await _Ae(n),await AQ.updateConfigCert(),await AQ.generateCertsKeys(),await gAe(),zye(),s.stop(),console.log(en(bc+IQ+bc)),Tr.notify(IQ)}o(DQ,"install");function lAe(){let e=$ye.parseDocument(Ys.readFileSync(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=xL.flattenConfig(e.toJSON());return t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(lAe,"getConfigFromFile");async function uAe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.ROOTPATH],Zr.DESTINATION),name:_e.INSTALL_PROMPTS.ROOTPATH,prefix:aa,default:sAe,validate:o(async s=>Ks(s)?Ks(s):await Ys.pathExists(uo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:en(Zr.DESTINATION)},{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Zr.HDB_USERNAME),name:_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:aa,default:iAe,validate:o(s=>Ks(s)?Ks(s):(t=s,!0),"validate"),message:en(Zr.HDB_USERNAME)},{type:"password",when:ca(e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Zr.HDB_PASS),name:_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:aa,validate:o(s=>Ks(s)?Ks(s):!0,"validate"),message:en(Zr.HDB_PASS)},{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.DEFAULTS_MODE],Zr.DEFAULTS_MODE),name:_e.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:aa,default:aAe,validate:o(s=>Ks(s)?Ks(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:en(Zr.DEFAULTS_MODE)}];if(LQ||r.push({type:"input",name:_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Zr.REPLICATION_HOSTNAME),prefix:aa,default:cAe,message:en(Zr.REPLICATION_HOSTNAME)}),uE.autoCastBoolean(e[_e.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_NODENAME],Zr.NODE_NAME),name:_e.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:aa,default:Gye.random(),validate:o(i=>rAe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:en(Zr.NODE_NAME)},{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_USER],Zr.CLUSTER_USERNAME),name:_e.INSTALL_PROMPTS.CLUSTERING_USER,prefix:aa,default:oAe,validate:o(i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:en(Zr.CLUSTER_USERNAME)},{type:"password",when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Zr.CLUSTER_PASS),name:_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:aa,validate:o(i=>Ks(i)?Ks(i):!0,"validate"),message:en(Zr.CLUSTER_PASS)}];r.push(...s)}let n=await wQ.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(uAe,"installPrompts");function ca(e,t){return e!==void 0?(t.includes("password")?(console.log(`${en(t)} ${du.gray("[hidden]")}`),Tr.trace(`${en(t)} [hidden]`)):(console.log(`${en(t)} ${e}`),Tr.trace(`${en(t)} ${e}`)),!1):!0}o(ca,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Ks,"checkForEmptyValue");function dAe(){let e=Object.keys(_e.INSTALL_PROMPTS),t=jR(e),r=jR(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}o(dAe,"checkForPromptOverride");async function fAe(){Tr.trace("Checking for existing install.");let e=uE.getPropsFilePath(),t=await Ys.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=kye(e),s=xL.getConfigValue(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ys.pathExists(s)}if(!t&&uE.noBootFile()&&(r=!0),r&&!BL){if(Tr.trace(`Install found existing HDB config at:${e}`),await OQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${CQ.version}. Exiting install...`;console.log(bc+du.magenta.bold(eAe)),console.log(du.magenta.bold(s)),Tr.error(s)}else console.log(bc+du.magenta.bold(vL)),Tr.error(vL);process.exit(0)}}o(fAe,"checkForExistingInstall");async function mAe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Xye}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:aa,transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.TC_AGREEMENT],t),name:_e.INSTALL_PROMPTS.TC_AGREEMENT,message:en(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:du.yellow("Please enter 'yes' or 'no'"),"validate")},n=await wQ.prompt([r]);n[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&n[_e.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Zye&&(console.log(du.yellow(NQ)),Tr.error(NQ),process.exit(0))}o(mAe,"termsAgreement");async function hAe(){let e=uo.join(lo,_e.HDB_CONFIG_FILE),t;try{t=UL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
+ install_user = ${t}`,n=uE.getHomeDir(),s=uo.join(n,_e.HDB_HOME_DIR_NAME),i=uo.join(s,_e.LICENSE_KEY_DIR_NAME);try{Ys.mkdirpSync(s,{mode:_e.HDB_FILE_PERMISSIONS}),Ys.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 a=uo.join(s,_e.BOOT_PROPS_FILE_NAME);try{await Ys.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(_e.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(hAe,"createBootPropertiesFile");async function pAe(e){Tr.trace("Creating HarperDB config file");let t=jR(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 zR){if(r===qt.HTTP_PORT&&t[qt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zR[r],t[qt.HTTP_SECUREPORT]=null;continue}else if(r===qt.HTTP_PORT)continue;if(r===qt.OPERATIONSAPI_NETWORK_PORT&&t[qt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zR[r],t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===qt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=zR[r])}}else t[qt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[qt.HTTP_PORT.toLowerCase()]&&(t[qt.HTTP_SECUREPORT]=null);try{Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]||xL.createConfigFile(t),Ac.initSync()}catch(r){EAe(r)}}o(pAe,"createConfigFile");function EAe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(tAe);let t=uo.resolve(Ac.get(Ac.BOOT_PROPS_FILE_PATH),"../");t&&Ys.removeSync(t),lo&&(PQ?Ys.readdirSync(lo,{withFileTypes:!0}).forEach(n=>{let s=uo.join(n.path,n.name);s!==Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&Ys.removeSync(s)}):Ys.removeSync(lo)),process.exit(1)}o(EAe,"rollbackInstall");async function MQ(e,t){Tr.trace("Creating admin user"),await Jye();let r;try{r=await Wye.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 Yye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(MQ,"createAdminUser");async function vQ(e){Tr.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 MQ(t,r),delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(vQ,"createSuperUser");async function _Ae(e){Tr.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 MQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[_e.INSTALL_PROMPTS.CLUSTERING_USER],delete e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(_Ae,"createClusterUser");async function gAe(){let e=CQ.version;if(e)await OQ.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(gAe,"insertHdbVersionInfo");function SAe(e){Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]=e}o(SAe,"updateConfigEnv");function TAe(e){BL=e}o(TAe,"setIgnoreExisting")});var HQ=M((_Fe,FQ)=>{"use strict";var FL=ie(),Es=Q(),BQ=NL();FQ.exports={processDirectives:RAe};async function RAe(e){console.log("Starting upgrade process...");let t=BQ.getVersionsForUpgrade(e),r=bAe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Es.notify(c),console.log(c);let l=[],u=[];try{l=yAe(a.sync_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await AAe(a.async_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(RAe,"processDirectives");function yAe(e){if(FL.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}o(yAe,"runSyncFunctions");async function AAe(e){if(FL.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}o(AAe,"runAsyncFunctions");function bAe(e){if(FL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=BQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(bAe,"getUpgradeDirectivesToInstall")});var YQ=M((SFe,KQ)=>{"use strict";var QR=oe();QR.initSync();var $Q=require("chalk"),kQ=require("fs-extra"),ua=Q(),la=(k(),v(W)),IAe=HQ(),HL=ie(),VQ=YR(),NAe=FR(),GQ=tA(),wAe=ii(),{packageJson:qQ}=bt(),OAe=require("util").promisify,CAe=OAe(wAe.setSchemaDataToGlobal),kL,{UPGRADE_VERSION:GL}=la.UPGRADE_JSON_FIELD_NAMES_ENUM;KQ.exports={upgrade:PAe};async function PAe(e){await CAe(),kL===void 0&&(kL=gp()),kQ.existsSync(QR.get(QR.BOOT_PROPS_FILE_PATH))||(dE("The hdb_boot_properties file was not found. Please install HDB.",la.LOG_LEVELS.ERROR),process.exit(1)),kQ.existsSync(QR.get(la.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(dE("The hdb settings file was not found. Please make sure HDB is installed.",la.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await VQ.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),dE(`This version of HarperDB is ${qQ.version}`,la.LOG_LEVELS.INFO);let r=t[GL]??qQ.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${la.HDB_SUPPORT_ADDRESS}`),ua.notify("Missing new version field from upgrade info object"),process.exit(1)),await LAe();let n,s=0;try{n=await NAe.forceUpdatePrompt(t)}catch(i){ua.error("There was an error when prompting user about upgrade."),ua.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),ua.info(`Starting upgrade to version ${r}`),await DAe(t),dE(`HarperDB was successfully upgraded to version ${t[GL]}`,la.LOG_LEVELS.INFO)}o(PAe,"upgrade");async function LAe(){let e=!1,t=await GQ.findPs(la.HDB_PROC_NAME);if(HL.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await GQ.findPs("hdb_express");HL.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await kL.list();HL.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($Q.red(r)),ua.error(r),process.exit(1)}}o(LAe,"checkIfRunning");async function DAe(e){try{await IAe.processDirectives(e)}catch(t){throw dE("There was an error during the data upgrade. Please check the logs.",la.LOG_LEVELS.ERROR),t}try{await VQ.insertHdbUpgradeInfo(e[GL])}catch(t){ua.error("Error updating the 'hdb_info' system table."),ua.error(t)}}o(DAe,"runUpgrade");function dE(e,t=void 0){t||(t=ua.info),ua[t](e),console.log($Q.magenta(e))}o(dE,"printToLogAndConsole")});var ZQ=M(fE=>{"use strict";var Ae=oe();Ae.initSync();sf();var or=(k(),v(W)),{CONFIG_PARAMS:Ue}=or,_s=Q(),da=require("fs-extra"),fa=require("path"),MAe=EL(),{install:vAe}=xQ(),qL=require("chalk"),{packageJson:UAe,PACKAGE_ROOT:xAe}=bt(),ma=ie(),$L=wt(),zQ=xc(),WQ=PT(),BAe=YQ(),{compactOnStart:FAe}=(AC(),v(yC)),HAe=require("minimist"),kAe=as(),{startHTTPThreads:GAe}=(XR(),v(VL)),qAe=YR(),{isMainThread:$Ae}=require("worker_threads"),RFe=No(),yFe=Ua(),AFe=Zb(),bFe=km(),JR=(k(),v(W)),fo,bf,jQ=!1,VAe="Upgrade complete. Starting HarperDB.",KAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",YAe="HarperDB not found, starting install process.",WAe="There was an error during install, check install_log.log for more details. Exiting.",zAe="HarperDB successfully started.";function jAe(){if(!jQ){let e=o(()=>{da.removeSync(fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(jAe,"addExitListeners");async function QQ(e=!1,t=!1){if(console.log(qL.magenta("Starting HarperDB...")),_s.suppressLogging?.(()=>{console.log(qL.magenta(""+da.readFileSync(fa.join(xAe,"utility/install/ascii_logo.txt"))))}),await XQ()===!1){console.log(YAe);try{await vAe()}catch(l){console.error(WAe,l),_s.error(l),process.exit(1)}}if(!e){let l=zQ(Object.keys(or.CONFIG_PARAM_MAP),!0);!ma.isEmpty(l)&&!ma.isEmptyOrZeroLength(Object.keys(l))&&$L.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=bf?.service==="clustering";bf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE),i=ebe(s);i&&i!==1&&tbe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),fo===void 0&&(fo=gp()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await WQ.generateNatsConfig(),await fo.startClusteringProcesses(!0),process.exit()),jAe(),await da.writeFile(fa.join(Ae.get(JR.CONFIG_PARAMS.ROOTPATH),JR.HDB_PID_FILE),`${process.pid}`),_s.info("HarperDB PID",process.pid);let a;try{let l=await qAe.getVersionUpdateInfo();l!==void 0&&(a=l[or.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await BAe.upgrade(l),console.log(VAe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),_s.error(l)):(console.error(KAe,l),_s.error(l)),process.exit(1)}MAe(),XAe(),await kAe.reviewSelfSignedCert(),ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&$Ae&&await WQ.generateNatsConfig(t)}o(QQ,"initialize");async function QAe(e=!1){try{bf=HAe(process.argv),bf.ROOTPATH&&$L.updateConfigObject("settings_path",fa.join(bf.ROOTPATH,or.HDB_CONFIG_FILE)),await QQ(e,!0),Ae.get(or.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await FAe();let t=process.env.IS_SCRIPTED_SERVICE&&!bf.service;ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await fo.startClusteringProcesses(),await fo.startClusteringThreads()),await GAe(process.env.DEV_MODE?1:Ae.get(JR.CONFIG_PARAMS.THREADS_COUNT)??Ae.get(JR.CONFIG_PARAMS.THREADS)),t||JQ()}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(QAe,"main");function JQ(){_s.suppressLogging(()=>{console.log(qL.magenta(`HarperDB ${UAe.version} successfully started`))}),_s.notify(zAe)}o(JQ,"started");async function JAe(e=!0){jQ=!e;try{fo===void 0&&(fo=gp()),fo.enterPM2Mode(),await QQ(),ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await fo.startClusteringProcesses(),await fo.startService(or.PROCESS_DESCRIPTORS.HDB),JQ(),e&&process.exit(0)}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(JAe,"launch");function XAe(){let e=fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.LICENSE_KEY_DIR_NAME,or.LICENSE_FILE_NAME),t=fa.join(e,or.LICENSE_FILE_NAME),r=fa.join(e,or.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=zQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ma.isEmpty(n)||ma.isEmpty(s))return;da.mkdirpSync(e),da.writeFileSync(r,n),da.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),_s.error(s)}}o(XAe,"writeLicenseFromVars");fE.launch=JAe;fE.main=QAe;fE.isHdbInstalled=XQ;fE.startupLog=ZAe;async function XQ(){try{await da.stat(ma.getPropsFilePath()),await da.stat(Ae.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ma.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw _s.error(`Error checking for HDB install - ${e}`),e}return!0}o(XQ,"isHdbInstalled");function ZAe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
112
+ `;Ae.get(Ue.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Ae.get(Ue.REPLICATION_HOSTNAME)}
113
+ `),Ae.get(Ue.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Ae.get(Ue.REPLICATION_URL)}
114
+ `),n+=`${r("Worker Threads:")}${Ae.get(Ue.THREADS_COUNT)}
115
+ `,n+=`${r("Root Path:")}${Ae.get(Ue.ROOTPATH)}
116
+ `,Ae.get(Ue.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=Ae.get(Ue.THREADS_DEBUG_PORT)?`, TCP: ${Ae.get(Ue.THREADS_DEBUG_PORT)}
117
117
  `:`
118
- `);let s=fa.join(Ae.get(ve.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Ae.get(ve.LOGGING_LEVEL)}, location: ${s+(Ae.get(ve.LOGGING_STDSTREAMS)?", stdout/err":"")}
119
- `,n+=r("Default:"),n+=Ae.get(ve.HTTP_PORT)?`HTTP (and WS): ${Ae.get(ve.HTTP_PORT)}, `:"",n+=Ae.get(ve.HTTP_SECUREPORT)?`HTTPS (and WS): ${Ae.get(ve.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${Ae.get(ve.HTTP_CORS)?`enabled for ${Ae.get(ve.HTTP_CORSACCESSLIST)}`:"disabled"}
120
- `,n+=r("Operations API:"),n+=Ae.get(ve.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${Ae.get(ve.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=Ae.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${Ae.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${Ae.get(ve.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${Ae.get(ve.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${Ae.get(ve.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
121
- `,n+=r("MQTT:"),n+=Ae.get(ve.MQTT_NETWORK_PORT)?`TCP: ${Ae.get(ve.MQTT_NETWORK_PORT)}, `:"",n+=Ae.get(ve.MQTT_NETWORK_SECUREPORT)?`TLS: ${Ae.get(ve.MQTT_NETWORK_SECUREPORT)}`:"",n+=Ae.get(ve.MQTT_WEBSOCKET)&&Ae.get(ve.HTTP_PORT)?`, WS: ${Ae.get(ve.HTTP_PORT)}`:"",n+=Ae.get(ve.MQTT_WEBSOCKET)&&Ae.get(ve.HTTP_SECUREPORT)?`, WSS: ${Ae.get(ve.HTTP_SECUREPORT)}
118
+ `);let s=fa.join(Ae.get(Ue.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Ae.get(Ue.LOGGING_LEVEL)}, location: ${s+(Ae.get(Ue.LOGGING_STDSTREAMS)?", stdout/err":"")}
119
+ `,n+=r("Default:"),n+=Ae.get(Ue.HTTP_PORT)?`HTTP (and WS): ${Ae.get(Ue.HTTP_PORT)}, `:"",n+=Ae.get(Ue.HTTP_SECUREPORT)?`HTTPS (and WS): ${Ae.get(Ue.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${Ae.get(Ue.HTTP_CORS)?`enabled for ${Ae.get(Ue.HTTP_CORSACCESSLIST)}`:"disabled"}
120
+ `,n+=r("Operations API:"),n+=Ae.get(Ue.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=Ae.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${Ae.get(Ue.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
121
+ `,n+=r("MQTT:"),n+=Ae.get(Ue.MQTT_NETWORK_PORT)?`TCP: ${Ae.get(Ue.MQTT_NETWORK_PORT)}, `:"",n+=Ae.get(Ue.MQTT_NETWORK_SECUREPORT)?`TLS: ${Ae.get(Ue.MQTT_NETWORK_SECUREPORT)}`:"",n+=Ae.get(Ue.MQTT_WEBSOCKET)&&Ae.get(Ue.HTTP_PORT)?`, WS: ${Ae.get(Ue.HTTP_PORT)}`:"",n+=Ae.get(Ue.MQTT_WEBSOCKET)&&Ae.get(Ue.HTTP_SECUREPORT)?`, WSS: ${Ae.get(Ue.HTTP_SECUREPORT)}
122
122
  `:`
123
- `;let i=Ae.get(ve.REPLICATION_PORT)??Ae.get(ve.OPERATIONSAPI_NETWORK_PORT),a=Ae.get(ve.REPLICATION_SECUREPORT)??Ae.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
123
+ `;let i=Ae.get(Ue.REPLICATION_PORT)??Ae.get(Ue.OPERATIONSAPI_NETWORK_PORT),a=Ae.get(Ue.REPLICATION_SECUREPORT)??Ae.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
124
124
  `;let l=[],u=$L.getConfigObj();for(let h in u)u[h].package&&l.push(h);let d={},f=`${r("REST:")}`;for(let[h,p]of e)for(let _ of p){let g=_.name;g==="rest"&&(f+=`${_.protocol_name}: ${h}, `),l.includes(g)&&(d[g]?d[g]+=`${_.protocol_name}: ${h}, `:d[g]=`${_.protocol_name}: ${h}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
125
- `);let m=Ae.get(ve.HTTP_PORT)?`HTTP: ${Ae.get(ve.HTTP_PORT)}, `:"";m+=Ae.get(ve.HTTP_SECUREPORT)?`HTTPS: ${Ae.get(ve.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let h of l)d[h]?n+=`${r(h+": ")}${d[h].slice(0,-2)}
125
+ `);let m=Ae.get(Ue.HTTP_PORT)?`HTTP: ${Ae.get(Ue.HTTP_PORT)}, `:"";m+=Ae.get(Ue.HTTP_SECUREPORT)?`HTTPS: ${Ae.get(Ue.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let h of l)d[h]?n+=`${r(h+": ")}${d[h].slice(0,-2)}
126
126
  `:n+=`${r(h+": ")}${m}
127
- `;console.log(n),Ae.get(ve.LOGGING_STDSTREAMS)&&_s.logsAtLevel("info")&&_s.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(XAe,"startupLog");function ZAe(e){try{return Number.parseInt(da.readFileSync(e,"utf8"),10)}catch{return null}}o(ZAe,"readPidFile");function ebe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(ebe,"isProcessRunning")});var ZQ={};Oe(ZQ,{SERVERS:()=>bf,portServer:()=>KL,setPortServerMap:()=>ZR});function ZR(e,t){let r=KL.get(e)??[];KL.set(e,[...r,t])}var bf,KL,YL=ue(()=>{bf={},KL=new Map;o(ZR,"setPortServerMap")});var iy={};Oe(iy,{deliverSocket:()=>fJ,getHttpOptions:()=>sbe,getRequestId:()=>EJ,handleApplication:()=>nbe,httpServer:()=>eD,logRequest:()=>pE,proxyRequest:()=>ibe,registerServer:()=>XL,suppressHandleApplicationWarning:()=>rbe});function nbe(e){EE=e.options.getAll(),e.options.on("change",t=>{EE=e.options.getAll()})}function sbe(){return EE}function fJ(e,t,r){let n=e?.read?e:new sJ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=bf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=bf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ha.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function ibe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=eJ.get(s),r){case"connection":i=fJ(void 0,t),eJ.set(s,i),i.write=(c,l,u)=>(ty.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(ty.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),ty.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function XL(e,t,r=!0){t||(t=Pr.default.get(U.HTTP_PORT));let n=bf[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",nJ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else bf[t]=e;e.on("unhandled",nJ)}function ZL(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=[],Pr.default.get(U.HTTP_PORT)!=null&&t.push({port:Pr.default.get(U.HTTP_PORT),secure:Pr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Pr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Pr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,iJ.resolvePath)(Pr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function eD(e,t){let r=[];for(let{port:n,secure:s}of ZL(t))r.push(mJ(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?QL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,XL(e,n,!1)),ry[n]=ny(QL,n);return r}function mJ(e,t,r,n){if(ZR(e,{protocol_name:t?"HTTPS":"HTTP",name:oy()}),!ey[e]){let s=r?"operationsApi_network":"http",i=Pr.default.get(s+"_keepAliveTimeout"),a=Pr.default.get(s+"_timeout"),c=Pr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Pr.default.get(U.HTTP_MAXHEADERSIZE)},u=Pr.default.get(s+"_mtls"),d=Pr.default.get(s+"_mtls_required"),f;if(t){let g=Pr.default.get("tls");f=Pr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,oJ.getTicketKeys)(),SNICallback:(0,aJ.createTLSSelector)(r?"operations-api":"server",u),ciphers:g.ciphers??g[0]?.ciphers})}let m=(0,cJ.checkMemoryLimit)(),h=o(async(g,y)=>{let T=performance.now(),R=0;try{let O=new Ya(g,y);r&&(O.isOperationsServer=!0),EE.logging?.id&&(O.requestId=R=EJ());let F=await ry[e](O);if(!F){if(O._nodeResponse.statusCode){pE(g,O._nodeResponse.statusCode,R,performance.now()-T);return}F=hJ(O)}if(F.headers?.set||(F.headers=new Os(F.headers)),m?F.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):F.headers?.set?.("Server","HarperDB"),F.status===-1){for(let pe of F.headers||[])y.setHeader(pe[0],pe[1]);return g.baseRequest=O,y.baseResponse=F,ey[e].emit("unhandled",g,y)}let Z=F.status||200,G=performance.now(),Y=G-T,q=F.body,K,ce=!1;if(!F.handlesHeaders){let pe=F.headers||new Os;q?q.length>=0?(typeof q=="string"?pe.set("Content-Length",Buffer.byteLength(q)):pe.set("Content-Length",q.length),K=!0):q instanceof Rs&&(q.size?pe.set("Content-Length",q.size):q.on&&(ce=!0,q.on("size",Ue=>{y.headersSent||y.setHeader("Content-Length",Ue)})),q=q.stream()):(pe.set("Content-Length","0"),K=!0);let Ne=`hdb;dur=${Y.toFixed(2)}`;if(F.wasCacheMiss&&(Ne+=", miss"),lh(pe,"Server-Timing",Ne,!0),!y.headersSent)if(ce){if(y.statusCode=Z,pe)if(pe[Symbol.iterator])for(let[Ue,xe]of pe)y.setHeader(Ue,xe);else for(let Ue in pe)y.setHeader(Ue,pe[Ue])}else y.writeHead(Z,pe&&(pe[Symbol.iterator]?Array.from(pe):pe));K&&y.end(q)}let le=O.handlerPath,se=O.method;if(st(Y,"duration",le,se,F.wasCacheMiss==null?void 0:F.wasCacheMiss?"cache-miss":"cache-hit"),zr(Z<400,"success",le,se),zr(1,"response_"+Z,le,se),pE(g,Z,R,Y),!K)if(q instanceof ReadableStream&&(q=jL.Readable.fromWeb(q)),(q[Symbol.iterator]||q[Symbol.asyncIterator])&&(q=jL.Readable.from(q)),q?.pipe){q.pipe(y),q.destroy&&y.on("close",()=>{q.destroy()});let pe=0;q.on("data",Ne=>{pe+=Ne.length}),q.on("end",()=>{st(performance.now()-G,"transfer",le,se),st(pe,"bytes-sent",le,se)})}else q?.then?q.then(pe=>{y.end(pe)},N):y.end(q)}catch(O){N(O)}function N(O){let F=O.headers,Z=O.statusCode||500;y.writeHead(Z,F&&(F[Symbol.iterator]?Array.from(F):F)),y.end(tbe(O)),pE(g,Z,R,performance.now()-T),O.statusCode?O.statusCode===500?ha.default.warn(O):ha.default.info(O):ha.default.error(O)}o(N,"onError")},"requestHandler"),p=Og(h,(g,y)=>{y.statusCode=503,y.end("Service unavailable, exceeded request queue limit"),st(!0,"service-unavailable",e)},Pr.default.get(s+"_requestQueueLimit")),_=ey[e]=(t?f?lJ.createSecureServer:uJ.createServer:sy.createServer)(l,(g,y)=>{let T=g.method;T==="GET"||T==="OPTIONS"||T==="HEAD"?h(g,y):p(g,y)});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",g=>{g._parent.startTime&&st(performance.now()-g._parent.startTime,"tls-handshake",e),st(g.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),XL(_,e)}return ey[e]}function ny(e,t){let r=hJ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function hJ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Os}}function obe(e,t){eD(e,{requestOnly:!0,...t})}function pJ(e,t){for(let{port:r}of ZL(t))tJ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),JL[r]=ny(tJ,r)}function abe(e,t){let r=[];for(let{port:n,secure:s}of ZL(t)){ZR(n,{protocol_name:s?"WSS":"WS",name:oy()});let i=mJ(n,s,t?.isOperationsServer,t?.mtls);mE[n]||(mE[n]=new dJ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),mE[n].on("connection",(a,c)=>{try{let l=new Ya(c);l.isWebSocket=!0;let u=ry[n](l);ha.default.debug("Received WS connection, calling listeners",WL),rJ[n](a,l,u)}catch(l){ha.default.warn("Error in handling WS connection",l)}}),pJ((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):mE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),mE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{JL[n]&&JL[n](a,c,l)})),r.push(i),WL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),rJ[n]=ny(WL,n),ry[n]=ny(QL,n)}return r}function nJ(e,t){t.writeHead(404),t.end(`Not found
128
- `),pE(e,404,0,e.requestId)}function pE(e,t,r,n){let s=EE.logging;if(s){zL||(zL=ha.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";zL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+cbe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function cbe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function EJ(){return hE||(hE=new BigInt64Array([1n]),hE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",hE.buffer))),Number(Atomics.add(hE,0,1n))}var sJ,ha,ty,Pr,iJ,oJ,aJ,cJ,lJ,uJ,sy,jL,dJ,tbe,mE,ey,ry,QL,EE,rbe,eJ,tJ,JL,WL,rJ,zL,hE,tD=ue(()=>{sJ=require("node:net"),ha=w(Q()),ty=require("node:worker_threads"),Pr=w(oe());k();iJ=w(bt()),oJ=w(rt()),aJ=w(as()),cJ=w(Qd()),lJ=require("node:http2"),uJ=require("node:https"),sy=require("node:http");Ph();uh();Kn();Wi();jL=require("node:stream");Mr();YL();cf();EN();dJ=require("ws"),{errorToString:tbe}=ha.default;Le.http=eD;Le.request=obe;Le.ws=abe;Le.upgrade=pJ;mE={},ey={},ry={},QL=[],EE={},rbe=!0;o(nbe,"handleApplication");o(sbe,"getHttpOptions");o(fJ,"deliverSocket");eJ=new Map;o(ibe,"proxyRequest");o(XL,"registerServer");o(ZL,"getPorts");o(eD,"httpServer");o(mJ,"getHTTPServer");o(ny,"makeCallbackChain");o(hJ,"unhandled");o(obe,"onRequest");Object.defineProperty(sy.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});tJ=[],JL={};o(pJ,"onUpgrade");WL=[],rJ={};o(abe,"onWebSocket");o(nJ,"defaultNotFound");o(pE,"logRequest");o(cbe,"headersToString");o(EJ,"getRequestId")});var nD=M(gE=>{"use strict";LE();var{isMainThread:rD,parentPort:_J,threadId:ay,workerData:lbe}=require("node:worker_threads"),{createServer:ube}=require("node:net"),{unlinkSync:TJ,existsSync:dbe}=require("fs"),RJ;gE.whenComponentsLoaded=new Promise(e=>{RJ=e});var wi=Q(),Ws=oe(),gs=(k(),v(W)),{server:fbe}=(Mr(),v($f)),{createServer:mbe}=require("node:tls"),{restartNumber:hbe,getWorkerIndex:If}=rt(),{createReuseportFd:_E}=(Ph(),v(ZG)),{createTLSSelector:pbe}=as(),{resolvePath:Ebe}=bt(),{startupLog:_be}=XQ(),{SERVERS:Nf,setPortServerMap:gJ,portServer:gbe}=(YL(),v(ZQ)),SJ=(tD(),v(iy)),Sbe=Xs(),yJ=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG),Tbe=Ws.get(gs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);fbe.socket=Rbe;if(yJ){let e;if(rD)e=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wi.info("Could not close debugger",t)}});else{let t=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&If()>=0&&(e=t+If())}if(e){let t=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&rD)try{require("inspector").open(9229)}catch(e){hbe<=1&&wi.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"&&wi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:xFe,CONFIG_PARAMS:BFe}=gs;Ws.initSync();gE.globals=Sbe;gE.listenOnPorts=bJ;gE.startServers=AJ;function AJ(){let e=Ws.get(gs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=cy().loadRootComponents(!0).then(()=>{_J?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)SJ.deliverSocket(i,s,a);else if(n.requestId)SJ.proxyRequest(n);else if(n.type===gs.ITC_EVENT_TYPES.SHUTDOWN){wi.trace("received shutdown request",ay);for(let c in Nf){let l=Nf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(p=>p.description.includes("connections")),m=0,h=setInterval(()=>{m++;let p=m>=100;if(!l[f]){p&&l.closeAllConnections?.(),clearInterval(h);return}let _=l[f][p?"all":"idle"]?.()||[];if(_.length===0){p&&clearInterval(h);return}m===1?wi.info(`Closing ${_.length} idle connections`):p&&wi.warn(`Forcefully closing ${_.length} active connections`);for(let g=0,y=_.length;g<y;g++){let T=_[g].socket;T._httpMessage&&!T._httpMessage.finished&&!p||(p?T.destroySoon():T.end(`HTTP/1.1 408 Request Timeout\r
127
+ `;console.log(n),Ae.get(Ue.LOGGING_STDSTREAMS)&&_s.logsAtLevel("info")&&_s.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(ZAe,"startupLog");function ebe(e){try{return Number.parseInt(da.readFileSync(e,"utf8"),10)}catch{return null}}o(ebe,"readPidFile");function tbe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(tbe,"isProcessRunning")});var eJ={};we(eJ,{SERVERS:()=>If,portServer:()=>KL,setPortServerMap:()=>ZR});function ZR(e,t){let r=KL.get(e)??[];KL.set(e,[...r,t])}var If,KL,YL=ce(()=>{If={},KL=new Map;o(ZR,"setPortServerMap")});var iy={};we(iy,{deliverSocket:()=>mJ,getHttpOptions:()=>ibe,getRequestId:()=>_J,handleApplication:()=>sbe,httpServer:()=>eD,logRequest:()=>pE,proxyRequest:()=>obe,registerServer:()=>XL,suppressHandleApplicationWarning:()=>nbe});function sbe(e){EE=e.options.getAll(),e.options.on("change",t=>{EE=e.options.getAll()})}function ibe(){return EE}function mJ(e,t,r){let n=e?.read?e:new iJ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=If[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=If[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ha.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function obe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=tJ.get(s),r){case"connection":i=mJ(void 0,t),tJ.set(s,i),i.write=(c,l,u)=>(ty.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(ty.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),ty.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function XL(e,t,r=!0){t||(t=Cr.default.get(U.HTTP_PORT));let n=If[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",sJ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else If[t]=e;e.on("unhandled",sJ)}function ZL(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=[],Cr.default.get(U.HTTP_PORT)!=null&&t.push({port:Cr.default.get(U.HTTP_PORT),secure:Cr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Cr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Cr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,oJ.resolvePath)(Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function eD(e,t){let r=[];for(let{port:n,secure:s}of ZL(t))r.push(hJ(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?QL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,XL(e,n,!1)),ry[n]=ny(QL,n);return r}function hJ(e,t,r,n){if(ZR(e,{protocol_name:t?"HTTPS":"HTTP",name:oy()}),!ey[e]){let s=r?"operationsApi_network":"http",i=Cr.default.get(s+"_keepAliveTimeout"),a=Cr.default.get(s+"_timeout"),c=Cr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Cr.default.get(U.HTTP_MAXHEADERSIZE)},u=Cr.default.get(s+"_mtls"),d=Cr.default.get(s+"_mtls_required"),f;if(t){let g=Cr.default.get("tls");f=Cr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,aJ.getTicketKeys)(),SNICallback:(0,cJ.createTLSSelector)(r?"operations-api":"server",u),ciphers:g.ciphers??g[0]?.ciphers})}let m=(0,lJ.checkMemoryLimit)(),h=o(async(g,R)=>{let T=performance.now(),y=0;try{let O=new Ya(g,R);r&&(O.isOperationsServer=!0),EE.logging?.id&&(O.requestId=y=_J());let F=await ry[e](O);if(!F){if(O._nodeResponse.statusCode){pE(g,O._nodeResponse.statusCode,y,performance.now()-T);return}F=pJ(O)}if(F.headers?.set||(F.headers=new Os(F.headers)),m?F.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):F.headers?.set?.("Server","HarperDB"),F.status===-1){for(let me of F.headers||[])R.setHeader(me[0],me[1]);return g.baseRequest=O,R.baseResponse=F,ey[e].emit("unhandled",g,R)}let Z=F.status||200,G=performance.now(),Y=G-T,K=F.body,$,le=!1;if(!F.handlesHeaders){let me=F.headers||new Os;K?K.length>=0?(typeof K=="string"?me.set("Content-Length",Buffer.byteLength(K)):me.set("Content-Length",K.length),$=!0):K instanceof Rs&&(K.size?me.set("Content-Length",K.size):K.on&&(le=!0,K.on("size",De=>{R.headersSent||R.setHeader("Content-Length",De)})),K=K.stream()):(me.set("Content-Length","0"),$=!0);let Pe=`hdb;dur=${Y.toFixed(2)}`;if(F.wasCacheMiss&&(Pe+=", miss"),lh(me,"Server-Timing",Pe,!0),!R.headersSent)if(le){if(R.statusCode=Z,me)if(me[Symbol.iterator])for(let[De,dt]of me)R.setHeader(De,dt);else for(let De in me)R.setHeader(De,me[De])}else R.writeHead(Z,me&&(me[Symbol.iterator]?Array.from(me):me));$&&R.end(K)}let ue=O.handlerPath,se=O.method;if(it(Y,"duration",ue,se,F.wasCacheMiss==null?void 0:F.wasCacheMiss?"cache-miss":"cache-hit"),Wr(Z<400,"success",ue,se),Wr(1,"response_"+Z,ue,se),pE(g,Z,y,Y),!$)if(K instanceof ReadableStream&&(K=jL.Readable.fromWeb(K)),(K[Symbol.iterator]||K[Symbol.asyncIterator])&&(K=jL.Readable.from(K)),K?.pipe){K.pipe(R),K.destroy&&R.on("close",()=>{K.destroy()});let me=0;K.on("data",Pe=>{me+=Pe.length}),K.on("end",()=>{it(performance.now()-G,"transfer",ue,se),it(me,"bytes-sent",ue,se)})}else K?.then?K.then(me=>{R.end(me)},N):R.end(K)}catch(O){N(O)}function N(O){let F=O.headers,Z=O.statusCode||500;R.writeHead(Z,F&&(F[Symbol.iterator]?Array.from(F):F)),R.end(rbe(O)),pE(g,Z,y,performance.now()-T),O.statusCode?O.statusCode===500?ha.default.warn(O):ha.default.info(O):ha.default.error(O)}o(N,"onError")},"requestHandler"),p=Og(h,(g,R)=>{R.statusCode=503,R.end("Service unavailable, exceeded request queue limit"),it(!0,"service-unavailable",e)},Cr.default.get(s+"_requestQueueLimit")),_=ey[e]=(t?f?uJ.createSecureServer:dJ.createServer:sy.createServer)(l,(g,R)=>{let T=g.method;T==="GET"||T==="OPTIONS"||T==="HEAD"?h(g,R):p(g,R)});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",g=>{g._parent.startTime&&it(performance.now()-g._parent.startTime,"tls-handshake",e),it(g.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),XL(_,e)}return ey[e]}function ny(e,t){let r=pJ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function pJ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Os}}function abe(e,t){eD(e,{requestOnly:!0,...t})}function EJ(e,t){for(let{port:r}of ZL(t))rJ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),JL[r]=ny(rJ,r)}function cbe(e,t){let r=[];for(let{port:n,secure:s}of ZL(t)){ZR(n,{protocol_name:s?"WSS":"WS",name:oy()});let i=hJ(n,s,t?.isOperationsServer,t?.mtls);mE[n]||(mE[n]=new fJ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),mE[n].on("connection",(a,c)=>{try{let l=new Ya(c);l.isWebSocket=!0;let u=ry[n](l);ha.default.debug("Received WS connection, calling listeners",WL),nJ[n](a,l,u)}catch(l){ha.default.warn("Error in handling WS connection",l)}}),EJ((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):mE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),mE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{JL[n]&&JL[n](a,c,l)})),r.push(i),WL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),nJ[n]=ny(WL,n),ry[n]=ny(QL,n)}return r}function sJ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
128
+ `),pE(e,404,0,e.requestId))}function pE(e,t,r,n){let s=EE.logging;if(s){zL||(zL=ha.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";zL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+lbe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function lbe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function _J(){return hE||(hE=new BigInt64Array([1n]),hE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",hE.buffer))),Number(Atomics.add(hE,0,1n))}var iJ,ha,ty,Cr,oJ,aJ,cJ,lJ,uJ,dJ,sy,jL,fJ,rbe,mE,ey,ry,QL,EE,nbe,tJ,rJ,JL,WL,nJ,zL,hE,tD=ce(()=>{iJ=require("node:net"),ha=w(Q()),ty=require("node:worker_threads"),Cr=w(oe());k();oJ=w(wt()),aJ=w(nt()),cJ=w(as()),lJ=w(Jd()),uJ=require("node:http2"),dJ=require("node:https"),sy=require("node:http");Ph();uh();Kn();Wi();jL=require("node:stream");Dr();YL();lf();EN();fJ=require("ws"),{errorToString:rbe}=ha.default;Le.http=eD;Le.request=abe;Le.ws=cbe;Le.upgrade=EJ;mE={},ey={},ry={},QL=[],EE={},nbe=!0;o(sbe,"handleApplication");o(ibe,"getHttpOptions");o(mJ,"deliverSocket");tJ=new Map;o(obe,"proxyRequest");o(XL,"registerServer");o(ZL,"getPorts");o(eD,"httpServer");o(hJ,"getHTTPServer");o(ny,"makeCallbackChain");o(pJ,"unhandled");o(abe,"onRequest");Object.defineProperty(sy.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});rJ=[],JL={};o(EJ,"onUpgrade");WL=[],nJ={};o(cbe,"onWebSocket");o(sJ,"defaultNotFound");o(pE,"logRequest");o(lbe,"headersToString");o(_J,"getRequestId")});var nD=M(gE=>{"use strict";LE();var{isMainThread:rD,parentPort:gJ,threadId:ay,workerData:ube}=require("node:worker_threads"),{createServer:dbe}=require("node:net"),{unlinkSync:RJ,existsSync:fbe}=require("fs"),yJ;gE.whenComponentsLoaded=new Promise(e=>{yJ=e});var wi=Q(),Ws=oe(),gs=(k(),v(W)),{server:mbe}=(Dr(),v($f)),{createServer:hbe}=require("node:tls"),{restartNumber:pbe,getWorkerIndex:Nf}=nt(),{createReuseportFd:_E}=(Ph(),v(eq)),{createTLSSelector:Ebe}=as(),{resolvePath:_be}=wt(),{startupLog:gbe}=ZQ(),{SERVERS:wf,setPortServerMap:SJ,portServer:Sbe}=(YL(),v(eJ)),TJ=(tD(),v(iy)),Tbe=Xs(),AJ=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG),Rbe=Ws.get(gs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);mbe.socket=ybe;if(AJ){let e;if(rD)e=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wi.info("Could not close debugger",t)}});else{let t=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Nf()>=0&&(e=t+Nf())}if(e){let t=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&rD)try{require("inspector").open(9229)}catch(e){pbe<=1&&wi.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"&&wi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:BFe,CONFIG_PARAMS:FFe}=gs;Ws.initSync();gE.globals=Tbe;gE.listenOnPorts=IJ;gE.startServers=bJ;function bJ(){let e=Ws.get(gs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=cy().loadRootComponents(!0).then(()=>{gJ?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)TJ.deliverSocket(i,s,a);else if(n.requestId)TJ.proxyRequest(n);else if(n.type===gs.ITC_EVENT_TYPES.SHUTDOWN){wi.trace("received shutdown request",ay);for(let c in wf){let l=wf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(p=>p.description.includes("connections")),m=0,h=setInterval(()=>{m++;let p=m>=100;if(!l[f]){p&&l.closeAllConnections?.(),clearInterval(h);return}let _=l[f][p?"all":"idle"]?.()||[];if(_.length===0){p&&clearInterval(h);return}m===1?wi.info(`Closing ${_.length} idle connections`):p&&wi.warn(`Forcefully closing ${_.length} active connections`);for(let g=0,R=_.length;g<R;g++){let T=_[g].socket;T._httpMessage&&!T._httpMessage.finished&&!p||(p?T.destroySoon():T.end(`HTTP/1.1 408 Request Timeout\r
129
129
  Connection: close\r
130
130
  \r
131
- `))}},25).unref()}l.close?.(()=>{if(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&If()==0)try{TJ(Ebe(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,ay),l.cantCleanupProperly||wi.warn("Had to forcefully exit the thread",ay),process.exit(0)},5e3).unref()})}if(yJ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){wi.info("Could not close debugger",c)}}}).ref();let r;_E&&!Tbe&&(r=bJ()),Promise.resolve(r).then(()=>{if(If()===0)try{_be(gbe)}catch(n){console.error("Error displaying start-up log",n)}_J?.postMessage({type:gs.ITC_EVENT_TYPES.CHILD_STARTED})})});return RJ(t),t}o(AJ,"startServers");function bJ(){let e=[];for(let t in Nf){let r=Nf[t];if(t.includes?.("/")&&If()==0){dbe(t)&&TJ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Ws.get(gs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=If();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?_E?n={fd:_E(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:_E?n={fd:_E(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.trace("Listening on port "+t,ay)}).on("error",c)}))}return Promise.all(e)}o(bJ,"listenOnPorts");!rD&&!lbe?.noServerStart&&AJ();function Rbe(e,t){let r=(cf(),v(Pp)).getComponentName,n;if(t.securePort){gJ(t.securePort,{protocol_name:"TLS",name:r()});let s=pbe("server",t.mtls),i=Ws.get("tls");n=mbe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Nf[t.securePort]=n}return t.port&&(gJ(t.port,{protocol_name:"TCP",name:r()}),n=ube(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Nf[t.port]=n),n}o(Rbe,"onSocket")});async function CJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await sD.get(e,{returnNonexistent:!0});i=new aD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await sD.get(e);a&&a.delete()}i=new uy(e,t)}return n&&(n.id=e,n.user={username:t?.username},SE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function iD(){return ly++,ly>65500&&(ly=1),ly}function oD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new ri(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return xt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var NJ,Nc,wJ,OJ,IJ,sD,SE,ly,uy,aD,PJ=ue(()=>{De();Bu();NJ=w(An()),Nc=w(Q());xc();wJ=w(rt()),OJ=w(nD());Mr();O_();IJ=100,sD=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),SE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,wJ.getWorkerIndex)()===0&&(async()=>{await OJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of SE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Le.getUser(r.user.username));try{await oD(r,t,r)}catch{(0,Nc.warn)("Failed to publish will",t)}SE.delete(e.id)}})();o(CJ,"getSession");ly=1;o(iD,"getNextMessageId");uy=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(T=>T.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Nc.trace)("Resuming subscription from",s,"from",a);let h=bs.getMatch(u,"mqtt");if(!h){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}m.url=h.relativeURL;let p;if(m.url.indexOf("+")>-1||(p=m.url.indexOf("#"))>-1){let T=m.url.slice(1);if(p--,p>-1&&p!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,T.indexOf("+")===T.length-1)m.onlyChildren=!0,m.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),N;for(let Z=0;Z<R.length;Z++)if(R[Z].indexOf("+")>-1)if(R[Z]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),N&&(n=o(Z=>{let G=Z.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(O&&G.length!==R.length)return!1;for(let Y=0;Y<R.length;Y++)if(R[Y]!=="+"&&R[Y]!==G[Y])return!1;return!0},"filter"));let F=R.indexOf("+");m.url="/"+(F>-1?R.slice(0,F):R).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,y=await xt(m,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i,T.isCollection=m.isCollection;let R=await g.subscribe(m,T);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of R)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=iD());let Z=O.id;if(Array.isArray(Z)&&(Z=xu(Z)),Z==null&&(Z=""),await this.listener(_+"/"+Z,O.value,F,t)===!1)break;this.awaitingAcks?.size>IJ?await new Promise(Y=>setTimeout(Y,this.awaitingAcks.size-IJ)):await new Promise(setImmediate)}catch(F){(0,Nc.warn)(F)}})();return R});if(y)return y.topic=s,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){let r=iD();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 oD(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();xt(r,async()=>{try{if(!t){let n=await SE.get(this.sessionId);n?.doesExist()&&await oD(n,n.data,r)}}finally{await SE.delete(this.sessionId)}}).catch(n=>{(0,Nc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(oD,"publish");aD=class extends uy{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=iD(),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,Nc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,NJ.getNextMonotonicTime)()),(0,Nc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),sD.put(this.sessionRecord)}}});var cD={};Oe(cD,{bypassAuth:()=>ybe,start:()=>bbe});function ybe(){BJ=!0}function bbe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new xJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),ar.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=DJ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{ar.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),ar.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,wf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&fy.notify?.({username:d?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,wf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&fy.error?.({username:h,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else ar.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),ar.error?.(h)}else if(l.required)return ar.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&Abe(u.remoteAddress)&&(d=await(0,MJ.getSuperUser)(),ar.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=DJ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{ar.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function DJ(e,t,r,n,s){LJ||(LJ=!0,ch(f=>{dy>0&&f.push({metric:"mqtt-connections",connections:dy,byThread:!0})}));let i;dy++;let a,c={protocolVersion:4},l=(0,my.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){dy--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),ar.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),ar.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){ar.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let h=f.topic,p=h?.indexOf("/",1),_=p>0?h.slice(0,p):h;st(f.length,"bytes-received",_,y(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Le.getUser(f.username,f.password.toString(),r),(0,wf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&fy.notify?.({username:n?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(q){return(0,wf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&fy.error?.({username:f.username,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,q),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let q=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?q(f.will.payload):void 0,delete f.will.payload}a=CJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(q){return ar.error?.(q),s.events.emit("auth-failed",f,e,q),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:q.code||5,returnCode:q.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(q,K,ce,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",q);let se=q.indexOf("/",1),pe=se>0?q.slice(0,se):q;g({cmd:"publish",topic:q,payload:await T(K),messageId:ce||Math.floor(Math.random()*1e8),qos:le.qos},pe);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Ue=>Ne.once("drain",Ue)):!Ne.closed}catch(se){return ar.error?.(se),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let q of f.subscriptions){let K;try{let ce=await a.addSubscription(q,q.qos>=1);K=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,q,a),ce.statusCode?ce.statusCode===500?ar.warn?.(ce):ar.info?.(ce):ar.error?.(ce),K=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}N.push(K)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let q=[];for(let K of f.unsubscriptions)q.push(a.removeSubscription(K)?0:17);g({cmd:"unsuback",granted:q,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?F(f.payload):void 0,Y;try{Y=await a.publish(f,G)}catch(q){s.events.emit("error",q,e,f,a),ar.warn?.(q),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:Y===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!0,"connection","mqtt","disconnect"),ar.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),ar.error?.(R),g({cmd:"disconnect"})}function g(R,N){let O=(0,my.generate)(R,c);t(O),st(O.length,"bytes-sent",N,y(R),"mqtt")}o(g,"sendPacket");function y(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(y,"packetMethodName");function T(R){return ba(R,r)}o(T,"serialize")}),l.on("error",f=>{ar.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var my,MJ,wf,vJ,UJ,xJ,fy,ar,BJ,Abe,LJ,dy,FJ=ue(()=>{my=require("mqtt-packet");PJ();MJ=w(ts());Ro();Wi();Mr();wf=w(oe());k();vJ=w(ei()),UJ=w(Q()),xJ=require("events"),fy=(0,vJ.loggerWithTag)("auth-event"),ar=(0,UJ.forComponent)("mqtt"),BJ=(0,wf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(ybe,"bypassAuth");Abe=o(e=>BJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(bbe,"start");dy=0;o(DJ,"onSocket")});function hy(e,t){if(t?.includes(".."))throw new lD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var lD,uD=ue(()=>{lD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(hy,"resolveBaseURLPath")});function HJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var kJ=ue(()=>{o(HJ,"deriveCommonPatternBase")});function py(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var dD=ue(()=>{o(py,"deriveGlobOptions")});var GJ,fD,TE,qJ=ue(()=>{uD();kJ();dD();GJ=require("micromatch"),fD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},TE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=hy(this.name,this.config.urlPath),this.globOptions=py(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new fD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,GJ.scan)(s).base),this.commonPatternBase=HJ(this.patternBases)}}});function $J(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function du(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if($J(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if($J(n,t)){t=t.slice(n.length+1);break}}}return(0,VJ.join)(e.baseURLPath,t)}var VJ,mD=ue(()=>{VJ=require("node:path");o($J,"pathStartsWithBase");o(du,"deriveURLPath")});function KJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var _y,YJ,WJ,hD,zJ,jJ,Ey,QJ=ue(()=>{_y=require("node:events");qJ();YJ=w(Q()),WJ=w(require("chokidar")),hD=require("node:path"),zJ=require("node:fs/promises");mD();jJ=require("micromatch"),Ey=class extends _y.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new TE(t,r,KJ(n)),this.#r=s||YJ.default.loggerWithTag(t),this.ready=(0,_y.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,jJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,hD.join)(this.directory,r);switch(t){case"add":case"change":{let i=du(this.#e,r,"file");(0,zJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=du(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=du(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,hD.join)(this.#e.directory,r));return this.#t=WJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new TE(this.name,this.directory,KJ(t)),this.#a()}};o(KJ,"castConfig")});var gy,pD=ue(()=>{gy={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Ty,JJ,XJ,ZJ,e4,t4,ED,_D,gD,SD,TD,Sy,r4=ue(()=>{Ty=require("events"),JJ=w(require("yaml")),XJ=w(require("chokidar")),ZJ=require("node:fs/promises"),e4=require("util"),t4=w(Q());pD();ED=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},_D=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},gD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},SD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},TD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},Sy=class extends Ty.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||t4.default.loggerWithTag(t),this.ready=(0,Ty.once)(this,"ready"),this.#t=XJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,ZJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=JJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new ED(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=gy,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,e4.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new _D;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new gD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new SD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new TD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});function n4(){Nbe[0]=1}var Ibe,Nbe,s4=ue(()=>{Bp();Ibe=ea.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),Nbe=new Uint8Array(Ibe);o(n4,"requestRestart")});var Ay,i4,Ry,yy,o4=ue(()=>{Ay=require("node:events");QJ();r4();i4=w(Q());s4();Ry=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},yy=class extends Ay.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=i4.default.forComponent(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,Ay.once)(this,"ready"),this.options=new Sy(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new Ey(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new Ry);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new Ry);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),n4()}}});function fu(e){return typeof e=="string"&&e.trim()!==""}function RD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>fu(t))}function u4(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function wbe(e){e.config.root&&RE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new OD(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(u4(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,yE.join)(e.directory,i);by.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function d4(e){let t=!1;if(t=await wbe(e),t)return t;let r=await(0,a4.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,yE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=du(e,n.path,"directory");by.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=du(e,n.path,"file"),a=await(0,c4.readFile)(s);by.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else RE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var by,a4,RE,yE,c4,l4,Iy,Oi,yD,AD,bD,ID,ND,wD,OD,CD,PD,f4=ue(()=>{by=require("node:worker_threads"),a4=w(require("fast-glob")),RE=w(Q());uD();dD();yE=require("node:path"),c4=require("node:fs/promises");mD();l4=require("micromatch"),Iy=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!fu(this.config.files)&&!RD(this.config.files)&&!u4(this.config.files))throw new yD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!RD(this.config.files.source)&&!fu(this.config.files.source))throw new AD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new bD(this);if(this.config.files.ignore!==void 0&&!RD(this.config.files.ignore)&&!fu(this.config.files.ignore))throw new ID(this)}if(this.config.root!==void 0&&!fu(this.config.root))throw new wD(this);if(this.config.path!==void 0&&!fu(this.config.path))throw new CD(this);if(this.config.path&&(RE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!fu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new PD(this);this.globOptions=py(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new ND(this,r);return r.startsWith("/")&&(RE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,l4.scan)(r).base),this.baseURLPath=hy(this.name,this.config.urlPath)}},Oi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,yE.basename)(r.directory)}) ${t}`)}},yD=class extends Oi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},AD=class extends Oi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},bD=class extends Oi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},ID=class extends Oi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},ND=class extends Oi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},wD=class extends Oi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},OD=class extends Oi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},CD=class extends Oi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},PD=class extends Oi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(fu,"isNonEmptyString");o(RD,"isArrayOfNonEmptyStrings");o(u4,"isObject");o(wbe,"handleRoots");o(d4,"processResourceExtensionComponent")});var Pp={};Oe(Pp,{componentErrors:()=>AE,getComponentName:()=>oy,loadComponent:()=>Cy,loadComponentDirectories:()=>p4,setErrorReporter:()=>Cbe});function p4(e,t){t&&(DD=t),e&&(xD=e);let r=[];if((0,Dt.existsSync)(LD)){let s=(0,Dt.readdirSync)(LD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,qr.join)(LD,a);r.push(Cy(c,DD,Ky,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Cy(n,DD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{h4=!0})}function Cbe(e){wy=e}function Pbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{ea.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(ea.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Dt.rmSync)(t,{recursive:!0,force:!0}),(0,Dt.existsSync)((0,qr.join)(e,"node_modules"))||(0,Dt.mkdirSync)((0,qr.join)(e,"node_modules")),(0,Dt.symlinkSync)(FD.PACKAGE_ROOT,t,"dir"),r()}finally{ea.primaryStore.unlock(e,0)}})}function E4(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;if(!ea.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(E4(e,t))}))return new Promise((a,c)=>{n=a,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([t.handleApplication(e),new Promise((a,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{ea.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Cy(e,t,r,n,s,i){let a=(0,Dt.realpathSync)(e);if(Ny.has(a))return Ny.get(a);Ny.set(a,!0),s&&(xD=s);try{let c;n&&(AE=new Map);let l=(0,qr.join)(e,"harperdb-config.yaml");(0,Dt.existsSync)(l)?c=n?(0,Py.getConfigObj)():(0,vD.parseDocument)((0,Dt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Dt.existsSync)(l=(0,qr.join)(e,"config.yaml"))?c=(0,vD.parseDocument)((0,Dt.readFileSync)(l,"utf8")).toJSON():c=gy;try{let m=(0,qr.join)(e,"node_modules","harperdb");(n||((0,Dt.existsSync)(m)||!e.startsWith((0,UD.getHdbBasePath)()))&&(!(0,Dt.existsSync)(m)||(0,Dt.realpathSync)(FD.PACKAGE_ROOT)!==(0,Dt.realpathSync)(m)))&&await Pbe(e,m)}catch(m){pa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&pa.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=Oy,d={};for(let m in c){Oy=m;let h=c[m];if(AE.set(n?m:(0,qr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let N=e,O;for(;!(0,Dt.existsSync)(O=(0,qr.join)(N,"node_modules",m));)if(N=(0,qr.dirname)(N),N.length<(0,UD.getHdbBasePath)().length){O=null;break}if(O)p=await Cy(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=Obe[m];if(!p)continue;let g=o(N=>(N.origin=r,ze(N)),"ensureTable"),y=h.network||(h.port||h.securePort)&&h,T=y?.securePort||y?.https&&y.port,R=!y?.https&&y?.port;if("handleApplication"in p&&("start"in p||"startOnMainThread"in p||"handleFile"in p||"handleDirectory"in p||"setupFile"in p||"setupDirectory"in p))throw new Error(`Component ${m} has both 'handleComponent' and 'start' or 'startOnMainThread' methods. Please use only one of them.`);if(t.isWorker&&p.handleApplication){p.suppressHandleApplicationWarning!==!0&&pa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let N=new yy(m,e,l,t,Le);await E4(N,p);continue}if(MD.isMainThread&&(p=await p.startOnMainThread?.({server:Le,ensureTable:g,port:R,securePort:T,resources:t,...h})||p,n&&y))for(let N of[R,T])try{if(+N&&!m4.includes(N)){let O=BD.get(U.HTTP_SESSIONAFFINITY);O&&pa.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!aS)&&(m4.push(N),HD(N,O))}}catch(O){console.error("Error listening on socket",N,O,m)}if(t.isWorker&&(p=await p.start?.({server:Le,ensureTable:g,port:R,securePort:T,resources:t,...h})||p),xD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let N=new Iy({config:h,name:m,directory:e,module:p,resources:t});d[m]=await d4(N)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,qr.basename)(e)}' due to: ${g.message}`,wy?.(g),((0,bE.getWorkerIndex)()===0?console:pa.default).error(g),t.set(h.path||"/",new Zc(g),null,!0),AE.set(n?m:(0,qr.basename)(e),g.message)}}if(Oy=u,MD.isMainThread&&!h4&&i&&(0,bE.watchDir)(e,async()=>p4()),c.extensionModule||c.pluginModule){let m=await oS((0,qr.join)(e,c.extensionModule||c.pluginModule));return Ny.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;wy?.(new Error(m)),((0,bE.getWorkerIndex)()===0?console:pa.default).error(m),AE.set((0,qr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||pa.default.warn(`Component ${m} from (${(0,qr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,wy?.(c),t.set("",new Zc(c))}}var Dt,qr,MD,vD,BD,FD,pa,bE,UD,Py,LD,xD,h4,DD,AE,Obe,m4,Ny,wy,Oy,oy,cf=ue(()=>{Dt=require("node:fs"),qr=require("node:path"),MD=require("node:worker_threads"),vD=require("yaml"),BD=w(oe()),FD=w(Rt());k();mG();AG();BG();VG();KG();sq();Jj();n2();i2();pa=w(Q());h2();bE=w(rt());jN();Mr();De();XR();UD=w(oe());w2();qT();U2();is();FJ();Py=w(bt());Ph();JA();o4();f4();tD();Bp();pD();LD=(0,Py.resolvePath)(BD.get(U.COMPONENTSROOT)),xD=new Map,AE=new Map;o(p4,"loadComponentDirectories");Obe={REST:lS,rest:lS,graphql:GN,graphqlSchema:HN,roles:zN,jsResource:QN,fastifyRoutes:rL,login:XN,static:nL,operationsApi:cL,customFunctions:{},http:iy,clustering:hL,replication:Go,authentication:Ap,mqtt:cD,loadEnv:sL,logging:pa.default,dataLoader:aL},m4=[],Ny=new Map;o(Cbe,"setErrorReporter");oy=o(()=>Oy,"getComponentName");o(Pbe,"symlinkHarperModule");o(E4,"sequentiallyHandleApplication");o(Cy,"loadComponent")});var cy=M((nke,g4)=>{var{isMainThread:_4}=require("worker_threads"),{getTables:Lbe,getDatabases:tke,table:rke}=(De(),v(mt)),{loadComponentDirectories:Dbe,loadComponent:Mbe}=(cf(),v(Pp)),{resetResources:vbe}=(Bu(),v(hU)),Ube=FC(),xbe=bt(),{dirname:Bbe}=require("path"),{getConnection:Fbe}=mr(),Hbe=oe(),{CONFIG_PARAMS:kbe}=(k(),v(W)),{loadCertificates:Gbe}=as(),kD=new Map;async function qbe(e=!1){!_4&&Hbe.get(kbe.CLUSTERING_ENABLED)&&Fbe();try{_4&&await Ube()}catch(n){console.error(n)}let t=vbe();Lbe(),t.isWorker=e,await Gbe(),await Mbe(Bbe(xbe.getConfigFilePath()),t,"hdb",!0,kD),await Dbe(kD,t);let r=[];for(let[n]of kD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(qbe,"loadRootComponents");g4.exports.loadRootComponents=qbe});var rt=M((ike,Pi)=>{"use strict";LE();var{Worker:$be,MessageChannel:Vbe,parentPort:mo,isMainThread:KD,threadId:Kbe,workerData:ho}=require("worker_threads"),{PACKAGE_ROOT:Ybe}=Rt(),{join:y4,isAbsolute:Wbe,extname:zbe}=require("path"),{server:A4}=(Mr(),v($f)),{watch:jbe,readdir:Qbe}=require("fs/promises"),{totalmem:S4}=require("os"),{setHeapSnapshotNearHeapLimit:Jbe}=require("v8"),wc=(k(),v(W)),My=oe(),Ci=Q(),{randomBytes:Xbe}=require("crypto"),{_assignPackageExport:Zbe}=Xs(),T4=1024*1024,Oc=[],zs=[],eIe=50,YD=1e4,tIe="restart",b4="request_thread_info",I4="resource_report",N4="thread_info",w4="added-port",rIe="ack",GD;Zbe("threads",zs);Pi.exports={startWorker:qD,restartWorkers:zD,shutdownWorkers:aIe,workers:Oc,setMonitorListener:pIe,onMessageFromWorkers:cIe,onMessageByType:v4,broadcast:uIe,broadcastWithAcknowledgement:fIe,setChildListenerByType:oIe,getWorkerIndex:O4,getWorkerCount:C4,getTicketKeys:L4,setMainIsWorker:sIe,setTerminateTimeout:nIe,restartNumber:ho?.restartNumber||1};zs.onMessageByType=v4;zs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=zs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Pi.exports.whenThreadsStarted=new Promise(e=>{Pi.exports.threadsHaveStarted=e});My.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&Jbe(1);var WD;function nIe(e){YD=e}o(nIe,"setTerminateTimeout");function O4(){return ho?ho.workerIndex:WD?0:void 0}o(O4,"getWorkerIndex");function C4(){return ho?ho.workerCount:WD?1:void 0}o(C4,"getWorkerCount");function sIe(e){WD=e,Pi.exports.threadsHaveStarted()}o(sIe,"setMainIsWorker");var P4=1,Ly;function L4(){return Ly||(Ly=KD?Xbe(48):ho.ticketKeys,Ly)}o(L4,"getTicketKeys");Object.defineProperty(A4,"workerIndex",{get(){return O4()}});Object.defineProperty(A4,"workerCount",{get(){return C4()}});var D4={[b4](e,t){mIe(t)},[I4](e,t){hIe(t,e)}};function qD(e,t={}){let r=process.constrainedMemory?.()||S4();r=Math.min(r,S4(),2e4*T4);let n=My.get(wc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/T4/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let u of zs){let d=new Vbe;d.existingPort=u,i.push(d),a.push(d.port2)}zbe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];My.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new $be(Wbe(e)?e:y4(Ybe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:P4=t.threadCount,name:t.name,restartNumber:Pi.exports.restartNumber,ticketKeys:L4()},transferList:a,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:w4,port:u,threadId:l.threadId},[u]);return vy(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>qD(e,t),l.on("error",u=>{Ci.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Oc.splice(Oc.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<eIe?(t.unexpectedRestarts=l.unexpectedRestarts+1,qD(e,t)):Ci.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{D4[u.type]?.(u,l)}),Oc.push(l),_Ie(),t.onStarted&&t.onStarted(l),l.name=t.name,l}o(qD,"startWorker");var iIe=[wc.THREAD_TYPES.HTTP];async function zD(e=null,t=Math.max(P4>3,1),r=!0){if(KD){try{process.chdir(process.cwd())}catch(a){Ci.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=cy();await a()}Pi.exports.restartNumber++,t<1&&(t=t*Oc.length);let n=[],s=[];for(let a of Oc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Ci.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Pi.exports.restartNumber,type:wc.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=iIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},YD*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(h=>{h.type===wc.ITC_EVENT_TYPES.CHILD_STARTED&&(Ci.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Ci.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=nf();r&&(e==="http"||!e)&&My.get(wc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:tIe,workerType:e})}o(zD,"restartWorkers");function oIe(e,t){D4[e]=t}o(oIe,"setChildListenerByType");function aIe(e){return zD(e,1/0,!1)}o(aIe,"shutdownWorkers");var M4=[];function cIe(e){M4.push(e)}o(cIe,"onMessageFromWorkers");var $D=new Map;function v4(e,t){let r=$D.get(e);r||$D.set(e,r=[]),r.push(t)}o(v4,"onMessageByType");var lIe=10;async function uIe(e,t){let r=0;for(let n of zs)try{n.postMessage(e),r++>lIe&&(r=0,await new Promise(setImmediate))}catch(s){Ci.error("Unable to send message to worker",s)}t&&x4(e,null)}o(uIe,"broadcast");var Dy=new Map,dIe=1;function fIe(e){return new Promise(t=>{let r=0;for(let n of zs)try{let s=dIe++,i=o(()=>{Dy.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Dy.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of Dy)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Ci.error("Unable to send message to worker",s)}r===0&&t()})}o(fIe,"broadcastWithAcknowledgement");function mIe(e){e.postMessage({type:N4,workers:U4()})}o(mIe,"sendThreadInfo");function U4(){let e=Date.now();return Oc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(U4,"getChildWorkerInfo");function hIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(hIe,"recordResourceReport");var VD;function pIe(e){VD=e}o(pIe,"setMonitorListener");var EIe=1e3,R4=!1;function _Ie(){R4||(R4=!0,setInterval(()=>{for(let e of Oc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}VD&&VD()},EIe).unref())}o(_Ie,"startMonitoring");var gIe=1e3;if(mo&&ho?.addPorts){vy(mo);for(let e=0,t=ho.addPorts.length;e<t;e++){let r=ho.addPorts[e];r.threadId=ho.addThreadIds[e],vy(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:I4,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},gIe).unref(),GD=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:b4});function r(n){n.type===N4&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else GD=U4;Pi.exports.getThreadInfo=GD;function vy(e,t){zs.push(e),e.on("message",r=>{if(r.type===w4)r.port.threadId=r.threadId,vy(r.port);else if(r.type===rIe){let n=Dy.get(r.id);n&&n()}else x4(r,e)}).on("close",()=>{zs.splice(zs.indexOf(e),1)}).on("exit",()=>{zs.splice(zs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(vy,"addPort");function x4(e,t){for(let n of M4)n(e,t);let r=$D.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Ci.error(s)}}o(x4,"notifyMessageListeners");if(KD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await Qbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(y4(s,a.name));try{for await(let{filename:a}of jbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await zD(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Pi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else mo.on("message",async e=>{let{type:t}=e;t===wc.ITC_EVENT_TYPES.SHUTDOWN&&(Pi.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate",Kbe),process.exit(0)},YD).unref())})});var VL={};Oe(VL,{startHTTPThreads:()=>TIe,startSocketServer:()=>HD,updateWorkerIdleness:()=>K4});async function TIe(e=2,t){fN().catch(r=>Df.error?.("Error recording hostname for analytics:",r));try{if(t)JD(0,1,!0);else{let{loadRootComponents:r}=cy();if(e===0)return(0,js.setMainIsWorker)(!0),await nD().startServers(),Promise.resolve([]);await r()}V4();for(let r=0;r<e;r++)JD(r,e);return Promise.all($4)}finally{(0,js.threadsHaveStarted)()}}function V4(){let e=(0,k4.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),QD=setInterval(()=>{Df.notify(e)},SIe).unref())}function JD(e,t=1,r){if(jD++,(0,js.startWorker)("server/threads/threadServer.js",{name:eA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===Qy.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});$4.push(s),await s,Of.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=xy.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Of.indexOf(n);a>-1&&Of.splice(a,1)}if(o(i,"removeWorker"),Cf){let a=Cf;Cf=[];for(let c of a)q4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{XD?XD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,js.shutdownWorkers)(),jD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function HD(e=0,t){if(typeof e=="string")try{(0,By.existsSync)(e)&&(0,By.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=RIe:r=yIe(t):r=ZD;let n=(0,Pf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=q4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),XD=!0,r(i,(a,c)=>{if(!a){if(B4){let u=i._socket||new Pf.Socket({handle:i,writable:!0,readable:!0});B4.deliverSocket(u,e,c),u.resume()}else jD>0?(Cf.length===0&&setTimeout(()=>{Cf.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,Cf.push(i)):(console.log("start up a dynamic thread to handle request"),JD(0));st(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Pf.Socket({handle:i,writable:!0,readable:!0});IIe(u,a,e)}st(!0,"socket-routed")})},Df.info(`HarperDB ${G4.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 ZD(e,t){let r,n=0;for(let s of Of){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Uy)return Uy=i,t(r);n=i}Uy=0,t(r)}function RIe(e,t){let r={};e.getpeername(r);let n=r.address,s=Lf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ZD(e,a=>{Lf.set(n,{worker:a,lastUsed:i}),t(a)})}function yIe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Pf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Lf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);ZD(n,f=>{Lf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function K4(){Uy=0;for(let e of Of)e.expectedIdle=e.recentELU.idle+AIe,e.requests=1;Of.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function IIe(e,t,r){let n=bIe++;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(),xy.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")),xy.delete(n)),s.event=="destroy"&&(e.destroy(),xy.delete(n))})}var js,Pf,Df,By,H4,k4,G4,Of,Cf,q4,B4,jD,$4,QD,SIe,XD,Uy,F4,Lf,AIe,xy,bIe,XR=ue(()=>{js=w(rt()),Pf=require("net");k();Df=w(Q()),By=require("fs");Wi();H4=require("worker_threads"),k4=w(Qd()),G4=w(Rt()),Of=[],Cf=[],q4=[],jD=0,$4=[];H4.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,js.onMessageFromWorkers)(e=>{e.type===Zy.RESTART&&QD&&(clearInterval(QD),V4())}));SIe=6e5;o(TIe,"startHTTPThreads");o(V4,"licenseWarning");o(JD,"startHTTPWorker");o(HD,"startSocketServer");Uy=0;o(ZD,"findMostIdleWorker");F4=36e5,Lf=new Map;o(RIe,"findByRemoteAddressAffinity");o(yIe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Lf)r.lastUsed+F4<e&&Lf.delete(t)},F4).unref();AIe=1e3;o(K4,"updateWorkerIdleness");(0,js.setMonitorListener)(K4);xy=new Map,bIe=1;o(IIe,"proxySocket")});LE();var{startHTTPThreads:NIe,startSocketServer:Y4}=(XR(),v(VL));NIe(0,!0);Y4(9925);Y4(9926);
131
+ `))}},25).unref()}l.close?.(()=>{if(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Nf()==0)try{RJ(_be(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,ay),l.cantCleanupProperly||wi.warn("Had to forcefully exit the thread",ay),process.exit(0)},5e3).unref()})}if(AJ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){wi.info("Could not close debugger",c)}}}).ref();let r;_E&&!Rbe&&(r=IJ()),Promise.resolve(r).then(()=>{if(Nf()===0)try{gbe(Sbe)}catch(n){console.error("Error displaying start-up log",n)}gJ?.postMessage({type:gs.ITC_EVENT_TYPES.CHILD_STARTED})})});return yJ(t),t}o(bJ,"startServers");function IJ(){let e=[];for(let t in wf){let r=wf[t];if(t.includes?.("/")&&Nf()==0){fbe(t)&&RJ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Ws.get(gs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Nf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?_E?n={fd:_E(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:_E?n={fd:_E(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.trace("Listening on port "+t,ay)}).on("error",c)}))}return Promise.all(e)}o(IJ,"listenOnPorts");!rD&&!ube?.noServerStart&&bJ();function ybe(e,t){let r=(lf(),v(Pp)).getComponentName,n;if(t.securePort){SJ(t.securePort,{protocol_name:"TLS",name:r()});let s=Ebe("server",t.mtls),i=Ws.get("tls");n=hbe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),wf[t.securePort]=n}return t.port&&(SJ(t.port,{protocol_name:"TCP",name:r()}),n=dbe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),wf[t.port]=n),n}o(ybe,"onSocket")});async function PJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await sD.get(e,{returnNonexistent:!0});i=new aD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await sD.get(e);a&&a.delete()}i=new uy(e,t)}return n&&(n.id=e,n.user={username:t?.username},SE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function iD(){return ly++,ly>65500&&(ly=1),ly}function oD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new ri(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Ft(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var wJ,Nc,OJ,CJ,NJ,sD,SE,ly,uy,aD,LJ=ce(()=>{Me();Fu();wJ=w(yn()),Nc=w(Q());Bc();OJ=w(nt()),CJ=w(nD());Dr();O_();NJ=100,sD=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),SE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,OJ.getWorkerIndex)()===0&&(async()=>{await CJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of SE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Le.getUser(r.user.username));try{await oD(r,t,r)}catch{(0,Nc.warn)("Failed to publish will",t)}SE.delete(e.id)}})();o(PJ,"getSession");ly=1;o(iD,"getNextMessageId");uy=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(T=>T.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Nc.trace)("Resuming subscription from",s,"from",a);let h=bs.getMatch(u,"mqtt");if(!h){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}m.url=h.relativeURL;let p;if(m.url.indexOf("+")>-1||(p=m.url.indexOf("#"))>-1){let T=m.url.slice(1);if(p--,p>-1&&p!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,T.indexOf("+")===T.length-1)m.onlyChildren=!0,m.url="/"+T.slice(0,T.length-1);else{let y=T.split("/"),N;for(let Z=0;Z<y.length;Z++)if(y[Z].indexOf("+")>-1)if(y[Z]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;y[y.length-1]==="#"&&(y.length--,O=!1),N&&(n=o(Z=>{let G=Z.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(O&&G.length!==y.length)return!1;for(let Y=0;Y<y.length;Y++)if(y[Y]!=="+"&&y[Y]!==G[Y])return!1;return!0},"filter"));let F=y.indexOf("+");m.url="/"+(F>-1?y.slice(0,F):y).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,R=await Ft(m,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i,T.isCollection=m.isCollection;let y=await g.subscribe(m,T);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of y)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=iD());let Z=O.id;if(Array.isArray(Z)&&(Z=Bu(Z)),Z==null&&(Z=""),await this.listener(_+"/"+Z,O.value,F,t)===!1)break;this.awaitingAcks?.size>NJ?await new Promise(Y=>setTimeout(Y,this.awaitingAcks.size-NJ)):await new Promise(setImmediate)}catch(F){(0,Nc.warn)(F)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=iD();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 oD(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();Ft(r,async()=>{try{if(!t){let n=await SE.get(this.sessionId);n?.doesExist()&&await oD(n,n.data,r)}}finally{await SE.delete(this.sessionId)}}).catch(n=>{(0,Nc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(oD,"publish");aD=class extends uy{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=iD(),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,Nc.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,wJ.getNextMonotonicTime)()),(0,Nc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),sD.put(this.sessionRecord)}}});var cD={};we(cD,{bypassAuth:()=>Abe,start:()=>Ibe});function Abe(){FJ=!0}function Ibe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new BJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),ar.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=MJ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{ar.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),ar.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&fy.notify?.({username:d?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&fy.error?.({username:h,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else ar.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),ar.error?.(h)}else if(l.required)return ar.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&bbe(u.remoteAddress)&&(d=await(0,vJ.getSuperUser)(),ar.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=MJ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{ar.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function MJ(e,t,r,n,s){DJ||(DJ=!0,ch(f=>{dy>0&&f.push({metric:"mqtt-connections",connections:dy,byThread:!0})}));let i;dy++;let a,c={protocolVersion:4},l=(0,my.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){dy--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!1,"connection","mqtt","disconnect"),ar.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),ar.info?.(y);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){ar.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let h=f.topic,p=h?.indexOf("/",1),_=p>0?h.slice(0,p):h;it(f.length,"bytes-received",_,R(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Le.getUser(f.username,f.password.toString(),r),(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&fy.notify?.({username:n?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(K){return(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&fy.error?.({username:f.username,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,K),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let K=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?K(f.will.payload):void 0,delete f.will.payload}a=PJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(K){return ar.error?.(K),s.events.emit("auth-failed",f,e,K),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:K.code||5,returnCode:K.code||128})}s.events.emit("connected",a,e),Wr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let y=o(async(K,$,le,ue)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",K);let se=K.indexOf("/",1),me=se>0?K.slice(0,se):K;g({cmd:"publish",topic:K,payload:await T($),messageId:le||Math.floor(Math.random()*1e8),qos:ue.qos},me);let Pe=e._socket??e;return Pe.writableNeedDrain?new Promise(De=>Pe.once("drain",De)):!Pe.closed}catch(se){return ar.error?.(se),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(y),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let K of f.subscriptions){let $;try{let le=await a.addSubscription(K,K.qos>=1);$=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,K,a),le.statusCode?le.statusCode===500?ar.warn?.(le):ar.info?.(le):ar.error?.(le),$=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push($)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let K=[];for(let $ of f.unsubscriptions)K.push(a.removeSubscription($)?0:17);g({cmd:"unsuback",granted:K,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?F(f.payload):void 0,Y;try{Y=await a.publish(f,G)}catch(K){s.events.emit("error",K,e,f,a),ar.warn?.(K),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:Y===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!0,"connection","mqtt","disconnect"),ar.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,a),ar.error?.(y),g({cmd:"disconnect"})}function g(y,N){let O=(0,my.generate)(y,c);t(O),it(O.length,"bytes-sent",N,R(y),"mqtt")}o(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}o(R,"packetMethodName");function T(y){return ba(y,r)}o(T,"serialize")}),l.on("error",f=>{ar.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var my,vJ,Of,UJ,xJ,BJ,fy,ar,FJ,bbe,DJ,dy,HJ=ce(()=>{my=require("mqtt-packet");LJ();vJ=w(ts());Ro();Wi();Dr();Of=w(oe());k();UJ=w(ei()),xJ=w(Q()),BJ=require("events"),fy=(0,UJ.loggerWithTag)("auth-event"),ar=(0,xJ.forComponent)("mqtt"),FJ=(0,Of.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Abe,"bypassAuth");bbe=o(e=>FJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Ibe,"start");dy=0;o(MJ,"onSocket")});function hy(e,t){if(t?.includes(".."))throw new lD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var lD,uD=ce(()=>{lD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(hy,"resolveBaseURLPath")});function kJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var GJ=ce(()=>{o(kJ,"deriveCommonPatternBase")});function py(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var dD=ce(()=>{o(py,"deriveGlobOptions")});var qJ,fD,TE,$J=ce(()=>{uD();GJ();dD();qJ=require("micromatch"),fD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},TE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=hy(this.name,this.config.urlPath),this.globOptions=py(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new fD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,qJ.scan)(s).base),this.commonPatternBase=kJ(this.patternBases)}}});function VJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function fu(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}}return(0,KJ.join)(e.baseURLPath,t)}var KJ,mD=ce(()=>{KJ=require("node:path");o(VJ,"pathStartsWithBase");o(fu,"deriveURLPath")});function YJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var _y,WJ,zJ,hD,jJ,QJ,Ey,JJ=ce(()=>{_y=require("node:events");$J();WJ=w(Q()),zJ=w(require("chokidar")),hD=require("node:path"),jJ=require("node:fs/promises");mD();QJ=require("micromatch"),Ey=class extends _y.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new TE(t,r,YJ(n)),this.#r=s||WJ.default.loggerWithTag(t),this.ready=(0,_y.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,QJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,hD.join)(this.directory,r);switch(t){case"add":case"change":{let i=fu(this.#e,r,"file");(0,jJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=fu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=fu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,hD.join)(this.#e.directory,r));return this.#t=zJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new TE(this.name,this.directory,YJ(t)),this.#a()}};o(YJ,"castConfig")});var gy,pD=ce(()=>{gy={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Ty,XJ,ZJ,e4,t4,r4,ED,_D,gD,SD,TD,Sy,n4=ce(()=>{Ty=require("events"),XJ=w(require("yaml")),ZJ=w(require("chokidar")),e4=require("node:fs/promises"),t4=require("util"),r4=w(Q());pD();ED=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},_D=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},gD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},SD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},TD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},Sy=class extends Ty.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||r4.default.loggerWithTag(t),this.ready=(0,Ty.once)(this,"ready"),this.#t=ZJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,e4.readFile)(this.#e,"utf-8").then(t=>{this.#n=XJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new ED(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=gy,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,t4.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new _D;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new gD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new SD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new TD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});function s4(){wbe[0]=1}var Nbe,wbe,i4=ce(()=>{Bp();Nbe=ea.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),wbe=new Uint8Array(Nbe);o(s4,"requestRestart")});var Ay,o4,Ry,yy,a4=ce(()=>{Ay=require("node:events");JJ();n4();o4=w(Q());i4();Ry=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},yy=class extends Ay.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=o4.default.forComponent(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,Ay.once)(this,"ready"),this.options=new Sy(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new Ey(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new Ry);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new Ry);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),s4()}}});function mu(e){return typeof e=="string"&&e.trim()!==""}function RD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>mu(t))}function d4(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Obe(e){e.config.root&&RE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new OD(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(d4(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,yE.join)(e.directory,i);by.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function f4(e){let t=!1;if(t=await Obe(e),t)return t;let r=await(0,c4.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,yE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=fu(e,n.path,"directory");by.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=fu(e,n.path,"file"),a=await(0,l4.readFile)(s);by.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else RE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var by,c4,RE,yE,l4,u4,Iy,Oi,yD,AD,bD,ID,ND,wD,OD,CD,PD,m4=ce(()=>{by=require("node:worker_threads"),c4=w(require("fast-glob")),RE=w(Q());uD();dD();yE=require("node:path"),l4=require("node:fs/promises");mD();u4=require("micromatch"),Iy=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!mu(this.config.files)&&!RD(this.config.files)&&!d4(this.config.files))throw new yD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!RD(this.config.files.source)&&!mu(this.config.files.source))throw new AD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new bD(this);if(this.config.files.ignore!==void 0&&!RD(this.config.files.ignore)&&!mu(this.config.files.ignore))throw new ID(this)}if(this.config.root!==void 0&&!mu(this.config.root))throw new wD(this);if(this.config.path!==void 0&&!mu(this.config.path))throw new CD(this);if(this.config.path&&(RE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!mu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new PD(this);this.globOptions=py(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new ND(this,r);return r.startsWith("/")&&(RE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,u4.scan)(r).base),this.baseURLPath=hy(this.name,this.config.urlPath)}},Oi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,yE.basename)(r.directory)}) ${t}`)}},yD=class extends Oi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},AD=class extends Oi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},bD=class extends Oi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},ID=class extends Oi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},ND=class extends Oi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},wD=class extends Oi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},OD=class extends Oi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},CD=class extends Oi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},PD=class extends Oi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(mu,"isNonEmptyString");o(RD,"isArrayOfNonEmptyStrings");o(d4,"isObject");o(Obe,"handleRoots");o(f4,"processResourceExtensionComponent")});var Pp={};we(Pp,{componentErrors:()=>AE,getComponentName:()=>oy,loadComponent:()=>Cy,loadComponentDirectories:()=>E4,setErrorReporter:()=>Pbe});function E4(e,t){t&&(DD=t),e&&(xD=e);let r=[];if((0,Ut.existsSync)(LD)){let s=(0,Ut.readdirSync)(LD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Gr.join)(LD,a);r.push(Cy(c,DD,Ky,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Cy(n,DD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{p4=!0})}function Pbe(e){wy=e}function Lbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{ea.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(ea.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Ut.rmSync)(t,{recursive:!0,force:!0}),(0,Ut.existsSync)((0,Gr.join)(e,"node_modules"))||(0,Ut.mkdirSync)((0,Gr.join)(e,"node_modules")),(0,Ut.symlinkSync)(FD.PACKAGE_ROOT,t,"dir"),r()}finally{ea.primaryStore.unlock(e,0)}})}function _4(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;if(!ea.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(_4(e,t))}))return new Promise((a,c)=>{n=a,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([t.handleApplication(e),new Promise((a,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{ea.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Cy(e,t,r,n,s,i){let a=(0,Ut.realpathSync)(e);if(Ny.has(a))return Ny.get(a);Ny.set(a,!0),s&&(xD=s);try{let c;n&&(AE=new Map);let l=(0,Gr.join)(e,"harperdb-config.yaml");(0,Ut.existsSync)(l)?c=n?(0,Py.getConfigObj)():(0,vD.parseDocument)((0,Ut.readFileSync)(l,"utf8")).toJSON():!n&&(0,Ut.existsSync)(l=(0,Gr.join)(e,"config.yaml"))?c=(0,vD.parseDocument)((0,Ut.readFileSync)(l,"utf8")).toJSON():c=gy;try{let m=(0,Gr.join)(e,"node_modules","harperdb");(n||((0,Ut.existsSync)(m)||!e.startsWith((0,UD.getHdbBasePath)()))&&(!(0,Ut.existsSync)(m)||(0,Ut.realpathSync)(FD.PACKAGE_ROOT)!==(0,Ut.realpathSync)(m)))&&await Lbe(e,m)}catch(m){pa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&pa.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=Oy,d={};for(let m in c){Oy=m;let h=c[m];if(AE.set(n?m:(0,Gr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let N=e,O;for(;!(0,Ut.existsSync)(O=(0,Gr.join)(N,"node_modules",m));)if(N=(0,Gr.dirname)(N),N.length<(0,UD.getHdbBasePath)().length){O=null;break}if(O)p=await Cy(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=Cbe[m];if(!p)continue;let g=o(N=>(N.origin=r,ze(N)),"ensureTable"),R=h.network||(h.port||h.securePort)&&h,T=R?.securePort||R?.https&&R.port,y=!R?.https&&R?.port;if("handleApplication"in p&&("start"in p||"startOnMainThread"in p||"handleFile"in p||"handleDirectory"in p||"setupFile"in p||"setupDirectory"in p))throw new Error(`Component ${m} has both 'handleComponent' and 'start' or 'startOnMainThread' methods. Please use only one of them.`);if(t.isWorker&&p.handleApplication){p.suppressHandleApplicationWarning!==!0&&pa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let N=new yy(m,e,l,t,Le);await _4(N,p);continue}if(MD.isMainThread&&(p=await p.startOnMainThread?.({server:Le,ensureTable:g,port:y,securePort:T,resources:t,...h})||p,n&&R))for(let N of[y,T])try{if(+N&&!h4.includes(N)){let O=BD.get(U.HTTP_SESSIONAFFINITY);O&&pa.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!aS)&&(h4.push(N),HD(N,O))}}catch(O){console.error("Error listening on socket",N,O,m)}if(t.isWorker&&(p=await p.start?.({server:Le,ensureTable:g,port:y,securePort:T,resources:t,...h})||p),xD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let N=new Iy({config:h,name:m,directory:e,module:p,resources:t});d[m]=await f4(N)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,Gr.basename)(e)}' due to: ${g.message}`,wy?.(g),((0,bE.getWorkerIndex)()===0?console:pa.default).error(g),t.set(h.path||"/",new el(g),null,!0),AE.set(n?m:(0,Gr.basename)(e),g.message)}}if(Oy=u,MD.isMainThread&&!p4&&i&&(0,bE.watchDir)(e,async()=>E4()),c.extensionModule||c.pluginModule){let m=await oS((0,Gr.join)(e,c.extensionModule||c.pluginModule));return Ny.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;wy?.(new Error(m)),((0,bE.getWorkerIndex)()===0?console:pa.default).error(m),AE.set((0,Gr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||pa.default.warn(`Component ${m} from (${(0,Gr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,wy?.(c),t.set("",new el(c))}}var Ut,Gr,MD,vD,BD,FD,pa,bE,UD,Py,LD,xD,p4,DD,AE,Cbe,h4,Ny,wy,Oy,oy,lf=ce(()=>{Ut=require("node:fs"),Gr=require("node:path"),MD=require("node:worker_threads"),vD=require("yaml"),BD=w(oe()),FD=w(bt());k();hG();bG();FG();KG();YG();iq();Xj();s2();o2();pa=w(Q());p2();bE=w(nt());jN();Dr();Me();XR();UD=w(oe());O2();qT();x2();is();HJ();Py=w(wt());Ph();JA();a4();m4();tD();Bp();pD();LD=(0,Py.resolvePath)(BD.get(U.COMPONENTSROOT)),xD=new Map,AE=new Map;o(E4,"loadComponentDirectories");Cbe={REST:lS,rest:lS,graphql:GN,graphqlSchema:HN,roles:zN,jsResource:QN,fastifyRoutes:rL,login:XN,static:nL,operationsApi:cL,customFunctions:{},http:iy,clustering:hL,replication:Go,authentication:Ap,mqtt:cD,loadEnv:sL,logging:pa.default,dataLoader:aL},h4=[],Ny=new Map;o(Pbe,"setErrorReporter");oy=o(()=>Oy,"getComponentName");o(Lbe,"symlinkHarperModule");o(_4,"sequentiallyHandleApplication");o(Cy,"loadComponent")});var cy=M((ske,S4)=>{var{isMainThread:g4}=require("worker_threads"),{getTables:Dbe,getDatabases:rke,table:nke}=(Me(),v(Et)),{loadComponentDirectories:Mbe,loadComponent:vbe}=(lf(),v(Pp)),{resetResources:Ube}=(Fu(),v(hU)),xbe=FC(),Bbe=wt(),{dirname:Fbe}=require("path"),{getConnection:Hbe}=mr(),kbe=oe(),{CONFIG_PARAMS:Gbe}=(k(),v(W)),{loadCertificates:qbe}=as(),kD=new Map;async function $be(e=!1){!g4&&kbe.get(Gbe.CLUSTERING_ENABLED)&&Hbe();try{g4&&await xbe()}catch(n){console.error(n)}let t=Ube();Dbe(),t.isWorker=e,await qbe(),await vbe(Fbe(Bbe.getConfigFilePath()),t,"hdb",!0,kD),await Mbe(kD,t);let r=[];for(let[n]of kD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o($be,"loadRootComponents");S4.exports.loadRootComponents=$be});var nt=M((oke,Pi)=>{"use strict";LE();var{Worker:Vbe,MessageChannel:Kbe,parentPort:mo,isMainThread:KD,threadId:Ybe,workerData:ho}=require("worker_threads"),{PACKAGE_ROOT:Wbe}=bt(),{join:A4,isAbsolute:zbe,extname:jbe}=require("path"),{server:b4}=(Dr(),v($f)),{watch:Qbe,readdir:Jbe}=require("fs/promises"),{totalmem:T4}=require("os"),{setHeapSnapshotNearHeapLimit:Xbe}=require("v8"),wc=(k(),v(W)),My=oe(),Ci=Q(),{randomBytes:Zbe}=require("crypto"),{_assignPackageExport:eIe}=Xs(),R4=1024*1024,Oc=[],zs=[],tIe=50,YD=1e4,rIe="restart",I4="request_thread_info",N4="resource_report",w4="thread_info",O4="added-port",nIe="ack",GD;eIe("threads",zs);Pi.exports={startWorker:qD,restartWorkers:zD,shutdownWorkers:cIe,workers:Oc,setMonitorListener:EIe,onMessageFromWorkers:lIe,onMessageByType:U4,broadcast:dIe,broadcastWithAcknowledgement:mIe,setChildListenerByType:aIe,getWorkerIndex:C4,getWorkerCount:P4,getTicketKeys:D4,setMainIsWorker:iIe,setTerminateTimeout:sIe,restartNumber:ho?.restartNumber||1};zs.onMessageByType=U4;zs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=zs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Pi.exports.whenThreadsStarted=new Promise(e=>{Pi.exports.threadsHaveStarted=e});My.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&Xbe(1);var WD;function sIe(e){YD=e}o(sIe,"setTerminateTimeout");function C4(){return ho?ho.workerIndex:WD?0:void 0}o(C4,"getWorkerIndex");function P4(){return ho?ho.workerCount:WD?1:void 0}o(P4,"getWorkerCount");function iIe(e){WD=e,Pi.exports.threadsHaveStarted()}o(iIe,"setMainIsWorker");var L4=1,Ly;function D4(){return Ly||(Ly=KD?Zbe(48):ho.ticketKeys,Ly)}o(D4,"getTicketKeys");Object.defineProperty(b4,"workerIndex",{get(){return C4()}});Object.defineProperty(b4,"workerCount",{get(){return P4()}});var M4={[I4](e,t){hIe(t)},[N4](e,t){pIe(t,e)}};function qD(e,t={}){let r=process.constrainedMemory?.()||T4();r=Math.min(r,T4(),2e4*R4);let n=My.get(wc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/R4/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let u of zs){let d=new Kbe;d.existingPort=u,i.push(d),a.push(d.port2)}jbe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];My.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Vbe(zbe(e)?e:A4(Wbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:L4=t.threadCount,name:t.name,restartNumber:Pi.exports.restartNumber,ticketKeys:D4()},transferList:a,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:O4,port:u,threadId:l.threadId},[u]);return vy(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>qD(e,t),l.on("error",u=>{Ci.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Oc.splice(Oc.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<tIe?(t.unexpectedRestarts=l.unexpectedRestarts+1,qD(e,t)):Ci.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{M4[u.type]?.(u,l)}),Oc.push(l),gIe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}o(qD,"startWorker");var oIe=[wc.THREAD_TYPES.HTTP];async function zD(e=null,t=Math.max(L4>3,1),r=!0){if(KD){try{process.chdir(process.cwd())}catch(a){Ci.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=cy();await a()}Pi.exports.restartNumber++,t<1&&(t=t*Oc.length);let n=[],s=[];for(let a of Oc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Ci.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Pi.exports.restartNumber,type:wc.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=oIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},YD*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(h=>{h.type===wc.ITC_EVENT_TYPES.CHILD_STARTED&&(Ci.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Ci.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=sf();r&&(e==="http"||!e)&&My.get(wc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:rIe,workerType:e})}o(zD,"restartWorkers");function aIe(e,t){M4[e]=t}o(aIe,"setChildListenerByType");function cIe(e){return zD(e,1/0,!1)}o(cIe,"shutdownWorkers");var v4=[];function lIe(e){v4.push(e)}o(lIe,"onMessageFromWorkers");var $D=new Map;function U4(e,t){let r=$D.get(e);r||$D.set(e,r=[]),r.push(t)}o(U4,"onMessageByType");var uIe=10;async function dIe(e,t){let r=0;for(let n of zs)try{n.postMessage(e),r++>uIe&&(r=0,await new Promise(setImmediate))}catch(s){Ci.error("Unable to send message to worker",s)}t&&B4(e,null)}o(dIe,"broadcast");var Dy=new Map,fIe=1;function mIe(e){return new Promise(t=>{let r=0;for(let n of zs)try{let s=fIe++,i=o(()=>{Dy.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Dy.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of Dy)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Ci.error("Unable to send message to worker",s)}r===0&&t()})}o(mIe,"broadcastWithAcknowledgement");function hIe(e){e.postMessage({type:w4,workers:x4()})}o(hIe,"sendThreadInfo");function x4(){let e=Date.now();return Oc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(x4,"getChildWorkerInfo");function pIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(pIe,"recordResourceReport");var VD;function EIe(e){VD=e}o(EIe,"setMonitorListener");var _Ie=1e3,y4=!1;function gIe(){y4||(y4=!0,setInterval(()=>{for(let e of Oc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}VD&&VD()},_Ie).unref())}o(gIe,"startMonitoring");var SIe=1e3;if(mo&&ho?.addPorts){vy(mo);for(let e=0,t=ho.addPorts.length;e<t;e++){let r=ho.addPorts[e];r.threadId=ho.addThreadIds[e],vy(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:N4,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},SIe).unref(),GD=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:I4});function r(n){n.type===w4&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else GD=x4;Pi.exports.getThreadInfo=GD;function vy(e,t){zs.push(e),e.on("message",r=>{if(r.type===O4)r.port.threadId=r.threadId,vy(r.port);else if(r.type===nIe){let n=Dy.get(r.id);n&&n()}else B4(r,e)}).on("close",()=>{zs.splice(zs.indexOf(e),1)}).on("exit",()=>{zs.splice(zs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(vy,"addPort");function B4(e,t){for(let n of v4)n(e,t);let r=$D.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Ci.error(s)}}o(B4,"notifyMessageListeners");if(KD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await Jbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(A4(s,a.name));try{for await(let{filename:a}of Qbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await zD(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Pi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else mo.on("message",async e=>{let{type:t}=e;t===wc.ITC_EVENT_TYPES.SHUTDOWN&&(Pi.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate",Ybe),process.exit(0)},YD).unref())})});var VL={};we(VL,{startHTTPThreads:()=>RIe,startSocketServer:()=>HD,updateWorkerIdleness:()=>Y4});async function RIe(e=2,t){fN().catch(r=>Mf.error?.("Error recording hostname for analytics:",r));try{if(t)JD(0,1,!0);else{let{loadRootComponents:r}=cy();if(e===0)return(0,js.setMainIsWorker)(!0),await nD().startServers(),Promise.resolve([]);await r()}K4();for(let r=0;r<e;r++)JD(r,e);return Promise.all(V4)}finally{(0,js.threadsHaveStarted)()}}function K4(){let e=(0,G4.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),QD=setInterval(()=>{Mf.notify(e)},TIe).unref())}function JD(e,t=1,r){if(jD++,(0,js.startWorker)("server/threads/threadServer.js",{name:eA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===Qy.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});V4.push(s),await s,Cf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=xy.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Cf.indexOf(n);a>-1&&Cf.splice(a,1)}if(o(i,"removeWorker"),Pf){let a=Pf;Pf=[];for(let c of a)$4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{XD?XD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,js.shutdownWorkers)(),jD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function HD(e=0,t){if(typeof e=="string")try{(0,By.existsSync)(e)&&(0,By.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=yIe:r=AIe(t):r=ZD;let n=(0,Lf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=$4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),XD=!0,r(i,(a,c)=>{if(!a){if(F4){let u=i._socket||new Lf.Socket({handle:i,writable:!0,readable:!0});F4.deliverSocket(u,e,c),u.resume()}else jD>0?(Pf.length===0&&setTimeout(()=>{Pf.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,Pf.push(i)):(console.log("start up a dynamic thread to handle request"),JD(0));it(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Lf.Socket({handle:i,writable:!0,readable:!0});NIe(u,a,e)}it(!0,"socket-routed")})},Mf.info(`HarperDB ${q4.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 ZD(e,t){let r,n=0;for(let s of Cf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Uy)return Uy=i,t(r);n=i}Uy=0,t(r)}function yIe(e,t){let r={};e.getpeername(r);let n=r.address,s=Df.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ZD(e,a=>{Df.set(n,{worker:a,lastUsed:i}),t(a)})}function AIe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Lf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Df.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);ZD(n,f=>{Df.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function Y4(){Uy=0;for(let e of Cf)e.expectedIdle=e.recentELU.idle+bIe,e.requests=1;Cf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function NIe(e,t,r){let n=IIe++;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(),xy.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")),xy.delete(n)),s.event=="destroy"&&(e.destroy(),xy.delete(n))})}var js,Lf,Mf,By,k4,G4,q4,Cf,Pf,$4,F4,jD,V4,QD,TIe,XD,Uy,H4,Df,bIe,xy,IIe,XR=ce(()=>{js=w(nt()),Lf=require("net");k();Mf=w(Q()),By=require("fs");Wi();k4=require("worker_threads"),G4=w(Jd()),q4=w(bt()),Cf=[],Pf=[],$4=[],jD=0,V4=[];k4.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,js.onMessageFromWorkers)(e=>{e.type===Zy.RESTART&&QD&&(clearInterval(QD),K4())}));TIe=6e5;o(RIe,"startHTTPThreads");o(K4,"licenseWarning");o(JD,"startHTTPWorker");o(HD,"startSocketServer");Uy=0;o(ZD,"findMostIdleWorker");H4=36e5,Df=new Map;o(yIe,"findByRemoteAddressAffinity");o(AIe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Df)r.lastUsed+H4<e&&Df.delete(t)},H4).unref();bIe=1e3;o(Y4,"updateWorkerIdleness");(0,js.setMonitorListener)(Y4);xy=new Map,IIe=1;o(NIe,"proxySocket")});LE();var{startHTTPThreads:wIe,startSocketServer:W4}=(XR(),v(VL));wIe(0,!0);W4(9925);W4(9926);