harperdb 4.7.0-alpha.8 → 4.7.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- "use strict";var Q3=Object.create;var zf=Object.defineProperty;var J3=Object.getOwnPropertyDescriptor;var X3=Object.getOwnPropertyNames;var Z3=Object.getPrototypeOf,eX=Object.prototype.hasOwnProperty;var o=(e,t)=>zf(e,"name",{value:t,configurable:!0});var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var r in t)zf(e,r,{get:t[r],enumerable:!0})},qM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of X3(t))!eX.call(e,s)&&s!==r&&zf(e,s,{get:()=>t[s],enumerable:!(n=J3(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?Q3(Z3(e)):{},qM(t||!e||!e.__esModule?zf(r,"default",{value:e,enumerable:!0}):r,e)),M=e=>qM(zf({},"__esModule",{value:!0}),e);var bt=v(($we,KM)=>{var{join:tX,dirname:$M}=require("node:path"),{existsSync:rX,readFileSync:nX}=require("node:fs");function sX(){let t=__dirname,r,n=0;for(;!rX(r=tX(t,"package.json"));)if(t===(t=$M(t))||n++>10)throw new Error("Could not find package root");return r}o(sX,"findPackageJson");var VM=sX(),iX=JSON.parse(nX(VM,"utf8")),oX=$M(VM);KM.exports={packageJson:iX,PACKAGE_ROOT:oX}});var KE=v((Kwe,YM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:a,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=bt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,R=!1;if(R=i(n(p,E))){let L=new Set;e.sync(h.map(O=>`${O}/**/*.ts`),{cwd:p}).forEach(O=>{let x=0,j=0;try{L.add(O),x=a(n(p,O)).mtimeMs-5e3,j=a(n(p,E,O.replace(/.ts$/,".js"))).mtimeMs}catch{}x>j&&(S=!0)}),e.sync(h.map(O=>`${O}/**/*.js`),{cwd:n(p,E)}).forEach(O=>{if(!L.has(O.replace(/.js$/,".ts")))try{u(n(p,E,O))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let L=f("npx",["tsc"],{cwd:p});if(L.stdout?.length&&console.log(L.stdout.toString()),L.stderr?.length&&console.log(L.stderr.toString()),R){let O=n(t(),"harperdb-tsc.pid"),x=!1;if(i(O))try{process.kill(+c(O,"utf8"),0),x=!0}catch{}if(!x){console.log("Starting background TypeScript compilation...");let j=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});j.on("error",k=>{console.error("Error trying to compile TypeScript",k)}),j.pid&&l(O,String(j.pid),"utf-8"),j.unref()}}}}let g=YM.constructor,b=g._findPath;g._findPath=function(S,R,L){if(S.startsWith(".")&&!L&&R.length===1&&R[0].startsWith(p)&&!R[0].includes("node_modules")){let O=r(p,R[0]),x;O.startsWith(E)?x=n(p,r(E,O)):x=n(p,E,O),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let j=n(x,S),k=j+".js";if(i(k))return k;if(s(j).includes(".")&&i(j))return j}return b(S,R,L)}}});var W={};be(W,{AUTH_AUDIT_STATUS:()=>ei,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>OX,BOOT_PROP_PARAMS:()=>jM,CLUSTERING_FLAG:()=>_b,CLUSTERING_PROCESSES:()=>EX,CLUSTER_MESSAGE_TYPE_ENUM:()=>Eb,CLUSTER_OPERATIONS:()=>KX,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>QM,DATABASES_DIR_NAME:()=>kc,DATABASES_PARAM_CONFIG:()=>jX,DEFAULT_DATABASE_NAME:()=>gX,ESCAPED_FORWARD_SLASH_REGEX:()=>NX,FORWARD_SLASH_REGEX:()=>IX,FUNC_VAL:()=>o5,GEO_CONVERSION_ENUM:()=>WX,HDB_COMPONENT_CONFIG_FILE:()=>lX,HDB_CONFIG_FILE:()=>aX,HDB_DEFAULT_CONFIG_FILE:()=>cX,HDB_FILE_PERMISSIONS:()=>LX,HDB_HOME_DIR_NAME:()=>CX,HDB_PID_FILE:()=>_X,HDB_PROCESS_SERVICES:()=>hX,HDB_PROC_NAME:()=>uX,HDB_RESTART_SCRIPT:()=>dX,HDB_ROOT_DIR_NAME:()=>fb,HDB_SETTINGS_NAMES:()=>Jf,HDB_SUPPORT_ADDRESS:()=>zM,INFO_TABLE_HASH_ATTRIBUTE:()=>BX,INSERT_MAX_CHARACTER_SIZE:()=>UX,INSTALL_PROMPTS:()=>vX,ITC_EVENT_TYPES:()=>JE,JOB_STATUS_ENUM:()=>GX,JOB_TYPE_ENUM:()=>QX,JWT_ENUM:()=>Xf,LAUNCH_SERVICE_SCRIPTS:()=>TX,LEGACY_CONFIG_PARAMS:()=>zX,LEGACY_DATABASES_DIR_NAME:()=>zE,LICENSE_FILE_NAME:()=>HX,LICENSE_KEY_DIR_NAME:()=>hb,LICENSE_VALUES:()=>JX,LOG_LEVELS:()=>jf,LOG_NAMES:()=>SX,METADATA_PROPERTY:()=>e5,NODE_ERROR_CODES:()=>ZX,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>s5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>n5,PRE_4_0_0_VERSION:()=>a5,PROCESS_DESCRIPTORS:()=>pX,PROCESS_NAME_ENV_PROP:()=>MX,RAM_ALLOCATION_ENUM:()=>XX,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>QE,REG_KEY_FILE_NAME:()=>kX,RESTART_TIMEOUT_MS:()=>PX,ROLE_TYPES_ENUM:()=>yX,S3_BUCKET_AUTH_KEYS:()=>$X,SEARCH_NOT_FOUND_MESSAGE:()=>bX,SEARCH_WILDCARDS:()=>i5,SERVICE_ACTIONS_ENUM:()=>YX,SUPPORT_HELP_MSG:()=>RX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>FX,SYSTEM_SCHEMA_NAME:()=>Qf,SYSTEM_TABLE_NAMES:()=>Eu,THREAD_TYPES:()=>Sb,TIME_STAMP_NAMES:()=>r5,TIME_STAMP_NAMES_ENUM:()=>t5,TRANSACTIONS_DIR_NAME:()=>DX,UNICODE_FORWARD_SLASH:()=>wX,UNICODE_PERIOD:()=>AX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>xX,VALID_S3_FILE_TYPES:()=>qX,VALID_SQL_OPS_ENUM:()=>VX,VALUE_SEARCH_COMPARATORS:()=>jE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>gb});var YE,WE,aX,cX,fb,lX,uX,dX,WM,db,mb,pb,fX,mX,pX,hX,EX,_X,gX,SX,jf,TX,yX,zM,RX,bX,AX,IX,wX,NX,Qf,CX,hb,OX,PX,LX,kc,zE,DX,MX,jM,vX,UX,xX,Eu,BX,FX,kX,HX,GX,V,qX,$X,VX,KX,YX,WX,Jf,zX,U,QM,jX,QX,Eb,JX,XX,ZX,e5,_b,JM,XM,t5,r5,n5,jE,gb,s5,i5,o5,QE,Xf,JE,Sb,a5,ei,ba,H=oe(()=>{YE=require("node:path"),WE=w(bt()),aX="harperdb-config.yaml",cX="defaultConfig.yaml",fb="hdb",lX="config.yaml",uX="harperdb.js",dX="restartHdb.js",WM="HarperDB",db="Custom Functions",mb="Clustering Hub",pb="Clustering Leaf",fX="Clustering Ingest Service",mX="Clustering Reply Service",pX={HDB:WM,CLUSTERING_HUB:mb,CLUSTERING_LEAF:pb,CLUSTERING_INGEST_SERVICE:fX,CLUSTERING_REPLY_SERVICE:mX,CUSTOM_FUNCTIONS:db,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"},hX={harperdb:WM,"clustering hub":mb,"clustering leaf":pb,"custom functions":db,custom_functions:db,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},EX={CLUSTERING_HUB_PROC_DESCRIPTOR:mb,CLUSTERING_LEAF_PROC_DESCRIPTOR:pb},_X="hdb.pid",gX="data",SX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},TX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,YE.join)(WE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,YE.join)(WE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,YE.join)(WE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},yX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},zM="support@harperdb.io",RX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${zM}`,bX="None of the specified records were found.",AX="U+002E",IX=/\//g,wX="U+002F",NX=/U\+002F/g,Qf="system",CX=".harperdb",hb="keys",OX="hdb_boot_properties.file",PX=6e4,LX=448,kc="database",zE="schema",DX="transactions",MX="PROCESS_NAME",jM={SETTINGS_PATH_KEY:"settings_path"},vX={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"},UX=250,xX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Eu={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"},BX="info_id",FX={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"},kX="060493.ks",HX=".license",GX={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},qX={CSV:".csv",JSON:".json"},$X={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},VX={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},KX={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},YX={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},WX={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Jf={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"},zX={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",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},QM={settings_path:jM.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];QM[t.toLowerCase()]=t}jX={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},QX={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},Eb={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"},JX={VERSION_DEFAULT:"2.2.0"},XX={DEVELOPMENT:8192,DEFAULT:512},ZX={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},e5=Symbol("metadata"),_b="__clustering__",JM="__createdtime__",XM="__updatedtime__",t5={CREATED_TIME:JM,UPDATED_TIME:XM},r5=[JM,XM],n5=15984864e5,jE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},gb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},s5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},i5=["*","%"],o5="func_val",QE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Xf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},JE={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},Sb={HTTP:"http"},a5="3.x.x",ei={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Hc=v((Ywe,tv)=>{"use strict";var ZM=require("minimist");tv.exports=c5;function c5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=ev(process.env),n=ev(ZM(process.argv))):(r=process.env,n=ZM(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(c5,"assignCMDENVVariables");function ev(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(ev,"objKeysToLowerCase")});var ti=v(Yn=>{"use strict";global.Resource=Yn.Resource=void 0;global.tables=Yn.tables={};global.databases=Yn.databases={};global.getUser=Yn.getUser=void 0;global.authenticateUser=Yn.authenticateUser=void 0;global.server=Yn.server={};global.contentTypes=Yn.contentTypes=null;global.threads=Yn.threads=[];global.logger={};global.RequestTarget=Yn.RequestTarget=void 0;global.operation=Yn.operation=void 0;Yn._assignPackageExport=(e,t)=>{global[e]=Yn[e]=t}});var Tb=v(an=>{"use strict";var l5={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
1
+ "use strict";var Q3=Object.create;var zf=Object.defineProperty;var J3=Object.getOwnPropertyDescriptor;var X3=Object.getOwnPropertyNames;var Z3=Object.getPrototypeOf,eX=Object.prototype.hasOwnProperty;var o=(e,t)=>zf(e,"name",{value:t,configurable:!0});var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var r in t)zf(e,r,{get:t[r],enumerable:!0})},qM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of X3(t))!eX.call(e,s)&&s!==r&&zf(e,s,{get:()=>t[s],enumerable:!(n=J3(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?Q3(Z3(e)):{},qM(t||!e||!e.__esModule?zf(r,"default",{value:e,enumerable:!0}):r,e)),M=e=>qM(zf({},"__esModule",{value:!0}),e);var Rt=v((Hwe,KM)=>{var{join:tX,dirname:$M}=require("node:path"),{existsSync:rX,readFileSync:nX}=require("node:fs");function sX(){let t=__dirname,r,n=0;for(;!rX(r=tX(t,"package.json"));)if(t===(t=$M(t))||n++>10)throw new Error("Could not find package root");return r}o(sX,"findPackageJson");var VM=sX(),iX=JSON.parse(nX(VM,"utf8")),oX=$M(VM);KM.exports={packageJson:iX,PACKAGE_ROOT:oX}});var VE=v((qwe,YM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:a,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=Rt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,R=!1;if(R=i(n(p,E))){let L=new Set;e.sync(h.map(O=>`${O}/**/*.ts`),{cwd:p}).forEach(O=>{let x=0,j=0;try{L.add(O),x=a(n(p,O)).mtimeMs-5e3,j=a(n(p,E,O.replace(/.ts$/,".js"))).mtimeMs}catch{}x>j&&(S=!0)}),e.sync(h.map(O=>`${O}/**/*.js`),{cwd:n(p,E)}).forEach(O=>{if(!L.has(O.replace(/.js$/,".ts")))try{u(n(p,E,O))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let L=f("npx",["tsc"],{cwd:p});if(L.stdout?.length&&console.log(L.stdout.toString()),L.stderr?.length&&console.log(L.stderr.toString()),R){let O=n(t(),"harperdb-tsc.pid"),x=!1;if(i(O))try{process.kill(+c(O,"utf8"),0),x=!0}catch{}if(!x){console.log("Starting background TypeScript compilation...");let j=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});j.on("error",k=>{console.error("Error trying to compile TypeScript",k)}),j.pid&&l(O,String(j.pid),"utf-8"),j.unref()}}}}let g=YM.constructor,b=g._findPath;g._findPath=function(S,R,L){if(S.startsWith(".")&&!L&&R.length===1&&R[0].startsWith(p)&&!R[0].includes("node_modules")){let O=r(p,R[0]),x;O.startsWith(E)?x=n(p,r(E,O)):x=n(p,E,O),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let j=n(x,S),k=j+".js";if(i(k))return k;if(s(j).includes(".")&&i(j))return j}return b(S,R,L)}}});var W={};be(W,{AUTH_AUDIT_STATUS:()=>ei,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>OX,BOOT_PROP_PARAMS:()=>jM,CLUSTERING_FLAG:()=>_b,CLUSTERING_PROCESSES:()=>EX,CLUSTER_MESSAGE_TYPE_ENUM:()=>Eb,CLUSTER_OPERATIONS:()=>KX,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>QM,DATABASES_DIR_NAME:()=>kc,DATABASES_PARAM_CONFIG:()=>jX,DEFAULT_DATABASE_NAME:()=>gX,ESCAPED_FORWARD_SLASH_REGEX:()=>NX,FORWARD_SLASH_REGEX:()=>IX,FUNC_VAL:()=>o5,GEO_CONVERSION_ENUM:()=>WX,HDB_COMPONENT_CONFIG_FILE:()=>lX,HDB_CONFIG_FILE:()=>aX,HDB_DEFAULT_CONFIG_FILE:()=>cX,HDB_FILE_PERMISSIONS:()=>LX,HDB_HOME_DIR_NAME:()=>CX,HDB_PID_FILE:()=>_X,HDB_PROCESS_SERVICES:()=>hX,HDB_PROC_NAME:()=>uX,HDB_RESTART_SCRIPT:()=>dX,HDB_ROOT_DIR_NAME:()=>fb,HDB_SETTINGS_NAMES:()=>Jf,HDB_SUPPORT_ADDRESS:()=>zM,INFO_TABLE_HASH_ATTRIBUTE:()=>BX,INSERT_MAX_CHARACTER_SIZE:()=>UX,INSTALL_PROMPTS:()=>vX,ITC_EVENT_TYPES:()=>QE,JOB_STATUS_ENUM:()=>GX,JOB_TYPE_ENUM:()=>QX,JWT_ENUM:()=>Xf,LAUNCH_SERVICE_SCRIPTS:()=>TX,LEGACY_CONFIG_PARAMS:()=>zX,LEGACY_DATABASES_DIR_NAME:()=>WE,LICENSE_FILE_NAME:()=>HX,LICENSE_KEY_DIR_NAME:()=>hb,LICENSE_VALUES:()=>JX,LOG_LEVELS:()=>jf,LOG_NAMES:()=>SX,METADATA_PROPERTY:()=>e5,NODE_ERROR_CODES:()=>ZX,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>s5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>n5,PRE_4_0_0_VERSION:()=>a5,PROCESS_DESCRIPTORS:()=>pX,PROCESS_NAME_ENV_PROP:()=>MX,RAM_ALLOCATION_ENUM:()=>XX,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>jE,REG_KEY_FILE_NAME:()=>kX,RESTART_TIMEOUT_MS:()=>PX,ROLE_TYPES_ENUM:()=>yX,S3_BUCKET_AUTH_KEYS:()=>$X,SEARCH_NOT_FOUND_MESSAGE:()=>bX,SEARCH_WILDCARDS:()=>i5,SERVICE_ACTIONS_ENUM:()=>YX,SUPPORT_HELP_MSG:()=>RX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>FX,SYSTEM_SCHEMA_NAME:()=>Qf,SYSTEM_TABLE_NAMES:()=>Eu,THREAD_TYPES:()=>Sb,TIME_STAMP_NAMES:()=>r5,TIME_STAMP_NAMES_ENUM:()=>t5,TRANSACTIONS_DIR_NAME:()=>DX,UNICODE_FORWARD_SLASH:()=>wX,UNICODE_PERIOD:()=>AX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>xX,VALID_S3_FILE_TYPES:()=>qX,VALID_SQL_OPS_ENUM:()=>VX,VALUE_SEARCH_COMPARATORS:()=>zE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>gb});var KE,YE,aX,cX,fb,lX,uX,dX,WM,db,mb,pb,fX,mX,pX,hX,EX,_X,gX,SX,jf,TX,yX,zM,RX,bX,AX,IX,wX,NX,Qf,CX,hb,OX,PX,LX,kc,WE,DX,MX,jM,vX,UX,xX,Eu,BX,FX,kX,HX,GX,V,qX,$X,VX,KX,YX,WX,Jf,zX,U,QM,jX,QX,Eb,JX,XX,ZX,e5,_b,JM,XM,t5,r5,n5,zE,gb,s5,i5,o5,jE,Xf,QE,Sb,a5,ei,ba,H=oe(()=>{KE=require("node:path"),YE=w(Rt()),aX="harperdb-config.yaml",cX="defaultConfig.yaml",fb="hdb",lX="config.yaml",uX="harperdb.js",dX="restartHdb.js",WM="HarperDB",db="Custom Functions",mb="Clustering Hub",pb="Clustering Leaf",fX="Clustering Ingest Service",mX="Clustering Reply Service",pX={HDB:WM,CLUSTERING_HUB:mb,CLUSTERING_LEAF:pb,CLUSTERING_INGEST_SERVICE:fX,CLUSTERING_REPLY_SERVICE:mX,CUSTOM_FUNCTIONS:db,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"},hX={harperdb:WM,"clustering hub":mb,"clustering leaf":pb,"custom functions":db,custom_functions:db,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},EX={CLUSTERING_HUB_PROC_DESCRIPTOR:mb,CLUSTERING_LEAF_PROC_DESCRIPTOR:pb},_X="hdb.pid",gX="data",SX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},TX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},yX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},zM="support@harperdb.io",RX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${zM}`,bX="None of the specified records were found.",AX="U+002E",IX=/\//g,wX="U+002F",NX=/U\+002F/g,Qf="system",CX=".harperdb",hb="keys",OX="hdb_boot_properties.file",PX=6e4,LX=448,kc="database",WE="schema",DX="transactions",MX="PROCESS_NAME",jM={SETTINGS_PATH_KEY:"settings_path"},vX={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"},UX=250,xX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Eu={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"},BX="info_id",FX={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"},kX="060493.ks",HX=".license",GX={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},qX={CSV:".csv",JSON:".json"},$X={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},VX={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},KX={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},YX={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},WX={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Jf={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"},zX={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",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},QM={settings_path:jM.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];QM[t.toLowerCase()]=t}jX={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},QX={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},Eb={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"},JX={VERSION_DEFAULT:"2.2.0"},XX={DEVELOPMENT:8192,DEFAULT:512},ZX={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},e5=Symbol("metadata"),_b="__clustering__",JM="__createdtime__",XM="__updatedtime__",t5={CREATED_TIME:JM,UPDATED_TIME:XM},r5=[JM,XM],n5=15984864e5,zE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},gb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},s5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},i5=["*","%"],o5="func_val",jE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Xf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},QE={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},Sb={HTTP:"http"},a5="3.x.x",ei={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Hc=v(($we,tv)=>{"use strict";var ZM=require("minimist");tv.exports=c5;function c5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=ev(process.env),n=ev(ZM(process.argv))):(r=process.env,n=ZM(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(c5,"assignCMDENVVariables");function ev(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(ev,"objKeysToLowerCase")});var ti=v(Yn=>{"use strict";global.Resource=Yn.Resource=void 0;global.tables=Yn.tables={};global.databases=Yn.databases={};global.getUser=Yn.getUser=void 0;global.authenticateUser=Yn.authenticateUser=void 0;global.server=Yn.server={};global.contentTypes=Yn.contentTypes=null;global.threads=Yn.threads=[];global.logger={};global.RequestTarget=Yn.RequestTarget=void 0;global.operation=Yn.operation=void 0;Yn._assignPackageExport=(e,t)=>{global[e]=Yn[e]=t}});var Tb=v(an=>{"use strict";var l5={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
2
2
  `),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
3
- `)},u5="certificate.pem",d5="privateKey.pem",f5="caCertificate.pem",m5="natsCertificate.pem",p5="natsCaCertificate.pem",At={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},h5={tls_certificate:At.SERVER,tlsCertificateAuthority:At.CA,customFunctions_tls_certificate:At.SERVER,customFunctionsTlsCertificateAuthority:At.CA,operationsApi_tls_certificate:At["OPERATIONS-API"],operationsApiTlsCertificateAuthority:At["OPERATIONS-CA"]},E5={[At.SERVER]:2,[At.DEFAULT]:1},_5={[At["OPERATIONS-API"]]:3,[At.SERVER]:2,[At.DEFAULT]:1},g5={[At["OPERATIONS-API"]]:3,[At.SERVER]:2,[At.DEFAULT]:1},S5={[At["OPERATIONS-CA"]]:3,[At.CA]:2,[At["DEFAULT-CA"]]:1},T5={[At["OPERATIONS-CA"]]:3,[At.CA]:2,[At["DEFAULT-CA"]]:1},y5={[At.CA]:2,[At["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=u5;an.PRIVATEKEY_PEM_NAME=d5;an.CA_PEM_NAME=f5;an.CERT_NAME=At;an.CERT_CONFIG_NAME_MAP=h5;an.CERT_PREFERENCE_APP=E5;an.CERT_PREFERENCE_OPS=_5;an.CERT_PREFERENCE_REP=g5;an.CA_CERT_PREFERENCE_REP=S5;an.CA_CERT_PREFERENCE_OPS=T5;an.CA_CERT_PREFERENCE_APP=y5;an.CERTIFICATE_VALUES=l5;an.NATS_CERTIFICATE_PEM_NAME=m5;an.NATS_CA_PEM_NAME=p5});var dt=v((Qwe,rv)=>{"use strict";var In=require("validate.js");In.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||In.validators.type.checks[t](e)?null:` must be a '${t}' value`};In.validators.type.checks={Object:o(function(e){return In.isObject(e)&&!In.isArray(e)},"Object"),Array:In.isArray,Integer:In.isInteger,Number:In.isNumber,String:In.isString,Date:In.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};In.validators.hasValidFileExt=function(e,t){return In.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};rv.exports={validateObject:R5,validateObjectAsync:b5,validateBySchema:A5};function R5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=In(e,t,{format:"flat"});return r?new Error(r):null}o(R5,"validateObject");async function b5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await In.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(b5,"validateObjectAsync");function A5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(A5,"validateBySchema")});var Rb=v((Zwe,cv)=>{"use strict";var ov=require("fs-extra"),ge=require("joi"),I5=require("os"),{boolean:Ke,string:mt,number:cr,array:Aa}=ge.types(),{totalmem:nv}=require("os"),Gc=require("path"),w5=z(),yb=ce(),Xwe=Tb(),sv=(H(),M(W)),N5=dt(),iv="log",C5="components",O5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",P5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",L5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",D5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",M5="rootPath config parameter is undefined",wn=ge.alternatives([cr.min(0),mt]).optional().empty(null),XE=ge.alternatives([Aa.items(mt,{host:mt.required(),port:wn},{hostname:mt.required(),port:wn}).empty(null),Aa.items(mt)]),Li,av=!1;cv.exports={configValidator:v5,routesValidator:H5,routeConstraints:XE};function v5(e,t=!1){if(av=t,Li=e.rootPath,yb.isEmpty(Li))throw M5;let r=Ke.optional(),n=cr.min(0).max(1e3).empty(null).default(k5),s=mt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zf),i=mt.optional().empty(null),a=mt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(Zf),l=ge.custom(x5).empty(null).default(Zf),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:wn,routes:XE}).required()}).required(),leafNodes:ge.object({network:ge.object({port:wn}).required()}).required(),network:ge.object({port:wn}).required()}).required(),leafServer:ge.object({network:ge.object({port:wn,routes:XE}).required(),streams:ge.object({maxAge:cr.min(120).allow(null).optional(),maxBytes:cr.min(1).allow(null).optional(),maxMsgs:cr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:mt.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:cr.required(),cookie:ge.object({domains:Aa.items(mt).optional(),expires:mt.optional()}),enableSessions:Ke,hashFunction:mt.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:cr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(mt,cr).optional().empty(null),url:mt.optional().empty(null),port:wn,securePort:wn,routes:Aa.optional().empty(null),databases:ge.alternatives(mt,Aa),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:mt.custom(F5).optional().empty(null),maxSize:mt.custom(B5).optional().empty(null),path:mt.optional().empty(null).default(Zf)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Aa.optional(),headersTimeout:cr.min(1).optional(),keepAliveTimeout:cr.min(1).optional(),port:wn,domainSocket:ge.optional().empty("hdb/operations-server").default(Zf),securePort:wn,timeout:cr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:mt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:wn,securePort:wn,mtls:ge.alternatives([Ke.optional(),ge.object({user:mt.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:cr.optional(),cors:Ke.optional(),corsAccessList:Aa.optional(),headersTimeout:cr.min(1).optional(),port:wn,securePort:wn,maxHeaderSize:cr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:mt.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Aa.optional(),mt.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:cr.min(1).optional(),host:mt.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:cr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:mt.optional(),threshold:cr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:cr.optional(),maxFreeSpaceToRetain:cr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(v5,"configValidator");function U5(e){return av||ov.existsSync(e)?null:`Specified path ${e} does not exist.`}o(U5,"doesPathExist");function x5(e,t){ge.assert(e,mt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=U5(e);if(r)return t.message(r)}o(x5,"validatePath");function B5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(O5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L5):e}o(B5,"validateRotationMaxSize");function F5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(P5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(D5):e}o(F5,"validateRotationInterval");function k5(e,t){let r=t.state.path.join("."),n=I5.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||nv();return i=Math.round(Math.min(i,nv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),w5.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(k5,"setDefaultThreads");function Zf(e,t){let r=t.state.path.join(".");if(!yb.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(yb.isEmpty(Li))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Gc.join(Li,C5);case"logging.root":return Gc.join(Li,iv);case"clustering.leafServer.streams.path":return Gc.join(Li,"clustering","leaf");case"storage.path":let n=Gc.join(Li,sv.LEGACY_DATABASES_DIR_NAME);return ov.existsSync(n)?n:Gc.join(Li,sv.DATABASES_DIR_NAME);case"logging.rotation.path":return Gc.join(Li,iv);case"operationsApi.network.domainSocket":return r==null?null:Gc.join(Li,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(Zf,"setDefaultRoot");function H5(e){let t=ge.object({routes:XE});return N5.validateBySchema({routes:e},t)}o(H5,"routesValidator")});var Gt=v((tNe,uv)=>{"use strict";var G5="__dbis__",q5="__txns__",$5="__environment_name__",V5="__dbi_defintion__",K5={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"},Y5=["__createdtime__","__updatedtime__"],W5="\uFFFF",lv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},z5=Object.values(lv);uv.exports={AUDIT_STORE_NAME:q5,INTERNAL_DBIS_NAME:G5,DBI_DEFINITION_NAME:V5,SEARCH_TYPES:K5,TIMESTAMP_NAMES:Y5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:$5,TRANSACTIONS_DBI_NAMES_ENUM:lv,TRANSACTIONS_DBIS:z5,OVERFLOW_MARKER:W5}});var Kr=v((rNe,Sv)=>{"use strict";var dv=(H(),M(W)),fv=Gt(),mv={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},pv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),hv={500:pv("There was an error processing your request."),400:"Invalid request"},j5=hv[mv.INTERNAL_SERVER_ERROR],Q5={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")},J5={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},X5={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"},Z5={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${fv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${fv.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},e6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${dv.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 ${dv.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"},Ev={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"},t6={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},r6={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},n6={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"},s6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},i6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},_v={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")},gv={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")},o6={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},a6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},c6={...Ev,...X5,...Q5,...t6,...r6,...n6,...s6,...i6,...e6,..._v,...gv,...o6,...a6,...J5};Sv.exports={CHECK_LOGS_WRAPPER:pv,HDB_ERROR_MSGS:c6,DEFAULT_ERROR_MSGS:hv,DEFAULT_ERROR_RESP:j5,HTTP_STATUS_CODES:mv,LMDB_ERRORS_ENUM:Z5,AUTHENTICATION_ERROR_MSGS:Ev,VALIDATION_ERROR_MSGS:_v,ITC_ERRORS:gv}});var Ee=v((sNe,Rv)=>{"use strict";var _u=Kr(),l6=(H(),M(W)),ZE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Tv),this.statusCode=n||_u.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(_u.DEFAULT_ERROR_MSGS[n]?_u.DEFAULT_ERROR_MSGS[n]:_u.DEFAULT_ERROR_MSGS[_u.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&&z()[s](i)}},bb=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}},Ab=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Tv(e,t,r,n=l6.LOG_LEVELS.ERROR,s=null,i=!1){if(yv(e))return e;let a=new ZE(e,t,r,n,s);return i&&delete a.stack,a}o(Tv,"handleHDBError");function gu(e){this.message=e}o(gu,"Violation");gu.prototype=Object.create(Error.prototype);gu.prototype.constructor=gu;gu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var Ib=class extends gu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function yv(e){return e.__proto__.constructor.name===ZE.name}o(yv,"isHDBError");Rv.exports={isHDBError:yv,handleHDBError:Tv,ClientError:bb,ServerError:Ab,AccessViolation:Ib,Violation:gu,hdbErrors:_u}});var em={};be(em,{server:()=>Me});var bv,Me,xr=oe(()=>{bv=w(ti()),Me={};(0,bv._assignPackageExport)("server",Me)});var pt=v(Zt=>{"use strict";var bs=(H(),M(W)),Ar=ce(),lr=z(),{configValidator:u6,routesValidator:Av}=Rb(),cn=require("fs-extra"),wv=require("yaml"),zn=require("path"),d6=require("is-number"),Nv=require("properties-reader"),f6=require("lodash"),{handleHDBError:m6}=Ee(),{HTTP_STATUS_CODES:p6,HDB_ERROR_MSGS:Su}=Kr(),{server:h6}=(xr(),M(em)),{PACKAGE_ROOT:Cv}=bt(),{DATABASES_PARAM_CONFIG:tm,CONFIG_PARAMS:Wn,CONFIG_PARAM_MAP:ri}=bs,E6="Unable to get config value because config is uninitialized",_6="Config successfully initialized",g6="Error backing up config file",S6="Empty parameter sent to getConfigValue",Ov=zn.join(Cv,"config","yaml",bs.HDB_DEFAULT_CONFIG_FILE),T6=zn.join(Cv,"config","yaml","defaultNatsConfig.yaml"),y6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Iv={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"},e_,Mt,t_;Zt.createConfigFile=R6;Zt.getDefaultConfig=b6;Zt.getConfigValue=Lv;Zt.initConfig=r_;Zt.flattenConfig=Tu;Zt.updateConfigValue=Dv;Zt.updateConfigObject=I6;Zt.getConfiguration=C6;Zt.setConfiguration=O6;Zt.readConfigFile=Ob;Zt.getClusteringRoutes=P6;Zt.initOldConfig=Mv;Zt.getConfigFromFile=L6;Zt.getConfigFilePath=qc;Zt.addConfig=D6;Zt.deleteConfigFromFile=M6;Zt.getConfigObj=v6;Zt.resolvePath=wb;Zt.getFlatConfigObj=U6;function wb(e){if(e?.startsWith("~/"))return zn.join(Ar.getHomeDir(),e.slice(1));let t=fe();try{return zn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(wb,"resolvePath");function R6(e,t=!1){let r=Ia(Ov);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=wv.parseDocument(cn.readFileSync(T6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}e_=Tu(r.toJSON());let n;for(let c in e){let l=ri[c.toLowerCase()];if(l===Wn.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=Nb(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){lr.error(f)}}}n&&Pv(r,n),Cb(r,t);let s=r.toJSON();Mt=Tu(s);let i=r.getIn(["rootPath"]),a=zn.join(i,bs.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)),lr.trace(`Config file written to ${a}`)}o(R6,"createConfigFile");function Pv(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(tm.TABLES))for(let i in n[s][tm.TABLES])for(let a in n[s][tm.TABLES][i]){let c=n[s][tm.TABLES][i][a],l=[Wn.DATABASES,s,tm.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=[Wn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){lr.error("Error parsing schemas CLI/env config arguments",n)}}o(Pv,"setSchemasConfig");function b6(e){if(e_===void 0){let r=Ia(Ov);e_=Tu(r.toJSON())}let t=ri[e.toLowerCase()];if(t!==void 0)return e_[t.toLowerCase()]}o(b6,"getDefaultConfig");function Lv(e){if(e==null){lr.info(S6);return}if(Mt===void 0){lr.trace(E6);return}let t=ri[e.toLowerCase()];if(t!==void 0)return Mt[t.toLowerCase()]}o(Lv,"getConfigValue");function qc(e=Ar.getPropsFilePath()){let t=Ar.getEnvCliRootPath();if(t)return wb(zn.join(t,bs.HDB_CONFIG_FILE));let r=Nv(e);return wb(r.get(bs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(qc,"getConfigFilePath");function r_(e=!1){if(Mt===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 lr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=qc(t),n;if(r.includes("config/settings.js"))try{Mv(r);return}catch(i){if(i.code!==bs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ia(r)}catch(i){if(i.code===bs.NODE_ERROR_CODES.ENOENT){lr.trace(`HarperDB config file not found at ${r}.
4
- This can occur during early stages of install where the config file has not yet been created`);return}else throw lr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}A6(n,r),Cb(n);let s=n.toJSON();if(h6.config=s,Mt=Tu(s),Mt.logging_rotation_rotate)for(let i in Iv)Mt[i]&&lr.error(`Config ${Iv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lr.trace(_6)}}o(r_,"initConfig");function A6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],zn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],zn.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(lr.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(A6,"checkForUpdatedConfig");function Cb(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 Su.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 Su.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=u6(r,t);if(n.error)throw Su.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(Cb,"validateConfig");function I6(e,t){Mt===void 0&&(Mt={});let r=ri[e.toLowerCase()];if(r===void 0){lr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Mt[r.toLowerCase()]=t}o(I6,"updateConfigObject");function Dv(e,t,r=void 0,n=!1,s=!1,i=!1){Mt===void 0&&r_();let a=Lv(ri.hdb_root),c=zn.join(a,bs.HDB_CONFIG_FILE),l=Ia(c),u;if(r&&Mt){let m=!1;for(let p in r)if(r[p]!=Mt[p.toLowerCase()]){m=!0;break}if(!m){lr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Wn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ri[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=Nb(m,t);l.setIn([...p],h)}else for(let m in r){let p=ri[m.toLowerCase()];if(p===Wn.HTTP_SECUREPORT&&r[m]===Mt[Wn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===Wn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Mt[Wn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===Wn.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=bs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=Nb(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(b){lr.error(b)}}}u&&Pv(l,u),Cb(l);let d=l.getIn(["rootPath"]),f=zn.join(d,bs.HDB_CONFIG_FILE);if(n===!0&&w6(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(Mt=Tu(l.toJSON())),lr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(Dv,"updateConfigValue");function w6(e,t){try{let r=zn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${bs.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),lr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lr.error(g6),lr.error(r)}}o(w6,"backupConfigFile");var N6=["databases"];function Tu(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}),t_=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])&&!N6.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;!Wn[l.toUpperCase()]&&ri[l]&&(s[ri[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Tu,"flattenConfig");function Nb(e,t){if(e===Wn.CLUSTERING_NODENAME||e===Wn.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(d6(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(Nb,"castConfigValue");function C6(){let e=Ar.getPropsFilePath(),t=qc(e);return Ia(t).toJSON()}o(C6,"getConfiguration");async function O6(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return Dv(void 0,void 0,s,!0),y6}catch(i){throw typeof i=="string"||i instanceof String?m6(i,i,p6.BAD_REQUEST,void 0,void 0,!0):i}}o(O6,"setConfiguration");function Ob(){let e=Ar.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ar.noBootFile())throw lr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=qc(e);return Ia(t).toJSON()}o(Ob,"readConfigFile");function Ia(e){return wv.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ia,"parseYamlDoc");function P6(){let e=Ob(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ar.isEmptyOrZeroLength(t)?[]:t;let r=Av(t);if(r)throw Su.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ar.isEmptyOrZeroLength(n)?[]:n;let s=Av(n);if(s)throw Su.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 Su.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(P6,"getClusteringRoutes");function Mv(e){let t=Nv(e);Mt={};for(let r in ri){let n=t.get(r.toUpperCase());if(Ar.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ri[r].toLowerCase();s===Wn.LOGGING_ROOT?Mt[s]=zn.dirname(n):Mt[s]=n}return Mt}o(Mv,"initOldConfig");function L6(e){let t=Ob();return f6.get(t,e.replaceAll("_","."))}o(L6,"getConfigFromFile");async function D6(e,t){let r=Ia(qc());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(qc(),String(r))}o(D6,"addConfig");function M6(e){let t=qc(Ar.getPropsFilePath()),r=Ia(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=zn.join(n,bs.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(M6,"deleteConfigFromFile");function v6(){return t_||(r_(),t_)}o(v6,"getConfigObj");function U6(){return Mt||r_(),Mt}o(U6,"getFlatConfigObj")});var fe=v((Fv,kv)=>{"use strict";var Pb=require("fs-extra"),$c=require("path"),vv=require("os"),x6=require("properties-reader"),nm=z(),rm=ce(),xe=(H(),M(W)),n_=pt(),B6="Error initializing environment manager",s_="BOOT_PROPS_FILE_PATH",Uv=!1,F6={[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},So={};Object.assign(Fv,kv.exports={BOOT_PROPS_FILE_PATH:s_,getHdbBasePath:k6,setHdbBasePath:H6,get:xv,initSync:q6,setProperty:Ze,initTestEnvironment:V6,setCloneVar:$6});function k6(){return So[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(k6,"getHdbBasePath");function H6(e){So[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(H6,"setHdbBasePath");function xv(e){let t=n_.getConfigValue(e);return t===void 0?So[e]:t}o(xv,"get");function Ze(e,t){F6[e]&&(So[e]=t),n_.updateConfigObject(e,t)}o(Ze,"setProperty");function G6(){let e;try{e=rm.getPropsFilePath(),Pb.accessSync(e,Pb.constants.F_OK|Pb.constants.R_OK),Uv=!0;let t=x6(e);return So[xe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(xe.HDB_SETTINGS_NAMES.INSTALL_USER),So[xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),So[s_]=e,!0}catch{return nm.trace(`Environment manager found no properties file at ${e}`),!1}}o(G6,"doesPropFileExist");function q6(e=!1){try{((Uv||G6()||rm.noBootFile())&&!Bv||e)&&(n_.initConfig(e),So[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=n_.getConfigValue(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){nm.error(B6),nm.error(t),console.error(t),process.exit(1)}}o(q6,"initSync");var Bv=!1;function $6(e){Bv=e}o($6,"setCloneVar");function V6(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=$c.join(__dirname,"../../","unitTests");So[s_]=$c.join(l,"hdb_boot_properties.file"),Ze(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,$c.join(l,"settings.test")),Ze(xe.HDB_SETTINGS_NAMES.INSTALL_USER,vv.userInfo()?vv.userInfo().username:void 0),Ze(xe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,$c.join(l,"envDir","log")),Ze(xe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(xe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(xe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,$c.join(l,"envDir")),Ze(xe.CONFIG_PARAMS.STORAGE_PATH,$c.join(l,"envDir")),s&&(Ze(xe.CONFIG_PARAMS.HTTP_SECUREPORT,xv(xe.CONFIG_PARAMS.HTTP_PORT)),Ze(xe.CONFIG_PARAMS.HTTP_PORT,null)),Ze(xe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(xe.CONFIG_PARAMS.HTTP_PORT,9926),Ze(xe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(xe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(xe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rm.isEmpty(i)?!1:i),Ze(xe.CONFIG_PARAMS.HTTP_CORS,rm.isEmpty(i)?!1:i),Ze(xe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(xe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,$c.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(xe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rm.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(xe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(xe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(xe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(xe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(xe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(xe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(xe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${s_}. Please check your boot props and settings files`;nm.fatal(r),nm.error(t)}}o(V6,"initTestEnvironment")});var gt=v((lNe,Yv)=>{"use strict";var cm=(H(),M(W)),K6=ce(),Nn=fe(),lm=require("path"),Y6=require("minimist"),Hv=require("fs-extra"),Gv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:wa,DATABASES_PARAM_CONFIG:sm,SYSTEM_SCHEMA_NAME:i_}=cm,im,om,am;function qv(){if(im!==void 0)return im;if(Nn.getHdbBasePath()!==void 0)return im=Nn.get(wa.STORAGE_PATH)||lm.join(Nn.getHdbBasePath(),cm.DATABASES_DIR_NAME),im}o(qv,"getBaseSchemaPath");function $v(){if(om!==void 0)return om;if(Nn.getHdbBasePath()!==void 0)return om=Kv(i_),om}o($v,"getSystemSchemaPath");function Vv(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(cm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||lm.join(Nn.getHdbBasePath(),cm.TRANSACTIONS_DIR_NAME),am}o(Vv,"getTransactionAuditStoreBasePath");function W6(e,t){let r=Nn.get(wa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||lm.join(Vv(),e.toString())}o(W6,"getTransactionAuditStorePath");function Kv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(cm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||lm.join(qv(),e)}o(Kv,"getSchemaPath");function z6(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Y6(process.argv));let n=r[wa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!K6.isObject(n))throw a;i=n}for(let a of i){let c=a[i_];if(!c)continue;let l=Nn.get(wa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[sm.PATH];if(u)return Gv.set(l,[i_,sm.TABLES,t,sm.PATH],u),Nn.setProperty(wa.DATABASES,l),u;let d=c?.[sm.PATH];if(d)return Gv.set(l,[i_,sm.PATH],d),Nn.setProperty(wa.DATABASES,l),d}}let s=r[wa.STORAGE_PATH.toUpperCase()];if(s){if(!Hv.pathExistsSync(s))throw new Error(s+" does not exist");let i=lm.join(s,e);return Hv.mkdirsSync(i),Nn.setProperty(wa.STORAGE_PATH,s),i}return $v()}o(z6,"initSystemSchemaPaths");function j6(){im=void 0,om=void 0,am=void 0}o(j6,"resetPaths");Yv.exports={getBaseSchemaPath:qv,getSystemSchemaPath:$v,getTransactionAuditStorePath:W6,getTransactionAuditStoreBasePath:Vv,getSchemaPath:Kv,initSystemSchemaPaths:z6,resetPaths:j6}});var Cn=v((mNe,Jv)=>{"use strict";var Q6=Kr().LMDB_ERRORS_ENUM,dNe=require("lmdb"),J6=Gt(),fNe=require("buffer").Buffer,{OVERFLOW_MARKER:Wv,MAX_SEARCH_KEY_LENGTH:o_}=J6,zv=["number","string","symbol","boolean","bigint"];function X6(e){if(e=e?.primaryStore||e,!e)throw new Error(Q6.ENV_REQUIRED)}o(X6,"validateEnv");function Z6(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(Z6,"stringifyData");function e8(e){return e instanceof Date?e.valueOf():e}o(e8,"convertKeyValueToWrite");function t8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(zv.includes(typeof e))return e.length>o_?[e.slice(0,o_)+Wv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(zv.includes(typeof i))i.length>o_?r.push(i.slice(0,o_)+Wv):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(t8,"getIndexedValues");var a_=0,jv=0;function Qv(){jv=Date.now()-performance.now()}o(Qv,"adjustStartTime");Qv();var r8=6e4;setInterval(Qv,r8).unref();function n8(){let e=performance.now()+jv;return e>a_?(a_=e,e):(a_+=488e-6,a_)}o(n8,"getNextMonotonicTime");Jv.exports={validateEnv:X6,stringifyData:Z6,convertKeyValueToWrite:e8,getNextMonotonicTime:n8,getIndexedValues:t8}});var um=v((hNe,Xv)=>{"use strict";var s8=(H(),M(W)).OPERATIONS_ENUM,Lb=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=s8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Xv.exports=Lb});var dm=v((gNe,rU)=>{"use strict";var _Ne=um(),c_=(H(),M(W)),Db=ce(),Zv=z(),i8=require("uuid"),{handleHDBError:l_,hdbErrors:o8}=Ee(),{HDB_ERROR_MSGS:u_,HTTP_STATUS_CODES:d_}=o8;rU.exports=eU;function eU(e,t,r){for(let s=0;s<t.length;s++)tU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];a8(i,r,e.operation)}}o(eU,"processRows");eU.validateAttribute=tU;function tU(e){if(Buffer.byteLength(String(e))>c_.INSERT_MAX_CHARACTER_SIZE)throw l_(new Error,u_.ATTR_NAME_LENGTH_ERR(e),d_.BAD_REQUEST,void 0,void 0,!0);if(Db.isEmptyOrZeroLength(e)||Db.isEmpty(e.trim()))throw l_(new Error,u_.ATTR_NAME_NULLISH_ERR,d_.BAD_REQUEST,void 0,void 0,!0)}o(tU,"validateAttribute");function a8(e,t,r){if(!e.hasOwnProperty(t)||Db.isEmptyOrZeroLength(e[t])){if(r===c_.OPERATIONS_ENUM.INSERT||r===c_.OPERATIONS_ENUM.UPSERT){e[t]=i8.v4();return}throw Zv.error("Update transaction aborted due to record with no hash value:",e),l_(new Error,u_.RECORD_MISSING_HASH_ERR,d_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>c_.INSERT_MAX_CHARACTER_SIZE)throw Zv.error(e),l_(new Error,u_.HASH_VAL_LENGTH_ERR,d_.BAD_REQUEST,void 0,void 0,!0)}o(a8,"validateHash")});function lU(e){vb=e}function d8(){u8=setInterval(function(){for(let e of Mb)if(e.stale){let t=e.getContext()?.url;oU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},l8).unref()}var Ub,iU,oU,aU,cU,nU,Mb,c8,To,fm,sU,vb,yo,f_,l8,u8,mm=oe(()=>{Ub=w(Cn()),iU=w(Ee()),oU=w(z()),aU=w(fe());H();cU=w(ce()),nU=100,Mb=new Set,c8=(0,cU.convertToMS)(aU.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,To={CLOSED:0,OPEN:1,LINGERING:2};o(lU,"replicationConfirmation");yo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=To.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===To.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Mb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Mb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(fm&&!this.overloadChecked&&performance.now()-sU>c8)throw new iU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===To.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===To.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,Ub.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let b=g[p===0?"before":"beforeIntermediate"];if(b){let S=b();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?To.LINGERING:To.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)<nU>>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 fm||(fm=s,sU=performance.now(),fm.then(()=>{fm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];vb&&p&&i.push(vb(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+nU/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=To.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},f_=class extends yo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Ub.getNextMonotonicTime)())}getReadTxn(){}},l8=3e4;o(d8,"startMonitoringTxns");d8()});var uU,jn,xb,yu=oe(()=>{uU=require("events"),jn=class extends uU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new xb;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)}},xb=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 St(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===To.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 yo;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 dU,Na=oe(()=>{dU=w(ti());mm();o(St,"transaction");(0,dU._assignPackageExport)("transaction",St);St.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};St.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 Fb={};be(Fb,{add:()=>m_,applyReverse:()=>fU,getRecordAtTime:()=>Bb,rebuildUpdateBefore:()=>p_});function m_(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 p_(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,m_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function fU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=f8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=mU}}function Bb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=vt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":fU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===mU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=vt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var f8,mU,h_=oe(()=>{Ro();o(m_,"add");m_.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};f8={add:m_};o(p_,"rebuildUpdateBefore");o(fU,"applyReverse");mU={};o(Bb,"getRecordAtTime")});var Qn=v(__=>{var E_=z();for(let e of["trace","debug","info","warn","error","fatal","notify"])E_.logsAtLevel(e)&&(__[e]=E_[e]);__.loggerWithTag=e=>E_.loggerWithTag(e,!0);__.setLogLevel=E_.setLogLevel});var TU={};be(TU,{parse:()=>Gb,streamAsJSON:()=>hm,stringify:()=>Vc});function hm(e){return new kb({value:e})}function pU(e){return console.error(e),JSON.stringify(pm(e))}function hU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===gU)return SU(e);if(t.resolution)return t.resolution.then(()=>Vc(e));throw t}}function SU(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+=SU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Gb(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),h8.test(e)?m8.parse(e):JSON.parse(e)):null}var EU,Hb,_U,m8,p8,gU,pm,kb,h8,qb=oe(()=>{EU=require("stream"),Hb=w(z()),_U=w(require("json-bigint-fixes")),m8=(0,_U.default)({useNativeBigInt:!0}),p8=1e4,gU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw gU};({errorToString:pm}=Hb);o(hm,"streamAsJSON");kb=class extends EU.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=>(Hb.warn("Error serializing in stream",c),a={done:!1,value:{error:pm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:pm(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),pU)}catch(s){yield pU(s)}else yield Vc(t)}else yield Vc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);hU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(pm(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>p8?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 hU(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(pm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(pU,"handleError");o(hU,"when");o(Vc,"stringify");o(SU,"jsStringify");h8=/[[,:]\s*-?\d{16,}/;o(Gb,"parse")});var PU={};be(PU,{asyncSerialization:()=>Wb,contentTypes:()=>Yb,findBestSerializer:()=>S_,getDeserializer:()=>wo,hasAsyncSerialization:()=>zb,registerContentHandlers:()=>gm,serialize:()=>Sm,serializeMessage:()=>Io,toCsvStream:()=>g_});function E8(e){try{return e?.[0]===123?Kb(e):e}catch{return e}}function gm(e){e.register(_8,{serializers:[{regex:/^application\/json$/,serializer:hm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(_m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,Di.encodeIter)(t,_m)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),g_(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,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function S_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new bU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function Sm(e,t,r){let n=RU&&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 As)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=S_(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}),Vb.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,Ao.createBrotliCompress)({params:{[Ao.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ao.constants.BROTLI_MODE_TEXT:Ao.constants.BROTLI_MODE_GENERIC,[Ao.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>RU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,Ao.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Io(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;bo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=S_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Em(e);return bo?.length>0?(bo.length===1?bo[0]:Promise.all(bo)).then(()=>Io(e,t,!0)):n}finally{bo=void 0}}function Wb(e){if(bo)bo.push(e);else throw new Error("Unable to serialize asynchronously")}function zb(){return!!bo}function g8(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 T8(e){return S8.includes(e)}function y8(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 wo(e="",t=!1){let r=y8(e),n=r.type&&ln.get(r.type)?.deserialize||R8(r);return t?s=>g8(s).then(n):n}function R8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!T8(e.parameters.charset)&&Vb.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 Kb(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function b8(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 g_(e,t){let r=Yc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new wU.Transform(n,s);return r.pipe(i)}var Di,Kc,Ao,bU,Yc,AU,$b,IU,Vb,wU,NU,CU,Em,Kb,_m,ln,Yb,yU,OU,_8,RU,bo,S8,No=oe(()=>{qb();Di=require("msgpackr"),Kc=require("cbor-x"),Ao=require("zlib"),bU=w(Ee()),Yc=w(require("stream"));xr();AU=w(ti()),$b=w(fe());H();IU=w(require("yaml")),Vb=w(Qn());Is();wU=require("json2csv"),NU=w(require("fastify-plugin")),CU=$b.default.get(U.SERIALIZATION_BIGINT)!==!1,Em=CU?Vc:JSON.stringify,Kb=CU?Gb:JSON.parse,_m={useRecords:!1,useToJSON:!0},ln=new Map,Yb=ln;Me.contentTypes=Yb;(0,AU._assignPackageExport)("contentTypes",Yb);ln.set("application/json",{serializeStream:hm,serialize:Em,deserialize(e){return Kb(e)},q:.8});yU=new Kc.Encoder(_m);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(_m).end(e)},serialize:yU.encode,deserialize:yU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,Di.encodeIter)(e,_m)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),g_(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]),g_(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return IU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(b8(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
+ `)},u5="certificate.pem",d5="privateKey.pem",f5="caCertificate.pem",m5="natsCertificate.pem",p5="natsCaCertificate.pem",bt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},h5={tls_certificate:bt.SERVER,tlsCertificateAuthority:bt.CA,customFunctions_tls_certificate:bt.SERVER,customFunctionsTlsCertificateAuthority:bt.CA,operationsApi_tls_certificate:bt["OPERATIONS-API"],operationsApiTlsCertificateAuthority:bt["OPERATIONS-CA"]},E5={[bt.SERVER]:2,[bt.DEFAULT]:1},_5={[bt["OPERATIONS-API"]]:3,[bt.SERVER]:2,[bt.DEFAULT]:1},g5={[bt["OPERATIONS-API"]]:3,[bt.SERVER]:2,[bt.DEFAULT]:1},S5={[bt["OPERATIONS-CA"]]:3,[bt.CA]:2,[bt["DEFAULT-CA"]]:1},T5={[bt["OPERATIONS-CA"]]:3,[bt.CA]:2,[bt["DEFAULT-CA"]]:1},y5={[bt.CA]:2,[bt["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=u5;an.PRIVATEKEY_PEM_NAME=d5;an.CA_PEM_NAME=f5;an.CERT_NAME=bt;an.CERT_CONFIG_NAME_MAP=h5;an.CERT_PREFERENCE_APP=E5;an.CERT_PREFERENCE_OPS=_5;an.CERT_PREFERENCE_REP=g5;an.CA_CERT_PREFERENCE_REP=S5;an.CA_CERT_PREFERENCE_OPS=T5;an.CA_CERT_PREFERENCE_APP=y5;an.CERTIFICATE_VALUES=l5;an.NATS_CERTIFICATE_PEM_NAME=m5;an.NATS_CA_PEM_NAME=p5});var dt=v((Wwe,rv)=>{"use strict";var In=require("validate.js");In.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||In.validators.type.checks[t](e)?null:` must be a '${t}' value`};In.validators.type.checks={Object:o(function(e){return In.isObject(e)&&!In.isArray(e)},"Object"),Array:In.isArray,Integer:In.isInteger,Number:In.isNumber,String:In.isString,Date:In.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};In.validators.hasValidFileExt=function(e,t){return In.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};rv.exports={validateObject:R5,validateObjectAsync:b5,validateBySchema:A5};function R5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=In(e,t,{format:"flat"});return r?new Error(r):null}o(R5,"validateObject");async function b5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await In.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(b5,"validateObjectAsync");function A5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(A5,"validateBySchema")});var Rb=v((Qwe,cv)=>{"use strict";var ov=require("fs-extra"),ge=require("joi"),I5=require("os"),{boolean:Ke,string:mt,number:cr,array:Aa}=ge.types(),{totalmem:nv}=require("os"),Gc=require("path"),w5=z(),yb=ce(),jwe=Tb(),sv=(H(),M(W)),N5=dt(),iv="log",C5="components",O5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",P5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",L5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",D5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",M5="rootPath config parameter is undefined",wn=ge.alternatives([cr.min(0),mt]).optional().empty(null),JE=ge.alternatives([Aa.items(mt,{host:mt.required(),port:wn},{hostname:mt.required(),port:wn}).empty(null),Aa.items(mt)]),Li,av=!1;cv.exports={configValidator:v5,routesValidator:H5,routeConstraints:JE};function v5(e,t=!1){if(av=t,Li=e.rootPath,yb.isEmpty(Li))throw M5;let r=Ke.optional(),n=cr.min(0).max(1e3).empty(null).default(k5),s=mt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zf),i=mt.optional().empty(null),a=mt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(Zf),l=ge.custom(x5).empty(null).default(Zf),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:wn,routes:JE}).required()}).required(),leafNodes:ge.object({network:ge.object({port:wn}).required()}).required(),network:ge.object({port:wn}).required()}).required(),leafServer:ge.object({network:ge.object({port:wn,routes:JE}).required(),streams:ge.object({maxAge:cr.min(120).allow(null).optional(),maxBytes:cr.min(1).allow(null).optional(),maxMsgs:cr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:mt.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:cr.required(),cookie:ge.object({domains:Aa.items(mt).optional(),expires:mt.optional()}),enableSessions:Ke,hashFunction:mt.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:cr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(mt,cr).optional().empty(null),url:mt.optional().empty(null),port:wn,securePort:wn,routes:Aa.optional().empty(null),databases:ge.alternatives(mt,Aa),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:mt.custom(F5).optional().empty(null),maxSize:mt.custom(B5).optional().empty(null),path:mt.optional().empty(null).default(Zf)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Aa.optional(),headersTimeout:cr.min(1).optional(),keepAliveTimeout:cr.min(1).optional(),port:wn,domainSocket:ge.optional().empty("hdb/operations-server").default(Zf),securePort:wn,timeout:cr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:mt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:wn,securePort:wn,mtls:ge.alternatives([Ke.optional(),ge.object({user:mt.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:cr.optional(),cors:Ke.optional(),corsAccessList:Aa.optional(),headersTimeout:cr.min(1).optional(),port:wn,securePort:wn,maxHeaderSize:cr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:mt.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Aa.optional(),mt.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:cr.min(1).optional(),host:mt.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:cr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:mt.optional(),threshold:cr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:cr.optional(),maxFreeSpaceToRetain:cr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(v5,"configValidator");function U5(e){return av||ov.existsSync(e)?null:`Specified path ${e} does not exist.`}o(U5,"doesPathExist");function x5(e,t){ge.assert(e,mt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=U5(e);if(r)return t.message(r)}o(x5,"validatePath");function B5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(O5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L5):e}o(B5,"validateRotationMaxSize");function F5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(P5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(D5):e}o(F5,"validateRotationInterval");function k5(e,t){let r=t.state.path.join("."),n=I5.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||nv();return i=Math.round(Math.min(i,nv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),w5.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(k5,"setDefaultThreads");function Zf(e,t){let r=t.state.path.join(".");if(!yb.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(yb.isEmpty(Li))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Gc.join(Li,C5);case"logging.root":return Gc.join(Li,iv);case"clustering.leafServer.streams.path":return Gc.join(Li,"clustering","leaf");case"storage.path":let n=Gc.join(Li,sv.LEGACY_DATABASES_DIR_NAME);return ov.existsSync(n)?n:Gc.join(Li,sv.DATABASES_DIR_NAME);case"logging.rotation.path":return Gc.join(Li,iv);case"operationsApi.network.domainSocket":return r==null?null:Gc.join(Li,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(Zf,"setDefaultRoot");function H5(e){let t=ge.object({routes:JE});return N5.validateBySchema({routes:e},t)}o(H5,"routesValidator")});var Gt=v((Xwe,uv)=>{"use strict";var G5="__dbis__",q5="__txns__",$5="__environment_name__",V5="__dbi_defintion__",K5={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"},Y5=["__createdtime__","__updatedtime__"],W5="\uFFFF",lv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},z5=Object.values(lv);uv.exports={AUDIT_STORE_NAME:q5,INTERNAL_DBIS_NAME:G5,DBI_DEFINITION_NAME:V5,SEARCH_TYPES:K5,TIMESTAMP_NAMES:Y5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:$5,TRANSACTIONS_DBI_NAMES_ENUM:lv,TRANSACTIONS_DBIS:z5,OVERFLOW_MARKER:W5}});var Kr=v((Zwe,Sv)=>{"use strict";var dv=(H(),M(W)),fv=Gt(),mv={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},pv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),hv={500:pv("There was an error processing your request."),400:"Invalid request"},j5=hv[mv.INTERNAL_SERVER_ERROR],Q5={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")},J5={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},X5={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"},Z5={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${fv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${fv.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},e6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${dv.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 ${dv.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"},Ev={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"},t6={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},r6={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},n6={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"},s6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},i6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},_v={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")},gv={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")},o6={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},a6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},c6={...Ev,...X5,...Q5,...t6,...r6,...n6,...s6,...i6,...e6,..._v,...gv,...o6,...a6,...J5};Sv.exports={CHECK_LOGS_WRAPPER:pv,HDB_ERROR_MSGS:c6,DEFAULT_ERROR_MSGS:hv,DEFAULT_ERROR_RESP:j5,HTTP_STATUS_CODES:mv,LMDB_ERRORS_ENUM:Z5,AUTHENTICATION_ERROR_MSGS:Ev,VALIDATION_ERROR_MSGS:_v,ITC_ERRORS:gv}});var Ee=v((tNe,Rv)=>{"use strict";var _u=Kr(),l6=(H(),M(W)),XE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Tv),this.statusCode=n||_u.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(_u.DEFAULT_ERROR_MSGS[n]?_u.DEFAULT_ERROR_MSGS[n]:_u.DEFAULT_ERROR_MSGS[_u.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&&z()[s](i)}},bb=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}},Ab=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Tv(e,t,r,n=l6.LOG_LEVELS.ERROR,s=null,i=!1){if(yv(e))return e;let a=new XE(e,t,r,n,s);return i&&delete a.stack,a}o(Tv,"handleHDBError");function gu(e){this.message=e}o(gu,"Violation");gu.prototype=Object.create(Error.prototype);gu.prototype.constructor=gu;gu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var Ib=class extends gu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function yv(e){return e.__proto__.constructor.name===XE.name}o(yv,"isHDBError");Rv.exports={isHDBError:yv,handleHDBError:Tv,ClientError:bb,ServerError:Ab,AccessViolation:Ib,Violation:gu,hdbErrors:_u}});var em={};be(em,{server:()=>Me});var bv,Me,xr=oe(()=>{bv=w(ti()),Me={};(0,bv._assignPackageExport)("server",Me)});var pt=v(Zt=>{"use strict";var bs=(H(),M(W)),Ar=ce(),lr=z(),{configValidator:u6,routesValidator:Av}=Rb(),cn=require("fs-extra"),wv=require("yaml"),zn=require("path"),d6=require("is-number"),Nv=require("properties-reader"),f6=require("lodash"),{handleHDBError:m6}=Ee(),{HTTP_STATUS_CODES:p6,HDB_ERROR_MSGS:Su}=Kr(),{server:h6}=(xr(),M(em)),{PACKAGE_ROOT:Cv}=Rt(),{DATABASES_PARAM_CONFIG:tm,CONFIG_PARAMS:Wn,CONFIG_PARAM_MAP:ri}=bs,E6="Unable to get config value because config is uninitialized",_6="Config successfully initialized",g6="Error backing up config file",S6="Empty parameter sent to getConfigValue",Ov=zn.join(Cv,"config","yaml",bs.HDB_DEFAULT_CONFIG_FILE),T6=zn.join(Cv,"config","yaml","defaultNatsConfig.yaml"),y6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Iv={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"},ZE,Mt,e_;Zt.createConfigFile=R6;Zt.getDefaultConfig=b6;Zt.getConfigValue=Lv;Zt.initConfig=t_;Zt.flattenConfig=Tu;Zt.updateConfigValue=Dv;Zt.updateConfigObject=I6;Zt.getConfiguration=C6;Zt.setConfiguration=O6;Zt.readConfigFile=Ob;Zt.getClusteringRoutes=P6;Zt.initOldConfig=Mv;Zt.getConfigFromFile=L6;Zt.getConfigFilePath=qc;Zt.addConfig=D6;Zt.deleteConfigFromFile=M6;Zt.getConfigObj=v6;Zt.resolvePath=wb;Zt.getFlatConfigObj=U6;function wb(e){if(e?.startsWith("~/"))return zn.join(Ar.getHomeDir(),e.slice(1));let t=fe();try{return zn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(wb,"resolvePath");function R6(e,t=!1){let r=Ia(Ov);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=wv.parseDocument(cn.readFileSync(T6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}ZE=Tu(r.toJSON());let n;for(let c in e){let l=ri[c.toLowerCase()];if(l===Wn.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=Nb(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){lr.error(f)}}}n&&Pv(r,n),Cb(r,t);let s=r.toJSON();Mt=Tu(s);let i=r.getIn(["rootPath"]),a=zn.join(i,bs.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)),lr.trace(`Config file written to ${a}`)}o(R6,"createConfigFile");function Pv(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(tm.TABLES))for(let i in n[s][tm.TABLES])for(let a in n[s][tm.TABLES][i]){let c=n[s][tm.TABLES][i][a],l=[Wn.DATABASES,s,tm.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=[Wn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){lr.error("Error parsing schemas CLI/env config arguments",n)}}o(Pv,"setSchemasConfig");function b6(e){if(ZE===void 0){let r=Ia(Ov);ZE=Tu(r.toJSON())}let t=ri[e.toLowerCase()];if(t!==void 0)return ZE[t.toLowerCase()]}o(b6,"getDefaultConfig");function Lv(e){if(e==null){lr.info(S6);return}if(Mt===void 0){lr.trace(E6);return}let t=ri[e.toLowerCase()];if(t!==void 0)return Mt[t.toLowerCase()]}o(Lv,"getConfigValue");function qc(e=Ar.getPropsFilePath()){let t=Ar.getEnvCliRootPath();if(t)return wb(zn.join(t,bs.HDB_CONFIG_FILE));let r=Nv(e);return wb(r.get(bs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(qc,"getConfigFilePath");function t_(e=!1){if(Mt===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 lr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=qc(t),n;if(r.includes("config/settings.js"))try{Mv(r);return}catch(i){if(i.code!==bs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ia(r)}catch(i){if(i.code===bs.NODE_ERROR_CODES.ENOENT){lr.trace(`HarperDB config file not found at ${r}.
4
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw lr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}A6(n,r),Cb(n);let s=n.toJSON();if(h6.config=s,Mt=Tu(s),Mt.logging_rotation_rotate)for(let i in Iv)Mt[i]&&lr.error(`Config ${Iv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lr.trace(_6)}}o(t_,"initConfig");function A6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],zn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],zn.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(lr.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(A6,"checkForUpdatedConfig");function Cb(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 Su.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 Su.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=u6(r,t);if(n.error)throw Su.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(Cb,"validateConfig");function I6(e,t){Mt===void 0&&(Mt={});let r=ri[e.toLowerCase()];if(r===void 0){lr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Mt[r.toLowerCase()]=t}o(I6,"updateConfigObject");function Dv(e,t,r=void 0,n=!1,s=!1,i=!1){Mt===void 0&&t_();let a=Lv(ri.hdb_root),c=zn.join(a,bs.HDB_CONFIG_FILE),l=Ia(c),u;if(r&&Mt){let m=!1;for(let p in r)if(r[p]!=Mt[p.toLowerCase()]){m=!0;break}if(!m){lr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Wn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ri[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=Nb(m,t);l.setIn([...p],h)}else for(let m in r){let p=ri[m.toLowerCase()];if(p===Wn.HTTP_SECUREPORT&&r[m]===Mt[Wn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===Wn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Mt[Wn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===Wn.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=bs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=Nb(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(b){lr.error(b)}}}u&&Pv(l,u),Cb(l);let d=l.getIn(["rootPath"]),f=zn.join(d,bs.HDB_CONFIG_FILE);if(n===!0&&w6(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(Mt=Tu(l.toJSON())),lr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(Dv,"updateConfigValue");function w6(e,t){try{let r=zn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${bs.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),lr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lr.error(g6),lr.error(r)}}o(w6,"backupConfigFile");var N6=["databases"];function Tu(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}),e_=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])&&!N6.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;!Wn[l.toUpperCase()]&&ri[l]&&(s[ri[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Tu,"flattenConfig");function Nb(e,t){if(e===Wn.CLUSTERING_NODENAME||e===Wn.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(d6(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(Nb,"castConfigValue");function C6(){let e=Ar.getPropsFilePath(),t=qc(e);return Ia(t).toJSON()}o(C6,"getConfiguration");async function O6(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return Dv(void 0,void 0,s,!0),y6}catch(i){throw typeof i=="string"||i instanceof String?m6(i,i,p6.BAD_REQUEST,void 0,void 0,!0):i}}o(O6,"setConfiguration");function Ob(){let e=Ar.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ar.noBootFile())throw lr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=qc(e);return Ia(t).toJSON()}o(Ob,"readConfigFile");function Ia(e){return wv.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ia,"parseYamlDoc");function P6(){let e=Ob(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ar.isEmptyOrZeroLength(t)?[]:t;let r=Av(t);if(r)throw Su.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ar.isEmptyOrZeroLength(n)?[]:n;let s=Av(n);if(s)throw Su.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 Su.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(P6,"getClusteringRoutes");function Mv(e){let t=Nv(e);Mt={};for(let r in ri){let n=t.get(r.toUpperCase());if(Ar.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ri[r].toLowerCase();s===Wn.LOGGING_ROOT?Mt[s]=zn.dirname(n):Mt[s]=n}return Mt}o(Mv,"initOldConfig");function L6(e){let t=Ob();return f6.get(t,e.replaceAll("_","."))}o(L6,"getConfigFromFile");async function D6(e,t){let r=Ia(qc());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(qc(),String(r))}o(D6,"addConfig");function M6(e){let t=qc(Ar.getPropsFilePath()),r=Ia(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=zn.join(n,bs.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(M6,"deleteConfigFromFile");function v6(){return e_||(t_(),e_)}o(v6,"getConfigObj");function U6(){return Mt||t_(),Mt}o(U6,"getFlatConfigObj")});var fe=v((Bv,Fv)=>{"use strict";var Pb=require("fs-extra"),$c=require("path"),vv=require("os"),x6=require("properties-reader"),nm=z(),rm=ce(),xe=(H(),M(W)),r_=pt(),B6="Error initializing environment manager",n_="BOOT_PROPS_FILE_PATH",Uv=!1,F6={[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},So={};Object.assign(Bv,Fv.exports={BOOT_PROPS_FILE_PATH:n_,getHdbBasePath:k6,setHdbBasePath:H6,get:xv,initSync:q6,setProperty:Ze,initTestEnvironment:$6});function k6(){return So[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(k6,"getHdbBasePath");function H6(e){So[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(H6,"setHdbBasePath");function xv(e){let t=r_.getConfigValue(e);return t===void 0?So[e]:t}o(xv,"get");function Ze(e,t){F6[e]&&(So[e]=t),r_.updateConfigObject(e,t)}o(Ze,"setProperty");function G6(){let e;try{e=rm.getPropsFilePath(),Pb.accessSync(e,Pb.constants.F_OK|Pb.constants.R_OK),Uv=!0;let t=x6(e);return So[xe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(xe.HDB_SETTINGS_NAMES.INSTALL_USER),So[xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),So[n_]=e,!0}catch{return nm.trace(`Environment manager found no properties file at ${e}`),!1}}o(G6,"doesPropFileExist");function q6(e=!1){try{(Uv||G6()||rm.noBootFile()||e)&&(r_.initConfig(e),So[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=r_.getConfigValue(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){nm.error(B6),nm.error(t),console.error(t),process.exit(1)}}o(q6,"initSync");function $6(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=$c.join(__dirname,"../../","unitTests");So[n_]=$c.join(l,"hdb_boot_properties.file"),Ze(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,$c.join(l,"settings.test")),Ze(xe.HDB_SETTINGS_NAMES.INSTALL_USER,vv.userInfo()?vv.userInfo().username:void 0),Ze(xe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,$c.join(l,"envDir","log")),Ze(xe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(xe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(xe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,$c.join(l,"envDir")),Ze(xe.CONFIG_PARAMS.STORAGE_PATH,$c.join(l,"envDir")),s&&(Ze(xe.CONFIG_PARAMS.HTTP_SECUREPORT,xv(xe.CONFIG_PARAMS.HTTP_PORT)),Ze(xe.CONFIG_PARAMS.HTTP_PORT,null)),Ze(xe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(xe.CONFIG_PARAMS.HTTP_PORT,9926),Ze(xe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(xe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(xe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rm.isEmpty(i)?!1:i),Ze(xe.CONFIG_PARAMS.HTTP_CORS,rm.isEmpty(i)?!1:i),Ze(xe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(xe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,$c.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(xe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rm.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(xe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(xe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(xe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(xe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(xe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(xe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(xe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${n_}. Please check your boot props and settings files`;nm.fatal(r),nm.error(t)}}o($6,"initTestEnvironment")});var gt=v((oNe,Kv)=>{"use strict";var cm=(H(),M(W)),V6=ce(),Nn=fe(),lm=require("path"),K6=require("minimist"),kv=require("fs-extra"),Hv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:wa,DATABASES_PARAM_CONFIG:sm,SYSTEM_SCHEMA_NAME:s_}=cm,im,om,am;function Gv(){if(im!==void 0)return im;if(Nn.getHdbBasePath()!==void 0)return im=Nn.get(wa.STORAGE_PATH)||lm.join(Nn.getHdbBasePath(),cm.DATABASES_DIR_NAME),im}o(Gv,"getBaseSchemaPath");function qv(){if(om!==void 0)return om;if(Nn.getHdbBasePath()!==void 0)return om=Vv(s_),om}o(qv,"getSystemSchemaPath");function $v(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(cm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||lm.join(Nn.getHdbBasePath(),cm.TRANSACTIONS_DIR_NAME),am}o($v,"getTransactionAuditStoreBasePath");function Y6(e,t){let r=Nn.get(wa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||lm.join($v(),e.toString())}o(Y6,"getTransactionAuditStorePath");function Vv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(cm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||lm.join(Gv(),e)}o(Vv,"getSchemaPath");function W6(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,K6(process.argv));let n=r[wa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!V6.isObject(n))throw a;i=n}for(let a of i){let c=a[s_];if(!c)continue;let l=Nn.get(wa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[sm.PATH];if(u)return Hv.set(l,[s_,sm.TABLES,t,sm.PATH],u),Nn.setProperty(wa.DATABASES,l),u;let d=c?.[sm.PATH];if(d)return Hv.set(l,[s_,sm.PATH],d),Nn.setProperty(wa.DATABASES,l),d}}let s=r[wa.STORAGE_PATH.toUpperCase()];if(s){if(!kv.pathExistsSync(s))throw new Error(s+" does not exist");let i=lm.join(s,e);return kv.mkdirsSync(i),Nn.setProperty(wa.STORAGE_PATH,s),i}return qv()}o(W6,"initSystemSchemaPaths");function z6(){im=void 0,om=void 0,am=void 0}o(z6,"resetPaths");Kv.exports={getBaseSchemaPath:Gv,getSystemSchemaPath:qv,getTransactionAuditStorePath:Y6,getTransactionAuditStoreBasePath:$v,getSchemaPath:Vv,initSystemSchemaPaths:W6,resetPaths:z6}});var Cn=v((uNe,Qv)=>{"use strict";var j6=Kr().LMDB_ERRORS_ENUM,cNe=require("lmdb"),Q6=Gt(),lNe=require("buffer").Buffer,{OVERFLOW_MARKER:Yv,MAX_SEARCH_KEY_LENGTH:i_}=Q6,Wv=["number","string","symbol","boolean","bigint"];function J6(e){if(e=e?.primaryStore||e,!e)throw new Error(j6.ENV_REQUIRED)}o(J6,"validateEnv");function X6(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(X6,"stringifyData");function Z6(e){return e instanceof Date?e.valueOf():e}o(Z6,"convertKeyValueToWrite");function e8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Wv.includes(typeof e))return e.length>i_?[e.slice(0,i_)+Yv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Wv.includes(typeof i))i.length>i_?r.push(i.slice(0,i_)+Yv):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(e8,"getIndexedValues");var o_=0,zv=0;function jv(){zv=Date.now()-performance.now()}o(jv,"adjustStartTime");jv();var t8=6e4;setInterval(jv,t8).unref();function r8(){let e=performance.now()+zv;return e>o_?(o_=e,e):(o_+=488e-6,o_)}o(r8,"getNextMonotonicTime");Qv.exports={validateEnv:J6,stringifyData:X6,convertKeyValueToWrite:Z6,getNextMonotonicTime:r8,getIndexedValues:e8}});var um=v((fNe,Jv)=>{"use strict";var n8=(H(),M(W)).OPERATIONS_ENUM,Lb=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=n8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Jv.exports=Lb});var dm=v((hNe,tU)=>{"use strict";var pNe=um(),a_=(H(),M(W)),Db=ce(),Xv=z(),s8=require("uuid"),{handleHDBError:c_,hdbErrors:i8}=Ee(),{HDB_ERROR_MSGS:l_,HTTP_STATUS_CODES:u_}=i8;tU.exports=Zv;function Zv(e,t,r){for(let s=0;s<t.length;s++)eU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];o8(i,r,e.operation)}}o(Zv,"processRows");Zv.validateAttribute=eU;function eU(e){if(Buffer.byteLength(String(e))>a_.INSERT_MAX_CHARACTER_SIZE)throw c_(new Error,l_.ATTR_NAME_LENGTH_ERR(e),u_.BAD_REQUEST,void 0,void 0,!0);if(Db.isEmptyOrZeroLength(e)||Db.isEmpty(e.trim()))throw c_(new Error,l_.ATTR_NAME_NULLISH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}o(eU,"validateAttribute");function o8(e,t,r){if(!e.hasOwnProperty(t)||Db.isEmptyOrZeroLength(e[t])){if(r===a_.OPERATIONS_ENUM.INSERT||r===a_.OPERATIONS_ENUM.UPSERT){e[t]=s8.v4();return}throw Xv.error("Update transaction aborted due to record with no hash value:",e),c_(new Error,l_.RECORD_MISSING_HASH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>a_.INSERT_MAX_CHARACTER_SIZE)throw Xv.error(e),c_(new Error,l_.HASH_VAL_LENGTH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}o(o8,"validateHash")});function cU(e){vb=e}function u8(){l8=setInterval(function(){for(let e of Mb)if(e.stale){let t=e.getContext()?.url;iU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},c8).unref()}var Ub,sU,iU,oU,aU,rU,Mb,a8,To,fm,nU,vb,yo,d_,c8,l8,mm=oe(()=>{Ub=w(Cn()),sU=w(Ee()),iU=w(z()),oU=w(fe());H();aU=w(ce()),rU=100,Mb=new Set,a8=(0,aU.convertToMS)(oU.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,To={CLOSED:0,OPEN:1,LINGERING:2};o(cU,"replicationConfirmation");yo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=To.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===To.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Mb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Mb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(fm&&!this.overloadChecked&&performance.now()-nU>a8)throw new sU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===To.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===To.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,Ub.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let b=g[p===0?"before":"beforeIntermediate"];if(b){let S=b();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?To.LINGERING:To.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)<rU>>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 fm||(fm=s,nU=performance.now(),fm.then(()=>{fm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];vb&&p&&i.push(vb(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+rU/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=To.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},d_=class extends yo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Ub.getNextMonotonicTime)())}getReadTxn(){}},c8=3e4;o(u8,"startMonitoringTxns");u8()});var lU,jn,xb,yu=oe(()=>{lU=require("events"),jn=class extends lU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new xb;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)}},xb=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 St(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===To.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 yo;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 uU,Na=oe(()=>{uU=w(ti());mm();o(St,"transaction");(0,uU._assignPackageExport)("transaction",St);St.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};St.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 Fb={};be(Fb,{add:()=>f_,applyReverse:()=>dU,getRecordAtTime:()=>Bb,rebuildUpdateBefore:()=>m_});function f_(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 m_(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,f_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function dU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=d8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=fU}}function Bb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=vt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":dU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===fU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=vt(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 d8,fU,p_=oe(()=>{Ro();o(f_,"add");f_.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)};d8={add:f_};o(m_,"rebuildUpdateBefore");o(dU,"applyReverse");fU={};o(Bb,"getRecordAtTime")});var Qn=v(E_=>{var h_=z();for(let e of["trace","debug","info","warn","error","fatal","notify"])h_.logsAtLevel(e)&&(E_[e]=h_[e]);E_.loggerWithTag=e=>h_.loggerWithTag(e,!0);E_.setLogLevel=h_.setLogLevel});var SU={};be(SU,{parse:()=>Gb,streamAsJSON:()=>hm,stringify:()=>Vc});function hm(e){return new kb({value:e})}function mU(e){return console.error(e),JSON.stringify(pm(e))}function pU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===_U)return gU(e);if(t.resolution)return t.resolution.then(()=>Vc(e));throw t}}function gU(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+=gU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Gb(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),p8.test(e)?f8.parse(e):JSON.parse(e)):null}var hU,Hb,EU,f8,m8,_U,pm,kb,p8,qb=oe(()=>{hU=require("stream"),Hb=w(z()),EU=w(require("json-bigint-fixes")),f8=(0,EU.default)({useNativeBigInt:!0}),m8=1e4,_U={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw _U};({errorToString:pm}=Hb);o(hm,"streamAsJSON");kb=class extends hU.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=>(Hb.warn("Error serializing in stream",c),a={done:!1,value:{error:pm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:pm(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),mU)}catch(s){yield mU(s)}else yield Vc(t)}else yield Vc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);pU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(pm(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>m8?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 pU(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(pm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(mU,"handleError");o(pU,"when");o(Vc,"stringify");o(gU,"jsStringify");p8=/[[,:]\s*-?\d{16,}/;o(Gb,"parse")});var OU={};be(OU,{asyncSerialization:()=>Wb,contentTypes:()=>Yb,findBestSerializer:()=>g_,getDeserializer:()=>wo,hasAsyncSerialization:()=>zb,registerContentHandlers:()=>gm,serialize:()=>Sm,serializeMessage:()=>Io,toCsvStream:()=>__});function h8(e){try{return e?.[0]===123?Kb(e):e}catch{return e}}function gm(e){e.register(E8,{serializers:[{regex:/^application\/json$/,serializer:hm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(_m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,Di.encodeIter)(t,_m)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),__(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,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function g_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new RU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function Sm(e,t,r){let n=yU&&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 As)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=g_(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}),Vb.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,Ao.createBrotliCompress)({params:{[Ao.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ao.constants.BROTLI_MODE_TEXT:Ao.constants.BROTLI_MODE_GENERIC,[Ao.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>yU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,Ao.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Io(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;bo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=g_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Em(e);return bo?.length>0?(bo.length===1?bo[0]:Promise.all(bo)).then(()=>Io(e,t,!0)):n}finally{bo=void 0}}function Wb(e){if(bo)bo.push(e);else throw new Error("Unable to serialize asynchronously")}function zb(){return!!bo}function _8(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 S8(e){return g8.includes(e)}function T8(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 wo(e="",t=!1){let r=T8(e),n=r.type&&ln.get(r.type)?.deserialize||y8(r);return t?s=>_8(s).then(n):n}function y8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!S8(e.parameters.charset)&&Vb.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 Kb(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function R8(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 __(e,t){let r=Yc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new IU.Transform(n,s);return r.pipe(i)}var Di,Kc,Ao,RU,Yc,bU,$b,AU,Vb,IU,wU,NU,Em,Kb,_m,ln,Yb,TU,CU,E8,yU,bo,g8,No=oe(()=>{qb();Di=require("msgpackr"),Kc=require("cbor-x"),Ao=require("zlib"),RU=w(Ee()),Yc=w(require("stream"));xr();bU=w(ti()),$b=w(fe());H();AU=w(require("yaml")),Vb=w(Qn());Is();IU=require("json2csv"),wU=w(require("fastify-plugin")),NU=$b.default.get(U.SERIALIZATION_BIGINT)!==!1,Em=NU?Vc:JSON.stringify,Kb=NU?Gb:JSON.parse,_m={useRecords:!1,useToJSON:!0},ln=new Map,Yb=ln;Me.contentTypes=Yb;(0,bU._assignPackageExport)("contentTypes",Yb);ln.set("application/json",{serializeStream:hm,serialize:Em,deserialize(e){return Kb(e)},q:.8});TU=new Kc.Encoder(_m);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(_m).end(e)},serialize:TU.encode,deserialize:TU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,Di.encodeIter)(e,_m)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),__(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]),__(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return AU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(R8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
5
5
  `),e.data){let r=e.data;typeof r=="object"&&(r=Em(r)),t+="data: "+r+`
6
6
  `}return e.id&&(t+="id: "+e.id+`
7
7
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -10,15 +10,15 @@
10
10
 
11
11
  `:`data: ${e}
12
12
 
13
- `},"serialize"),compressible:!1,q:.8});ln.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});OU={type:"application/json",serializeStream:hm,serialize:Em,deserialize:E8,q:.5};ln.set("*/*",OU);ln.set("",OU);o(E8,"tryJSONParse");o(gm,"registerContentHandlers");_8=(0,NU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=S_(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(S_,"findBestSerializer");RU=$b.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(Sm,"serialize");o(Io,"serializeMessage");o(Wb,"asyncSerialization");o(zb,"hasAsyncSerialization");o(g8,"streamToBuffer");S8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(T8,"isBufferEncoding");o(y8,"parseContentType");o(wo,"getDeserializer");o(R8,"deserializerUnknownType");o(b8,"transformIterable");o(g_,"toCsvStream")});var tA={};be(tA,{Blob:()=>As,blobsWereEncoded:()=>Wc,databasePaths:()=>Qb,decodeBlobsWithWrites:()=>N_,decodeFromDatabase:()=>Po,decodeWithBlobCallback:()=>wm,deleteBlob:()=>A_,deleteBlobsInObject:()=>Ca,deleteRootBlobPathsForDB:()=>Zb,encodeBlobsAsBuffers:()=>v8,encodeBlobsWithFilePath:()=>w_,findBlobsInObject:()=>bu,getFileId:()=>I_,getFilePathForBlob:()=>kU,getRootBlobPathsForDB:()=>Im,isSaving:()=>C8,saveBlob:()=>Am,setDeletionDelay:()=>N8,startPreCommitBlobsForRecord:()=>eA});function BU(){}function A_(e){let t=kU(e);t&&setTimeout(()=>{(0,tt.unlink)(t,r=>{r&&Mi.default.debug?.("Error trying to remove blob file",r)})},FU)}function N8(e){FU=e}function Am(e){let t=un.get(e);if(!t)t={storageIndex:0,fileId:null,store:On},un.set(e,t);else{if(t.fileId)return t;t.store=On}return P8(t),t.source?jb(e,t.source,t):t.contentBuffer?O8(e,t):jb(e,ym.Readable.from(e.stream()),t),t}function jb(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,tt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(I8),p=(0,R_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(A8),t.pipe(f)),t.on("error",E);function h(g){let b=BigInt(g),S=new Uint8Array(Ir),R=new DataView(S.buffer);return b|=BigInt(a?Xb:xU)<<48n,R.setBigInt64(0,b),S}o(h,"createHeader");function E(g){i.unlock(d,0);let b=f.fd;g?(b&&(0,tt.close)(b),u(g)):c?(0,tt.fdatasync)(b,S=>{S&&u(S),l(),(0,tt.close)(b)}):(l(),(0,tt.close)(b))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-Ir;e.size=g,(0,tt.write)(f.fd,h(g),0,Ir,0,E)}})}),e}function I_(e){return un.get(e)?.fileId}function C8(e){return un.get(e)?.saving}function kU(e){let t=un.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=Qb.get(e);if(!t){if(!e.databaseName)return Mi.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,b_.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Oo.join)(n,e.databaseName)):t=[(0,Oo.join)((0,b_.getHdbBasePath)(),"blobs",e.databaseName)],Qb.set(e,t)}return t}async function Zb(e){let t=Im(e);t&&await Promise.all(t.map(r=>HU(r)))}async function HU(e){if((0,tt.existsSync)(e)){for(let t of await(0,ws.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await HU((0,Oo.join)(e,t.name));else try{await(0,ws.unlink)((0,Oo.join)(e,t.name))}catch(r){Mi.default.warn?.("Error deleting file",r)}try{await(0,ws.rmdir)(e)}catch(t){Mi.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Oo.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 O8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<UU))return e.size=n,jb(e,ym.Readable.from([r]),t)}function P8(e){let t=Im(e.store),r=L8(),n=t?.length>1?D8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Oo.dirname)(i);(0,tt.existsSync)(a)||(0,Jb.ensureDirSync)(a),e.filePath=i}function L8(){let e=vU.get(On);if(!e){let t=0,r=Im(On);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,tt.existsSync)(n))for(let c of(0,tt.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,Oo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(On.getUserSharedBuffer("blob-file-id",e.buffer)),vU.set(On,e)}return Number(Atomics.add(e,0,1n))}function D8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(y_);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,M8(e)),e.frequencyTable[t%y_]}async function M8(e){if(!ws.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,ws.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,Jb.ensureDirSync)(s),a=await(0,ws.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(y_),n=t.map(s=>1/s);for(let s=0;s<y_;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 w_(e,t,r){Ru=t,On=r,Wc=!1;try{return e()}finally{Ru=void 0,On=void 0}}function v8(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function N_(e,t,r){try{Yr=[],Co=r,On=t,e()}catch(s){throw Co=void 0,Yr=void 0,s}Co=void 0;let n=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,n}function wm(e,t,r){On=r;try{return Co=t,e()}finally{Co=void 0}}function Po(e,t){return On=t,e()}function Ca(e){bu(e,t=>{A_(t)})}function bu(e,t){if(e instanceof As)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&bu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&bu(e[r],t)}}function eA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Rm&&s.saveBeforeCommit){On=t;let i=Am(s).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function x8(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var vi,ws,tt,R_,ym,Jb,b_,Oo,Mi,UU,Ir,xU,Xb,LU,A8,I8,DU,un,Co,As,Ru,Yr,On,Wc,Tm,T_,w8,MU,Rm,FU,Qb,vU,y_,U8,Is=oe(()=>{vi=require("msgpackr"),ws=require("node:fs/promises"),tt=require("node:fs"),R_=require("node:zlib"),ym=require("node:stream"),Jb=require("fs-extra"),b_=w(fe());H();Oo=require("path"),Mi=w(Qn());No();UU=8192,Ir=8,xU=0,Xb=1,LU=255,A8=new Uint8Array([0,xU,255,255,255,255,255,255]),I8=new Uint8Array([0,Xb,255,255,255,255,255,255]),DU=0xffffffffffff,un=new WeakMap,As=global.Blob||x8(),Wc=!1,Tm=new Uint8Array(8),T_=new DataView(Tm.buffer),w8=6e4;o(BU,"InstanceOfBlobWithNoConstructor");BU.prototype=As.prototype;MU=!1,Rm=class e extends BU{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=un.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):(zb()&&Wb(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=un.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=bm(t),a,c=o(async()=>{let l,u=Ir;try{if(l=await(0,ws.readFile)(i),l.length>=Ir){l.copy(Tm,0,0,Ir);let f=T_.getBigUint64(0);if(Number(f>>48n)===LU)throw new Error("Error in blob: "+buffer.subarray(Ir));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<DU&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===Xb?new Promise((f,m)=>{(0,R_.deflate)(l.subarray(Ir),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Ir))},"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=un.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((b,S)=>{(0,tt.open)(i,"r",(R,L)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Mi.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(b,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=L,b(L)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,b=100;return new Promise(o(function S(R,L){function O(j){(0,tt.close)(a),clearTimeout(d),u&&u.close(),L(j),p.#e?.forEach(k=>k(j))}o(O,"onError");let x=Buffer.allocUnsafe(262144);(0,tt.read)(a,x,0,x.length,c,(j,k,F)=>{if(l+=k,j)return O(j);if(c===0){if(k<Ir){b-- >0&&f!==!1?(h(),Mi.default.debug?.("File was empty, waiting for data to be written",i,b),setTimeout(()=>S(R,L),20).unref()):(Mi.default.debug?.("File was empty, throwing error",i,b),L(new Error(`Blob ${t.fileId} was empty`)));return}F.copy(Tm,0,0,Ir);let Q=T_.getBigUint64(0);if(Number(Q>>48n)===LU)return O(new Error("Error in blob: "+F.subarray(Ir)));if(g=Number(Q&0xffffffffffffn),g<DU&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);F=F.subarray(Ir,k),l-=Ir}else if(k===0){let Q=Buffer.allocUnsafe(8);return(0,tt.read)(a,Q,0,Ir,0,Y=>{if(Y)return O(Y);if(Tm.set(Q),g=Number(T_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},w8).unref():(u=(0,tt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,L))}),S(R,L)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,L));return}(0,tt.close)(a),E.close(),R()})}else F=F.subarray(0,k);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=k,S(R,L);s&&l>=s&&(l>s&&(F=F.subarray(0,s-c)),l=g=s),n&&n>c&&(F=F.subarray(n-c))}c+=k;try{E.enqueue(F)}catch(Q){return Mi.default.debug?.("Error enqueuing chunk",Q),R()}l===g&&((0,tt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,tt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=un.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};un.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)};un.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 MU||(MU=!0,Mi.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}},FU=500;o(A_,"deleteBlob");o(N8,"setDeletionDelay");global.createBlob=function(e,t){let r=new Rm(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(un.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof ym.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=ym.Readable.from(e);else throw new Error("Invalid source type");return r};o(Am,"saveBlob");o(jb,"writeBlobWithStream");o(I_,"getFileId");o(C8,"isSaving");o(kU,"getFilePathForBlob");Qb=new Map;o(Im,"getRootBlobPathsForDB");o(Zb,"deleteRootBlobPathsForDB");o(HU,"rimrafSteadily");o(bm,"getFilePath");o(O8,"writeBlobWithBuffer");o(P8,"generateFilePath");vU=new Map;o(L8,"getNextFileId");y_=128;o(D8,"getNextStorageIndex");o(M8,"createFrequencyTableForStoragePaths");o(w_,"encodeBlobsWithFilePath");o(v8,"encodeBlobsAsBuffers");o(N_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(Po,"decodeFromDatabase");o(Ca,"deleteBlobsInObject");o(bu,"findBlobsInObject");o(eA,"startPreCommitBlobsForRecord");U8=new vi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,vi.addExtension)({Class:As,type:11,unpack:o(function(e){let t=U8.unpack(e),r=new Rm;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(un.set(r,{storageIndex:t[1],fileId:t[2],store:On}),Co)return Co(r)??r;if(!On)throw new Error("No store specified, cannot load blob from storage")}else un.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=un.get(e);if(Ru!==void 0&&(Wc=!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<UU)return r.size=t.contentBuffer.length,(0,vi.pack)([r,t.contentBuffer])}if(Ru!==void 0){if(t=Am(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Ru,(0,vi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Co)return Co(e),(0,vi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,tt.readFileSync)(bm(t));if(n.length>=Ir&&(n.copy(Tm,0,0,Ir),Number(T_.getBigUint64(0)&0xffffffffffffn)===n.length-Ir))return Buffer.concat([(0,vi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,vi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(x8,"polyfillBlob")});var KU={};be(KU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>iA,setAvailableSpaceRatioGetter:()=>F8});function Nm(e,t,r){(r||(0,O_.getWorkerIndex)()===(0,O_.getWorkerCount)()-1)&&(C_.has(e)||C_.set(e,[]),C_.get(e).push({priority:0,handler:t}),sA||(sA=setTimeout(iA,qU).unref()))}async function iA(){for(let[e,t]of C_)try{let r=await VU(e),n=B8/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&&(nA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){nA.default.error?.("Error running storage reclamation handlers",r)}sA=setTimeout(iA,qU).unref()}function F8(e){VU=e??$U}var rA,O_,nA,P_,GU,C_,B8,qU,sA,$U,VU,L_=oe(()=>{rA=require("node:fs/promises"),O_=w(rt()),nA=w(Qn());H();P_=w(fe()),GU=w(ce());P_.default.initSync();C_=new Map,B8=P_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,qU=(0,GU.convertToMS)(P_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");$U=o(async e=>{if(rA.statfs){let t=await(0,rA.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"),VU=$U;o(iA,"runReclamationHandlers");o(F8,"setAvailableSpaceRatioGetter")});var sx={};be(sx,{ACTION_32_BIT:()=>x_,ACTION_64_BIT:()=>q8,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>jc,HAS_BLOBS:()=>Pn,HAS_CURRENT_RESIDENCY_ID:()=>Qc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Jc,REMOTE_SEQUENCE_UPDATE:()=>B_,createAuditEntry:()=>Xc,getLastRemoved:()=>H8,openAuditStore:()=>v_,readAuditEntry:()=>vt,removeAuditEntry:()=>U_,setAuditRetention:()=>G8,transactionKeyEncoder:()=>ex});function v_(e){let t=e.auditStore=e.openDB(oA.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(oA.AUDIT_STORE_NAME,Pm),WU(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=cA;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-aA/(1+i*i)})){try{m=U_(t,h,E)}catch(g){Au.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=k8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,aA/10):(WU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!YU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(YU=!0,Au.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 U_(e,t,r){let n=$8(r),s;if(n&Pn){s=vt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Po(()=>Ca(s.getValue(i)),i.rootStore)}if((n&15)===lA){s=s||vt(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 WU(e,t){uA[0]=t,e.put(Symbol.for("last-removed"),tx)}function H8(e){let t=e.get(Symbol.for("last-removed"));if(t)return tx.set(t),uA[0]}function G8(e,t=cA){aA=e,cA=t}function Xc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=rx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Oa.setFloat64(0,n):Ns.set(dA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}b(s),b(t),g(r),Oa.setFloat64(h,e),h+=8,l&Qc&&b(u),l&Jc&&b(d),l&Mm&&(Oa.setFloat64(h,f),h+=8),l&Dm&&b(nx[m]),i?g(i):Ns[h++]=0,l?Oa.setUint32(n?8:0,p|l|3221225472):Ns[n?8:0]=p;let E=Ns.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,zc.writeKey)(S,Ns,h);let L=h-R-1;L>127?L>16383?(Au.error("Key or username was too large for audit entry",S),h=R+1,Ns[R]=0):(Ns.copyWithin(R+2,R+1,h),Oa.setUint16(R,L|32768),h++):Ns[R]=L}function b(S){S<128?Ns[h++]=S:S<16384?(Oa.setUint16(h,S|32768),h+=2):S<1056964608?(Oa.setUint32(h,S|3221225472),h+=4):(Ns[h]=255,Oa.setUint32(h+1,S),h+=5)}}function $8(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 jc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function vt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Qc&&(m=n.readInt()),i&Jc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=nx[R]}l=n.readInt();let g=n.position,b=n.position+=l,S;return{type:rx[i&7],tableId:c,nodeId:a,get recordId(){return(0,zc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return b>g?(0,zc.readKey)(e,g,b):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(R,L,O){if(i&D_||i&Cm&&!L)return S||(S=Po(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return Bb(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(D_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Au.error("Reading audit entry error",n,e),{}}}var zc,M_,oA,Om,ZU,Au,Ns,Oa,ex,Pm,aA,k8,uA,tx,cA,YU,D_,Cm,zU,lA,jU,QU,JU,XU,x_,q8,B_,Qc,Jc,Dm,Mm,Pn,rx,nx,jc,Ro=oe(()=>{zc=require("ordered-binary"),M_=w(fe()),oA=w(Gt());H();Om=w(rt()),ZU=w(ce());Zc();Au=w(z());h_();Is();L_();(0,M_.initSync)();Ns=Buffer.alloc(2816),Oa=new DataView(Ns.buffer,Ns.byteOffset,2816),ex={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,zc.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,zc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:ex},aA=(0,ZU.convertToMS)((0,M_.get)(U.LOGGING_AUDITRETENTION))||86400*3,k8=1e3,uA=new Float64Array(1),tx=new Uint8Array(uA.buffer),cA=1e4,YU=!1;o(v_,"openAuditStore");o(U_,"removeAuditEntry");o(WU,"updateLastRemoved");o(H8,"getLastRemoved");o(G8,"setAuditRetention");D_=16,Cm=32,zU=1,lA=2,jU=3,QU=4,JU=5,XU=6,x_=14,q8=15,B_=11,Qc=512,Jc=1024,Dm=2048,Mm=4096,Pn=8192,rx={put:zU|D_,[zU]:"put",delete:lA,[lA]:"delete",message:jU|D_,[jU]:"message",invalidate:QU|Cm,[QU]:"invalidate",patch:JU|Cm,[JU]:"patch",relocate:XU,[XU]:"relocate"},nx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Xc,"createAuditEntry");o($8,"readAction");o(vt,"readAuditEntry");jc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function F_(){return fA||(fA=Je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),fA}function K8(e){return e=e.replace(V8,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 Y8(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 pA(e){let t=ix.default.createHash("shake128",{outputLength:4}),r;return(0,ox.isIPv6)(e)?r=K8(e):r=e.toLowerCase(),Y8(Uint8Array.from(t.update(r).digest()))}var ix,ox,mA,fA,V8,hA=oe(()=>{Ne();ix=w(require("crypto")),ox=require("node:net"),mA=new Map;o(F_,"getAnalyticsHostnameTable");V8=/(\d{1,3}\.){3}\d{1,3}$/;o(K8,"normalizeIPv6");o(Y8,"nodeHashToNumber");o(pA,"stableNodeId")});var Lo,EA=oe(()=>{Lo={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 fx={};be(fx,{profile:()=>dx,userCodeFolders:()=>_A});async function dx(){let e=(0,H_.pathToFileURL)(cx.PACKAGE_ROOT).toString(),t=new Map,r=100,n=ux/1e6,s=0,i=0;try{let{profile:u}=await Iu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)a(d);Ge(i*n,"cpu-usage","harper"),Ge(s*n,"cpu-usage","user")}catch(u){lx.error?.("analytics profiler error:",u)}finally{await Iu.post("Profiler.start")}function a(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=a(t.get(f));return l(u)?(s+=d,d>r&&Ge(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&Ge(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}o(a,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}o(c,"isHarperCode");function l(u){if(_A.some(d=>u.callFrame?.url.startsWith(d)))return!0}o(l,"isUserCode")}var ax,k_,cx,H_,lx,_A,ux,Iu,mx=oe(()=>{ax=require("node:inspector/promises");Jn();k_=w(fe());H();cx=w(bt()),H_=require("node:url"),lx=w(z()),_A=[(0,H_.pathToFileURL)((0,k_.getHdbBasePath)()).toString()];process.env.RUN_HDB_APP&&_A.push((0,H_.pathToFileURL)(process.env.RUN_HDB_APP).toString());ux=1e3,Iu=new ax.Session;Iu.connect();(async()=>{await Iu.post("Profiler.enable"),await Iu.post("Profiler.setSamplingInterval",{interval:ux}),await Iu.post("Profiler.start");let e=(0,k_.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{dx()},e).unref()})();o(dx,"profile")});var $_={};be($_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>yA,calculateCPUUtilization:()=>Lx,diffResourceUsage:()=>Dx,onAnalyticsAggregate:()=>AA,recordAction:()=>Ge,recordActionBinary:()=>zr,recordHostname:()=>RA,setAnalyticsEnabled:()=>j8});function j8(e){wx=e,clearTimeout(Um),Um=null}function Q8(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 J8(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},q_.set(e,a)}function Ge(e,t,r,n,s){if(!wx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=q_.get(i);a?Q8(e,a):J8(i,e,t,r,n,s),Um||X8()}function zr(e,t,r,n,s){Ge(!!e,t,r,n,s)}function Bm(e){Cx.push(e)}function X8(){gA||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-gA;gA=0;let t=[],r={time:Date.now(),period:e,threadId:el.threadId,metrics:t};for(let[s,i]of q_){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 Px){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Mx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:el.threadId,byThread:!0,...n});for(let s of Cx)s(t);q_=new Map,el.parentPort?el.parentPort.postMessage({type:Nx,report:r}):xx({report:r})},yA).unref()}async function RA(){let e=Me.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=pA(e);Wr.trace?.("recordHostname nodeId:",t);let r=F_();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 wu(e,t){let r=Me.hostname,n=mA.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=pA(r),Wr.trace?.("storeMetric new nodeId:",n),mA.set(r,n));let s={id:[(0,TA.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Lx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Dx(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 Z8(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:Lo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),wu(e,l),n+=c}return n}function px(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Ix.statSync(s.primaryStore.env.path).size,c=Z8(e,r,n),l=a-c,u={metric:Lo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};wu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function hx(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:Lo.STORAGE_VOLUME,database:r,...i};wu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function eZ(e,t=6e4){let r=bA(),n=vx(),s=new Promise(R=>{let L=performance.now();setImmediate(()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-L)+"ms"),L=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-L)+"ms"),R(O-L)})}),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:L}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!L)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:x}=L;for(let j of O||[]){let{path:k,method:F,type:Q,metric:Y,count:de,total:le,distribution:ee,threads:Re,...Ie}=j;de||(de=1);let $e=Y+(k?"-"+k:"");F!==void 0&&($e+="-"+F),Q!==void 0&&($e+="-"+Q);let ke=c.get($e);if(ke){if(ke.threads){let Jt=ke.threads[x];if(Jt)ke=Jt;else{ke.threads[x]={...Ie};continue}}ke.count||(ke.count=1);let yr=ke.count;for(let Jt in Ie){let kt=Ie[Jt];typeof kt=="number"&&(ke[Jt]=(ke[Jt]*yr+kt*de)/(yr+de))}ke.count+=de,le>=0&&(ke.total+=le,ke.ratio=ke.total/ke.count)}else ke={period:t,...j},delete ke.distribution,c.set($e,ke),ke.byThread&&(ke.threads=[],ke.threads[x]={...Ie},u.push(ke));if(ee){ee=ee.map(Jt=>typeof Jt=="number"?{value:Jt,count:1}:Jt);let yr=l.get($e);yr?yr.push(...ee):l.set($e,ee)}}await Mx()}for(let R of u){let{path:L,method:O,type:x,metric:j,count:k,total:F,distribution:Q,threads:Y,...de}=R;Y=Y.filter(le=>le);for(let le in de){if(typeof R[le]!="number")continue;let ee=0;for(let Re of Y){let Ie=Re[le];typeof Ie=="number"&&(ee+=Ie)}R[le]=ee}R.count=Y.length,delete R.threads,delete R.byThread}for(let[R,L]of l){let O=c.get(R);L.sort((Jt,kt)=>Jt.value>kt.value?1:-1);let x=O.count-1,j=[],k=0,F=0,Q;for(let Jt of Px){let kt=x*Jt;for(;k<kt;)Q=L[F++],k+=Q.count,F===1&&k--;let Xt=L[F>1?F-2:0];Q||(Q=L[0]),j.push(Q.value-(Q.value-Xt.value)*(k-kt)/Q.count)}let[Y,de,le,ee,Re,Ie,$e,ke,yr]=j;Object.assign(O,{p1:Y,p10:de,p25:le,median:ee,p75:Re,p90:Ie,p95:$e,p99:ke,p999:yr})}let f;for(let[,R]of c)R.time=d,wu(n,R),f=!0;if(f)for(let R of Ox)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:Lo.MAIN_THREAD_UTILIZATION,idle:p-Ex,active:h-_x,taskQueueLatency:await s,time:m,...process.memoryUsage()};wu(n,R)}Ex=p,_x=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=Dx(G_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=G_.time?m-G_.time:t,g.cpuUtilization=Lx(g,g.period);let b={metric:Lo.RESOURCE_USAGE,...g};wu(n,b),G_=E;let S=ot();px(n,S),px(n,{system:S.system}),hx(n,S),hx(n,{system:S.system})}async function gx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bA(){return Sx||(Sx=Je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function vx(){return Tx||(Tx=Je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function nZ(){Ux=!0;let e=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await eZ(yA,e),await gx(bA(),tZ),await gx(vx(),rZ)},Math.min(e/2,2147483647)).unref()}function xx(e,t){let r=e.report;r.threadId=t?.threadId||el.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(yx+=n.mean*n.count);r.totalBytesProcessed=yx,t&&(r.metrics.push({metric:Lo.UTILIZATION,...t.performance.eventLoopUtilization(Rx.get(t))}),Rx.set(t,t.performance.eventLoopUtilization())),r.id=(0,TA.getNextMonotonicTime)(),bA().primaryStore.put(r.id,r),Ux||nZ(),sZ&&(Bx=oZ(r))}async function oZ(e){if(await Bx,!Pa){let r=(0,vm.dirname)(W8());try{Pa=await(0,SA.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{Pa=await(0,SA.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await Pa.stat()).size;if(t>iZ){let r=Buffer.alloc(t);await Pa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Pa.write(r,{position:0}),await Pa.truncate(r.length),t=r.length}await Pa.write(JSON.stringify(e)+`
14
- `,t)}function AA(e){e&&Ox.push(e)}var el,bx,Ax,vm,SA,TA,xm,Ix,W8,z8,Wr,q_,wx,Um,gA,yA,Nx,Cx,Ox,Px,Ex,_x,G_,Mx,tZ,rZ,Sx,Tx,Ux,yx,Rx,sZ,Bx,Pa,iZ,Jn=oe(()=>{el=require("worker_threads"),bx=w(rt());Ne();Ax=w(z()),vm=require("path"),SA=require("fs/promises"),TA=w(Cn()),xm=w(fe());H();xr();Ix=w(require("node:fs"));hA();EA();({getLogFilePath:W8,forComponent:z8}=Ax.default);setTimeout(()=>{Promise.resolve().then(()=>mx())},1e3);Wr=z8("analytics").conditional;(0,xm.initSync)();q_=new Map,wx=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(j8,"setAnalyticsEnabled");o(Q8,"recordExistingAction");o(J8,"recordNewAction");o(Ge,"recordAction");Me.recordAnalytics=Ge;o(zr,"recordActionBinary");gA=0,yA=1e3,Nx="analytics-report",Cx=[],Ox=[];o(Bm,"addAnalyticsListener");Px=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(X8,"sendAnalytics");o(RA,"recordHostname");o(wu,"storeMetric");o(Lx,"calculateCPUUtilization");o(Dx,"diffResourceUsage");o(Z8,"storeTableSizeMetrics");o(px,"storeDBSizeMetrics");o(hx,"storeVolumeMetrics");o(eZ,"aggregation");Ex=0,_x=0,G_={userCPUTime:0,systemCPUTime:0},Mx=o(()=>new Promise(setImmediate),"rest");o(gx,"cleanup");tZ=36e5,rZ=31536e6;o(bA,"getRawAnalyticsTable");o(vx,"getAnalyticsTable");(0,bx.setChildListenerByType)(Nx,xx);o(nZ,"startScheduledTasks");yx=0,Rx=new Map,sZ=!1;o(xx,"recordAnalytics");iZ=1e6;o(oZ,"logAnalytics");o(AA,"onAnalyticsAggregate")});var qx={};be(qx,{ENTRY:()=>cZ,HAS_EXPIRATION:()=>Y_,HAS_RESIDENCY_ID:()=>PA,HAS_STRUCTURE_UPDATE:()=>W_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>aZ,METADATA:()=>Ou,NEW_TIMESTAMP_PLACEHOLDER:()=>kx,NO_TIMESTAMP:()=>IA,PENDING_LOCAL_TIME:()=>LA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>dA,RecordEncoder:()=>OA,TIMESTAMP_ASSIGN_LAST:()=>uZ,TIMESTAMP_ASSIGN_NEW:()=>Hx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Gx,TIMESTAMP_PLACEHOLDER:()=>V_,TIMESTAMP_RECORD_PREVIOUS:()=>wA,entryMap:()=>La,handleLocalTimeForGets:()=>z_,lastMetadata:()=>at,recordUpdater:()=>DA,removeEntry:()=>rl});function mZ(){return km[0]=km[0]^64,lZ.getFloat64(0)}function z_(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++,at=null;let l=r.call(this,a,c);return l&&(at&&(l.metadataFlags=at[Ou],l.localTime=at.localTime,l.residencyId=at.residencyId,l.size=at.size,at.expiresAt>=0&&(l.expiresAt=at.expiresAt),at=null),l.value&&La.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){at=null;let l=n.call(this,a,c);return at&&l&&(La.set(l,at),at=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=>(at&&(l.metadataFlags=at[Ou],l.localTime=at.localTime,l.residencyId=at.residencyId,at.expiresAt>=0&&(l.expiresAt=at.expiresAt),at=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,tl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<tl.length;u++){let d=tl[u].deref();(!d||d.isDone||d.isCommitted)&&tl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function DA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Cu=i?.localTime?wA|Gx:IA:Cu=l?i?.localTime?wA|16384:Hx|16384:IA;let p=u?.expiresAt;if(p>=0&&(c|=Y_),Fm=c,NA=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Cu>0},E,g=0;try{let b=i?.residencyId,S=u?.residencyId;S&&(CA=S,Fm|=PA,g|=Qc),b!==S&&(g|=Jc,b||(b=0)),c&Y_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Pn&&(r.getBinaryFast(i.localTime)||Ca(i.value));let R;if(s!==void 0&&(R=w_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Pn)),l){let L=u?.user?.username;if(m&&(w_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Pn)),e.encoder.hasStructureUpdate&&(g|=W_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,x=r.get(O);if(x){let j=vt(x).previousLocalTime;return R=r.put(O,Xc(a,t,n,j,u?.nodeId??server.replication.getThisNodeId(r)??0,L,d,Nu,g,S,b,p),{ifVersion:E}),R}}R=r.put(s===void 0?kx:Lm,Xc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,L,d,Nu,g,S,b,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&dZ.has(d)&&Ge(Nu?.length??1,"db-write",u.tableToTrack,null),R}catch(b){throw b.message+=" id: "+n+" options: "+h,b}}}function rl(e,t,r){if(t)return t.value&&t.metadataFlags&Pn&&!e.auditStore.getBinaryFast(t.localTime)&&Ca(t.value),e.remove(t.key,r)}var Fx,K_,V_,Lm,dA,kx,aZ,Ou,cZ,km,lZ,IA,Hx,uZ,Gx,wA,Y_,PA,LA,W_,dZ,La,fZ,Nu,Cu,Fm,NA,CA,at,OA,tl,Zc=oe(()=>{Fx=require("msgpackr");Ro();K_=w(z());Is();Is();Jn();V_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),dA=new Uint8Array([1,1,1,1,3,64,0,0]),kx=new Uint8Array([1,1,1,1,0,64,0,0]),aZ=Symbol("local-timestamp"),Ou=Symbol("metadata"),cZ=Symbol("entry"),km=new Uint8Array(8),lZ=new DataView(km.buffer,0,8),IA=0,Hx=0,uZ=1,Gx=3,wA=4,Y_=16,PA=32,LA=1,W_=256,dZ=new Set(["put","patch","delete","message","publish"]),La=new WeakMap,Cu=0,Fm=-1,NA=-1,CA=0,at=null,OA=class extends Fx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return La.get(this)?.version}getExpiresAt(){return La.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Cu||Fm>=0){let c=0,l=Cu;l&&(c+=8,Cu=0);let u=Fm,d=NA,f=CA;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,NA=-1),f&&(c+=4,CA=0));let m=fZ=n.call(this,i,a|2048|c);Nu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(V_[4]=l,V_[5]=l>>8,m.set(V_,p),p+=8),Wc&&(u|=Pn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|x_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Nu=n.call(this,i,a),Nu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){at=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=mZ(),i=t[c]}let u,d;i<32&&(i===x_?(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&Y_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&PA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Po(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return at={localTime:l,[Ou]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Po(()=>super.decode(t,r),this.rootStore)}catch(c){return K_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(mZ,"getTimestamp");o(z_,"handleLocalTimeForGets");tl=[];setInterval(()=>{for(let e=0;e<tl.length;e++){let t=tl[e].deref();!t||t.isDone||t.isCommitted?tl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(K_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):K_.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(DA,"recordUpdater");o(rl,"removeEntry")});function UA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?UA(f.conditions,f.operator,r,n,s,i,a,c):Mu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(L,O)=>R.some(x=>x(L,O)):(L,O)=>R.every(x=>x(L,O))}let g=(h.attribute||h[0])===r.primaryKey,b=Gm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=RZ(r.primaryStore,h.estimated_count,p)),b}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Mu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],L=xi(n.attributes,R);if(L.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=L.definition?.tableClass||L.elements?.definition?.tableClass,x=new Map,j=Mu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,x);if(L.relationship.to){i[c[0]]=x;let k=!!xi(O.attributes,L.relationship.to)?.elements;j=gZ(j,L,O.primaryStore,k,x)}if(L.relationship.from){let k=o(F=>(F?.key!==void 0&&(F=F.key),Mu({attribute:L.relationship.from,value:F},t,r,n,s,x)),"searchEntry");L.elements?(i[c[0]]=x,j=SZ(j,L,O.primaryStore,x,k)):j=j.flatMap(k)}return j}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(xA[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Ui.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let b;if(typeof m=="string"&&m.length>Cs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Cs.MAX_SEARCH_KEY_LENGTH)+Cs.OVERFLOW_MARKER,E=!1,b=Gm(e,n,null,i,d)),typeof p=="string"&&p.length>Cs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Cs.MAX_SEARCH_KEY_LENGTH)+Cs.OVERFLOW_MARKER,h=!0,b=b??Gm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(b=b??Gm(e,n,null,i,d),!b)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(S).map(b?function({key:L,value:O}){return this?.isSync?O&&b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(O&&b(O)?L:Da.SKIP)}catch(k){j(k)}}))}:L=>L.value==null&&!(L.metadataFlags&(Ln|Ma))?Da.SKIP:(a?._freezeRecords&&Object.freeze(L.value),L));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:L,...O}=R,x=n.primaryStore.getEntry(L);return a?._freezeRecords&&Object.freeze(x?.value),{...O,...x}}return R}):f.getRange(S).map(b?function({key:R,value:L}){let O;return typeof R=="string"&&R.length>Cs.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(L):O={[c]:R},this.isSync?b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(b(O)?L:Da.SKIP)}catch(k){j(k)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:L}){return this.isSync?L&&b(L)?R:Da.SKIP:new Promise((O,x)=>setImmediate(()=>{try{O(L&&b(L)?R:Da.SKIP)}catch(j){x(j)}}))})}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 gZ(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 SZ(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 Gm(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,p=n?.[d],h=Gm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,b=o((R,L)=>{let O,x;return E?E.returnDirect?(O=E(R,r,L),x=at):(x=E(R,r,L,!0),Array.isArray(x)?(O=x.map(j=>j.value),x=null):O=x?.value):O=R[d],{subObject:O,subEntry:x}},"getSubObject"),S=o((R,L)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:F};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let k=g(R);return g.idFilter&&(S.idFilter=g.idFilter),k}let{subObject:O,subEntry:x}=b(R,L);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(k){let F=b(k).subObject;return Array.isArray(F)?F.filter(h).map(Q=>Q[m.primaryKey]):F}}),O.some(h)):h(O,x):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),xA[a]||a){case Cs.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 jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Q_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function b(S){let R=S[d],L;if(typeof R!="object"||!R||p?L=f(R):Array.isArray(R)?L=R.some(f):R instanceof Date&&(L=f(R.getTime())),m&&(g++,!L&&!b.idFilter&&++E/g*i>h)){let O=Mu(e,r.transaction.getReadTxn(),!1,t),x;b.to?x=O.flatMap(k=>t.primaryStore.get(k)[b.to]):x=O.map(vu);let j=new Set(x);b.idFilter=k=>j.has(vu(k)),b.idFilter.idSet=j}return L}return o(b,"recordFilter"),s&&(b.idFilter=f),b}o(u,"attributeComparator")}function Q_(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/Do(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=xA[n]||n,n===Cs.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=Q_(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*Do(e.indices[i.relationship.from])/(Do(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=Do(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=EZ*Do(e.primaryStore)+1;else if(n==="between")r.estimated_count=hZ*Do(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=Do(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=pZ*Do(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function J_(e,t){if(e)if(Mo=e,Pu.lastIndex=0,TZ.test(e))try{if(t&&(t.conditions=[]),ni=t??new Du,Hm(ni,""),Br!==Mo.length&&qt("Unable to parse query, unexpected end of query"),ni.parseErrorMessage&&(ni.parseError=new MA(t.parseErrorMessage),!t))throw ni.parseError;return ni}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${Mo}'`,ni.parseErrorMessage&&(r.message+=", "+ni.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function qt(e){let t=`${e} at position ${Br}`;ni.parseErrorMessage=ni.parseErrorMessage?ni.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Pu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Mo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&qt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:qt(`invalid FIQL operator ${d}`),l=$x):(l=decodeURIComponent,i="equals",d||qt("attribute must be specified before equality comparator"),s=Lu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=_Z[f],l=vA[i]?$x:decodeURIComponent,d||qt(`attribute must be specified before comparator ${f}`),s=Lu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&Vx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else j_(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?qt("conditions/comparisons are not allowed in a property list"):e.push(Lu(d)),s=void 0;break;case"(":Pu.lastIndex=Br;let p=Hm(d?[]:new Du,")");switch(d){case"":j_(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:qt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":qt("group by is not implemented yet");case"sort":e.sort=Kx(p);break;default:qt(`unknown query function call ${d}`)}Mo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&qt("property sets are not allowed in a queries"),d||qt("property sets must have a defined parent property name"),Pu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Pu.lastIndex=Br,d?(m=Hm(new Du,"]"),m.name=d):m=Hm(e.conditions?new Du:[],"]"),e.conditions)if(j_(e,u),Mo[Br]==="="){l=decodeURIComponent,i="equals",s=Lu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&Vx(h,d),j_(e,u),e.conditions.push(h)}else d&&qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Lu(d));return e}else qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?yZ:Pu,r.lastIndex=Br),Br===Mo.length)return e}t&&qt(`expected '${t}', but encountered end of string`)}function j_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&qt("Can not mix operators within a condition grouping"):e.operator=t)}function Lu(e){return e.indexOf(".")>-1?e.split(".").map(Lu):decodeURIComponent(e)}function $x(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Vx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function Kx(e){let t=Yx(e[0]);return e.length>1&&(t.next=Kx(e.slice(1))),t}function Yx(e){if(Array.isArray(e)){let t=Yx(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}}qt(`Unknown sort type ${e}`)}function vu(e){return Array.isArray(e)?e.join("\0"):e}function Do(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function RZ(e,t,r){return t*r/Do(e)}var jr,Cs,Ui,Da,pZ,hZ,EZ,_Z,vA,xA,MA,TZ,Pu,yZ,Br,ni,Mo,Du,X_=oe(()=>{jr=w(Ee()),Cs=w(Gt()),Ui=require("ordered-binary"),Da=require("lmdb");Z_();Zc();pZ=.3,hZ=.1,EZ=.05,_Z={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},vA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(UA,"executeConditions");o(Mu,"searchByIndex");o(xi,"findAttribute");o(gZ,"joinTo");o(SZ,"joinFrom");xA={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(Gm,"filterByType");o(Q_,"estimateCondition");MA=class extends jr.Violation{static{o(this,"SyntaxViolation")}},TZ=/[()[\]|!<>.]|(=\w*=)/,Pu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,yZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(J_,"parseQuery");o(qt,"recordError");o(Hm,"parseBlock");o(j_,"assignOperator");o(Lu,"decodeProperty");o($x,"typedDecoding");o(Vx,"wildcardDecoding");o(Kx,"toSortObject");o(Yx,"toSortEntry");Du=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(vu,"flattenKey");o(Do,"estimatedEntryCount");o(RZ,"intersectionEstimate")});var Wx,si,eg=oe(()=>{Wx=w(ti()),si=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,Wx._assignPackageExport)("Resource",Resource)});var Xx={};be(Xx,{MultiPartId:()=>tg,Resource:()=>Fr,contextStorage:()=>xu,snakeCase:()=>AZ,transformForSelect:()=>Bu});function AZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function zx(e,t){if(nl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(nl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new tg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){nl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return nl=!0,null;e[e.length-1]==="/"&&(nl=!0)}return t.coerceId(decodeURIComponent(e))}function Dn(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 yo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Uu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new si,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new si,l.id=c,c==null&&(u=!0);l||(l=new si,l.id=c),u&&(l.isCollection=!0);let f;a||(a=xu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>xu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return St(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(b=>{if(!b)throw new Uu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new Uu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Xn(e,t){let r=new Uu.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 BA(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 Bu(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):BA(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(BA(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(BA(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Bu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var jx,Qx,Uu,Jx,xu,bZ,Fr,nl,tg,va=oe(()=>{jx=require("crypto");mm();yu();Qx=w(ti()),Uu=w(Ee());Na();X_();Jx=require("async_hooks");eg();xu=new Jx.AsyncLocalStorage,bZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Dn(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=Bu(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=Dn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Xn(t,"put")},{hasContent:!0,type:"update"});static patch=Dn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Xn(t,"patch")},{hasContent:!0,type:"update"});static delete=Dn(function(t,r,n,s){return t.delete?t.delete(r):Xn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,jx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=xu.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),St(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Xn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Dn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Xn(t,"delete")},{hasContent:!1,type:"update"});static post=Dn(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=Dn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Dn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Xn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Dn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Xn(t,"subscribe")},{type:"read"});static publish=Dn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Xn(t,"publish")},{hasContent:!0,type:"create"});static search=Dn(function(t,r,n){let s=t.search?t.search(r):Xn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Bu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Dn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Xn(t,"search")},{hasContent:!0,type:"read"});static copy=Dn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Xn(t,"copy")},{hasContent:!0,type:"create"});static move=Dn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Xn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Xn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return J_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&bZ[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:zx(t,this),isCollection:nl}}let i=zx(t,this);return nl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new jn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new jn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,Qx._assignPackageExport)("Resource",Fr);o(AZ,"snakeCase");o(zx,"pathToId");tg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Dn,"transactional");o(Xn,"missingMethod");o(BA,"selectFromObject");o(Bu,"transformForSelect")});var sl,FA=oe(()=>{sl=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 kA={};be(kA,{Resources:()=>Fu,keyArrayToString:()=>ku,resetResources:()=>IZ,resources:()=>Os});function IZ(){return Os=new Fu,Me.resources=Os,Os}function ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Zx,e0,Fu,Os,Ua=oe(()=>{Na();FA();Zx=w(z()),e0=w(Ee());xr();Fu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new e0.ServerError(`Conflicting paths for ${t}`);Zx.default.error(c),i.Resource=new sl(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 St(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(IZ,"resetResources");o(ku,"keyArrayToString")});function qA(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=r0,wZ(e.primaryStore,e.auditStore)):(c=t0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{n0(t0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=ku(t);let d=new GA(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 n0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),s0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=vt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=ku(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,HA.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,HA.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function wZ(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=r0[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{n0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function s0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function i0(e){return e.nextTransaction||(qA({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),s0(e)),e.nextTransaction}var HA,t0,r0,GA,$A=oe(()=>{HA=w(z());yu();Ua();Ro();t0=Object.create(null),r0=Object.create(null);o(qA,"addSubscription");GA=class extends jn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(n0,"notifyFromTransactionData");o(wZ,"listenToCommits");o(s0,"nextTransaction");o(i0,"whenNextTransaction")});var a0=v((FCe,o0)=>{"use strict";var VA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};o0.exports=VA});var l0=v((HCe,c0)=>{"use strict";var KA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};c0.exports=KA});var qm=v(d0=>{"use strict";var u0=fe(),NZ=(H(),M(W)),{RecordEncoder:CZ}=(Zc(),M(qx));u0.initSync();var OZ=u0.get(NZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,YA=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=OZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:CZ})}};d0.OpenDBIObject=YA});var $m=v((VCe,f0)=>{"use strict";var Zn=fe(),Ps=(H(),M(W));Zn.initSync();var rg=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Zn.get(Ps.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zn.get(Ps.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zn.get(Ps.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Zn.get(Ps.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Zn.get(Ps.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Zn.get(Ps.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Zn.get(Ps.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Zn.get(Ps.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};f0.exports=rg;rg.MAX_DBS=1e4});var ht=v((YCe,R0)=>{"use strict";var zA=require("lmdb"),ii=require("fs-extra"),es=require("path"),ng=Cn(),h0=z(),Mn=Kr().LMDB_ERRORS_ENUM,sg=l0(),{OpenDBIObject:jA}=qm(),E0=$m(),xa=Gt(),m0=(H(),M(W)),{table:PZ,resetDatabases:LZ}=(Ne(),M(ft)),p0=fe(),oi=xa.INTERNAL_DBIS_NAME,_0=xa.DBI_DEFINITION_NAME,DZ="data.mdb",MZ="lock.mdb",Vm=".mdb",vZ="-lock",WA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ls(t,r),this.key_type=this.dbi[xa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[xa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new zA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ig(e,t){if(e===void 0)throw new Error(Mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Mn.ENV_NAME_REQUIRED)}o(ig,"pathEnvNameValidation");async function QA(e,t,r=!0){try{await ii.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Mn.INVALID_BASE_PATH):n}try{let n=es.join(e,t+Vm);return await ii.access(n,ii.constants.R_OK|ii.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ii.access(es.join(e,t,DZ),ii.constants.R_OK|ii.constants.F_OK),es.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Mn.INVALID_ENVIRONMENT)}else throw new Error(Mn.INVALID_ENVIRONMENT);throw n}}o(QA,"validateEnvironmentPath");function og(e,t){if(ng.validateEnv(e),t===void 0)throw new Error(Mn.DBI_NAME_REQUIRED)}o(og,"validateEnvDBIName");async function UZ(e,t,r=!1,n=!1){ig(e,t);let s=es.basename(e);t=t.toString();let i=p0.get(m0.CONFIG_PARAMS.DATABASES);i||p0.setProperty(m0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await QA(e,t,n),g0(e,t,r)}catch(a){if(a.message===Mn.INVALID_ENVIRONMENT){let c=es.join(e,t);await ii.mkdirp(n?c:e);let l=new E0(n?c:c+Vm,!1),u=zA.open(l);u.dbis=Object.create(null);let d=new jA(!1);u.openDB(oi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=JA(e,t,r);return u[xa.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(UZ,"createEnvironment");async function xZ(e,t,r,n=!0){ig(e,t),t=t.toString();let s=es.join(e,t);return PZ({table:t,database:es.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(xZ,"copyEnvironment");async function g0(e,t,r=!1){ig(e,t),t=t.toString();let n=JA(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 QA(e,t),i=es.join(e,t+Vm),a=s!=i,c=new E0(s,a),l=zA.open(c);l.dbis=Object.create(null);let u=T0(l);for(let d=0;d<u.length;d++)Ls(l,u[d]);return l[xa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(g0,"openEnvironment");async function BZ(e,t,r=!1){ig(e,t),t=t.toString();let n=es.join(e,t+Vm),s=await QA(e,t);if(global.lmdb_map!==void 0){let i=JA(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await S0(a),delete global.lmdb_map[i]}}await ii.remove(s),await ii.remove(s===n?s+vZ:es.join(es.dirname(s),MZ))}o(BZ,"deleteEnvironment");async function S0(e){ng.validateEnv(e);let t=e[xa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(S0,"closeEnvironment");function JA(e,t,r=!1){let s=`${es.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(JA,"getCachedEnvironmentName");function FZ(e){ng.validateEnv(e);let t=Object.create(null),r=Ls(e,oi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==oi)try{t[n]=Object.assign(new sg,s)}catch{h0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(FZ,"listDBIDefinitions");function T0(e){ng.validateEnv(e);let t=[],r=Ls(e,oi);for(let{key:n}of r.getRange({start:!1}))n!==oi&&t.push(n);return t}o(T0,"listDBIs");function kZ(e,t){let n=Ls(e,oi).getEntry(t),s=new sg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{h0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(kZ,"getDBIDefinition");function y0(e,t,r,n=!r){if(og(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ls(e,t)}catch(s){if(s.message===Mn.DBI_DOES_NOT_EXIST){let i=new jA(r,n===!0),a=e.openDB(t,i),c=new sg(r===!0,n);return a[_0]=c,Ls(e,oi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(y0,"createDBI");function Ls(e,t){if(og(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==oi?r=kZ(e,t):r=new sg,r===void 0)throw new Error(Mn.DBI_DOES_NOT_EXIST);let n;try{let s=new jA(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Mn.DBI_DOES_NOT_EXIST):s}return n[_0]=r,e.dbis[t]=n,n}o(Ls,"openDBI");function HZ(e,t){og(e,t),t=t.toString();let r=Ls(e,t),n=r.getStats();return r[xa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(HZ,"statDBI");async function GZ(e,t){try{let r=es.join(e,t+Vm);return(await ii.stat(r)).size}catch{throw new Error(Mn.INVALID_ENVIRONMENT)}}o(GZ,"environmentDataSize");function qZ(e,t){if(og(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ls(e,oi).removeSync(t)}o(qZ,"dropDBI");function $Z(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ls(e,i)}catch(a){if(a.message===Mn.DBI_DOES_NOT_EXIST)y0(e,i,i!==t,i===t),n=!0;else throw a}}n&&LZ()}o($Z,"initializeDBIs");R0.exports={openDBI:Ls,openEnvironment:g0,createEnvironment:UZ,listDBIs:T0,listDBIDefinitions:FZ,createDBI:y0,dropDBI:qZ,statDBI:HZ,deleteEnvironment:BZ,initializeDBIs:$Z,TransactionCursor:WA,environmentDataSize:GZ,copyEnvironment:xZ,closeEnvironment:S0}});var I0=v((zCe,A0)=>{"use strict";var XA=ht(),VZ=z(),b0=Kr().LMDB_ERRORS_ENUM;A0.exports=KZ;async function KZ(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 XA.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==b0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await XA.closeEnvironment(global.lmdb_map[n]),await XA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==b0.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){VZ.error(t)}}o(KZ,"cleanLMDBMap")});var Fi=v((QCe,N0)=>{"use strict";var w0=ce(),YZ=(H(),M(W)),Hu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Bi=require("joi"),Ba={schema_format:{pattern:Hu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},WZ=Bi.alternatives(Bi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Bi.number(),Bi.array()).required(),zZ=Bi.alternatives(Bi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Bi.number()),jZ=Bi.alternatives(Bi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Bi.number()).required();function QZ(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ba.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Hu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(QZ,"checkValidTable");function JZ(e,t){return w0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(JZ,"validateSchemaExists");function XZ(e,t){let r=t.state.ancestors[0].schema;return w0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(XZ,"validateTableExists");function ZZ(e,t){return e.toLowerCase()===YZ.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(ZZ,"validateSchemaName");N0.exports={commonValidators:Ba,schemaRegex:Hu,hdbSchemaTable:WZ,validateSchemaExists:JZ,validateTableExists:XZ,validateSchemaName:ZZ,checkValidTable:QZ,hdbDatabase:zZ,hdbTable:jZ}});var eI=v((XCe,O0)=>{var{hdbTable:e9,hdbDatabase:C0}=Fi(),t9=dt(),ZA=require("joi"),r9={undefined:"undefined",null:"null"},n9=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||r9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),s9=ZA.object({database:C0,schema:C0,table:e9,records:ZA.array().items(ZA.object().custom(n9)).required()});O0.exports=function(e){return t9.validateBySchema(e,s9)}});var L0=v((eOe,P0)=>{"use strict";var tI=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")}};P0.exports=tI});var M0=v((rOe,D0)=>{"use strict";var rI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};D0.exports=rI});var U0=v((sOe,v0)=>{"use strict";var nI=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}};v0.exports=nI});var B0=v((oOe,x0)=>{"use strict";var sI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};x0.exports=sI});var ol=v((dOe,H0)=>{"use strict";var i9=ht(),o9=M0(),a9=U0(),c9=B0(),ki=Cn(),Km=Kr().LMDB_ERRORS_ENUM,l9=Gt(),vo=(H(),M(W)),u9=ce(),d9=require("uuid"),cOe=require("lmdb"),{handleHDBError:f9,hdbErrors:m9}=Ee(),{OVERFLOW_MARKER:lOe,MAX_SEARCH_KEY_LENGTH:uOe}=l9,F0=fe();F0.initSync();var ag=F0.get(vo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),iI=vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,il=vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p9(e,t,r,n,s=ki.getNextMonotonicTime()){lI(e,t,r,n),oI(e,t,r);let i=new o9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];k0(u,!0,s);let d=h9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return aI(a,c,n,i,s)}o(p9,"insertRecords");function h9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][vo.FUNC_VAL],n[a]=c)}let l=ki.getIndexedValues(c),u=e.dbis[a];if(l){ag&&u.prefetch(l.map(d=>({key:d,value:s})),cg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}ag&&e.dbis[t].prefetch([s],cg),e.dbis[t].put(s,n,n[il])})}o(h9,"insertRecord");function E9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(E9,"removeSkippedRecords");function k0(e,t,r){let n=r>0;(n||!Number.isInteger(e[il]))&&(e[il]=r||(r=ki.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[iI]))&&(e[iI]=r||ki.getNextMonotonicTime()):delete e[iI]}o(k0,"setTimestamps");function oI(e,t,r){r.indexOf(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),i9.initializeDBIs(e,t,r)}o(oI,"initializeTransaction");async function _9(e,t,r,n,s=ki.getNextMonotonicTime()){lI(e,t,r,n),oI(e,t,r);let i=new a9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=cI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return aI(c,l,n,i,s,a)}o(_9,"updateRecords");async function g9(e,t,r,n,s=ki.getNextMonotonicTime()){try{lI(e,t,r,n)}catch(l){throw f9(l,l.message,m9.HTTP_STATUS_CODES.BAD_REQUEST)}oI(e,t,r);let i=new c9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;u9.isEmpty(u[t])?(d=d9.v4(),u[t]=d):d=u[t];let f=cI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return aI(a,c,n,i,s)}o(g9,"upsertRecords");async function aI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||ki.getNextMonotonicTime(),E9(r,i),n}o(aI,"finalizeWrite");function cI(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(k0(r,!d,a),Number.isInteger(r[il])&&u[il]>r[il])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let b=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][vo.FUNC_VAL],r[h]=E)}if(E===b)continue;let S=ki.getIndexedValues(b);if(S){ag&&g.prefetch(S.map(R=>({key:R,value:n})),cg);for(let R=0,L=S.length;R<L;R++)g.remove(S[R],n)}if(S=ki.getIndexedValues(E),S){ag&&g.prefetch(S.map(R=>({key:R,value:n})),cg);for(let R=0,L=S.length;R<L;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[il])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:cI(e,t,r,n,s,i,a))}o(cI,"updateUpsertRecord");function S9(e,t,r){if(ki.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(S9,"validateBasic");function lI(e,t,r,n){if(S9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(lI,"validateWrite");function cg(){}o(cg,"noop");H0.exports={insertRecords:p9,updateRecords:_9,upsertRecords:g9}});var Hi=v((mOe,T9)=>{T9.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var q0=v((pOe,G0)=>{"use strict";var y9=require("uuid"),uI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||y9.v4(),this.schema_table=`${this.schema}.${this.table}`}};G0.exports=uI});var lg=v((EOe,$0)=>{"use strict";var R9=q0(),dI=class extends R9{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}};$0.exports=dI});var K0=v((gOe,V0)=>{"use strict";V0.exports=A9;var b9="inserted";function A9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===b9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(A9,"returnObject")});var ug=v((yOe,W0)=>{"use strict";var I9=(H(),M(W)),fI=ht(),w9=ol(),{getSystemSchemaPath:N9,getSchemaPath:C9}=gt(),TOe=Hi(),{validateBySchema:O9}=dt(),Ym=require("joi"),P9=lg(),L9=K0(),{handleHDBError:D9,hdbErrors:M9,ClientError:v9}=Ee(),Y0=ce(),{HTTP_STATUS_CODES:U9}=M9,x9="inserted";W0.exports=B9;async function B9(e){let t=O9(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new v9(t.message);let r=!e.skip_table_check&&Y0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw D9(new Error,r,U9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Y0.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 P9(e.schema,e.table,e.attribute,e.id);try{let i=await fI.openEnvironment(C9(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);fI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await fI.openEnvironment(N9(),I9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await w9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return L9(x9,c,{records:[s]},l)}catch(i){throw i}}o(B9,"lmdbCreateAttribute")});var Wm=v((AOe,j0)=>{"use strict";var Uo=ce(),z0=z(),bOe=eI(),{getDatabases:F9}=(Ne(),M(ft)),{ClientError:al}=Ee();j0.exports=k9;function k9(e){if(Uo.isEmpty(e))throw new al("invalid update parameters defined.");if(Uo.isEmptyOrZeroLength(e.schema))throw new al("invalid schema specified.");if(Uo.isEmptyOrZeroLength(e.table))throw new al("invalid table specified.");if(!Array.isArray(e.records))throw new al("records must be an array");let t=F9()[e.schema]?.[e.table];if(Uo.isEmpty(t))throw new al(`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&&Uo.isEmptyOrZeroLength(a[r]))throw z0.error("a valid hash attribute must be provided with update record:",a),new al("a valid hash attribute must be provided with update record, check log for more info");if(!Uo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw z0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new al(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Uo.isEmpty(a[r])&&a[r]!==""&&n.has(Uo.autoCast(a[r]))&&(a.skip=!0),n.add(Uo.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(k9,"insertUpdateValidate")});var dg=v((wOe,J0)=>{"use strict";var Q0=ce(),H9=(H(),M(W)),G9=z(),q9=ug(),$9=lg(),V9=xo(),{SchemaEventMsg:K9}=ts(),Y9="already exists in";J0.exports=W9;async function W9(e,t,r){if(Q0.isEmptyOrZeroLength(r))return r;let n=[];Q0.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 z9(e,t.schema,t.name,i)})),s}o(W9,"lmdbCheckForNewAttributes");async function z9(e,t,r,n){let s=new $9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await j9(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Y9))G9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(z9,"createNewAttribute");async function j9(e){let t;return t=await q9(e),V9.signalSchemaChange(new K9(process.pid,H9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(j9,"createAttribute")});var Gu=v((COe,X0)=>{"use strict";var mI=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}};X0.exports=mI});var eB=v((POe,Z0)=>{"use strict";var Q9=Gu(),J9=(H(),M(W)).OPERATIONS_ENUM,pI=class extends Q9{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(J9.INSERT,r,n,s,i),this.records=t}};Z0.exports=pI});var rB=v((DOe,tB)=>{"use strict";var X9=Gu(),Z9=(H(),M(W)).OPERATIONS_ENUM,hI=class extends X9{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(Z9.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};tB.exports=hI});var sB=v((vOe,nB)=>{"use strict";var e7=Gu(),t7=(H(),M(W)).OPERATIONS_ENUM,EI=class extends e7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(t7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};nB.exports=EI});var oB=v((xOe,iB)=>{"use strict";var r7=Gu(),n7=(H(),M(W)).OPERATIONS_ENUM,_I=class extends r7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(n7.DELETE,n,s,t,i),this.original_records=r}};iB.exports=_I});var zm=v((kOe,uB)=>{"use strict";var FOe=require("path"),aB=ht(),s7=eB(),i7=rB(),o7=sB(),a7=oB(),qu=Gt(),cB=ce(),{CONFIG_PARAMS:c7}=(H(),M(W)),lB=fe();lB.initSync();var fg=(H(),M(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:l7}=gt();uB.exports=u7;async function u7(e,t){if(lB.get(c7.LOGGING_AUDITLOG)===!1)return;let r=l7(e.schema,e.table),n=await aB.openEnvironment(r,e.table,!0),s=d7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){aB.initializeDBIs(n,qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),cB.isEmpty(s.user_name)||n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(u7,"writeTransaction");function d7(e,t){let r=cB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===fg.INSERT)return new s7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fg.UPDATE)return new i7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fg.UPSERT)return new o7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fg.DELETE)return new a7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(d7,"createTransactionObject")});var gI=v((qOe,dB)=>{"use strict";var f7=Wm(),GOe=um(),jm=(H(),M(W)),m7=dm(),p7=ol().insertRecords,h7=ht(),E7=z(),_7=dg(),{getSchemaPath:g7}=gt(),S7=zm();dB.exports=T7;async function T7(e){try{let{schemaTable:t,attributes:r}=f7(e);m7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await _7(e.hdb_auth_header,t,r),s=g7(e.schema,e.table),i=await h7.openEnvironment(s,e.table),a=await p7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await S7(e,a)}catch(c){E7.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(T7,"lmdbCreateRecords")});var pB=v((VOe,mB)=>{"use strict";var fB=(H(),M(W)),y7=gI(),R7=um(),b7=require("fs-extra"),{getSchemaPath:A7}=gt();mB.exports=I7;async function I7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new R7(fB.SYSTEM_SCHEMA_NAME,fB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await y7(r),await b7.mkdirp(A7(e.schema))}o(I7,"lmdbCreateSchema")});var EB=v((YOe,hB)=>{"use strict";var SI=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}};hB.exports=SI});var TB=v((JOe,SB)=>{"use strict";var _B=ht(),TI=Cn(),yI=Kr().LMDB_ERRORS_ENUM,w7=Gt(),gB=z(),zOe=ce(),N7=require("lmdb"),C7=EB(),O7=(H(),M(W)),{OVERFLOW_MARKER:jOe,MAX_SEARCH_KEY_LENGTH:QOe}=w7,P7=O7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function L7(e,t,r,n){if(TI.validateEnv(e),t===void 0)throw new Error(yI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yI.IDS_REQUIRED):new Error(yI.IDS_MUST_BE_ITERABLE);try{let s=_B.listDBIs(e);_B.initializeDBIs(e,t,s);let i=new C7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[P7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,N7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let b=s[g];if(!h.hasOwnProperty(b)||b===t)continue;let S=e.dbis[b],R=h[b];if(R!=null)try{let L=TI.getIndexedValues(R);if(L)for(let O=0,x=L.length;O<x;O++)S.remove(L[O],a)}catch{gB.warn(`cannot delete from attribute: ${b}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){gB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=TI.getNextMonotonicTime(),i}catch(s){throw s}}o(L7,"deleteRecords");SB.exports={deleteRecords:L7}});var Qm=v((ZOe,RB)=>{"use strict";var $u=ce(),D7=TB(),M7=ht(),{getSchemaPath:v7}=gt(),U7=zm(),x7=z();RB.exports=B7;async function B7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if($u.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if($u.isEmptyOrZeroLength(e.hash_values)&&!$u.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];$u.isEmpty(l)||e.hash_values.push(l)}}if($u.isEmptyOrZeroLength(e.hash_values))return yB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if($u.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=v7(e.schema,e.table),i=await M7.openEnvironment(s,e.table),a=await D7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await U7(e,a)}catch(c){x7.error(`unable to write transaction due to ${c.message}`)}return yB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(B7,"lmdbDeleteRecords");function yB(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(yB,"createDeleteResponse")});var bI=v((rPe,bB)=>{"use strict";var F7=(H(),M(W)),tPe=Cn();function RI(e,t){let r=Object.create(null);if(t.length===1&&F7.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(RI,"parseRow");function k7(e,t,r,n){let s=RI(r,e);n.push(s)}o(k7,"searchAll");function H7(e,t,r,n){let s=RI(r,e);n[t]=s}o(H7,"searchAllToMap");function G7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(G7,"iterateDBI");function cl(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(cl,"pushResults");function q7(e,t,r,n,s,i){t.toString().endsWith(e)&&cl(t,r,n,s,i)}o(q7,"endsWith");function $7(e,t,r,n,s,i){t.toString().includes(e)&&cl(t,r,n,s,i)}o($7,"contains");function V7(e,t,r,n,s,i){t>e&&cl(t,r,n,s,i)}o(V7,"greaterThanCompare");function K7(e,t,r,n,s,i){t>=e&&cl(t,r,n,s,i)}o(K7,"greaterThanEqualCompare");function Y7(e,t,r,n,s,i){t<e&&cl(t,r,n,s,i)}o(Y7,"lessThanCompare");function W7(e,t,r,n,s,i){t<=e&&cl(t,r,n,s,i)}o(W7,"lessThanEqualCompare");bB.exports={parseRow:RI,searchAll:k7,searchAllToMap:H7,iterateDBI:G7,endsWith:q7,contains:$7,greaterThanCompare:V7,greaterThanEqualCompare:K7,lessThanCompare:Y7,lessThanEqualCompare:W7,pushResults:cl}});var Vu=v((aPe,PB)=>{"use strict";var Fa=ht(),sPe=z(),rs=Cn(),mg=Gt(),er=Kr().LMDB_ERRORS_ENUM,iPe=ce(),z7=(H(),M(W)),pg=bI(),{parseRow:j7}=pg,oPe=require("lmdb"),{OVERFLOW_MARKER:AB,MAX_SEARCH_KEY_LENGTH:Q7}=mg;function IB(e,t,r,n=!1,s=void 0,i=void 0){return ll(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(IB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ll(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ll(e,t,r,n){let s=e.database||e,i=Fa.openDBI(s,r);i[mg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fa.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(ll,"setupTransaction");function wB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(AB)){if(!s)if(r)s=Fa.openDBI(e,r);else{let l=Fa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Fa.openDBI(e,l[u]),!s[mg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(wB,"getOverflowCheck");function J7(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return ll(e,t,t,(a,c,l)=>(hg(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=>j7(u.value,r))))}o(J7,"searchAll");function X7(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);hg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of IB(e,t,t,n,s,i))a.set(c,pg.parseRow(l,r));return a}o(X7,"searchAllToMap");function Z7(e,t,r=!1,n=void 0,s=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=IB(e,void 0,t,r,n,s),c=a.transaction,l=wB(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(Z7,"iterateDBI");function eee(e,t){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return Fa.statDBI(e,t).entryCount}o(eee,"countAll");function tee(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,t,r,(c,l,u,d)=>(n=rs.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(tee,"equals");function ree(e,t,r){return ka(e,t,r),Fa.openDBI(e,t).getValuesCount(r)}o(ree,"count");function nee(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,null,r,(c,l)=>{n=rs.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(nee,"startsWith");function see(e,t,r,n,s=!1,i=void 0,a=void 0){return NB(e,t,r,n,s,i,a,!0)}o(see,"endsWith");function NB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return ka(e,r,n),ll(e,null,r,(l,u,d,f)=>{let m=wB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(AB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[mg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(NB,"contains");function iee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(iee,"greaterThan");function oee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(oee,"greaterThanEqual");function aee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(aee,"lessThan");function cee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(cee,"lessThanEqual");function lee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(rs.validateEnv(e),r===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(er.START_VALUE_REQUIRED);if(s===void 0)throw new Error(er.END_VALUE_REQUIRED);if(n=rs.convertKeyValueToWrite(n),s=rs.convertKeyValueToWrite(s),n>s)throw new Error(er.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(lee,"between");function uee(e,t,r,n){rs.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(hg(r),r=Xm(s,r),n===void 0)throw new Error(er.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=pg.parseRow(c,r)),a}o(uee,"searchByHash");function dee(e,t,r){rs.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(dee,"checkHashExists");function fee(e,t,r,n,s=[]){return OB(e,t,r,n,s),CB(e,t,r,n,s).map(i=>i[1])}o(fee,"batchSearchByHash");function mee(e,t,r,n,s=[]){OB(e,t,r,n,s);let i=new Map;for(let[a,c]of CB(e,t,r,n,s))i.set(a,c);return i}o(mee,"batchSearchByHashToMap");function CB(e,t,r,n,s=[]){return ll(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,pg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(CB,"batchHashSearch");function OB(e,t,r,n,s){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(hg(r),n==null)throw new Error(er.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(er.IDS_MUST_BE_ITERABLE)}o(OB,"initializeBatchSearchByHash");function hg(e){if(!Array.isArray(e))throw e===void 0?new Error(er.FETCH_ATTRIBUTES_REQUIRED):new Error(er.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(hg,"validateFetchAttributes");function ka(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.SEARCH_VALUE_REQUIRED);if(r?.length>Q7)throw new Error(er.SEARCH_VALUE_TOO_LARGE)}o(ka,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&z7.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fa.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");PB.exports={searchAll:J7,searchAllToMap:X7,count:ree,countAll:eee,equals:tee,startsWith:nee,endsWith:see,contains:NB,searchByHash:uee,setGetWholeRowAttributes:Xm,batchSearchByHash:fee,batchSearchByHashToMap:mee,checkHashExists:dee,iterateDBI:Z7,greaterThan:iee,greaterThanEqual:oee,lessThan:aee,lessThanEqual:cee,between:lee}});var Ku=v((lPe,UB)=>{var LB=require("lodash"),DB=dt(),Ye=require("joi"),pee=ce(),{hdbSchemaTable:Zm,checkValidTable:MB,hdbTable:vB,hdbDatabase:Eg}=Fi(),{handleHDBError:hee,hdbErrors:Eee}=Ee(),{getDatabases:_ee}=(Ne(),M(ft)),{HTTP_STATUS_CODES:gee}=Eee,See=Ye.object({database:Eg,schema:Eg,table:vB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),Tee=Ye.object({database:Eg,schema:Eg,table:vB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});UB.exports=function(e,t){let r=null;switch(t){case"value":r=DB.validateBySchema(e,See);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(MB("database",e.schema)),i(MB("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=DB.validateBySchema(e,Tee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=pee.checkGlobalSchemaTable(e.schema,e.table);if(s)return hee(new Error,s,gee.NOT_FOUND);let a=_ee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=LB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!LB.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 AI=v((dPe,xB)=>{"use strict";var yee=ht(),Ree=Ku(),{getSchemaPath:bee}=gt();xB.exports=Aee;function Aee(e){let t=Ree(e,"hashes");if(t)throw t;let r=bee(e.schema,e.table);return yee.openEnvironment(r,e.table)}o(Aee,"initialize")});var II=v((mPe,BB)=>{"use strict";var Iee=Vu(),wee=AI();BB.exports=Nee;async function Nee(e){let t=await wee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Iee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Nee,"lmdbGetDataByHash")});var Yu=v((hPe,FB)=>{"use strict";var wI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};FB.exports=wI});var HB=v((gPe,kB)=>{"use strict";var _Pe=Yu(),Cee=Vu(),Oee=AI();kB.exports=Pee;async function Pee(e){let t=await Oee(e),r=global.hdb_schema[e.schema][e.table];return Cee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Pee,"lmdbSearchByHash")});var ai=v((TPe,GB)=>{"use strict";var NI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};GB.exports=NI});var _g=v((RPe,WB)=>{"use strict";var dn=Vu(),Lee=ht(),Dee=ce(),We=Gt(),ul=(H(),M(W)),Mee=Hi(),qB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:vee}=gt(),Bo=ul.SEARCH_WILDCARDS;async function Uee(e,t,r){let n;e.schema===ul.SYSTEM_SCHEMA_NAME?n=Mee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=YB(e,n.hash_attribute,r,t);return VB(e,s,n.hash_attribute,r)}o(Uee,"prepSearch");async function VB(e,t,r,n){let s=vee(e.schema,e.table),i=await Lee.openEnvironment(s,e.table),a=KB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(xee(e,r)===!1){let d=e.attribute;if(d===r)return n?$B(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?$B(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?dn.batchSearchByHashToMap(c,r,e.get_attributes,u):dn.batchSearchByHash(c,r,e.get_attributes,u)}o(VB,"executeSearch");function KB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=dn.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=dn.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=dn.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=dn.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return dn.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return dn.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return dn.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return dn.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=dn.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=dn.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=dn.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=dn.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=dn.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(KB,"searchByType");function $B(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o($B,"createMapFromIterable");function xee(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(xee,"checkToFetchMore");function YB(e,t,r,n){if(Dee.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Bo.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Bo[0])<0&&s.indexOf(Bo[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Bo.indexOf(i)>=0&&Bo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Bo.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Bo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Bo[0])||s.includes(Bo[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(qB.UNKNOWN_SEARCH_TYPE)}else switch(n){case ul.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case ul.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case ul.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case ul.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case ul.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(qB.UNKNOWN_SEARCH_TYPE)}}o(YB,"createSearchTypeFromSearchObject");WB.exports={executeSearch:VB,createSearchTypeFromSearchObject:YB,prepSearch:Uee,searchByType:KB}});var jB=v((IPe,zB)=>{"use strict";var APe=ai(),Bee=Ku(),Fee=ce(),kee=(H(),M(W)),Hee=_g();zB.exports=Gee;function Gee(e,t){if(!Fee.isEmpty(t)&&kee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Bee(e,"value");if(n)throw n;return Hee.prepSearch(e,t,!0)}o(Gee,"lmdbGetDataByValue")});var ep=v((CPe,QB)=>{"use strict";var NPe=ai(),qee=Ku(),$ee=ce(),Vee=(H(),M(W)),Kee=_g();QB.exports=Yee;async function Yee(e,t){if(!$ee.isEmpty(t)&&Vee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=qee(e,"value");if(n)throw n;return Kee.prepSearch(e,t,!1)}o(Yee,"lmdbSearchByValue")});var XB=v((LPe,JB)=>{"use strict";var PPe=Gt(),CI=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}},OI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},PI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};JB.exports={SearchByConditionsObject:CI,SearchCondition:OI,SortAttribute:PI}});var nF=v((xPe,rF)=>{"use strict";var{SearchByConditionsObject:MPe,SearchCondition:vPe}=XB(),Wee=ai(),zee=Ku(),LI=Vu(),gg=Gt(),{Resource:UPe}=(va(),M(Xx)),tF=_g(),jee=bI(),Qee=require("lodash"),{getSchemaPath:Jee}=gt(),ZB=ht(),{handleHDBError:Xee,hdbErrors:Zee}=Ee(),{HTTP_STATUS_CODES:ete}=Zee,tte=1e8;rF.exports=rte;async function rte(e){let t=zee(e,"conditions");if(t)throw Xee(t,t.message,ete.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=Jee(e.schema,e.table),n=await ZB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)ZB.openDBI(n,u.attribute);let i=Qee.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===gg.SEARCH_TYPES.EQUALS?u.estimated_count=LI.count(n,u.attribute,u.value):d===gg.SEARCH_TYPES.CONTAINS||d===gg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=tte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await eF(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(tF.filterByType),f=d.length,m=LI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>jee.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await eF(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=LI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(rte,"lmdbSearchByConditions");async function eF(e,t,r,n){let s=new Wee(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===gg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,tF.searchByType(e,s,i,n).map(a=>a.value)}o(eF,"executeConditionSearch")});var tp=v((FPe,sF)=>{"use strict";var nte=(H(),M(W)).OPERATIONS_ENUM,DI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=nte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};sF.exports=DI});var MI=v((HPe,fF)=>{"use strict";var cF=ai(),lF=tp(),uF=ep(),dF=Qm(),vn=(H(),M(W)),iF=ce(),oF=ht(),{getTransactionAuditStorePath:ste,getSchemaPath:ite}=gt(),aF=z();fF.exports=ote;async function ote(e){try{if(iF.isEmpty(global.hdb_schema[e.schema])||iF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await ate(e),await cte(e);let t=ite(e.schema,e.table);try{await oF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")aF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=ste(e.schema,e.table);await oF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")aF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(ote,"lmdbDropTable");async function ate(e){let t=new cF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await uF(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 lF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await dF(s)}o(ate,"deleteAttributesFromSystem");async function cte(e){let t=new cF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await uF(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 lF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await dF(s)}catch(i){throw i}}o(cte,"dropTableFromSystem")});var pF=v((qPe,mF)=>{"use strict";var lte=require("fs-extra"),ute=ai(),dte=Yu(),fte=tp(),mte=MI(),pte=Qm(),hte=II(),Ete=ep(),Fo=(H(),M(W)),{getSchemaPath:_te}=gt(),{handleHDBError:gte,hdbErrors:Ste}=Ee(),{HDB_ERROR_MSGS:Tte,HTTP_STATUS_CODES:yte}=Ste;mF.exports=Rte;async function Rte(e){let t;try{t=await bte(e.schema);let r=new ute(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Ete(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await mte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new fte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await pte(s);let i=_te(t);await lte.remove(i)}catch(r){throw r}}o(Rte,"lmdbDropSchema");async function bte(e){let t=new dte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await hte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw gte(new Error,Tte.SCHEMA_NOT_FOUND(e),yte.NOT_FOUND,void 0,void 0,!0);return n}o(bte,"validateDropSchema")});var rp=v((VPe,hF)=>{"use strict";var vI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};hF.exports=vI});var xI=v((WPe,EF)=>{"use strict";var Ate=require("fs-extra"),Sg=ht(),{getTransactionAuditStorePath:Ite}=gt(),UI=Gt(),YPe=rp();EF.exports=wte;async function wte(e){let t;try{let r=Ite(e.schema,e.table);await Ate.mkdirp(r),t=await Sg.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{Sg.createDBI(t,UI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Sg.createDBI(t,UI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Sg.createDBI(t,UI.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(wte,"createTransactionsAuditEnvironment")});var SF=v((QPe,gF)=>{"use strict";var BI=(H(),M(W)),_F=ht(),Nte=ol(),{getSystemSchemaPath:Cte,getSchemaPath:Ote}=gt(),jPe=Hi(),Pte=ug(),FI=lg(),Lte=z(),Dte=xI();gF.exports=Mte;async function Mte(e,t){let r=Ote(t.schema,t.table),n=new FI(t.schema,t.table,BI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new FI(t.schema,t.table,BI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new FI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await _F.createEnvironment(r,t.table),e!==void 0){let a=await _F.openEnvironment(Cte(),BI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Nte.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 kI(n),await kI(s),await kI(i)}await Dte(t)}catch(a){throw a}}o(Mte,"lmdbCreateTable");async function kI(e){try{await Pte(e)}catch(t){Lte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(kI,"createAttribute")});var yF=v((XPe,TF)=>{"use strict";var vte=Wm(),Ute=dm(),xte=dg(),np=(H(),M(W)),Bte=ol().updateRecords,Fte=ht(),{getSchemaPath:kte}=gt(),Hte=zm(),Gte=z();TF.exports=qte;async function qte(e){try{let{schemaTable:t,attributes:r}=vte(e);Ute(e,r,t.hash_attribute),e.schema!==np.SYSTEM_SCHEMA_NAME&&(r.includes(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await xte(e.hdb_auth_header,t,r),s=kte(e.schema,e.table),i=await Fte.openEnvironment(s,e.table),a=await Bte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Hte(e,a)}catch(c){Gte.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(qte,"lmdbUpdateRecords")});var bF=v((eLe,RF)=>{"use strict";var $te=(H(),M(W)).OPERATIONS_ENUM,HI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=$te.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};RF.exports=HI});var IF=v((nLe,AF)=>{"use strict";var rLe=bF(),Vte=Wm(),Kte=dm(),Yte=dg(),sp=(H(),M(W)),Wte=ol().upsertRecords,zte=ht(),{getSchemaPath:jte}=gt(),Qte=zm(),Jte=z(),{handleHDBError:Xte,hdbErrors:Zte}=Ee();AF.exports=ere;async function ere(e){let t;try{t=Vte(e)}catch(l){throw Xte(l,l.message,Zte.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Kte(e,n,r.hash_attribute),e.schema!==sp.SYSTEM_SCHEMA_NAME&&(n.includes(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Yte(e.hdb_auth_header,r,n),i=jte(e.schema,e.table),a=await zte.openEnvironment(i,e.table),c=await Wte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Qte(e,c)}catch(l){Jte.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(ere,"lmdbUpsertRecords")});var NF=v((iLe,wF)=>{"use strict";var GI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};wF.exports=GI});var OF=v((aLe,CF)=>{"use strict";var qI=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}};CF.exports=qI});var DF=v((uLe,LF)=>{"use strict";var $I=ht(),{getTransactionAuditStorePath:tre}=gt(),lLe=NF(),ip=Gt(),rre=ce(),PF=OF(),nre=require("util").promisify,sre=nre(setTimeout),ire=1e4,ore=100;LF.exports=are;async function are(e){let t=tre(e.schema,e.table),r=await $I.openEnvironment(t,e.table,!0),n=$I.listDBIs(r);$I.initializeDBIs(r,ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new PF;do s=await cre(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 sre(ore);while(s.transactions_deleted>0);return i}o(are,"deleteAuditLogsBefore");async function cre(e,t){let r=new PF;try{let n=e.dbis[ip.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[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];rre.isEmpty(c)||(s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ire)break}return await s,r}catch(n){throw n}}o(cre,"deleteTransactions")});var vF=v((fLe,MF)=>{"use strict";var VI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};MF.exports=VI});var xF=v((hLe,UF)=>{"use strict";var lre=ai(),ure=tp(),pLe=vF(),Gi=(H(),M(W)),dre=ce(),KI=ht(),fre=Hi(),mre=ep(),pre=Qm(),{getSchemaPath:hre}=gt();UF.exports=Ere;async function Ere(e,t=!0){let r;e.schema===Gi.SYSTEM_SCHEMA_NAME?r=fre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await gre(e),s=hre(e.schema,e.table),i=await KI.openEnvironment(s,e.table);return t===!0&&await _re(e,i,r.hash_attribute),KI.dropDBI(i,e.attribute),n}o(Ere,"lmdbDropAttribute");async function _re(e,t,r){let n=KI.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(_re,"removeAttributeFromAllObjects");async function gre(e){let t=new lre(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await mre(t)).filter(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(dre.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new ure(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return pre(i)}o(gre,"dropAttributeFromSystem")});var qF=v((gLe,GF)=>{"use strict";var YI=ht(),Wu=Gt(),_Le=Cn(),WI=(H(),M(W)),BF=ce(),{getTransactionAuditStorePath:Sre}=gt(),Tre=Vu(),Tg=Gu(),yre=z();GF.exports=Rre;async function Rre(e){let t=Sre(e.schema,e.table),r=await YI.openEnvironment(t,e.table,!0),n=YI.listDBIs(r);YI.initializeDBIs(r,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return FF(r,e.search_values);case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Are(r,e.search_values,s);case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return bre(r,e.search_values);default:return FF(r)}}o(Rre,"readAuditLog");function FF(e,t=[0,Date.now()]){BF.isEmpty(t[0])&&(t[0]=0),BF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Wu.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 Tg,s))}o(FF,"searchTransactionsByTimestamp");function bre(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[Wu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,HF(e,i))}return Object.fromEntries(r)}o(bre,"searchTransactionsByUsername");function Are(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Tre.equals(e,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wu.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=HF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);kF(l,"records",r,d,a),kF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Are,"searchTransactionsByHashValues");function kF(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 Tg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Tg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(kF,"loopRecords");function HF(e,t){let r=[];try{let n=e.dbis[Wu.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 Tg,i);r.push(a)}}catch(i){yre.warn(i)}return r}catch(n){throw n}}o(HF,"batchSearchTransactions")});var VF=v((RLe,$F)=>{"use strict";var{getSchemaPath:TLe}=gt(),yLe=ht(),{database:Ire}=(Ne(),M(ft));$F.exports={writeTransaction:wre};async function wre(e,t,r){return Ire({database:e,table:t}).transaction(r)}o(wre,"writeTransaction")});var zF=v((ALe,WF)=>{"use strict";var{getSchemaPath:KF}=gt(),YF=ht();WF.exports={flush:Nre,resetReadTxn:Cre};async function Nre(e,t){return(await YF.openEnvironment(KF(e,t),t.toString())).flushed}o(Nre,"flush");async function Cre(e,t){try{(await YF.openEnvironment(KF(e,t),t.toString())).resetReadTxn()}catch{}}o(Cre,"resetReadTxn")});var XF=v((wLe,JF)=>{"use strict";var{Readable:Ore}=require("stream"),{getDatabases:Pre}=(Ne(),M(ft)),{readSync:Lre,openSync:Dre,createReadStream:jF}=require("fs"),{open:Mre}=require("lmdb"),{OpenDBIObject:QF}=qm(),vre=$m(),{AUDIT_STORE_OPTIONS:Ure}=(Ro(),M(sx)),{INTERNAL_DBIS_NAME:xre,AUDIT_STORE_NAME:Bre}=Gt();JF.exports=kre;var zI=32768,Fre=100;async function kre(e){let t=e.database||e.schema||"data",r=Pre()[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=Mre({noSync:!0,maxDbs:vre.MAX_DBS}),m,p=f.openDB(xre,new QF(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let L=f.openDB(S,R),O=d.openDB(S,R);for(let{key:x,version:j,value:k}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=L.put(x,k,j),E++%Fre===0&&(await new Promise(F=>setTimeout(F,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(L=>S.startsWith?.(L+"/"))){p.put(S,R);let[,L]=S.split("/"),O=!L,x=new QF(!O,O);await g(S,x)}e.include_audit&&await g(Bre,{...Ure}),await m;let b=jF(f.path);return b.headers=l(),b.on("close",()=>{h.done(),f.close()}),b}let a=r[Object.keys(r)[0]].primaryStore,c=Dre(a.path);return a.transaction(()=>{let u=Buffer.alloc(zI);Lre(c,u,0,zI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=jF(null,{fd:c,start:zI}),m=new Ore.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(kre,"getBackup")});var tk=v((CLe,ek)=>{"use strict";var Hre=z(),{handleHDBError:Gre}=Ee(),qre=L0(),$re=ug(),Vre=gI(),Kre=pB(),Yre=Qm(),Wre=II(),zre=HB(),jre=jB(),Qre=ep(),Jre=nF(),Xre=pF(),Zre=SF(),ene=yF(),tne=IF(),rne=DF(),nne=MI(),sne=xF(),ine=qF(),one=VF(),ZF=zF(),ane=XF(),jI=class extends qre{static{o(this,"LMDBBridge")}async searchByConditions(t){return Jre(t)}async getDataByHash(t){return await Wre(t)}async searchByHash(t){return await zre(t)}async getDataByValue(t,r){return await jre(t,r)}async searchByValue(t){return await Qre(t)}async createSchema(t){return await Kre(t)}async dropSchema(t){return await Xre(t)}async createTable(t,r){return await Zre(t,r)}async dropTable(t){return await nne(t)}async createAttribute(t){return await $re(t)}async createRecords(t){return await Vre(t)}async updateRecords(t){return await ene(t)}async upsertRecords(t){try{return await tne(t)}catch(r){throw Gre(r,null,null,Hre.ERR,r)}}async deleteRecords(t){return await Yre(t)}async dropAttribute(t){return await sne(t)}async deleteAuditLogsBefore(t){return await rne(t)}async readAuditLog(t){return await ine(t)}writeTransaction(t,r,n){return one.writeTransaction(t,r,n)}flush(t,r){return ZF.flush(t,r)}resetReadTxn(t,r){return ZF.resetReadTxn(t,r)}getBackup(t){return ane(t)}};ek.exports=jI});function Un(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ap(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a string, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a string, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a number, attempt to assign ${p}`);Un(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be a number, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ns.ClientError(`${u} must be a Date, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof As||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Un(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be an object, attempt to assign ${m}`);Un(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=QI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");Un(this)[l]=u}),a("deleteProperty",function(l){Un(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?sk:nk);break}c=l}while(c&&c!==nk&&c!==sk)}function ik(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(rk[t])return rk[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=QI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function cne(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 QI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends fl{static{o(this,"TrackedObject")}},ap(r,t)),new r(e)):new fl(e);case Array:let n=new Rg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=QI(a,t?.elements)),n[s]=a}return n;default:return e}}function bg(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=bg(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 ml(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=ml(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=Fb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ml(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)lne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function yg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[dl]||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(yg(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(yg(s))return!0}else return!0}else return!0}}return!1}var ns,rk,nk,sk,fl,lne,dl,Rg,op,JI=oe(()=>{ns=w(Ee());h_();Is();o(Un,"getChanges");o(ap,"assignTrackedAccessors");rk=Object.prototype,nk=new Proxy({},{get:ik}),sk=new Proxy({},{get:ik,set:cne});o(ik,"getProxiedProperty");o(cne,"setProxiedProperty");o(QI,"trackObject");fl=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}};ap(fl,{},!0);o(bg,"collapseData");lne=Object.prototype.hasOwnProperty;o(ml,"updateAndFreeze");o(yg,"hasChanges");dl=Symbol.for("has-array-changes"),Rg=class extends Array{static{o(this,"TrackedArray")}#e;[dl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[dl]=!0,super.splice(...t)}push(...t){return this[dl]=!0,super.push(...t)}pop(){return this[dl]=!0,super.pop()}unshift(...t){return this[dl]=!0,super.unshift(...t)}shift(){return this[dl]=!0,super.shift()}};Rg.prototype.constructor=Array;op=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var mk={};be(mk,{ResourceBridge:()=>ew});function tw({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 ok(e,t){let r=qi(e),n=tw(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;St(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&&bg(d)}catch(f){d={message:(0,fk.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 qi(e){let t=e.database||e.schema||dne,r=ot()[t];if(!r)throw(0,ci.handleHDBError)(new Error,une.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function ak(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*ck(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 lk,Ag,ci,uk,XI,ZI,dk,fk,une,dne,fne,mne,ew,pk=oe(()=>{lk=w(tk()),Ag=w(Ku()),ci=w(Ee());Ne();uk=w(Wm());H();XI=w(xo()),ZI=w(ts()),dk=w(ce());Na();JI();fk=w(z()),{HDB_ERROR_MSGS:une}=ci.hdbErrors,dne="data",fne=1e4,mne=10,ew=class extends lk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=qi(t);if(!r)throw new ci.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Ag.default)(t,"conditions");if(s)throw(0,ci.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:tw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new 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}]}Je({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await qi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=qi(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 qi(t).dropTable()}createSchema(t){return zu({database:t.schema,table:null}),XI.signalSchemaChange(new ZI.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await rw(t.schema),XI.signalSchemaChange(new ZI.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,uk.default)(t),s,i=ot()[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),St(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=bg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ot()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),St(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 ak(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ot()[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:jE.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,dk.asyncSetTimeout)(mne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%fne===0&&await u();return l.length>0&&await u(),s?ak(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ag.default)(t,"hashes");if(r)throw r;return ok(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ok(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&gb[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Ag.default)(t,"value");if(n)throw n;let s=qi(t);if(!s)throw new ci.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===jE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:tw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=qi(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){qi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return qi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=qi(t),n={};switch(t.search_type){case QE.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 QE.USERNAME:{let s=t.search_values;for await(let i of ck(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return ck(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(tw,"getSelect");o(ok,"getRecords");o(qi,"getTable");o(ak,"createDeleteResponse");o(ck,"groupRecordsInHistory")});var ss=v((kLe,hk)=>{"use strict";var{ResourceBridge:pne}=(pk(),M(mk)),hne=fe();hne.initSync();var Ig;function Ene(){return Ig||(Ig=new pne,Ig)}o(Ene,"getBridge");hk.exports=Ene()});var li=v((GLe,gk)=>{var _ne=Hi(),{promisify:gne}=require("util"),{getDatabases:_k}=(Ne(),M(ft));gk.exports={setSchemaDataToGlobal:Ek,getTableSchema:Sne,getSystemSchema:Tne,setSchemaDataToGlobalAsync:gne(Ek)};function Ek(e){global.hdb_schema=_k(),e&&e()}o(Ek,"setSchemaDataToGlobal");function Sne(e,t,r){let n=_k()[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(Sne,"getTableSchema");function Tne(){return _ne}o(Tne,"getSystemSchema")});var xn=v(($Le,Rk)=>{"use strict";var Ng=eI(),Qr=ce(),yne=require("util"),Cg=ss(),Rne=li(),Sk=z(),{handleHDBError:pl,hdbErrors:bne}=Ee(),{HTTP_STATUS_CODES:hl}=bne,Ane=yne.promisify(Rne.getTableSchema),Ine="updated",Tk="inserted",yk="upserted";Rk.exports={insert:Nne,update:Cne,upsert:One,validation:wne,flush:Pne};async function wne(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Ane(e.schema,e.table),r=Ng(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw Sk.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Sk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(wne,"validation");async function Nne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ng(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Cg.createRecords(e);return wg(Tk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Nne,"insertData");async function Cne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ng(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Cg.updateRecords(e);return Qr.isEmpty(n.existing_rows)?wg(Ine,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):wg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Cne,"updateData");async function One(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=Ng(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Cg.upsertRecords(e);return wg(yk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(One,"upsertData");function wg(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===Tk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===yk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(wg,"returnObject");function Pne(e){return Qr.transformReq(e),Cg.flush(e.schema,e.table)}o(Pne,"flush")});var sw=v((KLe,Ik)=>{var Lne=dt(),nw=require("joi"),{hdbTable:Dne,hdbDatabase:bk}=Fi(),Ak={schema:bk,database:bk,table:Dne},Mne={date:nw.date().iso().required()},vne={timestamp:nw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ik.exports=function(e,t){let r=t==="timestamp"?{...Ak,...vne}:{...Ak,...Mne},n=nw.object(r);return Lne.validateBySchema(e,n)}});var Ck=v((YLe,Nk)=>{var Une=dt(),iw=require("joi"),{hdbTable:xne,hdbDatabase:wk}=Fi(),Bne=iw.object({schema:wk,database:wk,table:xne,hash_values:iw.array().required(),ids:iw.array()});Nk.exports=function(e){return Une.validateBySchema(e,Bne)}});var lw=v((WLe,Ok)=>{"use strict";var ow=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}},aw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},cw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ok.exports={InsertObject:ow,NoSQLSeachObject:aw,DeleteResponseObject:cw}});var gl=v((jLe,vk)=>{"use strict";var Lk=sw(),Fne=Ck(),El=ce(),Pk=require("moment"),Dk=z(),{promisify:kne,callbackify:Hne}=require("util"),_l=(H(),M(W)),Gne=li(),uw=kne(Gne.getTableSchema),dw=ss(),{DeleteResponseObject:qne}=lw(),{handleHDBError:Ha,hdbErrors:$ne}=Ee(),{HDB_ERROR_MSGS:Og,HTTP_STATUS_CODES:Ga}=$ne,Vne="records successfully deleted",Kne=Hne(Mk);vk.exports={delete:Kne,deleteRecord:Mk,deleteFilesBefore:Yne,deleteAuditLogsBefore:Wne};async function Yne(e){let t=Lk(e,"date");if(t)throw Ha(t,t.message,Ga.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!Pk(e.date,Pk.ISO_8601).isValid())throw Ha(new Error,Og.INVALID_DATE,Ga.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Og.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ha(new Error,n,Ga.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await dw.deleteRecordsBefore(e);if(await uw(e.schema,e.table),Dk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Yne,"deleteFilesBefore");async function Wne(e){let t=Lk(e,"timestamp");if(t)throw Ha(t,t.message,Ga.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ha(new Error,Og.INVALID_VALUE("Timestamp"),Ga.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Og.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,Ga.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await dw.deleteAuditLogsBefore(e);return await uw(e.schema,e.table),Dk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Wne,"deleteAuditLogsBefore");async function Mk(e){e.ids&&(e.hash_values=e.ids);let t=Fne(e);if(t)throw Ha(t,t.message,Ga.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,Ga.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await uw(e.schema,e.table);let n=await dw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Vne}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new qne;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Mk,"deleteRecord")});var Ew={};be(Ew,{HASH_FUNCTION:()=>kr,hash:()=>pw,validate:()=>hw});function fw(e=lp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(cp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function pw(e,t=kr[xk?.toUpperCase()]??kr.SHA256){return mw[t](e)}function hw(e,t,r=kr[xk?.toUpperCase()]??kr.SHA256){return e?zne[r](e,t):!1}var cp,ju,Uk,xk,lp,Bk,kr,mw,zne,_w=oe(()=>{cp=w(require("node:crypto")),ju=w(require("argon2")),Uk=w(fe());H();xk=(0,Uk.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),lp=16,Bk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(fw,"generateSalt");mw={[kr.MD5]:(e,t=void 0)=>{t=t??fw(Bk);let r=cp.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??fw(lp);let r=cp.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=fw(lp),r=await ju.hash(e,{type:ju.argon2id,salt:Buffer.from(t)});return t+r}},zne={[kr.MD5]:(e,t)=>{let r=e.slice(0,Bk);return e===mw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,lp);return e===mw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await ju.verify(e.slice(lp),t)};o(pw,"hash");o(hw,"validate")});var kk=v((ZLe,Fk)=>{var gw=dt(),fn={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 jne(e){return fn.password.presence=!0,fn.username.presence=!0,fn.role.presence=!0,fn.active.presence=!0,gw.validateObject(e,fn)}o(jne,"addUserValidation");function Qne(e){return fn.password.presence=!1,fn.username.presence=!0,fn.role.presence=!1,fn.active.presence=!1,gw.validateObject(e,fn)}o(Qne,"alterUserValidation");function Jne(e){return fn.password.presence=!1,fn.username.presence=!0,fn.role.presence=!1,fn.active.presence=!1,gw.validateObject(e,fn)}o(Jne,"dropUserValidation");Fk.exports={addUserValidation:jne,alterUserValidation:Qne,dropUserValidation:Jne}});var Xk=v((rDe,Jk)=>{"use strict";var Sw=require("recursive-iterator"),Xne=require("alasql"),Tw=require("clone"),Hk=ce(),{handleHDBError:Gk,hdbErrors:Zne}=Ee(),{HDB_ERROR_MSGS:qk,HTTP_STATUS_CODES:$k}=Zne,{getDatabases:ese}=(Ne(),M(ft)),tse=["DISTINCT_ARRAY"],Vk=Symbol("validateTables"),yw=Symbol("validateTable"),tDe=Symbol("getAllColumns"),Kk=Symbol("validateAllColumns"),Pg=Symbol("findColumn"),Yk=Symbol("validateOrderBy"),up=Symbol("validateSegment"),Rw=Symbol("validateColumn"),Wk=Symbol("setColumnsForTable"),zk=Symbol("checkColumnsForAsterisk"),jk=Symbol("validateGroupBy"),Qk=Symbol("hasColumns"),bw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Vk](),this[zk](),this[Kk]()}[Vk](){if(this[Qk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yw](t.table)})}}[Qk](){let t=!1,r=new Sw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[yw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ese();if(!r[t.databaseid])throw Gk(new Error,qk.SCHEMA_NOT_FOUND(t.databaseid),$k.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Gk(new Error,qk.TABLE_NOT_FOUND(t.databaseid,t.tableid),$k.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Tw(s);i.table=Tw(t),this.attributes.push(i)})}[Pg](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[zk](){let t=new Sw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Wk](r.tableid)}[Wk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Xne.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Kk](){this[up](this.statement.columns,!1),this[up](this.statement.joins,!1),this[up](this.statement.where,!1),this[jk](this.statement.group,!1),this[up](this.statement.order,!0)}[up](t,r){if(!t)return;let n=new Sw(t),s=[];for(let{node:i,path:a}of n)!Hk.isEmpty(i)&&!Hk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Yk](i):s.push(this[Rw](i)));return s}[jk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&tse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Tw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Pg](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[Pg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Yk](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[Rw](t)}[Rw](t){let r=this[Pg](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]}};Jk.exports=bw});var rH=v((sDe,tH)=>{"use strict";var Zk=require("lodash"),dp=require("mathjs"),rse=require("jsonata"),eH=ce();tH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?Zk.uniqWith(e,Zk.isEqual):e,"distinct_array"),searchJSON:nse,mad:fp.bind(null,dp.mad),mean:fp.bind(null,dp.mean),mode:fp.bind(null,dp.mode),prod:fp.bind(null,dp.prod),median:fp.bind(null,dp.median)};function fp(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(fp,"aggregateFunction");function nse(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(eH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),eH.isEmpty(this.__ala__.res[r])){let n=rse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(nse,"searchJSON")});var sH=v((oDe,nH)=>{"use strict";var ur=require("moment"),Aw="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;nH.exports={current_date:o(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ur(e).utc().format(Aw),"date"),date_format:o((e,t)=>ur(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ur().utc().valueOf(),"now"),get_server_time:o(()=>ur().format(Aw),"get_server_time"),offset_utc:o((e,t)=>ur(e).utc().utcOffset(t).format(Aw),"offset_utc")}});var cH=v((cDe,aH)=>{"use strict";var sse=require("@turf/area"),ise=require("@turf/length"),ose=require("@turf/circle"),ase=require("@turf/difference"),cse=require("@turf/distance"),lse=require("@turf/boolean-contains"),use=require("@turf/boolean-equal"),dse=require("@turf/boolean-disjoint"),fse=require("@turf/helpers"),iH=(H(),M(W)),ze=ce(),ko=z();aH.exports={geoArea:mse,geoLength:pse,geoCircle:hse,geoDifference:Ese,geoDistance:oH,geoNear:_se,geoContains:gse,geoEqual:Sse,geoCrosses:Tse,geoConvert:yse};function mse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return sse.default(e)}catch(t){return ko.trace(t,e),NaN}}o(mse,"geoArea");function pse(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return ise.default(e,{units:t||"kilometers"})}catch(r){return ko.trace(r,e),NaN}}o(pse,"geoLength");function hse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return ose.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(hse,"geoCircle");function Ese(e,t){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return ase(e,t)}catch(r){return ko.trace(r,e,t),NaN}}o(Ese,"geoDifference");function oH(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return cse.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(oH,"geoDistance");function _se(e,t,r,n){if(ze.isEmpty(e)||ze.isEmpty(t))return!1;if(ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return oH(e,t,n)<=r}catch(s){return ko.trace(s,e,t),!1}}o(_se,"geoNear");function gse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return lse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(gse,"geoContains");function Sse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return use.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Sse,"geoEqual");function Tse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return!dse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Tse,"geoCrosses");function yse(e,t,r){if(ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ze.isEmpty(t))throw new Error("geo_type is required");if(ze.isEmpty(iH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(iH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),fse[t](e,r)}o(yse,"geoConvert")});var Lg=v((uDe,lH)=>{var Sl=rH(),is=sH(),$i=cH();lH.exports=e=>{e.aggr.mad=e.aggr.MAD=Sl.mad,e.aggr.mean=e.aggr.MEAN=Sl.mean,e.aggr.mode=e.aggr.MODE=Sl.mode,e.aggr.prod=e.aggr.PROD=Sl.prod,e.aggr.median=e.aggr.MEDIAN=Sl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Sl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Sl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=is.current_date,e.fn.current_time=e.fn.CURRENT_TIME=is.current_time,e.fn.extract=e.fn.EXTRACT=is.extract,e.fn.date=e.fn.DATE=is.date,e.fn.date_format=e.fn.DATE_FORMAT=is.date_format,e.fn.date_add=e.fn.DATE_ADD=is.date_add,e.fn.date_sub=e.fn.DATE_SUB=is.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=is.date_diff,e.fn.now=e.fn.NOW=is.now,e.fn.offset_utc=e.fn.OFFSET_UTC=is.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=is.get_server_time,e.fn.getdate=e.fn.GETDATE=is.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=is.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=$i.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=$i.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=$i.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=$i.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=$i.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=$i.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=$i.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=$i.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=$i.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=$i.geoNear}});var mH=v((dDe,fH)=>{"use strict";var mp=require("lodash"),Bn=require("alasql");Bn.options.cache=!1;var Rse=Lg(),uH=require("clone"),Dg=require("recursive-iterator"),qe=z(),nt=ce(),Qu=ss(),bse=(H(),M(W)),{hdbErrors:Ase}=Ee(),{getDatabases:dH}=(Ne(),M(ft)),Ise="IS NULL",ui="There was a problem performing this search. Please check the logs and try again.";Rse(Bn);var Iw=class{static{o(this,"SQLSearch")}constructor(t,r){if(nt.isEmpty(t))throw qe.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(),nt.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!nt.isEmptyOrZeroLength(n))return qe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw qe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),qe.error(n),new Error(ui)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw qe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),qe.error(n),new Error(ui)}if(Object.keys(this.data).length===0)return qe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw qe.error("Error thrown from processJoins in SQLSearch class method search."),qe.error(n),new Error(ui)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw qe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),qe.error(n),new Error(ui)}try{return t=await this._finalSQL(),t}catch(n){throw qe.error("Error thrown from finalSQL in SQLSearch class method search."),qe.error(n),new Error(ui)}}_getColumns(){let t=new Dg(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(uH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=mp.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=dH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(nt.isEmpty(this.statement.where)){qe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Dg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!nt.isEmpty(r)&&r.right)if(nt.isNotEmptyAndHasValue(r.right.value)){let n=nt.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Bn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=nt.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Bn.yy.LogicValue({value:i}):n instanceof Bn.yy.StringValue&&nt.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Bn.yy.NumValue({value:i}))});if(t){qe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Dg(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(!nt.isEmpty(bse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(nt.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(nt.isEmptyOrZeroLength(r.left.columnid)||nt.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(nt.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"=":!nt.isEmpty(r.right.value)||!nt.isEmpty(r.left.value)?n.add(nt.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(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from)&&nt.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&&mp.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(nt.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);nt.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(nt.isEmptyOrZeroLength(this.all_table_attributes)&&!nt.isEmptyOrZeroLength(this.columns.columns))return t;if(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Bn.promise(r)}catch(r){throw qe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),qe.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(uH(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(nt.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(Ise)>-1&&this.tables.forEach(s=>{let i={columnid:dH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=mp.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),!nt.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!nt.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Qu.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 qe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),qe.error(d),new Error(ui)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await Qu.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw qe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),qe.error(d),new Error(ui)}else if(!nt.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!nt.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await Qu.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw qe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),qe.error(d),new Error(ui)}else try{c.attribute=s.attribute,c.value="*";let d=await Qu.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 qe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),qe.error(d),new Error(ui)}}}_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 Bn.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 Bn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Bn.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 Bn.yy.FuncValue:new Bn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Bn.promise(h,t),t=null}catch(p){throw qe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),qe.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=mp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,b=E.length;g<b;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Dg(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=mp.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 qe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),qe.error(i),new Error(ui)}}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 Qu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw qe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),qe.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();qe.trace(`Final SQL: ${s}`),n=await Bn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),qe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw qe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),qe.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 qe.error(Ase.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),qe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await Qu.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 qe.error("There was an error when processing this SQL operation. Check your logs"),qe.error(a),new Error(ui)}}return Object.values(Object.values(this.data)[0].__mergedData)}};fH.exports=Iw});var mn=v((mDe,pH)=>{"use strict";var wse=Xk();pH.exports={searchByConditions:Cse,searchByHash:Ose,searchByValue:Pse,search:Lse};var ww=ss(),{transformReq:Nw}=ce(),Nse=mH();async function Cse(e){return Nw(e),ww.searchByConditions(e)}o(Cse,"searchByConditions");async function Ose(e){Nw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ww.searchByHash(e))r&&t.push(r);return t}o(Ose,"searchByHash");async function Pse(e){Nw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ww.searchByValue(e))t.push(r);return t}o(Pse,"searchByValue");function Lse(e,t){try{let r=new wse(e);r.validate(),new Nse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Lse,"search")});var Vi=v((hDe,gH)=>{"use strict";var pp=require("crypto"),Dse=fe(),{CONFIG_PARAMS:Mse}=(H(),M(W)),EH="aes-256-cbc",vse=32,Use=16,Cw=64,_H=32,xse=Cw+_H,hH=new Map;gH.exports={encrypt:Bse,decrypt:Fse,createNatsTableStreamName:kse};function Bse(e){let t=pp.randomBytes(vse),r=pp.randomBytes(Use),n=pp.createCipheriv(EH,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(Bse,"encrypt");function Fse(e){let t=e.substr(0,Cw),r=e.substr(Cw,_H),n=e.substr(xse,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=pp.createDecipheriv(EH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Fse,"decrypt");function kse(e,t){let r=Dse.get(Mse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hH.get(r);return n||(n=pp.createHash("md5").update(r).digest("hex"),hH.set(r,n)),n}o(kse,"createNatsTableStreamName")});var It=v((gDe,TH)=>{"use strict";var{platform:_De}=require("os"),Hse="nats-server.zip",Ow="nats-server",Gse=process.platform==="win32"?`${Ow}.exe`:Ow,qse=/^[^\s.,*>]+$/,SH="__request__",$se=o(e=>`${e}.${SH}`,"REQUEST_SUBJECT"),Vse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Kse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Yse={HUB:"hub.pid",LEAF:"leaf.pid"},Wse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},zse={SUCCESS:"success",ERROR:"error"},jse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Qse={TXN:"txn",MSGID:"msgid"},Ju={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Jse={[Ju.ERR]:1,[Ju.WRN]:2,[Ju.INF]:3,[Ju.DBG]:4,[Ju.TRC]:5},Xse={debug:"-D",trace:"-DVV"};TH.exports={NATS_SERVER_ZIP:Hse,NATS_SERVER_NAME:Ow,NATS_BINARY_NAME:Gse,PID_FILES:Yse,NATS_CONFIG_FILES:Kse,SERVER_SUFFIX:Wse,NATS_TERM_CONSTRAINTS_RX:qse,REQUEST_SUFFIX:SH,UPDATE_REMOTE_RESPONSE_STATUSES:zse,CLUSTER_STATUS_STATUSES:jse,REQUEST_SUBJECT:$se,SUBJECT_PREFIXES:Qse,MSG_HEADERS:Vse,LOG_LEVELS:Ju,LOG_LEVEL_FLAGS:Xse,LOG_LEVEL_HIERARCHY:Jse}});var Fn=v((TDe,Hr)=>{"use strict";var bH="username is required",AH="nothing to update, must supply active, role or password to update",IH="password cannot be an empty string",wH="If role is specified, it cannot be empty.",NH="active must be true or false";Hr.exports.addUser=aie;Hr.exports.alterUser=cie;Hr.exports.dropUser=uie;Hr.exports.getSuperUser=hie;Hr.exports.userInfo=die;Hr.exports.listUsers=vg;Hr.exports.listUsersExternal=fie;Hr.exports.setUsersWithRolesCache=Tl;Hr.exports.findAndValidateUser=Fw;Hr.exports.getClusterUser=Eie;Hr.exports.getUsersWithRolesCache=pie;Hr.exports.USERNAME_REQUIRED=bH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=AH;Hr.exports.EMPTY_PASSWORD=IH;Hr.exports.EMPTY_ROLE=wH;Hr.exports.ACTIVE_BOOLEAN=NH;var CH=xn(),Zse=gl(),hp=(_w(),M(Ew)),OH=kk(),Ep=mn(),vw=xo(),Ki=ce(),PH=require("validate.js"),Uw=z(),{promisify:eie}=require("util"),xw=Vi(),Lw=(H(),M(W)),yH=It(),tie=pt(),rie=fe(),nie=Hi(),{hdbErrors:sie,ClientError:di}=Ee(),{HTTP_STATUS_CODES:Ho,AUTHENTICATION_ERROR_MSGS:Pw,HDB_ERROR_MSGS:Xu}=sie,{UserEventMsg:Bw}=ts(),Dw=require("lodash"),{server:Mg}=(xr(),M(em)),iie=z();Mg.getUser=(e,t)=>Fw(e,t,t!=null);Mg.authenticateUser=(e,t)=>Fw(e,t);var LH={username:!0,active:!0,role:!0,password:!0},RH=new Map,oie=eie(Zse.delete),Mw=rie.get(Lw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,Yi;async function aie(e){let t=PH.cleanAttributes(e,LH),r=OH.addUserValidation(t);if(r)throw new di(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new di(Xu.ROLE_NAME_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new di(Xu.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=xw.encrypt(t.password)),t.password=await hp.hash(t.password,Mw),t.hash_function=Mw,t.role=n[0].id;let s=await CH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Uw.debug(s),await Tl(),s.skipped_hashes.length===1)throw new di(Xu.USER_ALREADY_EXISTS(t.username),Ho.CONFLICT);return vw.signalUserChange(new Bw(process.pid)),`${t.username} successfully added`}o(aie,"addUser");async function cie(e){let t=PH.cleanAttributes(e,LH);if(Ki.isEmptyOrZeroLength(t.username))throw new Error(bH);if(Ki.isEmptyOrZeroLength(t.password)&&Ki.isEmptyOrZeroLength(t.role)&&Ki.isEmptyOrZeroLength(t.active))throw new Error(AH);if(!Ki.isEmpty(t.password)&&Ki.isEmptyOrZeroLength(t.password.trim()))throw new Error(IH);if(!Ki.isEmpty(t.active)&&!Ki.isBoolean(t.active))throw new Error(NH);if(!Ki.isEmpty(t.password)&&!Ki.isEmptyOrZeroLength(t.password.trim())&&(lie(t.username)&&(t.hash=xw.encrypt(t.password)),t.password=await hp.hash(t.password,Mw)),t.role==="")throw new Error(wH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new di(Xu.ALTER_USER_ROLE_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new di(Xu.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);t.role=n[0].id}let r=await CH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Tl(),vw.signalUserChange(new Bw(process.pid)),r}o(cie,"alterUser");function lie(e){let t=!1,r=Yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(lie,"isClusterUser");async function uie(e){let t=OH.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),Ho.NOT_FOUND);let r=await oie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Uw.debug(r),await Tl(),vw.signalUserChange(new Bw(process.pid)),`${e.username} successfully deleted`}o(uie,"dropUser");async function die(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Dw.cloneDeep(e.hdb_user);let r=await Ep.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(die,"userInfo");async function fie(){let e=await vg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(fie,"listUsersExternal");async function vg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Dw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Dw.cloneDeep(s),s.role=t[s.role],mie(s.role),n.set(s.username,s);return n}o(vg,"listUsers");function mie(e){if(!e){Uw.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(nie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(mie,"appendSystemTablesToRole");async function Tl(e=void 0){e?Yi=e:Yi=await vg()}o(Tl,"setUsersWithRolesCache");async function pie(){return Yi||await Tl(),Yi}o(pie,"getUsersWithRolesCache");async function Fw(e,t,r=!0){Yi||await Tl();let n=Yi.get(e);if(!n){if(!r)return{username:e};throw new di(Pw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}if(n&&!n.active)throw new di(Pw.USER_INACTIVE,Ho.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(RH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)RH.set(t,n.password);else throw new di(Pw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}}return s}o(Fw,"findAndValidateUser");async function hie(){Yi||await Tl();for(let[,e]of Yi)if(e.role.role==="super_user")return e}o(hie,"getSuperUser");async function Eie(){let e=await vg(),t=tie.getConfigFromFile(Lw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Lw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=xw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+yH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+yH.SERVER_SUFFIX.ADMIN,r}o(Eie,"getClusterUser");var DH=[];Mg.invalidateUser=function(e){for(let t of DH)try{t(e)}catch(r){iie.error("Error invalidating user",r)}};Mg.onInvalidatedUser=function(e){DH.push(e)}});var He,Zu=oe(()=>{He={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var ed,kw=oe(()=>{Zu();ed=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==He.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(He.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=He.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(He.WARNING,t)}markLoading(t){this.updateStatus(He.LOADING,t||"Component is loading")}isHealthy(){return this.status===He.HEALTHY}hasError(){return this.status===He.ERROR}isLoading(){return this.status===He.LOADING}hasWarning(){return this.status===He.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var yl,qa,Hw,td,Gw,rd,qw,Ug=oe(()=>{yl=w(Kr()),qa=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},Hw=class extends qa{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,yl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},td=class extends qa{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Gw=class extends qa{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},rd=class extends qa{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},qw=class extends qa{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,yl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
- `)}}});var MH,Rl,vH,$a,_p,nd,_ie,xg,$w=oe(()=>{MH=w(ts()),Rl=w(rt());H();vH=w(Qn());Zu();Ug();$a=(0,vH.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Rl.onMessageByType)(JE.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;$a.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&($a.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,Rl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),$a.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),b=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),$a.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(b)},"cleanup");this.responseCheckers.set(r,g),(0,MH.sendItcEvent)({type:JE.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new td("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Rl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return $a.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof td?$a.error?.(`ITC failure during component status collection: ${r.message}`):$a.warn?.("Failed to collect component status from all threads:",r),$a.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Rl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},nd=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let b=parseInt(E.substring(7));isNaN(b)||(n.workers[b]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==He.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[He.ERROR,He.WARNING,He.LOADING,He.UNKNOWN,He.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return He.UNKNOWN}},_ie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),xg=new _p(_ie)});var Va,Bg=oe(()=>{kw();Zu();$w();Ug();Va=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new rd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(He).includes(r))throw new rd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(He).join(", ")}`);this.statusMap.set(t,new ed(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,He.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,He.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,He.WARNING,r)}initializeLoading(t,r){this.setStatus(t,He.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,He.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,He.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[He.HEALTHY]:0,[He.ERROR]:0,[He.WARNING]:0,[He.LOADING]:0,[He.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await xg.collect(t);return nd.aggregate(r)}}});var dr,Fg=oe(()=>{Bg();dr=new Va});function xH(e){let t=UH.get(e);return t||(t=new Vw(e),UH.set(e,t)),t}function BH(){dr.reset()}var Vw,UH,Go,FH,kH=oe(()=>{Fg();Zu();Vw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return dr.setStatus(this.componentName,He.HEALTHY,t),this}warning(t){return dr.setStatus(this.componentName,He.WARNING,t),this}error(t,r){return dr.setStatus(this.componentName,He.ERROR,t,r),this}loading(t){return dr.setStatus(this.componentName,He.LOADING,t||"Loading..."),this}unknown(t){return dr.setStatus(this.componentName,He.UNKNOWN,t),this}get(){return dr.getStatus(this.componentName)}},UH=new Map;o(xH,"statusForComponent");Go={loading(e,t){dr.initializeLoading(e,t)},loaded(e,t){dr.markLoaded(e,t)},failed(e,t,r){dr.markFailed(e,t,r)}};o(BH,"reset");FH=He});var gp={};be(gp,{AggregationError:()=>Gw,COMPONENT_STATUS_LEVELS:()=>He,ComponentStatus:()=>ed,ComponentStatusError:()=>qa,ComponentStatusOperationError:()=>rd,ComponentStatusRegistry:()=>Va,CrossThreadCollectionError:()=>qw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>Hw,ITCError:()=>td,StatusAggregator:()=>nd,componentStatusRegistry:()=>dr,crossThreadCollector:()=>xg,query:()=>gie});var gie,HH=oe(()=>{Fg();Bg();kw();Bg();$w();Fg();Ug();Zu();gie={get(e){return dr.getStatus(e)},all(){return dr.getAllStatuses()},byStatus(e){return dr.getComponentsByStatus(e)},summary(){return dr.getStatusSummary()},async allThreads(){return Va.getAggregatedFromAllThreads(dr)}}});var Kw={};be(Kw,{STATUS:()=>FH,internal:()=>gp,lifecycle:()=>Go,reset:()=>BH,statusForComponent:()=>xH});var Sp=oe(()=>{kH();HH()});var yp=v((eMe,$H)=>{"use strict";var os=z(),pn=(H(),M(W)),Sie=I0(),Tie=Fn(),{validateEvent:Yw}=ts(),Tp=ss(),yie=require("process"),{resetDatabases:Rie}=(Ne(),M(ft)),bie={[pn.ITC_EVENT_TYPES.SCHEMA]:Aie,[pn.ITC_EVENT_TYPES.USER]:qH,[pn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:wie};async function Aie(e){let t=Yw(e);if(t){os.error(t);return}os.trace("ITC schemaHandler received schema event:",e),await Sie(e.message),await Iie(e.message)}o(Aie,"schemaHandler");async function Iie(e){try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Rie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){os.error(t)}}o(Iie,"syncSchemaMetadata");var GH=[];async function qH(e){try{try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){os.warn(r)}let t=Yw(e);if(t){os.error(t);return}os.trace(`ITC userHandler ${pn.HDB_ITC_CLIENT_PREFIX}${yie.pid} received user event:`,e),await Tie.setUsersWithRolesCache();for(let r of GH)r()}catch(t){os.error(t)}}o(qH,"userHandler");qH.addListener=function(e){GH.push(e)};async function wie(e){try{let t=Yw(e);if(t){os.error(t);return}os.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),M(Kw)),{getWorkerIndex:n}=rt(),{sendItcEvent:s}=ts(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:pn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?os.trace(`Sent component status response directly to thread ${u}`):(u===void 0?os.debug("No originator threadId, falling back to broadcast"):os.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){os.error("Error handling component status request:",t)}}o(wie,"componentStatusRequestHandler");$H.exports=bie});var ts=v((oMe,KH)=>{"use strict";var rMe=z(),Ww=ce(),Nie=(H(),M(W)),{ITC_ERRORS:Rp}=Kr(),{parentPort:nMe,threadId:Cie,isMainThread:Oie,workerData:sMe}=require("worker_threads"),{onMessageFromWorkers:Pie,broadcast:iMe,broadcastWithAcknowledgement:Lie}=rt();KH.exports={sendItcEvent:Die,validateEvent:VH,SchemaEventMsg:Mie,UserEventMsg:vie};var kg;Pie(async(e,t)=>{kg=kg||yp(),VH(e),kg[e.type]&&await kg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Die(e){return!Oie&&e.message&&(e.message.originator=Cie),Lie(e)}o(Die,"sendItcEvent");function VH(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ww.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ww.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ww.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(Nie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(VH,"validateEvent");function Mie(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(Mie,"SchemaEventMsg");function vie(e){this.originator=e}o(vie,"UserEventMsg")});var xo=v((lMe,jH)=>{"use strict";var YH=(H(),M(W)),cMe=ce(),Hg=z(),WH=a0(),sd,{sendItcEvent:zH}=ts();function Uie(e){try{Hg.debug("signalSchemaChange called with message:",e),sd=sd||yp();let t=new WH(YH.ITC_EVENT_TYPES.SCHEMA,e);return sd.schema(t),zH(t)}catch(t){Hg.error(t)}}o(Uie,"signalSchemaChange");function xie(e){try{Hg.trace("signalUserChange called with message:",e),sd=sd||yp();let t=new WH(YH.ITC_EVENT_TYPES.USER,e);return sd.user(t),zH(t)}catch(t){Hg.error(t)}}o(xie,"signalUserChange");jH.exports={signalSchemaChange:Uie,signalUserChange:xie}});function bp(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 Ds(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 Ds,Ap=oe(()=>{Ds=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(bp,"appendHeader");o(QH,"mergeHeaders")});function Gg(e,t,r=Fie){let n;return function(...i){return n?n.length*zw>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();zw=(zw*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,Bie,Fie,JH,kie,jw,XH,zw,Qw=oe(()=>{ZH=w(Qn()),Bie=3e3,Fie=2e4,JH=0,kie=3e4,jw=3e3,XH=performance.now()+jw,zw=0;o(Gg,"throttle");setInterval(()=>{let e=performance.now();e-XH-jw>Bie&&JH+kie<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},jw).unref()});var uG={};be(uG,{EVICTED:()=>Ma,INVALIDATED:()=>Ln,coerceType:()=>$g,makeTable:()=>Kg});function Kg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:b}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=DA(i,n,l),L,O,x={},j=Promise.resolve(),k,F,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(k=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(F=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(x=K);let Y,de=[],le=[],ee=1,Re=2,Ie={},$e={},ke=864e5,yr=0,Jt,kt,Xt,kf=!1,Dc,Ht,Hf,Gf=Al.get(U.REPLICATION_DATABASES);if(Array.isArray(Gf)){for(let K of Gf)if(K.name===c&&K.replicateTo>=0){Hf=K.replicateTo;break}}let kE=i.getRange({start:!1,end:!1}).constructor,HE=10,sb=6;g&&pu(),Nm(i.env.path,K=>{if(O)return Uc(K)});class qf extends fl{static{o(this,"Updatable")}getUpdatedTime(){return La.get(this.getRecord())?.version}getExpiresAt(){return La.get(this.getRecord())?.expiresAt}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.set(_,new op(y));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,y){return this.addTo(_,-y)}}class Oe extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=k;static updatedTimeProperty=F;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,y){if(y&&(this.sourceOptions=y,(y.expiration||y.eviction||y.scanInterval)&&this.setTTLExpiration(y)),y?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(P=>!P.intermediateSource)){if(this.sources.some(P=>P.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),L=L||_.load;let T=o(P=>{let D=this.sources;if(D=D.filter(G=>G.intermediateSource&&G[P]&&(!G[P].reliesOnPrototype||G.prototype[P])),D.length>0)if(D.length===1){let G=D[0];return(C,B,q)=>{if(C?.source!==G)return G[P](B,q,C)}}else return(G,C,B)=>{let q=[];for(let te of D){if(G?.source===te)break;q.push(te[P](C,B,G))}return Promise.all(q)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1];A.intermediateSource&&(A={});let I=o(P=>{if(A[P]&&(!A[P].reliesOnPrototype||A.prototype[P]))return(D,G,C)=>{if(!D?.source)return A[P](G,C,D)}},"getApplyToCanonicalSource");Ie={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},$e={put:T("put"),patch:T("patch"),delete:T("delete"),publish:T("publish"),invalidate:T("invalidate")};let N=A.shouldRevalidateEvents;return(async()=>{let P=!1,D,G=o(async(C,B)=>{let q=C.value,te=C.table?De[c][C.table]:Oe;if(c===Qf&&(C.table===Eu.ROLE_TABLE_NAME||C.table===Eu.USER_TABLE_NAME)&&(P=!0),C.id===void 0&&(C.id=q[te.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=_;let X={residencyId:go(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},$=C.id,Le=await te.getResource($,B,X);switch(C.finished&&await C.finished,C.type){case"put":return N?Le._writeInvalidate($,q,X):Le._writeUpdate($,q,!0,X);case"patch":return N?Le._writeInvalidate($,q,X):Le._writeUpdate($,q,!1,X);case"delete":return Le._writeDelete($,X);case"publish":case"message":return Le._writePublish($,q,X);case"invalidate":return Le._writeInvalidate($,q,X);case"relocate":return Le._writeRelocate($,X);default:ve.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=_.subscribe;C&&b==null&&(b=!0);let B={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},q=_.subscribeOnThisThread?_.subscribeOnThisThread((0,bl.getWorkerIndex)(),B):(0,bl.getWorkerIndex)()===0,te=C&&q&&await _.subscribe?.(B);if(te){let X;for await(let $ of te)try{if(!($.type==="transaction"?$.writes[0]:$)){ve.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&D!==$.localTime){if($.remoteNodeIds?.length>0){let ie=[Symbol.for("seq"),$.remoteNodeIds[0]],re=d.get(ie),ne=re?.nodes;ne||(ne=[]);for(let me of $.remoteNodeIds.slice(1)){let he=ne.find(Ve=>Ve.id===me);ne=ne.filter(Ve=>Ve.id!==me||Ve===he),he||(he={id:me,seqId:0},ne.push(he)),he.seqId=Math.max(re?.seqId??1,$.localTime),me===X?.nodeId&&(he.lastTxnTime=$.timestamp)}let _e=Math.max(re?.seqId??1,$.localTime);ve.default.trace?.("Received txn",c,_e,new Date(_e),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(ie,{seqId:_e,nodes:ne})}D=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(G($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let ae=St($,()=>{if($.type==="transaction"){let ie=[];for(let re of $.writes)try{ie.push(G(re,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify($),ne}return Promise.all(ie)}else if($.type==="define_schema"){let ie=this.attributes.slice(0),re=!1;for(let ne of $.attributes)ie.find(_e=>_e.name===ne.name)||(ie.push(ne),re=!0);re&&(Je({table:s,database:c,attributes:ie,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[G($,$)],new Promise(ie=>{X.resolve=()=>ie(Promise.all(X.write_promises))})):G($,$)});X&&(X.committed=ae),P&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),$.onCommit&&(ae?ae.then($.onCommit):$.onCommit())}catch(Le){ve.default.error?.("error in subscription handler",Le)}}}catch(C){ve.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Oe.prototype.get}static getResource(_,y,T){let A=super.getResource(_,y,T);if(this.loadAsInstance===!1&&(y._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(A.getRecord?.())return A;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let I=!T?.async||i.cache?.get?.(_),N=br(y),P=N.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Mc(_,y,{transaction:P,ensureLoaded:T?.ensureLoaded},I,D=>{if(D?Oe._updateResource(A,D):A.#e=null,y.onlyIfCached){if(!A.doesExist())throw new ct.ServerError("Entry is not cached",504)}else if(T?.ensureLoaded){let G=ya(_,D,y,A);if(G)return N?.disregardReadTxn(),A.#i=!0,y.loadedFromSource=!0,Ms(G,C=>(Oe._updateResource(A,C),A))}return A})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(_)),I}}return A}static _updateResource(_,y){_.#n=y,_.#e=y?.value??null,_.#r=y?.version}ensureLoaded(){let _=ya(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Ms(_,y=>{this.#n=y,this.#e=y.value,this.#r=y.version})}static getNewId(){let _=x?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Ht){let I=i.getEntry(Symbol.for("id_allocation")),N=I?.value,P;if(N&&N.nodeName===server.hostname&&(!Jie(i)||N.pid===process.pid)){let D=N.start,G=N.end;P=D;for(let C of i.getKeys({start:G,end:D,limit:1,reverse:!0}))P=C}else N=A(I?.version??null),P=N.start;Ht=new BigInt64Array([BigInt(P)+1n]),Ht=new BigInt64Array(i.getUserSharedBuffer("id",Ht.buffer)),Ht.maxSafeId=N.end}let y=Number(Atomics.add(Ht,0,1n)),T=_==="Int"?512:1048576;if(y+T>=Ht.maxSafeId){let I=o(N=>{Ht.maxSafeId=y+(_==="Int"?1023:4194303);let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=N?void 0:i.useReadTransaction(),G=Number(Ht[0]);for(let q of i.getKeys({start:G+1,end:P,limit:1,transaction:D}))P=q;D?.done();let{value:C,version:B}=i.getEntry(Symbol.for("id_allocation"));if(Ht.maxSafeId<P){if(C.end>Ht.maxSafeId-100)return;ve.default.info?.("New id allocation",y,Ht.maxSafeId,B),i.put(Symbol.for("id_allocation"),{start:C.start,end:Ht.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),B)}else{ve.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ht.maxSafeId}, but id of ${P} detected`);let q=A(B);q.alreadyUpdated||Atomics.store(Ht,0,BigInt(q.start+1)),Ht.maxSafeId=q.end}},"updateEnd");y+T===Ht.maxSafeId?setImmediate(I):y+100>=Ht.maxSafeId&&(ve.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return y;function A(I){let N=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,P=N/4,D,G,C=!1,B,q;do{B=Math.floor(Math.random()*N),q={start:B,end:B+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let te of i.getKeys({start:B,limit:1,reverse:!0}))D=te;G=N;for(let te of i.getKeys({start:B+1,end:N,limit:1}))G=te;P*=.875,P<1e3&&!C&&(C=!0,ve.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,B,D,G,P))}while(!(P<G-B&&(P<B-D||D===0)));return i.transactionSync(()=>{let te=i.getEntry(Symbol.for("id_allocation"));return(te?.version??null)==I?(ve.default.info?.("Allocated new id range",q),i.put(Symbol.for("id_allocation"),q,Date.now()),q):(ve.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...te.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,ke=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");ke=ke||(h+E)/4,Uc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Oe.getResidency=_&&((y,T)=>{try{return _(y,T)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static setResidencyById(_){Oe.getResidencyById=_&&(y=>{try{return _(y)}catch(T){throw T.message+=` in residency function for table ${s}`,T}})}static getResidency(_,y){if(Oe.getResidencyById)return Oe.getResidencyById(_[t]);let T=Hf;if(y.replicateTo!=null){if(Array.isArray(y.replicateTo))return y.replicateTo.includes(server.hostname)?y.replicateTo:[server.hostname,...y.replicateTo];y.replicateTo>=0&&(T=y.replicateTo)}if(T>=0&&server.nodes){let A=[server.hostname];if(y.previousResidency)A.push(...y.previousResidency.slice(0,T));else{let I=server.nodes.map(D=>D.name),N=Math.floor(I.length*Math.random());A.push(...I.slice(N,N+T));let P=N+T-I.length;P>0&&A.push(...I.slice(0,P))}return A}}static enableAuditing(){g||(g=!0,pu(),Oe.audit=!0)}static coerceId(_){return _===""?null:$g(_,x)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Pn&&_.value&&Ca(_.value);if(c===a){for(let _ of S)d.remove(Oe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Oe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Xw.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let y=this.constructor;if(typeof _=="string"&&y.loadAsInstance!==!1)return this.getProperty(_);if(Vf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let T={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Oe.getRecordCount().then(A=>(T.recordCount=A.recordCount,T.estimatedRecordRange=A.estimatedRange,T)):T}if(_!==void 0&&y.loadAsInstance===!1){let T=this.getContext(),A=br(T),I=A.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let N=Rr(_);Mr(N);let P=!0;return _.checkPermission&&(P=this.allowRead(T.user,_)),Ms(Ms(P,D=>{if(!D)throw new ct.AccessViolation(T.user);let G=!0;return Mc(N,T,{transaction:I,ensureLoaded:G},!1,C=>{if(T.onlyIfCached){if(!C?.value)throw new ct.ServerError("Entry is not cached",504)}else if(G){let B=ya(N,C,T);if(B)return A?.disregardReadTxn(),T.loadedFromSource=!0,B.then(q=>q?.value)}return C?.value})}),D=>{let G=_?.select;return G&&D!=null?Bu(G,this.constructor)(D):D})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,y){let T=Vr(_,y);if(T?.read){if(T.isSuperUser)return!0;let A=T.attribute_permissions,I=y?.select;if(A?.length>0||kf&&I){if(y||(y={}),I){let N=A?.length>0&&Jw(A,"read");y.select=I.map(P=>{let D=P.name||P;if(!N||N[D]){let G=Xt[D]?.definition?.tableClass;if(G){if(P.name||(P={name:P}),!P.checkPermission&&y.checkPermission&&(P.checkPermission=y.checkPermission),!G.prototype.allowRead.call(null,_,P))return!1;if(!P.select)return P.name}return P}}).filter(Boolean)}else y.select=A.filter(N=>N.read&&!Xt[N.attribute_name]).map(N=>N.attribute_name);return y}else return!0}}allowUpdate(_,y,T){let A=Vr(_,T);if(A?.update){let I=A.attribute_permissions;if(I?.length>0){let N=Jw(I,"update");for(let P in y)if(!N[P])return!1;for(let P of I){let D=P.attribute_name;!P.update&&!(D in y)&&(y[D]=this.getProperty(D))}}return vc(this.getContext())}}allowCreate(_,y,T){if(this.isCollection){let A=Vr(_,T);if(A?.insert){let I=A.attribute_permissions;if(I?.length>0){let N=Jw(I,"insert");for(let P in y)if(!N[P])return!1;return vc(this.getContext())}else return vc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,y){return Vr(_,y)?.delete&&vc(this.getContext())}update(_,y){let T,A=typeof y=="boolean"||y===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),I=!1;A?(I=y,y=_,T=this.getId()):T=Rr(_);let N=this.getContext();if(!br(N))throw new Error("Can not update a table resource outside of a transaction");if(y===!1)return this;if(typeof y=="object"&&y)if(I)Object.isFrozen(y)&&(y={...y}),this.#e={},this.#t=y;else if(A){let D=this.#t;D&&(y=Object.assign(D,y)),this.#t=y}else{let D=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(D=this.allowUpdate(N.user,y,_)),Ms(D,G=>{if(!G)throw new ct.AccessViolation(N.user);return Ms(i.get(Rr(_)),C=>{let B=new qf(C);return B._setChanges(y),this._writeUpdate(T,B.getChanges(),!1),B})})}return this._writeUpdate(T,this.#t,I),this}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.#s===tG?this.set(_,(+this.getProperty(_)||0)+y):(this.#s||this.update(),this.set(_,new op(y)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,y){if(typeof y=="number")return this.addTo(_,-y);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let y=!0,T=this.getContext();return _?.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new ct.AccessViolation(T.user);this._writeInvalidate(_?Rr(_):this.getId())})}_writeInvalidate(_,y,T){let A=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.invalidate?.bind(this,A,_),beforeIntermediate:Bc(y,$e.invalidate?.bind(this,A,_)),commit:o((N,P)=>{if(!(Ra(N,P,T?.nodeId)<=0)){y??=null;for(let D in r)y||(y={}),y[D]===void 0&&(y[D]=this.getProperty(D));ve.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,y,P,N,Ln,g,{user:A?.user,residencyId:T?.residencyId,nodeId:T?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,y){let T=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.relocate?.bind(this,T,_),beforeIntermediate:$e.relocate?.bind(this,T,_),commit:o((I,N)=>{if(Ra(I,N,y?.nodeId)<=0)return;let P=Oe.getResidencyRecord(y.residencyId),D=0,G=null,C=N?.value;if(P&&!P.includes(server.hostname)){for(let B in r)G||(G={}),G[B]=C[B];D=Ln}else G=C;ve.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(I).toISOString()}`),R(_,G,N,I,D,g,{user:T.user,residencyId:y.residencyId,nodeId:y.nodeId,expiresAt:y.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,y){let T={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},A=xc(this.getResidency(y.value,T)),I;if(A){if(!A.includes(server.hostname))return!1;I=go(A)}let N=0;ve.default.debug?.("Performing a relocate of an entry",existing_entry.key,y.value,A);let P=R(_.key,y.value,_,_.version,N,!0,{residencyId:I,expiresAt:y.expiresAt},"relocate",!1,null);return!0}static evict(_,y,T){let A=this.Source,I;if(!((O||g)&&(!y||(I=i.getEntry(_),!I||!y)||I.version!==T))){if(O){if(i.hasLock(_,I.version))return;let N;for(let P in r)N||(N={}),N[P]=y[P];if(N)return R(_,N,I,T,Ma,null,null,null,!0)}if(i.ifVersion(_,T,()=>{_o(_,y,null)}),g)return R(_,null,I,T,Ma,null,null,null,!0);rl(i,I??i.getEntry(_),T)}}lock(){throw new Error("Not yet implemented")}static operation(_,y){return _.table||=s,_.schema||=c,global.operation(_,y)}put(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!0);else{let T=!0;if(_==null)throw new TypeError("Can not put a record without a target");let A=this.getContext();return _.checkPermission&&(T=this.allowUpdate(A.user,y,_)),Ms(T,I=>{if(!I)throw new ct.AccessViolation(A.user);if(Array.isArray(y))for(let N of y){let P=N[t];this._writeUpdate(P,N,!0)}else{let N=Rr(_);this._writeUpdate(N,y,!0)}})}}create(_,y){let T=!0,A=this.getContext();if(!y&&!(_ instanceof URLSearchParams)&&(y=_,_=void 0),!y||typeof y!="object"||Array.isArray(y))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(T=this.allowCreate(A.user,y,_)),Ms(T,I=>{if(!I)throw new ct.AccessViolation(A.user);let N=Rr(_)??y[t];if(N===void 0)N=this.constructor.getNewId();else if(i.get(N))throw new ct.ClientError("Record already exists",409);return this._writeUpdate(N,y,!0),y})}patch(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!1);else{let T=this.update(_,y);if(T?.then)return T.then(()=>{})}}_writeUpdate(_,y,T,A){let I=this.getContext(),N=br(I);Mr(_);let P=this.#n??i.getEntry(_);this.#s=T?tG:Wie;let D=o(C=>T?C.put?()=>C.put(I,_,y):null:C.patch?()=>C.patch(I,_,y):C.put?()=>C.put(I,_,ml(this)):null,"writeToSources"),G={key:_,store:i,entry:P,nodeName:I?.nodeName,validate:o(C=>{y||(y=this.#t),T||y&&yg(this.#t===y?this:y)?I?.source||(N.checkOverloaded(),this.validate(y,!T),F&&(y[F.name]=F.type==="Date"?new Date(C):F.type==="String"?new Date(C).toISOString():C),T&&(t&&y[t]!==_&&(y[t]=_),k&&(P?.value?y[k.name]=P?.value[k.name]:y[k.name]=k.type==="Date"?new Date(C):k.type==="String"?new Date(C).toISOString():C),y=ml(y))):N.removeWrite(G)},"validate"),before:D(Ie),beforeIntermediate:Bc(y,D($e)),commit:o((C,B,q)=>{if(q){if(I&&B?.version>(I.lastModified||0)&&(I.lastModified=B.version),this.#n=B,B?.value&&B.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");T||(this.#e=B?.value??null)}this.#t=void 0,this.#r=C;let te=B?.value,X;this.#s=0;let $=!1,Le=Ra(C,B,A?.nodeId),ae;if(Le<=0){if(g){let me=B.localTime,he=B.version;ve.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(C),"applying later update from:",new Date(he),"local recorded time",new Date(me));let Ve=[];for(;me>C||he>=C&&me>0;){let we=l.get(me);if(!we)break;let Xe=vt(we);if(he=Xe.version,he>=C){if(he===C){if(Le=Ra(C,{version:he,localTime:me},A?.nodeId),Le===0)return;if(Le>0)continue}if(Xe.type==="patch")Ve.push(Xe),ae=y;else if(Xe.type==="put"||Xe.type==="delete")return}me=Xe.previousLocalTime}me||ve.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",B),Ve.sort((we,Xe)=>we.version-Xe.version);for(let we of Ve){let Xe=we.getValue(i);if(ve.default.debug?.("Rebuilding update with future patch:",new Date(we.version),Xe,we),X=p_(X??y,Xe,T),!X)return}}else{if(T)return;X=p_(X??y,te,T),ve.default.debug?.("Rebuilding update without audit:",X)}ve.default.trace?.("Rebuilt record to save:",X," is full update:",T)}let ie;if(T&&!X?ie=y:this.constructor.loadAsInstance===!1?ie=ml(te,X??y):(this.#e=te,ie=ml(this,X??y)),this.#e=ie,ie&&ie.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let re;if(A?.residencyId!=null)re=A.residencyId;else{P?.residencyId&&(I.previousResidency=Oe.getResidencyRecord(P.residencyId));let me=xc(Oe.getResidency(ie,I));if(me&&!me.includes(server.hostname))if(ae??=ie,$=!0,Oe.getResidencyById)ie=void 0;else{ie=null;for(let he in r)ie||(ie={}),ie[he]=ae[he]}re=go(me)}T||(ae=y);let ne=I?.expiresAt??(h?h+Date.now():-1);ve.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(C).toISOString()}${ne?", expires at: "+new Date(ne).toISOString():""}${B?", replaces entry from: "+new Date(B.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ie).slice(0,100)}catch{return""}})()),_o(_,te,ie);let _e=T?"put":"patch";R(_,ie,B,C,$?Ln:0,g,{omitLocalRecord:$,user:I?.user,residencyId:re,expiresAt:ne,nodeId:A?.nodeId,originatingOperation:I?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ae),I.expiresAt&&Uc()},"commit")};N.addWrite(G)}async delete(_){if(Vf(_)){_.select=["$id"];for await(let y of this.search(_))this._writeDelete(y.$id);return!0}if(_){let y=!0,T=this.getContext();return _.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new ct.AccessViolation(T.user);let I=Rr(_);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,y){let T=br(this.getContext());Mr(_);let A=this.getContext();return T.addWrite({key:_,store:i,entry:this.#n,nodeName:A?.nodeName,before:Ie.delete?.bind(this,A,_),beforeIntermediate:$e.delete?.bind(this,A,_),commit:o((I,N,P)=>{let D=N?.value;P&&(A&&N?.version>(A.lastModified||0)&&(A.lastModified=N.version),Oe._updateResource(this,N)),!(Ra(I,N,y?.nodeId)<=0)&&(_o(this.getId(),D),ve.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(I).toISOString()}`),g||b?(R(_,null,N,I,0,g,{user:A?.user,nodeId:y?.nodeId,tableToTrack:s},"delete"),g||Uc()):rl(i,N))},"commit")}),!0}search(_){let y=this.getContext(),T=br(y);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(y.user,_))throw new ct.AccessViolation(y.user);y&&(y.lastModified=$ie);let A=_.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let I=_.id??this.getId();I&&(A=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(A));let N,P={};function D(ne,_e){let me;switch(_e){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+_e)}for(let he of ne){if(he.conditions){he.conditions=D(he.conditions,he.operator);continue}let Ve=he[0]??he.attribute,we=Ve==null?x:xi(S,Ve);if(we)(we.type||vA[he.comparator])&&(he[1]===void 0?he.value=C(he.value,we):he[1]=C(he[1],we));else if(Ve!=null)throw(0,ct.handleHDBError)(new Error,`${Ve} is not a defined attribute`,404);if(he.chainedConditions)if(he.chainedConditions.length===1&&(!he.operator||he.operator=="and")){let Xe=he.chainedConditions[0],vr,Js;if(Xe.comparator==="gt"||Xe.comparator==="greater_than"||Xe.comparator==="ge"||Xe.comparator==="greater_than_equal"?(vr=he,Js=Xe):(vr=Xe,Js=he),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Te=Js.comparator==="ge"||Js.comparator==="greater_than_equal",Rt=vr.comparator==="le"||vr.comparator==="less_than_equal";he.comparator=(Te?"ge":"gt")+(Rt?"le":"lt"),he.value=[Js.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(D,"prepareConditions");function G(ne,_e){if(_.enforceExecutionOrder)return ne;for(let me of ne)me.conditions&&(me.conditions=G(me.conditions,me.operator));return ne.length>1&&_e!=="or"?Hie(ne,Q_(Oe)):ne}o(G,"orderConditions");function C(ne,_e){return Array.isArray(ne)?ne.map(me=>$g(me,_e)):$g(ne,_e)}o(C,"coerceTypedValues");let B=_.operator;(A.length>0||B)&&(A=D(A,B));let q=typeof _.sort=="object"&&_.sort,te;if(q&&B!=="or"){let ne=q.attribute;if(ne==null)throw new ct.ClientError("Sort requires an attribute");if(N=A.find(_e=>vu(_e.attribute)===vu(ne)),!N){let _e=xi(S,ne);if(!_e)throw(0,ct.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(_e.indexed)N={...q,comparator:"sort"},A.push(N);else if(A.length===0&&!_.allowFullScan)throw(0,ct.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!q.descending)}A=G(A,B),q&&(N&&A[0]===N?q.next&&(te={dbOrderedAttribute:q.attribute,attribute:q.next.attribute,descending:q.next.descending,next:q.next.next}):(N&&A.splice(A.indexOf(N),1),te=q));let X=_.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:A,operator:B,postOrdering:te,selectApplied:!!X};let $=T.useReadTxn(),Le=UA(A,B,Oe,$,_,y,(ne,_e)=>Kf(ne,X,y,$,_e),P),ae=_.ensureLoaded!==!1,ie=Oe.transformEntryForSelect(X,y,$,P,ae,!0),re=Oe.transformToOrderedSelect(Le,X,te,y,$,ie);return(_.offset||_.limit!==void 0)&&(re=re.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),re.onDone=()=>{re.onDone=null,T.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(X){let ne=[];for(let _e of X)_e==="*"?ne.push(...S.map(me=>me.name)):ne.push(_e.name||_e);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},re}static transformToOrderedSelect(_,y,T,A,I,N){let P=new kE;if(T){_=Kf(_,y,A,I,null);let D;P.iterate=function(){let C,B=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),q,te=T.dbOrderedAttribute,X,$,Le=!0;function ae(re){let ne=re.next&&ae(re.next),_e=re.descending;return A.sort=re,(me,he)=>{let Ve=fu(me,re.attribute,A),we=fu(he,re.attribute,A),Xe=_e?(0,Il.compareKeys)(we,Ve):(0,Il.compareKeys)(Ve,we);return Xe===0?ne?.(me,he)||0:Xe}}o(ae,"createComparator");let ie=ae(T);return{async next(){let re;if(C)if(re=C.next(),re.done){if(q)return P.onDone&&P.onDone(),re}else return{value:await N.call(this,re.value)};D=[],X&&D.push(X);do if(re=await B.next(),re.done){if(q=!0,D.length)break;return P.onDone&&P.onDone(),re}else{let ne=re.value;if(ne?.then&&(ne=await ne),te){let _e=fu(ne,te,A);if(Le)Le=!1,$=_e;else if(_e!==$){$=_e,X=ne;break}}D.push(ne)}while(!0);return T.isGrouped,D.sort(ie),C=D[Symbol.iterator](),re=C.next(),re.done?(P.onDone&&P.onDone(),re):{value:await N.call(this,re.value)}},return(){return P.onDone&&P.onDone(),B.return()},throw(){return P.onDone&&P.onDone(),B.throw()}}};let G=o(C=>{if(typeof y=="object"&&Array.isArray(C.attribute))for(let B=0;B<y.length;B++){let q=y[B],te;if(q.name===C.attribute[0]){for(te=q.sort||(q.sort={});te.next;)te=te.next;te.attribute=C.attribute.slice(1),te.descending=C.descending}else q===C.attribute[0]&&(y[B]=te={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(T)}else P.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),P=P.map(function(D){try{let G=N.call(this,D);return typeof G?.catch=="function"?G.catch(C=>{throw C.partialObject={[t]:D.key},C}):G}catch(G){throw G.partialObject={[t]:D.key},G}});return P}static transformEntryForSelect(_,y,T,A,I,N){let P;I&&O&&!(typeof _=="string"?[_]:_)?.every(C=>{let B;return typeof C=="object"?B=C.name:B=C,r[B]||B===t})&&(P=!0);let D,G=o(function(C){let B;if(y?.transaction?.stale&&(y.transaction.stale=!1),C!=null){if(B=C.deref?C.deref():C.value,!B&&(C.key===void 0||C.deref)||C.metadataFlags&Ln){if(C.metadataFlags&Ln&&y.replicateFrom===!1&&N&&C.residencyId)return Ya.SKIP;if(C=Mc(C.key??C,y,{transaction:T,lazy:_?.length<4,ensureLoaded:I},this?.isSync,q=>q),C?.then)return C.then(G.bind(this));B=C?.value}if(P&&C?.metadataFlags&(Ln|Ma)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(y.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let q=ya(C.key??C,C,y);if(q?.then)return q.then(G)}}if(B==null)return N?Ya.SKIP:B;if(_&&!(_[0]==="*"&&_.length===1)){let q,te=o(($,Le)=>{let ae;typeof $=="object"?ae=$.name:ae=$;let ie=Xt?.[ae],re;if(ie){let ne=A?.[ae];if(ne)if(ne.hasMappings){let me=ie.from?B[ie.from]:vu(C.key);re=ne.get(me),re||(re=[])}else re=ne.fromRecord?.(B);else re=ie(B,y,C,!0);let _e=o(me=>{if(ie.directReturn)return Le(me,ae);if(me&&typeof me=="object"){let he=ie.definition?.tableClass||Oe;D||(D={});let Ve=D[ae]||(D[ae]=he.transformEntryForSelect(ae===$?null:$.select||(Array.isArray($)?$:null),y,T,ne,I));if(Array.isArray(me)){let we=[],Xe=he.transformToOrderedSelect(me,$.select,typeof $.sort=="object"&&$.sort,y,T,Ve)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Te=>{for(;!Te.done;){if(Te?.then)return Te.then(vr);we.push(Te.value),Te=Xe.next()}Le(we,ae)},"nextValue"),Js=vr(Xe.next());Js&&(q||(q=[]),q.push(Js));return}else if(me=Ve.call(this,me),me?.then){q||(q=[]),q.push(me.then(we=>Le(we,ae)));return}}Le(me,ae)},"handleResolvedValue");re?.then?(q||(q=[]),q.push(re.then(_e))):_e(re);return}else re=B[ae],re&&typeof re=="object"&&ae!==$&&(re=Oe.transformEntryForSelect($.select||$,y,T,null)({value:re}));Le(re,ae)},"selectAttribute"),X;if(typeof _=="string")te(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,Le)=>{$==="*"?_[Le]=B:te($,ae=>X[Le]=ae)});else{X={};let $=_.forceNulls;for(let Le of _)if(Le==="*")for(let ae in B)X[ae]=B[ae];else te(Le,(ae,ie)=>{ae===void 0&&$&&(ae=null),X[ie]=ae})}else throw new ct.ClientError("Invalid select"+_);return q?Promise.all(q).then(()=>X):X}return B},"transform");return G}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Je({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let y=!_.rawEvents,T=[],A=qA(Oe,this.getId()??null,function(P,D,G,C){try{let B=D.getValue?.(i,y),q=D.type;if(!B&&q==="patch"&&y){let X=i.getEntry(P);X?.version===D.version?B=X.value:B=D.getValue?.(i,!0,G),q="put"}let te={id:P,localTime:G,value:B,version:D.version,type:q,beginTxn:C};T?T.push(te):(c!=="system"&&Ge(D.size??1,"db-message",s,null),this.send(te))}catch(B){ve.default.error?.(B)}},_.startTime||0,_),I=(async()=>{this.isCollection&&(A.includeDescendants=!0,_.onlyChildren&&(A.onlyChildren=!0)),_.supportsTransactions&&(A.supportsTransactions=!0);let P=this.getId(),D=_.previousCount;D>1e3&&(D=1e3);let G=_.startTime;if(this.isCollection){if(G){if(D)throw new ct.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:B}of l.getRange({start:G,exclusiveStart:!0,snapshot:!1})){let q=vt(B);if(q.tableId!==n)continue;let te=q.recordId;if(P==null||iG(P,te)){let X=q.getValue(i,y,C);if(N({id:te,localTime:C,value:X,version:q.version,type:q.type,size:q.size}),A.queue?.length>nG&&await A.waitForDrain()===!1)return}A.startTime=C}}else if(D){let C=[];for(let{key:B,value:q}of l.getRange({start:"z",end:!1,reverse:!0}))try{let te=vt(q);if(te.tableId!==n)continue;let X=te.recordId;if(P==null||iG(P,X)){let $=te.getValue(i,y,B);if(C.push({id:X,localTime:B,value:$,version:te.version,type:te.type}),--D<=0)break}}catch(te){ve.default.error("Error getting history entry",B,te)}for(let B=C.length;B>0;)N(C[--B]);C[0]&&(A.startTime=C[0].localTime)}else if(!_.omitCurrent){for(let{key:C,value:B,version:q,localTime:te,size:X}of i.getRange({start:P??!1,end:P==null?void 0:[P,Il.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(B&&(N({id:C,localTime:te,value:B,version:q,type:"put",size:X}),A.queue?.length>nG&&await A.waitForDrain()===!1))return}}else{D&&!G&&(G=0);let C=this.#n?.localTime;if(C===LA&&(i.cache?.delete(P),this.#n=i.getEntry(P),ve.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),ve.default.trace?.("Subscription from",G,"from",P,C),G<C){let B=[],q=C;do{let te=l.get(q);if(te){_.omitCurrent=!0;let X=vt(te),$=X.getValue(i,y,q);y&&(X.type="put"),B.push({id:P,value:$,localTime:q,...X}),q=X.previousLocalTime}else break;D&&D--}while(q>G&&D!==0);for(let te=B.length;te>0;)N(B[--te]);A.startTime=C}!_.omitCurrent&&this.doesExist()&&N({id:P,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of T)N(C);T=null})();function N(P){c!=="system"&&Ge(P.size??1,"db-message",s,null),A.send(P)}return o(N,"send"),_.listener&&A.on("data",_.listener),A}static subscribeOnThisThread(_,y){return _===0||y?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,y,T){if(y===void 0||y instanceof URLSearchParams)this._writePublish(this.getId(),_,y);else{let A=!0,I=this.getContext();return _.checkPermission&&(A=this.allowCreate(I.user,_,I)),Ms(A,N=>{if(!N)throw new ct.AccessViolation(I.user);let P=Rr(_);this._writePublish(P,y,T)})}}_writePublish(_,y,T){let A=br(this.getContext());_??=null,_!==null&&Mr(_);let I=this.getContext();A.addWrite({key:_,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(A.checkOverloaded(),this.validate(y))},"validate"),before:Ie.publish?.bind(this,I,_,y),beforeIntermediate:Bc(y,$e.publish?.bind(this,I,_,y)),commit:o((N,P,D)=>{P===void 0&&b&&!g&&Uc(),ve.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,P?.value??null,P,P?.version||N,0,!0,{user:I?.user,residencyId:T?.residencyId,expiresAt:I?.expiresAt,nodeId:T?.nodeId,tableToTrack:s},"message",!1,y)},"commit")})}validate(_,y){let T,A=o((I,N,P)=>{if(N.type&&I!=null)if(y&&I.__op__&&(I=I.value),N.properties){typeof I!="object"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an object${N.type?" ("+N.type+")":""}`);let D=N.properties;for(let G=0,C=D.length;G<C;G++){let B=D[G];if(B.relationship||B.computed){_.hasOwnProperty(B.name)&&(T||(T=[])).push(`Computed property ${P}.${B.name} may not be directly assigned a value`);continue}let q=A(I[B.name],B,P+"."+B.name);q&&(I[B.name]=q)}if(N.sealed&&I!=null&&typeof I=="object")for(let G in I)D.find(C=>C.name===G)||(T||(T=[])).push(`Property ${G} is not allowed within object in property ${P}`)}else switch(N.type){case"Int":(typeof I!="number"||I>>0!==I)&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string`);break;case"Boolean":typeof I!="boolean"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof As)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(N.elements)for(let D=0,G=I.length;D<G;D++){let C=I[D],B=A(C,N.elements,P+"[*]");B&&(I[D]=B)}}else(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an Array`);break}N.nullable===!1&&I==null&&(T||(T=[])).push(`Property ${P} is required (and not does not allow null values)`)},"validateValue");for(let I=0,N=S.length;I<N;I++){let P=S[I];if(P.relationship||P.computed){Object.hasOwn(_,P.name)&&(T||(T=[])).push(`Computed property ${P.name} may not be directly assigned a value`);continue}if(!y||P.name in _){let D=A(_[P.name],P,P.name);D!==void 0&&(_[P.name]=D)}}if(f)for(let I in _)S.find(N=>N.name===I)||(T||(T=[])).push(`Property ${I} is not allowed`);if(T)throw new ct.ClientError(T.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let y=S.slice(0);for(let T of _){if(!T.name)throw new ct.ClientError("Attribute name is required");if(T.name.match(/[`/]/))throw new ct.ClientError("Attribute names cannot include backticks or forward slashes");Gie(T.name),y.push(T)}return Je({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static async removeAttributes(_){let y=S.filter(T=>!_.includes(T.name));return Je({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,y=Xw.default.statfsSync?.(_)??{};return{available:y.bavail*y.bsize,free:y.bfree*y.bsize,size:y.blocks*y.bsize}}static async getRecordCount(_){let y=i.getStats().entryCount,T=1e3/2,A=performance.now(),I=Math.floor(y/2),N=_?.exactCount,P=0,D=0,G;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&P++,D++,await Ka(),!N&&D<I&&performance.now()-A>T){G=D;break}if(G){let C=P;P=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:G,snapshot:!1}))re!=null&&P++,await Ka();let B=G*2,q=(P+C)/B,te=Math.pow((P-C+1)/G/2,2)+q*(1-q)/B,X=Math.max(Math.sqrt(te)*y,1),$=Math.round(q*y),Le=Math.max($-1.96*X,P+C),ae=Math.min($+1.96*X,y),ie=Math.pow(10,Math.round(Math.log10(X)));return ie>$&&(ie=ie/10),P=Math.round($/ie)*ie,{recordCount:P,estimatedRange:[Math.round(Le),Math.round(ae)]}}return{recordCount:P}}static updatedAttributes(){Xt=this.propertyResolvers={$id:o((_,y,T)=>({value:T.key}),"$id"),$updatedtime:o((_,y,T)=>T.version,"$updatedtime"),$updatedTime:o((_,y,T)=>T.version,"$updatedTime"),$expiresAt:o((_,y,T)=>T.expiresAt,"$expiresAt"),$record:o((_,y,T)=>T?{value:_}:_,"$record"),$distance:o((_,y,T)=>T&&(T.distance??y?.vectorDistances?.get(T)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(x=_),_.resolve=null;let y=_.relationship,T=_.computed;if(y)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),T&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),kf=!0,y.to)_.elements?.definition?(Xt[_.name]=_.resolve=(A,I,N,P)=>{let D=A[y.from?y.from:t],G=_.elements.definition.tableClass;return P?Mu({attribute:y.to,value:D},br(I).getReadTxn(),!1,G,!1).map(C=>C&&C.key!==void 0?C:G.primaryStore.getEntry(C,{transaction:br(I).getReadTxn()})).asArray:G.search([{attribute:y.to,value:D}],I).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=y.to,y.from&&(_.resolve.from=y.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(y.from){let A=_.definition||_.elements?.definition;A?(Xt[_.name]=_.resolve=(I,N,P,D)=>{let G=I[y.from];if(G===void 0)return;if(_.elements){let B,q=G?.map(te=>{let X=A.tableClass.primaryStore[D?"getEntry":"get"](te,{transaction:br(N).getReadTxn()});return X?.then&&(B=!0),Oe.loadAsInstance===!1&&Object.freeze(D?X?.value:X),X});return y.filterMissing?B?Promise.all(q).then(te=>te.filter(oG)):q.filter(oG):B?Promise.all(q):q}let C=A.tableClass.primaryStore[D?"getEntry":"get"](G,{transaction:br(N).getReadTxn()});return Oe.loadAsInstance===!1&&Object.freeze(D?C?.value:C),C},_.set=(I,N)=>{if(Array.isArray(N)){let P=N.map(D=>D.getId?.()||D[A.tableClass.primaryKey]);I[y.from]=P}else{let P=N.getId?.()||N[A.tableClass.primaryKey];I[y.from]=P}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=y.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(T)typeof T.from=="function"&&this.setComputedAttribute(_.name,T.from),Xt[_.name]=_.resolve=(A,I,N)=>{let P=typeof T.from=="string"?A[T.from]:A,D=this.userResolvers[_.name];if(D)return D(P,I,N);ve.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let A=r[_.name].customIndex;Xt[_.name]=(I,N,P)=>{let D=I[_.name];return A.propertyResolver(D,N,P)},Xt[_.name].directReturn=!0}}ap(this,this),ap(qf,this,!0);for(let _ of S){let y=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,y,{get(){return _.resolve(this,xu.getStore())},set(T){return _.set(this,T)},configurable:!0})}}static setComputedAttribute(_,y){let T=xi(S,_);if(!T){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!T.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=y}static async deleteHistory(_=0,y=!1){let T;for(let{key:A,value:I}of l.getRange({start:0,end:_}))await Ka(),vt(I).tableId===n&&(T=U_(l,A,I));if(y)for(let A of i.getRange({start:0,versions:!0})){let{key:I,value:N,localTime:P}=A;await Ka(),N===null&&P<_&&(T=rl(i,A))}await T}static async*getHistory(_=0,y=1/0){for(let{key:T,value:A}of l.getRange({start:_||1,end:y})){await Ka();let I=vt(A);I.tableId===n&&(yield{id:I.recordId,localTime:T,version:I.version,type:I.type,value:I.getValue(i,!0,T),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(_){let y=[];if(_==null)throw new Error("An id is required");let T=i.getEntry(_);if(!T)return y;let A=T.localTime;if(!A)throw new Error("The entry does not have a local audit time");let I=0;do{await Ka();let N=l.get(A);if(N){let P=vt(N);y.push({id:P.recordId,localTime:A,version:P.version,type:P.type,value:P.getValue(i,!0,A),user:P.user}),A=P.previousLocalTime}else break}while(I<1e3&&A);return y.reverse()}static cleanup(){Y?.remove()}}let GE=Gg(async(K,_,y)=>{for(let T of Oe.sources)if(T.get&&(!T.get.reliesOnPrototype||T.prototype.get)){if(T.available?.(y)===!1)continue;_.source=T;let A=await T.get(K,_);if(A)return A}},()=>{throw new ct.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Oe.updatedAttributes();let $f=Oe.prototype;return h&&Oe.setTTLExpiration(h/1e3),Q&&qE(),Oe;function _o(K,_,y){let T;for(let A in r){let I=r[A],N=I.isIndexing,P=Xt[A],D=y&&(P?P(y):y[A]),G=_&&(P?P(_):_[A]);if(D===G&&!N)continue;if(I.customIndex){I.customIndex.index(K,D,G);continue}T=!0;let C=I.indexNulls,B=(0,Ip.getIndexedValues)(D,C),q=(0,Ip.getIndexedValues)(G,C);if(s==="OrganizationRole"&&ve.default.error?.({tableName:s,id:K,key:A,valuesToAdd:B,valuesToRemove:q}),q?.length>0){let te=new Set(q);if(B=B?B.filter(X=>{if(te.has(X))te.delete(X);else return!0}):[],q=Array.from(te),(q.length>0||B.length>0)&&eG){let X=q.concat(B).map($=>({key:$,value:K}));I.prefetch(X,sG)}for(let X=0,$=q.length;X<$;X++)I.remove(q[X],K)}else B?.length>0&&eG&&I.prefetch(B.map(te=>({key:te,value:K})),sG);if(B)for(let te=0,X=B.length;te<X;te++)I.put(B[te],K)}return T}o(_o,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>rG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Il.writeKey)(K,zie,0)>rG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Rr(K){return typeof K=="object"&&K?K.id:K}o(Rr,"requestTargetToId");function Vf(K){return typeof K=="object"&&K&&K.isCollection}o(Vf,"isSearchTarget");function ib(K){}o(ib,"isRequestTarget");function Mc(K,_,y,T,A){if(Oe.getResidencyById&&y.ensureLoaded&&_?.replicateFrom!==!1){let N=xc(Oe.getResidencyById(K));if(N&&!N.includes(server.hostname)&&L)return L({key:K,residency:N}).then(A)}let I=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),y.transaction?.isDone)return A(null,K);let N=i.getEntry(K,y);return(c!=="system"||s==="hdb_analytics")&&(lG.default.trace?.("Recording db-read action for",`${c}.${s}`),Ge(N?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(N?.value),N?.residencyId&&N.metadataFlags&Ln&&L&&y.ensureLoaded&&_?.replicateFrom!==!1?L(N).then(P=>A(P,K),P=>(ve.default.error?.("Error loading remote record",K,N,y,P),A(null,K))):(N&&_&&(N?.version>(_.lastModified||0)&&(_.lastModified=N.version),N?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=N.localTime)),A(N,K))},"whenPrefetched");return T?I():ee>0?(ee--,I()):new Promise((N,P)=>{ee===0?(ee--,i.prefetch([K],()=>{D(),G()})):(de.push(K),le.push(G),de.length>sb&&(ee--,D()));function D(){if(de.length>0){let C=le;i.prefetch(de,()=>{ee===-1?D():ee++;for(let B of C)B()}),de=[],le=[],Re>2&&Re--}else ee=Re,Re<HE&&Re++}o(D,"prefetch");function G(){try{N(I())}catch(C){P(C)}}o(G,"load")})}o(Mc,"loadLocalRecord");function Vr(K,_){let y=_?.checkPermission;if(typeof y!="object"){if(!K?.role)return;y=K.role.permission}if(y.super_user)return jie;let T=y[c],A,I=T?.tables;if(I)return I[s];if(c==="data"&&(A=y[s])&&!A.tables)return A}o(Vr,"getTablePermissions");function ya(K,_,y,T){if(O){let A=!1;if(y.noCache?A=!0:(_?(!_.value||_.metadataFlags&(Ln|Ma)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(A=!0):A=!0,zr(!A,"cache-hit",s)),A){let I=mu(K,_,y).then(N=>(N?.value&&N?.value.getRecord?.()&&ve.default.error?.("Can not assign a record that is already a resource"),y&&(N?.version>(y.lastModified||0)&&(y.lastModified=N.version),y.lastRefreshed=Date.now()),N));if(y?.onlyIfCached||_?.value&&T?.allowStaleWhileRevalidate?.(_,K)){if(I.catch(N=>ve.default.warn?.(N)),y?.onlyIfCached&&!T.doesExist())throw new ct.ServerError("Entry is not cached",504);return}else return I}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Oe.evict(_.key,_.value,_.version),_.value=null,{then(A){return A(_)}}}o(ya,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let y=_.next;if(!y)return _=_.next=new yo,_.lmdbDb=i,_;_=y}while(!0)}else return new f_}o(br,"txnForContext");function fu(K,_,y){if(!K)return;let T=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let I=Xt,N=T;for(let P=0,D=_.length;P<D;P++){let G=_[P],C=I?.[G];N=C&&N?C(N,y,K):N?.[G],K=null,I=C?.definition?.tableClass?.propertyResolvers}return N}let A=Xt[_];return A?A(T,y,K):T[_]}o(fu,"getAttributeValue");function Kf(K,_,y,T,A){let I=A?.length,N={transaction:T,lazy:I>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},P;function D(G,C){let B=G?.value;if(!B)return Ya.SKIP;for(let q=0;q<I;q++)if(!P?.includes(q)&&!A[q](B,G))return Ya.SKIP;return C!==void 0&&(G.key=C),G}if(o(D,"processEntry"),I>0||!K.hasEntries){let G=K.map(C=>{if(P=null,typeof C=="object"&&C?.key!==void 0)return I>0?D(C):C;if(C==null)return Ya.SKIP;for(let B=0;B<I;B++){let te=A[B].idFilter;if(te){if(!te(C))return Ya.SKIP;P||(P=[]),P.push(B)}}return Mc(C,y,N,!1,D)});return Array.isArray(K)&&(G=G.filter(C=>C!==Ya.SKIP)),G.hasEntries=!0,G}return K}o(Kf,"transformToEntries");function Ra(K,_,y=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&y!==void 0){let T=server.replication?.exportIdMapping(l),A=_.localTime,I=A&&l.get(A);if(I){let N,P,D=vt(I);for(let G in T)T[G]===y&&(N=G),T[G]===D.nodeId&&(P=G);if(N>P)return 1;if(N===P)return 0}}return-1}return 1}o(Ra,"precedesExistingVersion");async function mu(K,_,y){let T=_?.metadataFlags,A=_?.version,I,N;if(!i.attemptLock(K,A,()=>{clearTimeout(N);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ln|Ma)?I(mu(K,i.getEntry(K),y)):I(C)}))return new Promise(C=>{I=C,N=setTimeout(()=>{i.unlock(K,A)},Yie)});let P=_?.value,D={requestContext:y,replacingRecord:P,replacingEntry:_,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:y?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},G=y?.responseHeaders;return new Promise((C,B)=>{let q;Ms(St(D,async te=>{let X=performance.now(),$,Le,ae;try{$=await GE(K,D,_),ae=T&Ln;let re=D.lastModified||ae&&A;Le=ae||re>A||!P,re||(re=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Ge(ne,"cache-resolution",s,null,"success"),G&&bp(G,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),te.timestamp=re,h&&D.expiresAt==null&&(D.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=P,re=A;else throw new ct.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}q=!0,C({key:K,version:re,value:$})}catch(re){re.message+=` while resolving record ${K} for ${s}`,P&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!y?.mustRevalidate||y?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({key:K,version:A,value:P}),ve.default.trace?.(re.message,"(returned stale record)")):B(re);let ne=performance.now()-X;Ge(ne,"cache-resolution",s,null,"fail"),G&&bp(G,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),D.transaction.abort();return}if(y?.noCacheStore||D.noCacheStore){D.transaction.abort();return}br(D).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Bc($),commit:o((re,ne)=>{if(ne?.version!==A)return;let _e=_o(K,P,$);if($){$e.put?.(D,K,$),ne&&(y.previousResidency=Oe.getResidencyRecord(ne.residencyId));let me,he=!1,Ve,we=xc(Oe.getResidency($,y));if(we){if(!we.includes(server.hostname))if(me=$,he=!0,Oe.getResidencyById)$=void 0;else{$=null;for(let Xe in r)$||($={}),$[Xe]=me[Xe]}Ve=go(we)}ve.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),R(K,$,ne,re,he?Ln:0,g&&(Le||he)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:Ve,tableToTrack:s},"put",!!ae,me)}else ne&&($e.delete?.(D,K),ve.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),g||b?R(K,null,ne,re,0,g&&Le||null,{user:D?.user,tableToTrack:s},"delete",!!ae):rl(i,ne,A))},"commit")})}),()=>{i.unlock(K,A)},te=>{i.unlock(K,A),q&&ve.default.error?.("Error committing cache update",te)})})}o(mu,"getFromSource");function vc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new ct.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new ct.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(vc,"checkContextPermissions");function Uc(K){let _=!1;if(K&&(K-yr>1&&(_=!0),yr=K),!(ke===Jt&&!_)&&(Jt=ke,(0,bl.getWorkerIndex)()===(0,bl.getWorkerCount)()-1))return kt&&clearTimeout(kt),ke?new Promise(y=>{let T=new Date;T.setMonth(0),T.setDate(1),T.setHours(0),T.setMinutes(0),T.setSeconds(0);let A=ke/(1+yr),I=_?Date.now():Math.ceil((Date.now()-T.getTime())/A)*A+T.getTime(),N=o(P=>{ve.default.trace?.(`Scheduled next cleanup scan at ${new Date(P)}`),kt=setTimeout(()=>j=j.then(async()=>{if(N(Math.max(P+ke,Date.now())),i.rootStore.status!=="open"){clearTimeout(kt);return}let D=50,G=new Array(D),C=0,B=Math.pow(yr,8)*(Al.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),q=E/Math.pow(Math.max(yr,1),4);ve.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${B}, adjusted eviction ${q}ms`);function te(X,$,Le,ae){let ie=X+q-Date.now();if(ie<0)return!0;if(yr){let re=i.lastSize;return Le&Pn&&bu(ae,ne=>{ne.size&&(re+=ne.size)}),ve.default.trace?.(`shouldEvict adjusted ${ie} ${re}, ${ie*(X-$)/re} < ${B}`),ie*(X-$)/re<B}return!1}o(te,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Le,value:ae,version:ie,expiresAt:re,metadataFlags:ne}=$,_e;ae===null&&!g&&ie+Kie<Date.now()?_e=rl(i,$,ie):re!=null&&te(re,ie,ne,ae)&&(_e=Oe.evict(Le,ae,ie),X++),_e&&(await G[C],G[C]=_e.catch(me=>{ve.default.error?.("Cleanup error",me)}),++C>=D&&(C=0)),await Ka()}ve.default.debug?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){ve.default.warn?.(`Error in cleanup scan for ${s}:`,X)}y(void 0),yr=0}),Math.min(P-Date.now(),2147483647)).unref()},"startNextTimer");N(I)}):void 0}o(Uc,"scheduleCleanup");function pu(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(pu,"addDeleteRemoval");function qE(){(0,bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dc){Dc=!0;try{let K=Q.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let y of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let T of _.getValues(y)){let A=i.getEntry(T);A?.value?A.value[K]<Date.now()&&Oe.evict(T,A.value,A.version):i.ifVersion(T,A?.version,()=>_.remove(y,T))}await Ka()}}catch(K){ve.default.error?.("Error in evicting old records",K)}finally{Dc=!1}}},Vie).unref()}o(qE,"runRecordExpirationEviction");function xc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return ve.default.trace?.(`Shard ${K} mapped to ${_.map(y=>y.name).join(", ")}`),_.map(y=>y.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(xc,"residencyFromFunction");function go(K){if(K){let _=K.join(","),y=d.get([Symbol.for("residency_by_set"),_]);return y||(d.put([Symbol.for("residency_by_set"),_],y=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),y],K),y)}}o(go,"getResidencyId");function Bc(K,_){let y=eA(K,i.rootStore);if(y){let T=_;return T?async()=>{await T(),await y}:()=>y}return _}o(Bc,"preCommitBlobsForRecordBefore")}function Jw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function sG(){}function $g(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return qg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return qg(+e);case"Float":return e==="null"?null:qg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Qie.test(e)||(e+="Z");let n=new Date(e);return qg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Vg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function qg(e){if(isNaN(e))throw new SyntaxError;return e}function iG(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 Ms(e,t,r){return e?.then?e.then(t,r):t(e)}function oG(e){return e!=null}function vs(e){try{return JSON.stringify(e)}catch{return e}}function Jie(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ya,Ip,aG,cG,Al,ct,wp,Np,ve,Il,bl,Vg,Xw,lG,Hie,Gie,qie,$ie,Vie,Kie,eG,Yie,tG,Wie,Ln,Ma,zie,rG,nG,jie,LMe,Qie,Ka,Z_=oe(()=>{H();Ya=require("lmdb"),Ip=w(Cn()),aG=w(require("lodash")),cG=w(dm());va();mm();Al=w(fe());$A();ct=w(Ee()),wp=w(xo()),Np=w(ts());Ne();X_();ve=w(Qn());JI();Na();Il=require("ordered-binary"),bl=w(rt());Ro();Vg=w(ce());Zc();Jn();h_();Ap();Xw=w(require("node:fs"));Is();L_();lG=w(z());Qw();({sortBy:Hie}=aG.default),{validateAttribute:Gie}=cG.default,qie=new Uint8Array(9);qie[8]=192;$ie=1/0,Vie=6e4,Kie=864e5;Al.initSync();eG=Al.get(U.STORAGE_PREFETCHWRITES),Yie=1e4,tG=1,Wie=2,Ln=1,Ma=8,zie=Buffer.allocUnsafeSlow(8192),rG=1978,nG=100,jie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},LMe=(0,Vg.convertToMS)(Al.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Kg,"makeTable");o(Jw,"attributesAsObject");o(sG,"noop");Qie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o($g,"coerceType");o(qg,"rejectNaN");o(iG,"isDescendantId");Ka=o(()=>new Promise(setImmediate),"rest");o(Ms,"when");o(oG,"exists");o(vs,"stringify");o(Jie,"hasOtherProcesses")});function Yg(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 Wg(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 dG=oe(()=>{o(Yg,"euclideanDistance");o(Wg,"cosineDistance")});var fG,mG,od,Wi,id,Xie,Zie,zg,pG=oe(()=>{dG();fG=require("msgpackr"),mG=w(Qn()),od=w(Ee()),Wi=(0,mG.loggerWithTag)("HNSW"),id=Symbol.for("entryPoint"),Xie=Symbol.for("key"),Zie=10,zg=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=fG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Yg:Wg,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"?[Xie,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(id);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let b=0;b<=E;b++)g[b]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Wi.debug?.("setting entry point to",i),this.indexStore.put(id,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Zie),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Wi.debug?.("setting entry point to",i),this.indexStore.put(id,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Wi.info?.("should not have zero connections for",l);let b=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:L,node:O}=g[S];if(R===i)continue;let x=[];if(this.optimizeRouting){let F=!1,Q=O[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let de=0;de<Q.length;de++){let{id:le,distance:ee}=Q[de],Re=1+this.optimizeRouting*(1+.5*de/this.M);for(let Ie=0;Ie<b.length;Ie++){let{id:$e,distance:ke}=b[Ie];if($e===le){L*Y>ke+ee?F=!0:ee*Re>L+ke&&(x.push({fromId:$e,toId:R}),x.push({fromId:R,toId:$e}));break}}if(F)break}if(F)continue}else if(S>=(E>0?this.M:this.M<<1))continue;b.push({id:R,distance:L});for(let{fromId:F,toId:Q}of x){let Y=d(F);Y||(Y=d(F,this.indexStore.get(F)));for(let de=0;de<Y[E].length;de++)if(Y[E][de].id===Q){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(de,1);break}}let j=c[E],k=j?.find(({id:F})=>F===R);if(k){let F=j?.indexOf(k);j.copied||(j=[...j],j.copied=!0,c[E]=j),j.splice(F,1)}else this.addConnection(R,d(R,O),i,E,L,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(id);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Wi.debug?.("setting entry point to",l),this.indexStore.put(id,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Wi.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(id);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new od.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new od.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Wg;else if(s==="euclidean")c=Yg;else{if(s)throw new od.ClientError("Unknown distance function");c=this.distance}if(!t)throw new od.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new od.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){Wi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Wi.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)){Wi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Wi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Wi.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"?Yg:Wg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var Zw,hG=oe(()=>{pG();Zw={HNSW:zg}});var ft={};be(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>jg,database:()=>zu,databaseEnvs:()=>qo,databases:()=>De,dropDatabase:()=>rw,dropTableMeta:()=>ioe,getDatabases:()=>ot,getDefaultCompression:()=>rS,getTables:()=>toe,onRemovedDB:()=>vp,onUpdatedTable:()=>wl,readMetaDb:()=>Cp,resetDatabases:()=>dd,table:()=>Je,tables:()=>hn});function Mp(e,t){let r=eS.OpenDBIObject??eS.default.OpenDBIObject;return new r(e,t)}function toe(){return Zg||ot(),hn||{}}function ot(){if(Zg)return De;Zg=!0,ld=new Map;let e=(0,$t.getHdbBasePath)()&&(0,Ut.join)((0,$t.getHdbBasePath)(),kc),t=(0,$t.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,$t.get)(U.STORAGE_PATH)||e&&((0,as.existsSync)(e)?e:(0,Ut.join)((0,$t.getHdbBasePath)(),zE)),!!e){if((0,as.existsSync)(e))for(let r of(0,as.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ut.basename)(r.name,".mdb");r.isFile()&&(0,Ut.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Cp((0,Ut.join)(e,r.name),null,n)}if((0,as.existsSync)((0,cd.getBaseSchemaPath)())){for(let r of(0,as.readdirSync)((0,cd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ut.join)((0,cd.getBaseSchemaPath)(),r.name),s=(0,Ut.join)((0,cd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,as.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ut.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Ut.join)(s,i.name);Cp((0,Ut.join)(n,i.name),(0,Ut.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,as.existsSync)(s))for(let a of(0,as.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Ut.extname)(a.name).toLowerCase()===".mdb"&&Cp((0,Ut.join)(s,a.name),(0,Ut.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Ut.join)(c.path,(0,Ut.basename)(a+".mdb"));(0,as.existsSync)(l)&&Cp(l,a,r,null,!0)}}for(let r in De){let n=ld.get(r);if(n){let s=De[r];r.includes("delete")&&wr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(wr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in hn)delete hn[s];delete hn[tS]}}if((0,$t.get)(U.ANALYTICS_REPLICATE)===!1?jg.includes("hdb_analytics")||jg.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of jg)De.system[r]&&(De.system[r].replicate=!1);return ld=null,De}}function dd(){Zg=!1;for(let[,e]of qo)e.needsDeletion=!0;ot();for(let[e,t]of qo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),qo.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return De}function Cp(e,t,r=rN,n,s){let i=new eN.default(e,!1);try{let a=qo.get(e);a?a.needsDeletion=!1:(a=(0,ud.open)(i),qo.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Qg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,as.existsSync)(n)&&(i.path=n,u=(0,ud.open)(i),u.isLegacy=!0):u=v_(a));let d=TG(r),f=d[tS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let b=m.get(E);b||m.set(E,b={attributes:[]}),(g==null||h.is_hash_attribute)&&(b.primary=h),g!=null&&b.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let ee of E)if(ee.is_hash_attribute||ee.isPrimaryKey){g=ee;break}if(!g){wr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let b=d[p],S={},R=[],L,O,x=typeof g.audit=="boolean"?g.audit:(0,$t.get)(U.LOGGING_AUDITLOG),j=g.trackDeletes,k=g.expiration,F=g.eviction,Q=g.sealed,Y=g.splitSegments,de=g.replicate;if(b)S=b.indices,R=b.attributes,b.schemaVersion++;else{L=g.tableId,L?L>=(l.get(ad)||0)&&(l.putSync(ad,L+1),wr.info(`Updating next table id (it was out of sync) to ${L+1} for ${p}`)):(g.tableId=L=l.get(ad),L||(L=1),wr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(ad,L+1),l.putSync(g.key,g));let ee=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(ee.compression=g.compression,ee.compression){let Re=(0,$t.get)(U.STORAGE_COMPRESSION_THRESHOLD)||SG;ee.compression.threshold=Re}O=z_(a.openDB(g.key,ee),a),a.databaseName=r,O.tableId=L}let le;for(let ee of E){ee.attribute=ee.name;try{if(!ee.is_hash_attribute&&(ee.indexed||ee.attribute&&!ee.name)){if(!S[ee.name]){let Ie=RG(ee.key,a,ee);S[ee.name]=Ie,S[ee.name].indexNulls=ee.indexNulls}let Re=R.find(Ie=>Ie.name===ee.name);Re?R.splice(R.indexOf(Re),1,ee):R.push(ee),le=!0}}catch(Re){wr.error("Error trying to update attribute",ee,R,S,Re)}}for(let ee of R)if(!E.find(Ie=>Ie.name===ee.name)){if(ee.is_hash_attribute){wr.error("Unable to remove existing primary key attribute",ee);continue}ee.indexed&&(R.splice(R.indexOf(ee),1),le=!0)}if(b)le&&(b.schemaVersion++,b.updatedAttributes());else{b=yG(d,p,Kg({primaryStore:O,auditStore:u,audit:x,sealed:Q,splitSegments:Y,replicate:de,expirationMS:k&&k*1e3,evictionMS:F&&F*1e3,trackDeletes:j,tableName:p,tableId:L,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),b.schemaVersion=1;for(let ee of Op)ee(b)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function TG(e){let t=De[e];if(t||(e==="data"?t=De[e]=hn:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),ld&&!ld.has(e)){let r=new Set;t[tS]=r,ld.set(e,r)}return t}function yG(e,t,r){return e[t]=r,r}function zu({database:e,table:t}){e||(e=rN),ot();let r=TG(e),n=(0,Ut.join)((0,$t.getHdbBasePath)(),kc),s=(0,$t.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,$t.get)(U.STORAGE_PATH)||((0,as.existsSync)(n)?n:(0,Ut.join)((0,$t.getHdbBasePath)(),zE));let a=(0,Ut.join)(n,(i?t:e)+".mdb"),c=qo.get(a);if(!c||c.status==="closed"){let l=new eN.default(a,!1);c=(0,ud.open)(l),qo.set(a,c)}return c.auditStore||(c.auditStore=v_(c)),c}async function rw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,qo.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=zu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in hn)delete hn[n];delete hn[tS]}delete De[e],Pp.forEach(n=>n(e)),await Zb(r)}function RG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&Zw[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=Zw[r.indexed.type];a?i.customIndex=new a(i,r.indexed):wr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Je(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=rN);let h=zu({database:r,table:t}),E=De[r];wr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let b,S,R;m==null&&(m=!0);let L=new Mp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let O,x;if(g){if(b=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},b=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=rS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,$t.get)(U.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),wr.trace(`${t} table loading, opening primary store`);let de=new Mp(!1,!0);de.compression=S.compression;let le=t+"/";if(R=h.dbisDb=h.openDB(Qg.INTERNAL_DBIS_NAME,L),Q(),R.get(le))return x&&x(),dd(),Je(e);let ee=z_(h.openDB(le,de),h);h.databaseName=r,ee.tableId=R.get(ad),wr.trace(`Assigning new table id ${ee.tableId} for ${t}`),ee.tableId||(ee.tableId=1),R.put(ad,ee.tableId+1),S.tableId=ee.tableId,g=yG(E,t,Kg({primaryStore:ee,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:b,tableName:t,tableId:ee.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(le,S)}let j=g.indices;R=R||(h.dbisDb=h.openDB(Qg.INTERNAL_DBIS_NAME,L)),g.dbisDB=R;let k=[];for(let{key:Y,value:de}of R.getRange({start:!0})){let[le,ee]=Y.toString().split("/");if(ee===""&&(ee=de.name),ee){if(le!==t)continue}else continue;let Re=a.find($e=>$e.name===ee),Ie=!Re?.indexed&&de.indexed&&!de.isPrimaryKey;if((!Re||Ie)&&(Q(),O=!0,Re||R.remove(Y),Ie)){let $e=g.indices[le];$e&&k.push($e)}}let F=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(O=!0,Y.relationship))continue;let de=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:de,configurable:!0});let le=R.get(de);if(Y.isPrimaryKey){if(le=le||R.get(de=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)||Y.type!==le.type){let Re={...le};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),Y.type&&(Re.type=Y.type),O=!0,Q(),R.put(de,Re)}continue}le?.attribute&&!le.name&&(le.indexed=!0);let ee=!le||le.type!==Y.type||JSON.stringify(le.indexed)!==JSON.stringify(Y.indexed)||le.nullable!==Y.nullable||le.version!==Y.version||JSON.stringify(le.properties)!==JSON.stringify(Y.properties)||JSON.stringify(le.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Re=RG(de,h,Y);(ee||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Q(),le=R.get(de),(ee||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=le?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Re}),F.push(Y))),R.put(de,Y)),le?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Re.indexNulls=Y.indexNulls,j[Y.name]=Re}else ee&&(O=!0,Q(),R.put(de,Y))}}finally{x&&x()}if(O&&(g.schemaVersion++,g.updatedAttributes()),wr.trace(`${t} table loading, running index`),F.length>0||k.length>0?g.indexingOperation=soe(g,F,k):O&&Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let Y of Op)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),wr.trace(`${t} table loaded`),g;function Q(){x||h.transactionSync(()=>({then(Y){x=Y}}))}o(Q,"startTxn")}async function soe(e,t,r){try{wr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Jg.signalSchemaChange(new Xg.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,ud.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,b=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(b.customIndex){b.customIndex.index(f,R);continue}let L=(0,EG.getIndexedValues)(R);if(L)for(let O=0,x=L.length;O<x;O++)b.put(L[O],f)}catch(S){a[g]||(a[g]=!0,wr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,wr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==gG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>roe?await s:d>noe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),wr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){wr.error("Error in indexing",n)}}function ioe({table:e,database:t}){let r=zu({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 wl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function rS(){let e=(0,$t.get)(U.STORAGE_COMPRESSION),t=(0,$t.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,$t.get)(U.STORAGE_COMPRESSION_THRESHOLD)||SG,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var $t,Qg,ud,Ut,as,cd,eN,Lp,tN,EG,Jg,Xg,Dp,_G,gG,eS,eoe,wr,rN,tS,SG,jg,hn,De,ad,Op,Pp,Zg,qo,ld,roe,noe,Ne=oe(()=>{$t=w(fe()),Qg=w(Gt()),ud=require("lmdb"),Ut=require("path"),as=require("fs"),cd=w(gt());Z_();eN=w($m());H();Lp=w(require("fs-extra")),tN=w(ti()),EG=w(Cn()),Jg=w(xo()),Xg=w(ts()),Dp=require("worker_threads"),_G=w(z()),gG=w(rt());Ro();Zc();Is();hG();eS=w(qm()),{forComponent:eoe}=_G.default;o(Mp,"OpenDBIObject");wr=eoe("storage"),rN="data",tS=Symbol("defined-tables"),SG=((0,$t.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,$t.initSync)();jg=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],hn=Object.create(null),De=Object.create(null);(0,tN._assignPackageExport)("databases",De);(0,tN._assignPackageExport)("tables",hn);ad=Symbol.for("next-table-id"),Op=[],Pp=[],qo=new Map;o(toe,"getTables");o(ot,"getDatabases");o(dd,"resetDatabases");o(Cp,"readMetaDb");o(TG,"ensureDB");o(yG,"setTable");o(zu,"database");o(rw,"dropDatabase");o(RG,"openIndex");o(Je,"table");roe=1e3,noe=10;o(soe,"runIndexing");o(ioe,"dropTableMeta");o(wl,"onUpdatedTable");o(vp,"onRemovedDB");o(rS,"getDefaultCompression")});var iN={};be(iN,{loadGQLSchema:()=>coe,start:()=>sN,startOnMainThread:()=>aoe});function sN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let b of f.definitions)switch(b.kind){case l.OBJECT_TYPE_DEFINITION:let x=function(k){if(k.kind==="NonNullType"){let Y=x(k.type);return Y.nullable=!1,Y}if(k.kind==="ListType")return{type:"array",elements:x(k.type)};let Q={type:k.name?.value};return Object.defineProperty(Q,"location",{value:k.loc.startToken}),Q};o(x,"getProperty");let S=b.name.value,R=[],L={table:null,database:null,properties:R};m.set(S,L),i.allTypes.set(S,L);for(let k of b.directives){if(k.name.value==="table"){for(let Q of k.arguments)L[Q.name.value]=Q.value.value;L.schema&&(L.database=L.schema),L.table||(L.table=S),L.audit&&(L.audit=L.audit!=="false"),L.attributes=L.properties,p.push(L)}if(k.name.value==="sealed"&&(L.sealed=!0),k.name.value==="splitSegments"&&(L.splitSegments=!0),k.name.value==="replicate"&&(L.replicate=!0),k.name.value==="export"){L.export=!0;for(let Q of k.arguments)typeof L.export!="object"&&(L.export={}),L.export[Q.name.value]=Q.value.value}}let O=!1,j={};for(let k of b.fields){let F=x(k.type);F.name=k.name.value,R.push(F),j[F.name]=void 0;for(let Q of k.directives){let Y=Q.name.value;if(Y==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",Q.loc):(F.isPrimaryKey=!0,O=!0);else if(Y==="indexed"){let de={};for(let le of Q.arguments||[])de[le.name.value]=le.value.value;F.indexed=de}else if(Y==="computed"){for(let de of Q.arguments||[])if(de.name.value==="from"){let le=de.value.value;F.computed={from:g(le,de,j)},F.version==null&&(F.version=le)}else de.name.value==="version"&&(F.version=de.value.value);F.computed=F.computed||!0}else if(Y==="relationship"){let de={};for(let le of Q.arguments)de[le.name.value]=le.value.value;F.relationship=de}else if(Y==="createdTime")F.assignCreatedTime=!0;else if(Y==="updatedTime")F.assignUpdatedTime=!0;else if(Y==="expiresAt")F.expiresAt=!0;else if(Y==="allow"){let de=F.authorizedRoles=[];for(let le of Q.arguments)le.name.value==="role"&&de.push(le.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,Q.loc)}}L.type=S,S==="Query"&&(h=L)}function E(b){let S=m.get(b.type);S?(Object.defineProperty(b,"properties",{value:S.properties}),Object.defineProperty(b,"definition",{value:S})):b.type==="array"?E(b.elements):ooe.includes(b.type)||(0,AG.getWorkerIndex)()===0&&console.error(`The type ${b.type} is unknown at line ${b.location.line}, column ${b.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let b of m.values())for(let S of b.properties)E(S);for(let b of p)b.tableClass=e(b),b.export&&(b.export.name===""?i.set((0,nN.dirname)(n),b.tableClass):i.set((0,nN.dirname)(n)+"/"+(b.export.name||b.type),b.tableClass,b.export));function g(b,S,R){return new bG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${b}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var nN,bG,AG,ooe,aoe,coe,IG=oe(()=>{nN=require("path"),bG=require("node:vm");Ne();AG=w(rt());Ua();ooe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(sN,"start");aoe=sN,coe=o(e=>sN({ensureTable:Je}).handleFile(e,null,null,new Fu),"loadGQLSchema")});var aN={};be(aN,{start:()=>_oe});function loe(e){if(e.kind!==Be.Kind.OPERATION_DEFINITION&&e.kind!==Be.Kind.FRAGMENT_DEFINITION)throw new Gr(`Unexpected non-executable definition type ${e.kind}.`)}function wG(e){if(typeof e!="object"||e===null)throw new zi("Request body must be an object.");if(!("query"in e))throw new zi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new zi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new zi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new zi("Request body `operationName` field must be a string.")}function oN(e){return parseInt(e.value,10)}function CG(e){return parseFloat(e.value)}function OG(e,t,r){let n=r.get(e.name.value);return PG(n)?LG(n,t):{attribute:t,value:n}}function PG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function LG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],PG(n)?LG(n,t):{attribute:t,value:n}))}function uoe(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:oN(e.value)};case Be.Kind.FLOAT:return{attribute:t,value:CG(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:t,value:e.value.value};case Be.Kind.VARIABLE:return OG(e.value,t,r);case Be.Kind.OBJECT:return DG(e.value,t,r);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Gr(`Value type, ${e.value.kind}, is not supported.`)}}function DG(e,t,r){return e.fields.flatMap(n=>uoe(n,t,r))}function doe(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:oN(e.value)};case Be.Kind.FLOAT:return{attribute:e.name.value,value:CG(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Be.Kind.VARIABLE:return OG(e.value,e.name.value,t);case Be.Kind.OBJECT:return DG(e.value,[e.name.value],t);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Gr(`Argument type, ${e.value.kind}, is not supported.`)}}function foe(e,t){return e.flatMap(r=>doe(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 Gr(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case Be.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function MG(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:MG(r.selectionSet,t)}:r.name.value)}async function moe(e,t,r,n){let s=Os.getMatch(e.name.value,"graphql");if(s===void 0)throw new Gr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:MG(e.selectionSet,r),conditions:foe(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 vG(e){switch(e.kind){case Be.Kind.NULL:return null;case Be.Kind.INT:return oN(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]:vG(r.value),...t}),{});case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Gr(`Value type, ${e.kind}, is not supported.`)}}function poe(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=vG(n.defaultValue)),n.type.kind===Be.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Gr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function hoe(e,t,r,n){if(e.operation===Be.OperationTypeNode.SUBSCRIPTION)throw new Gr("Subscriptions are not supported.");if(e.operation===Be.OperationTypeNode.MUTATION)throw new Gr("Mutations are not supported yet.");let s=poe(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>moe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function NG({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(loe(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 Gr("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 Gr(`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 Gr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Gr(`Operation \`${r}\` not found.`);let l=await hoe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Eoe(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 wG(r),NG(r,e)}case"POST":{let r=await wo(e.headers.get("content-type"),!0)(e._nodeRequest);return wG(r),NG(r,e)}default:throw new zi("Method Not Allowed",405,{Allow:"GET, POST"})}}function _oe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Eoe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof zi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Gr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof zi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Gr)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,Gr,zi,UG=oe(()=>{Be=w(require("graphql"));No();Ua();o(loe,"assertExecutableDefinitionNode");o(wG,"assertRequestParams");o(oN,"processIntValueNode");o(CG,"processFloatValueNode");o(OG,"processVariableNode");o(PG,"isObject");o(LG,"transformObjectIntoQueryCondition");o(uoe,"processObjectFieldNode");o(DG,"processObjectValueNode");o(doe,"processArgumentNode");o(foe,"buildConditionsQuery");o(nS,"fillInFragments");o(MG,"buildSelectQuery");o(moe,"processFieldNode");o(vG,"processConstValueNode");o(poe,"resolveVariables");o(hoe,"executeOperation");o(NG,"resolver");Gr=class extends Error{static{o(this,"GraphQLQueryingError")}},zi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Eoe,"graphqlQueryingHandler");o(_oe,"start")});var GG=v((ZMe,HG)=>{var fd=require("validate.js"),BG=dt(),md=(H(),M(W)),{handleHDBError:goe,hdbErrors:Soe}=Ee(),{HDB_ERROR_MSGS:tr,HTTP_STATUS_CODES:Toe}=Soe,cN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),yoe={STRUCTURE_USER:"structure_user"},xG=Object.values(md.ROLE_TYPES_ENUM),Roe="attribute_permissions",boe="attribute_name",{PERMS_CRUD_ENUM:pd}=md,Aoe=[Roe,...Object.values(pd)],FG=[pd.READ,pd.INSERT,pd.UPDATE],Ioe=[boe,...FG];function woe(e){let t=cN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,kG(e,t)}o(woe,"addRoleValidation");function Noe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,kG(e,t)}o(Noe,"alterRoleValidation");function Coe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,BG.validateObject(e,t)}o(Coe,"dropRoleValidation");var Ooe=["operation","role","id","permission","hdb_user","access"];function kG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Ooe.includes(n[a])||s.push(n[a]);s.length>0&&fr(tr.INVALID_ROLE_JSON_KEYS(s),r);let i=BG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=Poe(e);a&&fr(a,r),xG.forEach(c=>{e.permission[c]&&!fd.isBoolean(e.permission[c])&&fr(tr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(xG.indexOf(a)<0){if(a===yoe.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(tr.SCHEMA_NOT_FOUND(f),r)}continue}fr(tr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(tr.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(tr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Aoe.includes(d)||fr(tr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(pd).forEach(d=>{fd.isDefined(u[d])?fd.isBoolean(u[d])||fr(tr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(tr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(tr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(tr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Ioe.includes(E)&&E!==pd.DELETE&&fr(tr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!fd.isDefined(p.attribute_name)){fr(tr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){fr(tr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}FG.forEach(E=>{fd.isDefined(p[E])?fd.isBoolean(p[E])||fr(tr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):fr(tr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(tr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Loe(r)}o(kG,"customValidate");HG.exports={addRoleValidation:woe,alterRoleValidation:Noe,dropRoleValidation:Coe};function Poe(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 tr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?md.ROLE_TYPES_ENUM.SUPER_USER:md.ROLE_TYPES_ENUM.CLUSTER_USER;return tr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Poe,"validateNoSUPerms");function Loe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:tr.ROLE_PERMS_ERROR,...e};return goe(new Error,n,Toe.BAD_REQUEST)}else return null}o(Loe,"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 xp=v((rve,KG)=>{"use strict";var qG=xn(),$G=mn(),Doe=gl(),uN=GG(),dN=xo(),tve=require("uuid").v4,Moe=require("util"),sS=(H(),M(W)),voe=ce(),fN=$G.searchByValue,Uoe=$G.searchByHash,xoe=Moe.promisify(Doe.delete),Boe=ai(),Foe=Yu(),{hdbErrors:koe,handleHDBError:Nl}=Ee(),{HDB_ERROR_MSGS:VG,HTTP_STATUS_CODES:Up}=koe,{UserEventMsg:mN}=ts();KG.exports={addRole:Hoe,alterRole:Goe,dropRole:qoe,listRoles:$oe};function lN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(lN,"scrubRoleDetails");async function Hoe(e){let t=uN.addRoleValidation(e);if(t)throw t;e=lN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await fN(r)||[])}catch(i){throw Nl(i)}if(n&&n.length>0)throw Nl(new Error,VG.ROLE_ALREADY_EXISTS(e.role),Up.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await qG.insert(s),dN.signalUserChange(new mN(process.pid)),e=lN(e),e}o(Hoe,"addRole");async function Goe(e){let t=uN.alterRoleValidation(e);if(t)throw t;e=lN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await qG.update(r)}catch(s){throw Nl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Nl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await dN.signalUserChange(new mN(process.pid)),e}o(Goe,"alterRole");async function qoe(e){let t=uN.dropRoleValidation(e);if(t)throw Nl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new Foe(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Uoe(r));if(n.length===0)throw Nl(new Error,VG.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new Boe(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fN(s)),a=!1;if(voe.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`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await xoe(c),dN.signalUserChange(new mN(process.pid)),`${n[0].role} successfully deleted`}o(qoe,"dropRole");async function $oe(){return fN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o($oe,"listRoles")});var pN={};be(pN,{start:()=>zG,startOnMainThread:()=>Yoe});function zG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,YG.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(Voe.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 Koe(i)}}}async function Koe(e){let t=ot().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,WG.isEqual)(i,e)?void 0:(e.id=r.id,(0,iS.alterRole)(e))}return(0,iS.addRole)(e)}var iS,YG,WG,Voe,Yoe,jG=oe(()=>{Ne();iS=w(xp()),YG=require("yaml"),WG=require("lodash"),Voe=["super_user","cluster_user","structure_user"];o(zG,"start");o(Koe,"ensureRole");Yoe=zG});async function oS(e){let t=(0,XG.pathToFileURL)(e).toString();if(Woe)return Bp||(Bp=zoe(Qoe)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function zoe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:joe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,JG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=hn,s.databases=De}};let n=await(0,QG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function joe(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 Qoe(){return{Resource:Fr,tables:hn}}var QG,JG,XG,Woe,Bp,hN=oe(()=>{va();Ne();QG=require("fs/promises"),JG=require("path"),XG=require("url"),Woe=!1;o(oS,"secureImport");o(zoe,"getCompartment");o(joe,"secureOnlyFetch");o(Qoe,"getGlobalVars")});var EN={};be(EN,{handleApplication:()=>Joe,suppressHandleApplicationWarning:()=>Xoe});function ZG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Joe(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,aS.dirname)(t.urlPath);ZG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),eq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function eq(e,t,r){for(let n in t){let s=t[n],i=(0,aS.join)(r,n);ZG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&eq(e,s,i)}}var aS,Xoe,tq=oe(()=>{hN();aS=require("path");o(ZG,"isResource");o(Joe,"handleApplication");o(eq,"recurseForResources");Xoe=!0});var gN={};be(gN,{start:()=>Zoe});function Zoe({resources:e}){e.set("login",_N),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var _N,rq=oe(()=>{va();o(Zoe,"start");_N=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function cq(e){let t={openapi:eae,info:{title:"HarperDB HTTP REST interface",version:oq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)cS[c.type]?i[c.name]=new TN(cS[c.type],c.type):c.properties?(i[c.name]=new lq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new oae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new iq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let j=e.allTypes.get(s.path);l=j.sealed,c=j.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:j,name:k,elements:F,relationship:Q,definition:Y,nullable:de}of c){let le=Y??F?.definition;le&&n(le),de===!1&&p.push(k),Q?j==="array"?f[k]={type:"array",items:{$ref:Us+F.type}}:f[k]={$ref:Us+j}:le?j==="array"?f[k]={type:"array",items:{$ref:Us+le.type}}:f[k]={$ref:Us+le.type}:j==="array"?F.type==="Any"?f[k]={type:"array",items:{format:F.type}}:f[k]={type:"array",items:new TN(cS[F.type],F.type)}:j==="Any"?f[k]={format:j}:f[k]=new TN(cS[j],j),m.push(new yN(k,"query",f[k]))}let h=Object.keys(f),E=new yN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new yN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new iq(f,!l,p);let b=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",L=typeof u.delete=="function",O=typeof u.patch=="function",x="/"+i+"/";b&&(t.paths[x]={},t.paths[x].post=new tae(a,r,{200:new hd({$ref:Us+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[x]||(t.paths[x]={}),t.paths[x].get=new SN(m,r,{200:new hd({type:"array",items:{$ref:Us+a}})},"search for records by the specified property name and value pairs")),t.paths[x]||(t.paths[x]={}),t.paths[x].options=new rae(m,r,{200:new nae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new sq(m,r,"delete all the records that match the provided query",{204:new nq})),x="/"+i+"/{"+d+"}",R&&(t.paths[x]={},t.paths[x].get=new SN([E],r,{200:new hd({$ref:Us+a})},"retrieve a record by its primary key")),S&&(t.paths[x]||(t.paths[x]={}),t.paths[x].put=new sae([E],r,a,{200:new hd({$ref:Us+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[x]||(t.paths[x]={}),t.paths[x].patch=new iae([E],r,a,{200:new hd({$ref:Us+a})},"patch the record with the URL path that maps to the record's primary key")),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new sq([E],r,"delete a record with the given primary key",{204:new nq})),R&&g.schema.enum.length>0&&(x="/"+i+"/{"+d+"}.{property}",t.paths[x]={},t.paths[x].get=new SN([E,g],r,{200:new hd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function tae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Us+e}}}},this.security=t,this.responses=r}function SN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function rae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function nae(){this.description=aq,this.headers={},this.content={}}function hd(e,t){this.description=aq,this.content={"application/json":{schema:e}},this.headers=t}function nq(){this.description="successfully processed request, no content returned to client"}function sae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function iae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function sq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function iq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function TN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function lq(e){this.$ref=`#/components/schemas/${e}`}function oae(e){this.type="array",this.items=new lq(e)}function yN(e,t,r){this.name=e,this.in=t,this.schema=r}var oq,eae,cS,Us,aq,uq=oe(()=>{oq=w(bt()),eae="3.0.3",cS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Us="#/components/schemas/",aq="successful operation";o(cq,"generateJsonApi");o(tae,"Post");o(SN,"Get");o(rae,"Options");o(nae,"ResponseOptions200");o(hd,"Response200");o(nq,"Response204");o(sae,"Put");o(iae,"Patch");o(sq,"Delete");o(iq,"ResourceSchema");o(TN,"Type");o(lq,"Ref");o(oae,"ArrayRef");o(yN,"Parameter")});var fq={};be(fq,{Request:()=>Wa,createReuseportFd:()=>lS});var dq,Wa,RN,bN,lS,Fp=oe(()=>{dq=require("os"),Wa=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new bN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new RN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},RN=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},bN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,dq.platform)()!="win32"&&(lS=require("node-unix-socket").createReuseportFd)});var dS={};be(dS,{parseHeaderValue:()=>IN,start:()=>lae});async function cae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&J_(e);let i=new Ds;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==mq){let g=uS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new si(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let b=IN(g);for(let S of b)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=IN(u).map(b=>(b.next?.name==="confirm"&&b.next.value>=0&&(e.replicatedConfirmation=+b.next.value),b.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 St(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=wo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Ed.ClientError(g,400)}if(e.authorize=!0,a===mq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return cq(uS);throw new Ed.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 Ed.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Ed.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,AN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).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=Sm(f.data,e,f)),f}else if(isFinite(p)){aae[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),b=r["if-none-match"];b&&g==b?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),AN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Sm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}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=Sm(a.contentType?a:Eq(a),e,c),c}}function lae(e){AN=e,e.includeExpensiveRecordCountEstimates&&(Wa.prototype.includeExpensiveRecordCountEstimates=!0),!pq&&(pq=!0,uS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return cae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new jn;hq||(hq=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,fi.warn(l)});let a;t.on("message",o(function(u){a||(a=wo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Ge(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=uS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ge(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new si(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await St(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Io(p.value,r);t.send(h),Ge(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?fi.warn(l):fi.info(l):fi.error(l),t.close(uae[l.statusCode]||1011,Eq(l))}t.close()},e))}function IN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var fi,Ed,Eq,Jr,aae,AN,mq,pq,uS,hq,kp,uae,_q=oe(()=>{No();Jn();fi=w(z()),Ed=w(Ee());X_();yu();Na();Ap();uq();Fp();eg();({errorToString:Eq}=fi),Jr=new Uint8Array(8),aae=new Float64Array(Jr.buffer,0,1),AN={},mq="openapi";o(cae,"http");kp=0;o(lae,"start");uae={401:3e3,403:3003};o(IN,"parseHeaderValue")});var wN=v((Cve,Sq)=>{var{recordAction:fS,recordActionBinary:gq}=(Jn(),M($_)),dae=require("fastify-plugin"),fae=200;Sq.exports=dae(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),fS(a,"duration",u,f,d),gq(s.raw.statusCode<400,"success",u,f,d),gq(1,"response_"+s.raw.statusCode,u,f,d);let m=fae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{fS(performance.now()-c,"transfer",u,f,d),fS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,fS(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var yq=v((Ove,Tq)=>{var mae=dt(),pae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Tq.exports=function(e){return mae.validateObject(e,pae)}});var mS=v((Pve,Rq)=>{"use strict";var hae=(H(),M(W)).OPERATIONS_ENUM,NN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=hae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Rq.exports=NN});var qp={};be(qp,{createTokens:()=>PN,getJWTRSAKeys:()=>gS,refreshOperationToken:()=>LN,validateOperationToken:()=>DN,validateRefreshToken:()=>SS});async function gS(){if(pS)return pS;try{let e=Hp.default.join(Gp.default.getHdbBasePath(),hb),t=await hS.default.readFile(Hp.default.join(e,Xf.JWT_PASSPHRASE_NAME),"utf8"),r=await hS.default.readFile(Hp.default.join(e,Xf.JWT_PRIVATE_KEY_NAME),"utf8");return pS={publicKey:await hS.default.readFile(Hp.default.join(e,Xf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},pS}catch(e){throw _S.default.error(e),new mi.ClientError(gd.NO_ENCRYPTION_KEYS,_d.INTERNAL_SERVER_ERROR)}}async function PN(e){let t=(0,CN.validateBySchema)(e,ji.default.object({username:ji.default.string().optional(),password:ji.default.string().optional(),role:ji.default.string().optional(),expires_in:ji.default.alternatives(ji.default.string(),ji.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,ON.findAndValidateUser)(e.username,e.password,f)}catch(f){throw _S.default.error(f),new mi.ClientError(gd.INVALID_CREDENTIALS,_d.UNAUTHORIZED)}if(!r)throw new mi.ClientError(gd.INVALID_CREDENTIALS,_d.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 gS(),c=await Sd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??Nq,algorithm:ES,subject:Td.OPERATION}),l=await Sd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Eae,algorithm:ES,subject:Td.REFRESH}),u=pw(l,kr.SHA256);if((await(0,bq.update)(new Aq.default(Qf,Eu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new mi.ClientError(gd.REFRESH_TOKEN_SAVE_FAILED,_d.INTERNAL_SERVER_ERROR);return Iq.default.signalUserChange(new wq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function LN(e){let t=(0,CN.validateBySchema)(e,ji.default.object({refresh_token:ji.default.string().required()}).required());if(t)throw new mi.ClientError(t.message);let{refresh_token:r}=e;await SS(r);let n=await gS(),s=await Sd.default.decode(r);return{operation_token:await Sd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:Nq,algorithm:ES,subject:Td.OPERATION})}}async function DN(e){return Cq(e,Td.OPERATION)}async function SS(e){return Cq(e,Td.REFRESH)}async function Cq(e,t){try{let r=await gS(),n=await Sd.default.verify(e,r.publicKey,{algorithms:ES,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,ON.findAndValidateUser)(n.username,void 0,!1);if(t===Td.REFRESH&&!hw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw _S.default.warn(r),r?.name==="TokenExpiredError"?new mi.ClientError(gd.TOKEN_EXPIRED,_d.FORBIDDEN):new mi.ClientError(gd.INVALID_TOKEN,_d.UNAUTHORIZED)}}var Sd,hS,Hp,ji,CN,mi,_S,ON,bq,Aq,Iq,wq,Gp,_d,gd,Nq,Eae,ES,Td,pS,yd=oe(()=>{Sd=w(require("jsonwebtoken")),hS=w(require("fs-extra")),Hp=w(require("node:path")),ji=w(require("joi")),CN=w(dt());H();mi=w(Ee()),_S=w(z());_w();ON=w(Fn()),bq=w(xn()),Aq=w(mS()),Iq=w(xo()),wq=w(ts()),Gp=w(fe()),{HTTP_STATUS_CODES:_d,AUTHENTICATION_ERROR_MSGS:gd}=mi.hdbErrors;Gp.default.initSync();Nq=Gp.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Eae=Gp.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",ES="RS256",Td={OPERATION:"operation",REFRESH:"refresh"};o(gS,"getJWTRSAKeys");o(PN,"createTokens");o(LN,"refreshOperationToken");o(DN,"validateOperationToken");o(SS,"validateRefreshToken");o(Cq,"validateToken")});var MN=v((Uve,Lq)=>{"use strict";var _ae=yq(),Rd=require("passport"),gae=require("passport-local").Strategy,Sae=require("passport-http").BasicStrategy,Tae=require("util"),yae=Fn(),Pq=Tae.callbackify(yae.findAndValidateUser),vve=Kr(),Rae=(H(),M(W)),Oq=(yd(),M(qp));Rd.use(new gae(function(e,t,r){Pq(e,t,r)}));Rd.use(new Sae(function(e,t,r){Pq(e,t,r)}));Rd.serializeUser(function(e,t){t(null,e)});Rd.deserializeUser(function(e,t){t(null,e)});function bae(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===Rae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Oq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Oq.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(bae,"authorize");function Aae(e,t){let r=_ae(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(Aae,"checkPermissions");Lq.exports={authorize:bae,checkPermissions:Aae}});var TS=v((Bve,Dq)=>{"use strict";var Iae=ss();Dq.exports={writeTransaction:wae};function wae(e,t,r){return Iae.writeTransaction(e,t,r)}o(wae,"writeTransaction")});var xq=v((Hve,Uq)=>{"use strict";var Nae=mn(),Cae=li(),Mq=z(),Oae=xn(),kve=TS(),Pae=require("clone"),UN=require("alasql"),Lae=Lg(),vq=require("util"),Dae=vq.promisify(Cae.getTableSchema),Mae=vq.promisify(Nae.search),vae=(H(),M(W)),vN=ce();Lae(UN);Uq.exports={update:xae};var Uae="There was a problem performing this update. Please check the logs and try again.";async function xae({statement:e,hdb_user:t}){let r=await Dae(e.table.databaseid,e.table.tableid),n=Bae(e.columns);vN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Pae(s),c=vN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=UN.parse(l).statements[0],d=await Mae(u),f=Fae(n,d);return kae(a,f,t)}o(xae,"update");function Bae(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=UN.compile(`SELECT ${r.expression.toString()} AS [${vae.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Mq.error(t),new Error(Uae)}}o(Bae,"createUpdateRecord");function Fae(e,t){return vN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Fae,"buildUpdateRecords");async function kae(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Oae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Mq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(kae,"updateRecords")});var Fq=v((Vve,Bq)=>{var Hae=require("alasql"),Gae=mn(),qae=z(),$ae=ss(),BN=require("util"),xN=ce(),Vae=(H(),M(W)),Kae=li(),qve=TS(),$ve=xn(),Yae="record",Wae="successfully deleted",zae=BN.callbackify(Xae),jae=BN.promisify(Gae.search),Qae=BN.promisify(Kae.getTableSchema);Bq.exports={convertDelete:zae};function Jae(e){return`${e.deleted_hashes.length} ${Yae}${e.deleted_hashes.length===1?"":"s"} ${Wae}`}o(Jae,"generateReturnMessage");async function Xae({statement:e,hdb_user:t}){let r=await Qae(e.table.databaseid,e.table.tableid);xN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=xN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Hae.parse(a).statements[0],l={operation:Vae.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await jae(c);let u=await $ae.deleteRecords(l);return xN.isEmptyOrZeroLength(u.message)&&(u.message=Jae(u)),delete u.txn_time,u}catch(u){throw qae.error(u),u.hdb_code?u.message:u}}o(Xae,"convertDelete")});var Cl=v((Wve,qq)=>{"use strict";var Yve=mn(),$p=z(),{validateBySchema:kq}=dt(),$o=require("joi"),Zae=Vi(),yS=ce(),{handleHDBError:RS,hdbErrors:ece,ClientError:Hq}=Ee(),{HDB_ERROR_MSGS:bS,HTTP_STATUS_CODES:FN}=ece,Gq=fe();Gq.initSync();var{getDatabases:kN}=(Ne(),M(ft)),tce=require("fs-extra"),rce=(H(),M(W));qq.exports={describeAll:nce,describeTable:AS,describeSchema:sce};async function nce(e={}){try{let t=yS.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=kN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await AS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await AS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){$p.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],a[l[m].schema]&&delete a[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],a[l[m].schema]&&delete a[l[m].schema]);for(let m in a)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return $p.error("Got an error in describeAll"),$p.error(t),RS(new Error,bS.DESCRIBE_ALL_ERR)}}o(nce,"describeAll");async function AS(e,t){yS.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=kq(e,$o.object({database:$o.string(),table:$o.string().required(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(i)throw new Hq(i.message);let c=kN()[r];if(!c)throw RS(new Error,bS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let l=c[n];if(!l)throw RS(new Error,bS.TABLE_NOT_FOUND(e.schema,e.table),FN.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await tce.stat(l.primaryStore.env.path)).size}catch(p){$p.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),Gq.get(rce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Zae.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){$p.warn(`unable to stat table dbi due to ${p}`)}return m}o(AS,"descTable");async function sce(e){yS.transformReq(e);let t=kq(e,$o.object({database:$o.string(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(t)throw new Hq(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=kN()[n];if(!i)throw RS(new Error,bS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),yS.isEmpty(l)||l.describe){let u=await AS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(sce,"describeSchema")});var Wq=v((jve,Yq)=>{"use strict";var ice=Cl(),{hdbErrors:$q}=Ee(),{getDatabases:Vq}=(Ne(),M(ft));Yq.exports={checkSchemaExists:Kq,checkSchemaTableExists:oce,schemaDescribe:ice};async function Kq(e){if(!Vq()[e])return $q.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Kq,"checkSchemaExists");async function oce(e,t){let r=await Kq(e);if(r)return r;if(!Vq()[e][t])return $q.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(oce,"checkSchemaTableExists")});var VN=v((eUe,i$)=>{"use strict";var{decode:ace}=require("msgpackr"),{isMainThread:Jve,parentPort:Xve,threadId:Zve}=require("worker_threads"),NS=rr(),bd=It(),qN=(H(),M(W)),En=z(),GN=fe(),cce=(H(),M(W)),{onMessageByType:lce}=rt(),Jq=Vi(),{recordAction:zq,recordActionBinary:uce}=(Jn(),M($_)),{publishToStream:dce}=NS,{ConsumerEvents:jq}=require("nats"),fce=mn(),{promisify:mce}=require("util"),{decodeBlobsWithWrites:pce}=(Is(),M(tA)),Xq=mce(setTimeout),CS=1e4,OS,wS,hce,Ece,Zq,Vp=new Map,Ad=new Map;i$.exports={initialize:e$,ingestConsumer:$N,setSubscription:_ce,setIgnoreOrigin:Tce,getDatabaseSubscriptions:Sce,updateConsumer:t$};async function e$(){lce(qN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await t$(n)}),Zq=!0,En.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await NS.getNATSReferences();OS=e,wS=e.info.server_name,hce=t,Ece=r}o(e$,"initialize");async function t$(e){if(e.status==="start"){let{js:t,jsm:r}=await r$(e.node_domain_name);$N(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Vp.get(e.stream_name+e.node_domain_name);t&&(En.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Vp.set(e.stream_name+e.node_domain_name,"close")),Ad.get(e.node_domain_name)==="failed"&&Ad.set(e.node_domain_name,"close")}}o(t$,"updateConsumer");var PS=new Map;function _ce(e,t,r){let n=PS.get(e);n||PS.set(e,n=new Map),n.set(t,r),Zq||e$().then(gce)}o(_ce,"setSubscription");async function gce(){let e=await fce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+bd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await r$(r),!n))break;let{schema:a,table:c}=i,l=Jq.createNatsTableStreamName(a,c);$N(l,n,s,r)}}}o(gce,"accessConsumers");async function r$(e){let t,r,n=1;for(;!r;)try{t=await OS.jetstream({domain:e}),r=await OS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ad.get(e)==="close")break;Ad.set(e,"failed"),n%10===1&&En.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<CS?n++*100:CS;await Xq(i)}return{js:t,jsm:r}}o(r$,"connectToRemoteJS");function Sce(){return PS}o(Sce,"getDatabaseSubscriptions");var n$;function Tce(e){n$=e}o(Tce,"setIgnoreOrigin");var s$=100,Qq=new Array(s$),IS=0;async function $N(e,t,r,n){let{connection:s}=await NS.getNATSReferences();OS=s,wS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,wS),En.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Ad.get(n)==="close")break;a%10===1&&En.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(En.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await NS.createConsumer(r,e,wS,new Date(Date.now()).toISOString()));let d=a++*100<CS?a++*100:CS;await Xq(d)}let c=!1,l;for(;!c;){if(Vp.get(e+n)==="close"||Ad.get(n)==="close"){Vp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:GN.get(qN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Vp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===jq.ConsumerDeleted&&(await l.close(),c=!0),d.type===jq.HeartbeatsMissed){let f=d.data;En.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(En.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await Qq[IS],Qq[IS]=yce(d).catch(f=>{En.error(f)}),++IS>=s$&&(IS=0)}catch(d){d.message==="consumer deleted"?(En.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):En.error("Error consuming clustering ingest, restarting consumer",d)}}}o($N,"ingestConsumer");async function yce(e){let t;await pce(()=>{t=ace(e.data)}),zq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),En.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=GN.get(qN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(bd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!n$),uce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(bd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;En.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),En.trace(`messageProcessor nats msg id: ${e.headers.get(bd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:b,node_name:S}=m||{},R=PS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:HN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:b,nodeName:S});else{let O=d.map((x,j)=>({type:HN(a),value:x,expiresAt:p,id:f?.[j],table:u}));for(;l;)O.push({type:HN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:b,nodeName:S})}GN.get(cce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&dce(e.subject.split(".").slice(0,-1).join("."),Jq.createNatsTableStreamName(c,u),e.headers,e.data),await E;let L=Date.now()-g;g&&zq(L,"replication-latency",e.subject,a,"ingest")}catch(a){En.error(a)}e.ack()}o(yce,"messageProcessor");function HN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(HN,"convertOperation")});var rr=v((aUe,R$)=>{"use strict";var qr=fe();qr.initSync();var Rce=require("fs-extra"),bce=require("semver"),Wp=require("path"),{monotonicFactory:Ace}=require("ulidx"),a$=Ace(),Ice=require("util"),c$=require("child_process"),wce=Ice.promisify(c$.exec),Nce=c$.spawn,Xr=It(),et=(H(),M(W)),{packageJson:Cce,PACKAGE_ROOT:Oce}=bt(),LS=ce(),pi=z(),DS=Vi(),Pce=TS(),Kp=pt(),{broadcast:Lce,onMessageByType:Dce,getWorkerIndex:Mce}=rt(),{isMainThread:l$}=require("worker_threads"),{Encoder:vce,decode:zN}=require("msgpackr"),u$=new vce,{isEmpty:Dl}=LS,d$=Fn(),rUe=48*36e11;l$&&Dce(et.ITC_EVENT_TYPES.RESTART,()=>{_n=void 0,Ll=void 0});var{connect:Uce,StorageType:xce,RetentionPolicy:Bce,AckPolicy:jN,DeliverPolicy:QN,DiscardPolicy:Fce,NatsConnection:nUe,JetStreamManager:sUe,JetStreamClient:iUe,StringCodec:oUe,JSONCodec:kce,createInbox:JN,headers:Hce,ErrorCode:o$}=require("nats"),{recordAction:Gce}=(Jn(),M($_)),{encodeBlobsAsBuffers:qce}=(Is(),M(tA)),f$=kce(),$ce="clustering",Vce=Cce.engines[Xr.NATS_SERVER_NAME],Kce=Wp.join(Oce,"dependencies"),WN=Wp.join(Kce,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),KN,YN,Yp,Ol,Pl;R$.exports={runCommand:m$,checkNATSServerInstalled:Yce,createConnection:XN,getConnection:zp,getJetStreamManager:jp,getJetStream:h$,getNATSReferences:Qi,getServerList:zce,createLocalStream:ZN,listStreams:E$,deleteLocalStream:jce,getServerConfig:Id,listRemoteStreams:Qce,viewStream:Jce,viewStreamIterator:Xce,publishToStream:Zce,request:rle,reloadNATS:eC,reloadNATSHub:nle,reloadNATSLeaf:sle,extractServerName:tle,requestErrorHandler:ile,createLocalTableStream:T$,createTableStreams:cle,purgeTableStream:y$,purgeSchemaTableStreams:lle,getStreamInfo:ule,updateLocalStreams:fle,closeConnection:Wce,getJsmServerName:MS,addNatsMsgHeader:_$,clearClientCache:p$,updateRemoteConsumer:ole,createConsumer:g$,updateConsumerIterator:ale};async function m$(e,t=void 0){let{stdout:r,stderr:n}=await wce(e,{cwd:t});if(n)throw new Error(n.replace(`
13
+ `},"serialize"),compressible:!1,q:.8});ln.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});CU={type:"application/json",serializeStream:hm,serialize:Em,deserialize:h8,q:.5};ln.set("*/*",CU);ln.set("",CU);o(h8,"tryJSONParse");o(gm,"registerContentHandlers");E8=(0,wU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=g_(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(g_,"findBestSerializer");yU=$b.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(Sm,"serialize");o(Io,"serializeMessage");o(Wb,"asyncSerialization");o(zb,"hasAsyncSerialization");o(_8,"streamToBuffer");g8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(S8,"isBufferEncoding");o(T8,"parseContentType");o(wo,"getDeserializer");o(y8,"deserializerUnknownType");o(R8,"transformIterable");o(__,"toCsvStream")});var tA={};be(tA,{Blob:()=>As,blobsWereEncoded:()=>Wc,databasePaths:()=>Qb,decodeBlobsWithWrites:()=>w_,decodeFromDatabase:()=>Po,decodeWithBlobCallback:()=>wm,deleteBlob:()=>b_,deleteBlobsInObject:()=>Ca,deleteRootBlobPathsForDB:()=>Zb,encodeBlobsAsBuffers:()=>M8,encodeBlobsWithFilePath:()=>I_,findBlobsInObject:()=>bu,getFileId:()=>A_,getFilePathForBlob:()=>FU,getRootBlobPathsForDB:()=>Im,isSaving:()=>N8,saveBlob:()=>Am,setDeletionDelay:()=>w8,startPreCommitBlobsForRecord:()=>eA});function xU(){}function b_(e){let t=FU(e);t&&setTimeout(()=>{(0,tt.unlink)(t,r=>{r&&Mi.default.debug?.("Error trying to remove blob file",r)})},BU)}function w8(e){BU=e}function Am(e){let t=un.get(e);if(!t)t={storageIndex:0,fileId:null,store:On},un.set(e,t);else{if(t.fileId)return t;t.store=On}return O8(t),t.source?jb(e,t.source,t):t.contentBuffer?C8(e,t):jb(e,ym.Readable.from(e.stream()),t),t}function jb(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,tt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(A8),p=(0,y_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(b8),t.pipe(f)),t.on("error",E);function h(g){let b=BigInt(g),S=new Uint8Array(Ir),R=new DataView(S.buffer);return b|=BigInt(a?Xb:UU)<<48n,R.setBigInt64(0,b),S}o(h,"createHeader");function E(g){i.unlock(d,0);let b=f.fd;g?(b&&(0,tt.close)(b),u(g)):c?(0,tt.fdatasync)(b,S=>{S&&u(S),l(),(0,tt.close)(b)}):(l(),(0,tt.close)(b))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-Ir;e.size=g,(0,tt.write)(f.fd,h(g),0,Ir,0,E)}})}),e}function A_(e){return un.get(e)?.fileId}function N8(e){return un.get(e)?.saving}function FU(e){let t=un.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=Qb.get(e);if(!t){if(!e.databaseName)return Mi.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,R_.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Oo.join)(n,e.databaseName)):t=[(0,Oo.join)((0,R_.getHdbBasePath)(),"blobs",e.databaseName)],Qb.set(e,t)}return t}async function Zb(e){let t=Im(e);t&&await Promise.all(t.map(r=>kU(r)))}async function kU(e){if((0,tt.existsSync)(e)){for(let t of await(0,ws.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await kU((0,Oo.join)(e,t.name));else try{await(0,ws.unlink)((0,Oo.join)(e,t.name))}catch(r){Mi.default.warn?.("Error deleting file",r)}try{await(0,ws.rmdir)(e)}catch(t){Mi.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Oo.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 C8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<vU))return e.size=n,jb(e,ym.Readable.from([r]),t)}function O8(e){let t=Im(e.store),r=P8(),n=t?.length>1?L8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Oo.dirname)(i);(0,tt.existsSync)(a)||(0,Jb.ensureDirSync)(a),e.filePath=i}function P8(){let e=MU.get(On);if(!e){let t=0,r=Im(On);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,tt.existsSync)(n))for(let c of(0,tt.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,Oo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(On.getUserSharedBuffer("blob-file-id",e.buffer)),MU.set(On,e)}return Number(Atomics.add(e,0,1n))}function L8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(T_);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,D8(e)),e.frequencyTable[t%T_]}async function D8(e){if(!ws.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,ws.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,Jb.ensureDirSync)(s),a=await(0,ws.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(T_),n=t.map(s=>1/s);for(let s=0;s<T_;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 I_(e,t,r){Ru=t,On=r,Wc=!1;try{return e()}finally{Ru=void 0,On=void 0}}function M8(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function w_(e,t,r){try{Yr=[],Co=r,On=t,e()}catch(s){throw Co=void 0,Yr=void 0,s}Co=void 0;let n=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,n}function wm(e,t,r){On=r;try{return Co=t,e()}finally{Co=void 0}}function Po(e,t){return On=t,e()}function Ca(e){bu(e,t=>{b_(t)})}function bu(e,t){if(e instanceof As)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&bu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&bu(e[r],t)}}function eA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Rm&&s.saveBeforeCommit){On=t;let i=Am(s).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function U8(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var vi,ws,tt,y_,ym,Jb,R_,Oo,Mi,vU,Ir,UU,Xb,PU,b8,A8,LU,un,Co,As,Ru,Yr,On,Wc,Tm,S_,I8,DU,Rm,BU,Qb,MU,T_,v8,Is=oe(()=>{vi=require("msgpackr"),ws=require("node:fs/promises"),tt=require("node:fs"),y_=require("node:zlib"),ym=require("node:stream"),Jb=require("fs-extra"),R_=w(fe());H();Oo=require("path"),Mi=w(Qn());No();vU=8192,Ir=8,UU=0,Xb=1,PU=255,b8=new Uint8Array([0,UU,255,255,255,255,255,255]),A8=new Uint8Array([0,Xb,255,255,255,255,255,255]),LU=0xffffffffffff,un=new WeakMap,As=global.Blob||U8(),Wc=!1,Tm=new Uint8Array(8),S_=new DataView(Tm.buffer),I8=6e4;o(xU,"InstanceOfBlobWithNoConstructor");xU.prototype=As.prototype;DU=!1,Rm=class e extends xU{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=un.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):(zb()&&Wb(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=un.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=bm(t),a,c=o(async()=>{let l,u=Ir;try{if(l=await(0,ws.readFile)(i),l.length>=Ir){l.copy(Tm,0,0,Ir);let f=S_.getBigUint64(0);if(Number(f>>48n)===PU)throw new Error("Error in blob: "+buffer.subarray(Ir));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<LU&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===Xb?new Promise((f,m)=>{(0,y_.deflate)(l.subarray(Ir),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Ir))},"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=un.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((b,S)=>{(0,tt.open)(i,"r",(R,L)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Mi.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(b,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=L,b(L)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,b=100;return new Promise(o(function S(R,L){function O(j){(0,tt.close)(a),clearTimeout(d),u&&u.close(),L(j),p.#e?.forEach(k=>k(j))}o(O,"onError");let x=Buffer.allocUnsafe(262144);(0,tt.read)(a,x,0,x.length,c,(j,k,F)=>{if(l+=k,j)return O(j);if(c===0){if(k<Ir){b-- >0&&f!==!1?(h(),Mi.default.debug?.("File was empty, waiting for data to be written",i,b),setTimeout(()=>S(R,L),20).unref()):(Mi.default.debug?.("File was empty, throwing error",i,b),L(new Error(`Blob ${t.fileId} was empty`)));return}F.copy(Tm,0,0,Ir);let Q=S_.getBigUint64(0);if(Number(Q>>48n)===PU)return O(new Error("Error in blob: "+F.subarray(Ir)));if(g=Number(Q&0xffffffffffffn),g<LU&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);F=F.subarray(Ir,k),l-=Ir}else if(k===0){let Q=Buffer.allocUnsafe(8);return(0,tt.read)(a,Q,0,Ir,0,Y=>{if(Y)return O(Y);if(Tm.set(Q),g=Number(S_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},I8).unref():(u=(0,tt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,L))}),S(R,L)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,L));return}(0,tt.close)(a),E.close(),R()})}else F=F.subarray(0,k);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=k,S(R,L);s&&l>=s&&(l>s&&(F=F.subarray(0,s-c)),l=g=s),n&&n>c&&(F=F.subarray(n-c))}c+=k;try{E.enqueue(F)}catch(Q){return Mi.default.debug?.("Error enqueuing chunk",Q),R()}l===g&&((0,tt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,tt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=un.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};un.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)};un.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 DU||(DU=!0,Mi.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}},BU=500;o(b_,"deleteBlob");o(w8,"setDeletionDelay");global.createBlob=function(e,t){let r=new Rm(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(un.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof ym.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=ym.Readable.from(e);else throw new Error("Invalid source type");return r};o(Am,"saveBlob");o(jb,"writeBlobWithStream");o(A_,"getFileId");o(N8,"isSaving");o(FU,"getFilePathForBlob");Qb=new Map;o(Im,"getRootBlobPathsForDB");o(Zb,"deleteRootBlobPathsForDB");o(kU,"rimrafSteadily");o(bm,"getFilePath");o(C8,"writeBlobWithBuffer");o(O8,"generateFilePath");MU=new Map;o(P8,"getNextFileId");T_=128;o(L8,"getNextStorageIndex");o(D8,"createFrequencyTableForStoragePaths");o(I_,"encodeBlobsWithFilePath");o(M8,"encodeBlobsAsBuffers");o(w_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(Po,"decodeFromDatabase");o(Ca,"deleteBlobsInObject");o(bu,"findBlobsInObject");o(eA,"startPreCommitBlobsForRecord");v8=new vi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,vi.addExtension)({Class:As,type:11,unpack:o(function(e){let t=v8.unpack(e),r=new Rm;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(un.set(r,{storageIndex:t[1],fileId:t[2],store:On}),Co)return Co(r)??r;if(!On)throw new Error("No store specified, cannot load blob from storage")}else un.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=un.get(e);if(Ru!==void 0&&(Wc=!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<vU)return r.size=t.contentBuffer.length,(0,vi.pack)([r,t.contentBuffer])}if(Ru!==void 0){if(t=Am(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Ru,(0,vi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Co)return Co(e),(0,vi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,tt.readFileSync)(bm(t));if(n.length>=Ir&&(n.copy(Tm,0,0,Ir),Number(S_.getBigUint64(0)&0xffffffffffffn)===n.length-Ir))return Buffer.concat([(0,vi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,vi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(U8,"polyfillBlob")});var VU={};be(VU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>iA,setAvailableSpaceRatioGetter:()=>B8});function Nm(e,t,r){(r||(0,C_.getWorkerIndex)()===(0,C_.getWorkerCount)()-1)&&(N_.has(e)||N_.set(e,[]),N_.get(e).push({priority:0,handler:t}),sA||(sA=setTimeout(iA,GU).unref()))}async function iA(){for(let[e,t]of N_)try{let r=await $U(e),n=x8/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&&(nA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){nA.default.error?.("Error running storage reclamation handlers",r)}sA=setTimeout(iA,GU).unref()}function B8(e){$U=e??qU}var rA,C_,nA,O_,HU,N_,x8,GU,sA,qU,$U,P_=oe(()=>{rA=require("node:fs/promises"),C_=w(rt()),nA=w(Qn());H();O_=w(fe()),HU=w(ce());O_.default.initSync();N_=new Map,x8=O_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,GU=(0,HU.convertToMS)(O_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");qU=o(async e=>{if(rA.statfs){let t=await(0,rA.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"),$U=qU;o(iA,"runReclamationHandlers");o(B8,"setAvailableSpaceRatioGetter")});var nx={};be(nx,{ACTION_32_BIT:()=>U_,ACTION_64_BIT:()=>G8,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>jc,HAS_BLOBS:()=>Pn,HAS_CURRENT_RESIDENCY_ID:()=>Qc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Jc,REMOTE_SEQUENCE_UPDATE:()=>x_,createAuditEntry:()=>Xc,getLastRemoved:()=>k8,openAuditStore:()=>M_,readAuditEntry:()=>vt,removeAuditEntry:()=>v_,setAuditRetention:()=>H8,transactionKeyEncoder:()=>ZU});function M_(e){let t=e.auditStore=e.openDB(oA.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(oA.AUDIT_STORE_NAME,Pm),YU(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=cA;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-aA/(1+i*i)})){try{m=v_(t,h,E)}catch(g){Au.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=F8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,aA/10):(YU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!KU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(KU=!0,Au.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 v_(e,t,r){let n=q8(r),s;if(n&Pn){s=vt(r);let i=e.tableStores[s.tableId];if(i){let a=i.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Po(()=>Ca(s.getValue(i)),i.rootStore)}}if((n&15)===lA){s=s||vt(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 YU(e,t){uA[0]=t,e.put(Symbol.for("last-removed"),ex)}function k8(e){let t=e.get(Symbol.for("last-removed"));if(t)return ex.set(t),uA[0]}function H8(e,t=cA){aA=e,cA=t}function Xc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=tx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Oa.setFloat64(0,n):Ns.set(dA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}b(s),b(t),g(r),Oa.setFloat64(h,e),h+=8,l&Qc&&b(u),l&Jc&&b(d),l&Mm&&(Oa.setFloat64(h,f),h+=8),l&Dm&&b(rx[m]),i?g(i):Ns[h++]=0,l?Oa.setUint32(n?8:0,p|l|3221225472):Ns[n?8:0]=p;let E=Ns.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,zc.writeKey)(S,Ns,h);let L=h-R-1;L>127?L>16383?(Au.error("Key or username was too large for audit entry",S),h=R+1,Ns[R]=0):(Ns.copyWithin(R+2,R+1,h),Oa.setUint16(R,L|32768),h++):Ns[R]=L}function b(S){S<128?Ns[h++]=S:S<16384?(Oa.setUint16(h,S|32768),h+=2):S<1056964608?(Oa.setUint32(h,S|3221225472),h+=4):(Ns[h]=255,Oa.setUint32(h+1,S),h+=5)}}function q8(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 jc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function vt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Qc&&(m=n.readInt()),i&Jc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=rx[R]}l=n.readInt();let g=n.position,b=n.position+=l,S;return{type:tx[i&7],tableId:c,nodeId:a,get recordId(){return(0,zc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return b>g?(0,zc.readKey)(e,g,b):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(R,L,O){if(i&L_||i&Cm&&!L)return S||(S=Po(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return Bb(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(L_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Au.error("Reading audit entry error",n,e),{}}}var zc,D_,oA,Om,XU,Au,Ns,Oa,ZU,Pm,aA,F8,uA,ex,cA,KU,L_,Cm,WU,lA,zU,jU,QU,JU,U_,G8,x_,Qc,Jc,Dm,Mm,Pn,tx,rx,jc,Ro=oe(()=>{zc=require("ordered-binary"),D_=w(fe()),oA=w(Gt());H();Om=w(rt()),XU=w(ce());Zc();Au=w(z());p_();Is();P_();(0,D_.initSync)();Ns=Buffer.alloc(2816),Oa=new DataView(Ns.buffer,Ns.byteOffset,2816),ZU={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,zc.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,zc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:ZU},aA=(0,XU.convertToMS)((0,D_.get)(U.LOGGING_AUDITRETENTION))||86400*3,F8=1e3,uA=new Float64Array(1),ex=new Uint8Array(uA.buffer),cA=1e4,KU=!1;o(M_,"openAuditStore");o(v_,"removeAuditEntry");o(YU,"updateLastRemoved");o(k8,"getLastRemoved");o(H8,"setAuditRetention");L_=16,Cm=32,WU=1,lA=2,zU=3,jU=4,QU=5,JU=6,U_=14,G8=15,x_=11,Qc=512,Jc=1024,Dm=2048,Mm=4096,Pn=8192,tx={put:WU|L_,[WU]:"put",delete:lA,[lA]:"delete",message:zU|L_,[zU]:"message",invalidate:jU|Cm,[jU]:"invalidate",patch:QU|Cm,[QU]:"patch",relocate:JU,[JU]:"relocate"},rx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Xc,"createAuditEntry");o(q8,"readAction");o(vt,"readAuditEntry");jc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function B_(){return fA||(fA=Je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),fA}function V8(e){return e=e.replace($8,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 K8(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 pA(e){let t=sx.default.createHash("shake128",{outputLength:4}),r;return(0,ix.isIPv6)(e)?r=V8(e):r=e.toLowerCase(),K8(Uint8Array.from(t.update(r).digest()))}var sx,ix,mA,fA,$8,hA=oe(()=>{Ne();sx=w(require("crypto")),ix=require("node:net"),mA=new Map;o(B_,"getAnalyticsHostnameTable");$8=/(\d{1,3}\.){3}\d{1,3}$/;o(V8,"normalizeIPv6");o(K8,"nodeHashToNumber");o(pA,"stableNodeId")});var Lo,EA=oe(()=>{Lo={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 dx={};be(dx,{profile:()=>ux,userCodeFolders:()=>_A});async function ux(){let e=(0,k_.pathToFileURL)(ax.PACKAGE_ROOT).toString(),t=new Map,r=100,n=lx/1e6,s=0,i=0;try{let{profile:u}=await Iu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)a(d);Ge(i*n,"cpu-usage","harper"),Ge(s*n,"cpu-usage","user")}catch(u){cx.error?.("analytics profiler error:",u)}finally{await Iu.post("Profiler.start")}function a(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=a(t.get(f));return l(u)?(s+=d,d>r&&Ge(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&Ge(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}o(a,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}o(c,"isHarperCode");function l(u){if(_A.some(d=>u.callFrame?.url.startsWith(d)))return!0}o(l,"isUserCode")}var ox,F_,ax,k_,cx,_A,lx,Iu,fx=oe(()=>{ox=require("node:inspector/promises");Jn();F_=w(fe());H();ax=w(Rt()),k_=require("node:url"),cx=w(z()),_A=[(0,k_.pathToFileURL)((0,F_.getHdbBasePath)()).toString()];process.env.RUN_HDB_APP&&_A.push((0,k_.pathToFileURL)(process.env.RUN_HDB_APP).toString());lx=1e3,Iu=new ox.Session;Iu.connect();(async()=>{await Iu.post("Profiler.enable"),await Iu.post("Profiler.setSamplingInterval",{interval:lx}),await Iu.post("Profiler.start");let e=(0,F_.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{ux()},e).unref()})();o(ux,"profile")});var q_={};be(q_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>yA,calculateCPUUtilization:()=>Px,diffResourceUsage:()=>Lx,onAnalyticsAggregate:()=>AA,recordAction:()=>Ge,recordActionBinary:()=>zr,recordHostname:()=>RA,setAnalyticsEnabled:()=>z8});function z8(e){Ix=e,clearTimeout(Um),Um=null}function j8(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 Q8(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},G_.set(e,a)}function Ge(e,t,r,n,s){if(!Ix)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=G_.get(i);a?j8(e,a):Q8(i,e,t,r,n,s),Um||J8()}function zr(e,t,r,n,s){Ge(!!e,t,r,n,s)}function Bm(e){Nx.push(e)}function J8(){gA||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-gA;gA=0;let t=[],r={time:Date.now(),period:e,threadId:el.threadId,metrics:t};for(let[s,i]of G_){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 Ox){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Dx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:el.threadId,byThread:!0,...n});for(let s of Nx)s(t);G_=new Map,el.parentPort?el.parentPort.postMessage({type:wx,report:r}):Ux({report:r})},yA).unref()}async function RA(){let e=Me.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=pA(e);Wr.trace?.("recordHostname nodeId:",t);let r=B_();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 wu(e,t){let r=Me.hostname,n=mA.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=pA(r),Wr.trace?.("storeMetric new nodeId:",n),mA.set(r,n));let s={id:[(0,TA.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Px(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Lx(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 X8(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:Lo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),wu(e,l),n+=c}return n}function mx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Ax.statSync(s.primaryStore.env.path).size,c=X8(e,r,n),l=a-c,u={metric:Lo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};wu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function px(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:Lo.STORAGE_VOLUME,database:r,...i};wu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function Z8(e,t=6e4){let r=bA(),n=Mx(),s=new Promise(R=>{let L=performance.now();setImmediate(()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-L)+"ms"),L=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-L)+"ms"),R(O-L)})}),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:L}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!L)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:x}=L;for(let j of O||[]){let{path:k,method:F,type:Q,metric:Y,count:de,total:le,distribution:ee,threads:Re,...Ie}=j;de||(de=1);let $e=Y+(k?"-"+k:"");F!==void 0&&($e+="-"+F),Q!==void 0&&($e+="-"+Q);let Fe=c.get($e);if(Fe){if(Fe.threads){let Jt=Fe.threads[x];if(Jt)Fe=Jt;else{Fe.threads[x]={...Ie};continue}}Fe.count||(Fe.count=1);let yr=Fe.count;for(let Jt in Ie){let kt=Ie[Jt];typeof kt=="number"&&(Fe[Jt]=(Fe[Jt]*yr+kt*de)/(yr+de))}Fe.count+=de,le>=0&&(Fe.total+=le,Fe.ratio=Fe.total/Fe.count)}else Fe={period:t,...j},delete Fe.distribution,c.set($e,Fe),Fe.byThread&&(Fe.threads=[],Fe.threads[x]={...Ie},u.push(Fe));if(ee){ee=ee.map(Jt=>typeof Jt=="number"?{value:Jt,count:1}:Jt);let yr=l.get($e);yr?yr.push(...ee):l.set($e,ee)}}await Dx()}for(let R of u){let{path:L,method:O,type:x,metric:j,count:k,total:F,distribution:Q,threads:Y,...de}=R;Y=Y.filter(le=>le);for(let le in de){if(typeof R[le]!="number")continue;let ee=0;for(let Re of Y){let Ie=Re[le];typeof Ie=="number"&&(ee+=Ie)}R[le]=ee}R.count=Y.length,delete R.threads,delete R.byThread}for(let[R,L]of l){let O=c.get(R);L.sort((Jt,kt)=>Jt.value>kt.value?1:-1);let x=O.count-1,j=[],k=0,F=0,Q;for(let Jt of Ox){let kt=x*Jt;for(;k<kt;)Q=L[F++],k+=Q.count,F===1&&k--;let Xt=L[F>1?F-2:0];Q||(Q=L[0]),j.push(Q.value-(Q.value-Xt.value)*(k-kt)/Q.count)}let[Y,de,le,ee,Re,Ie,$e,Fe,yr]=j;Object.assign(O,{p1:Y,p10:de,p25:le,median:ee,p75:Re,p90:Ie,p95:$e,p99:Fe,p999:yr})}let f;for(let[,R]of c)R.time=d,wu(n,R),f=!0;if(f)for(let R of Cx)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:Lo.MAIN_THREAD_UTILIZATION,idle:p-hx,active:h-Ex,taskQueueLatency:await s,time:m,...process.memoryUsage()};wu(n,R)}hx=p,Ex=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=Lx(H_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=H_.time?m-H_.time:t,g.cpuUtilization=Px(g,g.period);let b={metric:Lo.RESOURCE_USAGE,...g};wu(n,b),H_=E;let S=ot();mx(n,S),mx(n,{system:S.system}),px(n,S),px(n,{system:S.system})}async function _x(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bA(){return gx||(gx=Je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Mx(){return Sx||(Sx=Je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function rZ(){vx=!0;let e=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Z8(yA,e),await _x(bA(),eZ),await _x(Mx(),tZ)},Math.min(e/2,2147483647)).unref()}function Ux(e,t){let r=e.report;r.threadId=t?.threadId||el.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Tx+=n.mean*n.count);r.totalBytesProcessed=Tx,t&&(r.metrics.push({metric:Lo.UTILIZATION,...t.performance.eventLoopUtilization(yx.get(t))}),yx.set(t,t.performance.eventLoopUtilization())),r.id=(0,TA.getNextMonotonicTime)(),bA().primaryStore.put(r.id,r),vx||rZ(),nZ&&(xx=iZ(r))}async function iZ(e){if(await xx,!Pa){let r=(0,vm.dirname)(Y8());try{Pa=await(0,SA.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{Pa=await(0,SA.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await Pa.stat()).size;if(t>sZ){let r=Buffer.alloc(t);await Pa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Pa.write(r,{position:0}),await Pa.truncate(r.length),t=r.length}await Pa.write(JSON.stringify(e)+`
14
+ `,t)}function AA(e){e&&Cx.push(e)}var el,Rx,bx,vm,SA,TA,xm,Ax,Y8,W8,Wr,G_,Ix,Um,gA,yA,wx,Nx,Cx,Ox,hx,Ex,H_,Dx,eZ,tZ,gx,Sx,vx,Tx,yx,nZ,xx,Pa,sZ,Jn=oe(()=>{el=require("worker_threads"),Rx=w(rt());Ne();bx=w(z()),vm=require("path"),SA=require("fs/promises"),TA=w(Cn()),xm=w(fe());H();xr();Ax=w(require("node:fs"));hA();EA();({getLogFilePath:Y8,forComponent:W8}=bx.default);setTimeout(()=>{Promise.resolve().then(()=>fx())},1e3);Wr=W8("analytics").conditional;(0,xm.initSync)();G_=new Map,Ix=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(z8,"setAnalyticsEnabled");o(j8,"recordExistingAction");o(Q8,"recordNewAction");o(Ge,"recordAction");Me.recordAnalytics=Ge;o(zr,"recordActionBinary");gA=0,yA=1e3,wx="analytics-report",Nx=[],Cx=[];o(Bm,"addAnalyticsListener");Ox=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(J8,"sendAnalytics");o(RA,"recordHostname");o(wu,"storeMetric");o(Px,"calculateCPUUtilization");o(Lx,"diffResourceUsage");o(X8,"storeTableSizeMetrics");o(mx,"storeDBSizeMetrics");o(px,"storeVolumeMetrics");o(Z8,"aggregation");hx=0,Ex=0,H_={userCPUTime:0,systemCPUTime:0},Dx=o(()=>new Promise(setImmediate),"rest");o(_x,"cleanup");eZ=36e5,tZ=31536e6;o(bA,"getRawAnalyticsTable");o(Mx,"getAnalyticsTable");(0,Rx.setChildListenerByType)(wx,Ux);o(rZ,"startScheduledTasks");Tx=0,yx=new Map,nZ=!1;o(Ux,"recordAnalytics");sZ=1e6;o(iZ,"logAnalytics");o(AA,"onAnalyticsAggregate")});var Gx={};be(Gx,{ENTRY:()=>aZ,HAS_EXPIRATION:()=>K_,HAS_RESIDENCY_ID:()=>PA,HAS_STRUCTURE_UPDATE:()=>Y_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>oZ,METADATA:()=>Ou,NEW_TIMESTAMP_PLACEHOLDER:()=>Fx,NO_TIMESTAMP:()=>IA,PENDING_LOCAL_TIME:()=>LA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>dA,RecordEncoder:()=>OA,TIMESTAMP_ASSIGN_LAST:()=>lZ,TIMESTAMP_ASSIGN_NEW:()=>kx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Hx,TIMESTAMP_PLACEHOLDER:()=>$_,TIMESTAMP_RECORD_PREVIOUS:()=>wA,entryMap:()=>La,handleLocalTimeForGets:()=>W_,lastMetadata:()=>at,recordUpdater:()=>DA,removeEntry:()=>rl});function fZ(){return km[0]=km[0]^64,cZ.getFloat64(0)}function W_(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++,at=null;let l=r.call(this,a,c);return l&&(at&&(l.metadataFlags=at[Ou],l.localTime=at.localTime,l.residencyId=at.residencyId,l.size=at.size,at.expiresAt>=0&&(l.expiresAt=at.expiresAt),at=null),l.value&&La.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){at=null;let l=n.call(this,a,c);return at&&l&&(La.set(l,at),at=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=>(at&&(l.metadataFlags=at[Ou],l.localTime=at.localTime,l.residencyId=at.residencyId,at.expiresAt>=0&&(l.expiresAt=at.expiresAt),at=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,tl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<tl.length;u++){let d=tl[u].deref();(!d||d.isDone||d.isCommitted)&&tl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function DA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Cu=i?.localTime?wA|Hx:IA:Cu=l?i?.localTime?wA|16384:kx|16384:IA;let p=u?.expiresAt;if(p>=0&&(c|=K_),Fm=c,NA=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Cu>0},E,g=0;try{let b=i?.residencyId,S=u?.residencyId;S&&(CA=S,Fm|=PA,g|=Qc),b!==S&&(g|=Jc,b||(b=0)),c&K_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Pn&&(r.getBinaryFast(i.localTime)||Ca(i.value));let R;if(s!==void 0&&(R=I_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Pn)),l){let L=u?.user?.username;if(m&&(I_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Pn)),e.encoder.hasStructureUpdate&&(g|=Y_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,x=r.get(O);if(x){let j=vt(x).previousLocalTime;return R=r.put(O,Xc(a,t,n,j,u?.nodeId??server.replication.getThisNodeId(r)??0,L,d,Nu,g,S,b,p),{ifVersion:E}),R}}R=r.put(s===void 0?Fx:Lm,Xc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,L,d,Nu,g,S,b,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&uZ.has(d)&&Ge(Nu?.length??1,"db-write",u.tableToTrack,null),R}catch(b){throw b.message+=" id: "+n+" options: "+h,b}}}function rl(e,t,r){if(t)return t.value&&t.metadataFlags&Pn&&!e.auditStore.getBinaryFast(t.localTime)&&Ca(t.value),e.remove(t.key,r)}var Bx,V_,$_,Lm,dA,Fx,oZ,Ou,aZ,km,cZ,IA,kx,lZ,Hx,wA,K_,PA,LA,Y_,uZ,La,dZ,Nu,Cu,Fm,NA,CA,at,OA,tl,Zc=oe(()=>{Bx=require("msgpackr");Ro();V_=w(z());Is();Is();Jn();$_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),dA=new Uint8Array([1,1,1,1,3,64,0,0]),Fx=new Uint8Array([1,1,1,1,0,64,0,0]),oZ=Symbol("local-timestamp"),Ou=Symbol("metadata"),aZ=Symbol("entry"),km=new Uint8Array(8),cZ=new DataView(km.buffer,0,8),IA=0,kx=0,lZ=1,Hx=3,wA=4,K_=16,PA=32,LA=1,Y_=256,uZ=new Set(["put","patch","delete","message","publish"]),La=new WeakMap,Cu=0,Fm=-1,NA=-1,CA=0,at=null,OA=class extends Bx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return La.get(this)?.version}getExpiresAt(){return La.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Cu||Fm>=0){let c=0,l=Cu;l&&(c+=8,Cu=0);let u=Fm,d=NA,f=CA;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,NA=-1),f&&(c+=4,CA=0));let m=dZ=n.call(this,i,a|2048|c);Nu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&($_[4]=l,$_[5]=l>>8,m.set($_,p),p+=8),Wc&&(u|=Pn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|U_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Nu=n.call(this,i,a),Nu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){at=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=fZ(),i=t[c]}let u,d;i<32&&(i===U_?(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&K_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&PA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Po(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return at={localTime:l,[Ou]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Po(()=>super.decode(t,r),this.rootStore)}catch(c){return V_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(fZ,"getTimestamp");o(W_,"handleLocalTimeForGets");tl=[];setInterval(()=>{for(let e=0;e<tl.length;e++){let t=tl[e].deref();!t||t.isDone||t.isCommitted?tl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(V_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):V_.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(DA,"recordUpdater");o(rl,"removeEntry")});function UA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?UA(f.conditions,f.operator,r,n,s,i,a,c):Mu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(L,O)=>R.some(x=>x(L,O)):(L,O)=>R.every(x=>x(L,O))}let g=(h.attribute||h[0])===r.primaryKey,b=Gm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=yZ(r.primaryStore,h.estimated_count,p)),b}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Mu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],L=xi(n.attributes,R);if(L.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=L.definition?.tableClass||L.elements?.definition?.tableClass,x=new Map,j=Mu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,x);if(L.relationship.to){i[c[0]]=x;let k=!!xi(O.attributes,L.relationship.to)?.elements;j=_Z(j,L,O.primaryStore,k,x)}if(L.relationship.from){let k=o(F=>(F?.key!==void 0&&(F=F.key),Mu({attribute:L.relationship.from,value:F},t,r,n,s,x)),"searchEntry");L.elements?(i[c[0]]=x,j=gZ(j,L,O.primaryStore,x,k)):j=j.flatMap(k)}return j}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(xA[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Ui.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let b;if(typeof m=="string"&&m.length>Cs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Cs.MAX_SEARCH_KEY_LENGTH)+Cs.OVERFLOW_MARKER,E=!1,b=Gm(e,n,null,i,d)),typeof p=="string"&&p.length>Cs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Cs.MAX_SEARCH_KEY_LENGTH)+Cs.OVERFLOW_MARKER,h=!0,b=b??Gm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(b=b??Gm(e,n,null,i,d),!b)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(S).map(b?function({key:L,value:O}){return this?.isSync?O&&b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(O&&b(O)?L:Da.SKIP)}catch(k){j(k)}}))}:L=>L.value==null&&!(L.metadataFlags&(Ln|Ma))?Da.SKIP:(a?._freezeRecords&&Object.freeze(L.value),L));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:L,...O}=R,x=n.primaryStore.getEntry(L);return a?._freezeRecords&&Object.freeze(x?.value),{...O,...x}}return R}):f.getRange(S).map(b?function({key:R,value:L}){let O;return typeof R=="string"&&R.length>Cs.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(L):O={[c]:R},this.isSync?b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(b(O)?L:Da.SKIP)}catch(k){j(k)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:L}){return this.isSync?L&&b(L)?R:Da.SKIP:new Promise((O,x)=>setImmediate(()=>{try{O(L&&b(L)?R:Da.SKIP)}catch(j){x(j)}}))})}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 _Z(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function gZ(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 Gm(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,p=n?.[d],h=Gm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,b=o((R,L)=>{let O,x;return E?E.returnDirect?(O=E(R,r,L),x=at):(x=E(R,r,L,!0),Array.isArray(x)?(O=x.map(j=>j.value),x=null):O=x?.value):O=R[d],{subObject:O,subEntry:x}},"getSubObject"),S=o((R,L)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:F};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let k=g(R);return g.idFilter&&(S.idFilter=g.idFilter),k}let{subObject:O,subEntry:x}=b(R,L);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(k){let F=b(k).subObject;return Array.isArray(F)?F.filter(h).map(Q=>Q[m.primaryKey]):F}}),O.some(h)):h(O,x):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),xA[a]||a){case Cs.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 jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&j_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function b(S){let R=S[d],L;if(typeof R!="object"||!R||p?L=f(R):Array.isArray(R)?L=R.some(f):R instanceof Date&&(L=f(R.getTime())),m&&(g++,!L&&!b.idFilter&&++E/g*i>h)){let O=Mu(e,r.transaction.getReadTxn(),!1,t),x;b.to?x=O.flatMap(k=>t.primaryStore.get(k)[b.to]):x=O.map(vu);let j=new Set(x);b.idFilter=k=>j.has(vu(k)),b.idFilter.idSet=j}return L}return o(b,"recordFilter"),s&&(b.idFilter=f),b}o(u,"attributeComparator")}function j_(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/Do(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=xA[n]||n,n===Cs.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=j_(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*Do(e.indices[i.relationship.from])/(Do(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=Do(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=hZ*Do(e.primaryStore)+1;else if(n==="between")r.estimated_count=pZ*Do(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=Do(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=mZ*Do(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function Q_(e,t){if(e)if(Mo=e,Pu.lastIndex=0,SZ.test(e))try{if(t&&(t.conditions=[]),ni=t??new Du,Hm(ni,""),Br!==Mo.length&&qt("Unable to parse query, unexpected end of query"),ni.parseErrorMessage&&(ni.parseError=new MA(t.parseErrorMessage),!t))throw ni.parseError;return ni}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${Mo}'`,ni.parseErrorMessage&&(r.message+=", "+ni.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function qt(e){let t=`${e} at position ${Br}`;ni.parseErrorMessage=ni.parseErrorMessage?ni.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Pu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Mo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&qt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:qt(`invalid FIQL operator ${d}`),l=qx):(l=decodeURIComponent,i="equals",d||qt("attribute must be specified before equality comparator"),s=Lu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=EZ[f],l=vA[i]?qx:decodeURIComponent,d||qt(`attribute must be specified before comparator ${f}`),s=Lu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&$x(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else z_(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?qt("conditions/comparisons are not allowed in a property list"):e.push(Lu(d)),s=void 0;break;case"(":Pu.lastIndex=Br;let p=Hm(d?[]:new Du,")");switch(d){case"":z_(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:qt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":qt("group by is not implemented yet");case"sort":e.sort=Vx(p);break;default:qt(`unknown query function call ${d}`)}Mo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&qt("property sets are not allowed in a queries"),d||qt("property sets must have a defined parent property name"),Pu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Pu.lastIndex=Br,d?(m=Hm(new Du,"]"),m.name=d):m=Hm(e.conditions?new Du:[],"]"),e.conditions)if(z_(e,u),Mo[Br]==="="){l=decodeURIComponent,i="equals",s=Lu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&$x(h,d),z_(e,u),e.conditions.push(h)}else d&&qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Lu(d));return e}else qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?TZ:Pu,r.lastIndex=Br),Br===Mo.length)return e}t&&qt(`expected '${t}', but encountered end of string`)}function z_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&qt("Can not mix operators within a condition grouping"):e.operator=t)}function Lu(e){return e.indexOf(".")>-1?e.split(".").map(Lu):decodeURIComponent(e)}function qx(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function $x(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function Vx(e){let t=Kx(e[0]);return e.length>1&&(t.next=Vx(e.slice(1))),t}function Kx(e){if(Array.isArray(e)){let t=Kx(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}}qt(`Unknown sort type ${e}`)}function vu(e){return Array.isArray(e)?e.join("\0"):e}function Do(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function yZ(e,t,r){return t*r/Do(e)}var jr,Cs,Ui,Da,mZ,pZ,hZ,EZ,vA,xA,MA,SZ,Pu,TZ,Br,ni,Mo,Du,J_=oe(()=>{jr=w(Ee()),Cs=w(Gt()),Ui=require("ordered-binary"),Da=require("lmdb");X_();Zc();mZ=.3,pZ=.1,hZ=.05,EZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},vA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(UA,"executeConditions");o(Mu,"searchByIndex");o(xi,"findAttribute");o(_Z,"joinTo");o(gZ,"joinFrom");xA={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(Gm,"filterByType");o(j_,"estimateCondition");MA=class extends jr.Violation{static{o(this,"SyntaxViolation")}},SZ=/[()[\]|!<>.]|(=\w*=)/,Pu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,TZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(Q_,"parseQuery");o(qt,"recordError");o(Hm,"parseBlock");o(z_,"assignOperator");o(Lu,"decodeProperty");o(qx,"typedDecoding");o($x,"wildcardDecoding");o(Vx,"toSortObject");o(Kx,"toSortEntry");Du=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(vu,"flattenKey");o(Do,"estimatedEntryCount");o(yZ,"intersectionEstimate")});var Yx,si,Z_=oe(()=>{Yx=w(ti()),si=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,Yx._assignPackageExport)("Resource",Resource)});var Jx={};be(Jx,{MultiPartId:()=>eg,Resource:()=>Fr,contextStorage:()=>xu,snakeCase:()=>bZ,transformForSelect:()=>Bu});function bZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Wx(e,t){if(nl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(nl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new eg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){nl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return nl=!0,null;e[e.length-1]==="/"&&(nl=!0)}return t.coerceId(decodeURIComponent(e))}function Dn(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 yo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Uu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new si,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new si,l.id=c,c==null&&(u=!0);l||(l=new si,l.id=c),u&&(l.isCollection=!0);let f;a||(a=xu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>xu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return St(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(b=>{if(!b)throw new Uu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new Uu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Xn(e,t){let r=new Uu.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 BA(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 Bu(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):BA(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(BA(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(BA(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Bu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var zx,jx,Uu,Qx,xu,RZ,Fr,nl,eg,va=oe(()=>{zx=require("crypto");mm();yu();jx=w(ti()),Uu=w(Ee());Na();J_();Qx=require("async_hooks");Z_();xu=new Qx.AsyncLocalStorage,RZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Dn(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=Bu(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=Dn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Xn(t,"put")},{hasContent:!0,type:"update"});static patch=Dn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Xn(t,"patch")},{hasContent:!0,type:"update"});static delete=Dn(function(t,r,n,s){return t.delete?t.delete(r):Xn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,zx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=xu.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),St(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Xn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Dn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Xn(t,"delete")},{hasContent:!1,type:"update"});static post=Dn(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=Dn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Dn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Xn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Dn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Xn(t,"subscribe")},{type:"read"});static publish=Dn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Xn(t,"publish")},{hasContent:!0,type:"create"});static search=Dn(function(t,r,n){let s=t.search?t.search(r):Xn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Bu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Dn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Xn(t,"search")},{hasContent:!0,type:"read"});static copy=Dn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Xn(t,"copy")},{hasContent:!0,type:"create"});static move=Dn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Xn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Xn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return Q_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&RZ[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:Wx(t,this),isCollection:nl}}let i=Wx(t,this);return nl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new jn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new jn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,jx._assignPackageExport)("Resource",Fr);o(bZ,"snakeCase");o(Wx,"pathToId");eg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Dn,"transactional");o(Xn,"missingMethod");o(BA,"selectFromObject");o(Bu,"transformForSelect")});var sl,FA=oe(()=>{sl=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 kA={};be(kA,{Resources:()=>Fu,keyArrayToString:()=>ku,resetResources:()=>AZ,resources:()=>Os});function AZ(){return Os=new Fu,Me.resources=Os,Os}function ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Xx,Zx,Fu,Os,Ua=oe(()=>{Na();FA();Xx=w(z()),Zx=w(Ee());xr();Fu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new Zx.ServerError(`Conflicting paths for ${t}`);Xx.default.error(c),i.Resource=new sl(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 St(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(AZ,"resetResources");o(ku,"keyArrayToString")});function qA(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=t0,IZ(e.primaryStore,e.auditStore)):(c=e0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{r0(e0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=ku(t);let d=new GA(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 r0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),n0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=vt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=ku(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,HA.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,HA.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function IZ(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=t0[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{r0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function n0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function s0(e){return e.nextTransaction||(qA({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),n0(e)),e.nextTransaction}var HA,e0,t0,GA,$A=oe(()=>{HA=w(z());yu();Ua();Ro();e0=Object.create(null),t0=Object.create(null);o(qA,"addSubscription");GA=class extends jn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(r0,"notifyFromTransactionData");o(IZ,"listenToCommits");o(n0,"nextTransaction");o(s0,"whenNextTransaction")});var o0=v((UCe,i0)=>{"use strict";var VA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};i0.exports=VA});var c0=v((BCe,a0)=>{"use strict";var KA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a0.exports=KA});var qm=v(u0=>{"use strict";var l0=fe(),wZ=(H(),M(W)),{RecordEncoder:NZ}=(Zc(),M(Gx));l0.initSync();var CZ=l0.get(wZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,YA=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=CZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:NZ})}};u0.OpenDBIObject=YA});var $m=v((GCe,d0)=>{"use strict";var Zn=fe(),Ps=(H(),M(W));Zn.initSync();var tg=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Zn.get(Ps.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zn.get(Ps.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zn.get(Ps.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Zn.get(Ps.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Zn.get(Ps.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Zn.get(Ps.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Zn.get(Ps.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Zn.get(Ps.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Zn.get(Ps.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};d0.exports=tg;tg.MAX_DBS=1e4});var ht=v(($Ce,y0)=>{"use strict";var zA=require("lmdb"),ii=require("fs-extra"),es=require("path"),rg=Cn(),p0=z(),Mn=Kr().LMDB_ERRORS_ENUM,ng=c0(),{OpenDBIObject:jA}=qm(),h0=$m(),xa=Gt(),f0=(H(),M(W)),{table:OZ,resetDatabases:PZ}=(Ne(),M(ft)),m0=fe(),oi=xa.INTERNAL_DBIS_NAME,E0=xa.DBI_DEFINITION_NAME,LZ="data.mdb",DZ="lock.mdb",Vm=".mdb",MZ="-lock",WA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ls(t,r),this.key_type=this.dbi[xa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[xa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new zA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function sg(e,t){if(e===void 0)throw new Error(Mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Mn.ENV_NAME_REQUIRED)}o(sg,"pathEnvNameValidation");async function QA(e,t,r=!0){try{await ii.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Mn.INVALID_BASE_PATH):n}try{let n=es.join(e,t+Vm);return await ii.access(n,ii.constants.R_OK|ii.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ii.access(es.join(e,t,LZ),ii.constants.R_OK|ii.constants.F_OK),es.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Mn.INVALID_ENVIRONMENT)}else throw new Error(Mn.INVALID_ENVIRONMENT);throw n}}o(QA,"validateEnvironmentPath");function ig(e,t){if(rg.validateEnv(e),t===void 0)throw new Error(Mn.DBI_NAME_REQUIRED)}o(ig,"validateEnvDBIName");async function vZ(e,t,r=!1,n=!1){sg(e,t);let s=es.basename(e);t=t.toString();let i=m0.get(f0.CONFIG_PARAMS.DATABASES);i||m0.setProperty(f0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await QA(e,t,n),_0(e,t,r)}catch(a){if(a.message===Mn.INVALID_ENVIRONMENT){let c=es.join(e,t);await ii.mkdirp(n?c:e);let l=new h0(n?c:c+Vm,!1),u=zA.open(l);u.dbis=Object.create(null);let d=new jA(!1);u.openDB(oi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=JA(e,t,r);return u[xa.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(vZ,"createEnvironment");async function UZ(e,t,r,n=!0){sg(e,t),t=t.toString();let s=es.join(e,t);return OZ({table:t,database:es.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(UZ,"copyEnvironment");async function _0(e,t,r=!1){sg(e,t),t=t.toString();let n=JA(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 QA(e,t),i=es.join(e,t+Vm),a=s!=i,c=new h0(s,a),l=zA.open(c);l.dbis=Object.create(null);let u=S0(l);for(let d=0;d<u.length;d++)Ls(l,u[d]);return l[xa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(_0,"openEnvironment");async function xZ(e,t,r=!1){sg(e,t),t=t.toString();let n=es.join(e,t+Vm),s=await QA(e,t);if(global.lmdb_map!==void 0){let i=JA(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await g0(a),delete global.lmdb_map[i]}}await ii.remove(s),await ii.remove(s===n?s+MZ:es.join(es.dirname(s),DZ))}o(xZ,"deleteEnvironment");async function g0(e){rg.validateEnv(e);let t=e[xa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(g0,"closeEnvironment");function JA(e,t,r=!1){let s=`${es.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(JA,"getCachedEnvironmentName");function BZ(e){rg.validateEnv(e);let t=Object.create(null),r=Ls(e,oi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==oi)try{t[n]=Object.assign(new ng,s)}catch{p0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(BZ,"listDBIDefinitions");function S0(e){rg.validateEnv(e);let t=[],r=Ls(e,oi);for(let{key:n}of r.getRange({start:!1}))n!==oi&&t.push(n);return t}o(S0,"listDBIs");function FZ(e,t){let n=Ls(e,oi).getEntry(t),s=new ng;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{p0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(FZ,"getDBIDefinition");function T0(e,t,r,n=!r){if(ig(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ls(e,t)}catch(s){if(s.message===Mn.DBI_DOES_NOT_EXIST){let i=new jA(r,n===!0),a=e.openDB(t,i),c=new ng(r===!0,n);return a[E0]=c,Ls(e,oi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(T0,"createDBI");function Ls(e,t){if(ig(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==oi?r=FZ(e,t):r=new ng,r===void 0)throw new Error(Mn.DBI_DOES_NOT_EXIST);let n;try{let s=new jA(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Mn.DBI_DOES_NOT_EXIST):s}return n[E0]=r,e.dbis[t]=n,n}o(Ls,"openDBI");function kZ(e,t){ig(e,t),t=t.toString();let r=Ls(e,t),n=r.getStats();return r[xa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(kZ,"statDBI");async function HZ(e,t){try{let r=es.join(e,t+Vm);return(await ii.stat(r)).size}catch{throw new Error(Mn.INVALID_ENVIRONMENT)}}o(HZ,"environmentDataSize");function GZ(e,t){if(ig(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ls(e,oi).removeSync(t)}o(GZ,"dropDBI");function qZ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ls(e,i)}catch(a){if(a.message===Mn.DBI_DOES_NOT_EXIST)T0(e,i,i!==t,i===t),n=!0;else throw a}}n&&PZ()}o(qZ,"initializeDBIs");y0.exports={openDBI:Ls,openEnvironment:_0,createEnvironment:vZ,listDBIs:S0,listDBIDefinitions:BZ,createDBI:T0,dropDBI:GZ,statDBI:kZ,deleteEnvironment:xZ,initializeDBIs:qZ,TransactionCursor:WA,environmentDataSize:HZ,copyEnvironment:UZ,closeEnvironment:g0}});var A0=v((KCe,b0)=>{"use strict";var XA=ht(),$Z=z(),R0=Kr().LMDB_ERRORS_ENUM;b0.exports=VZ;async function VZ(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 XA.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==R0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await XA.closeEnvironment(global.lmdb_map[n]),await XA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==R0.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){$Z.error(t)}}o(VZ,"cleanLMDBMap")});var Fi=v((WCe,w0)=>{"use strict";var I0=ce(),KZ=(H(),M(W)),Hu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Bi=require("joi"),Ba={schema_format:{pattern:Hu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},YZ=Bi.alternatives(Bi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Bi.number(),Bi.array()).required(),WZ=Bi.alternatives(Bi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Bi.number()),zZ=Bi.alternatives(Bi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Bi.number()).required();function jZ(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ba.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Hu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(jZ,"checkValidTable");function QZ(e,t){return I0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(QZ,"validateSchemaExists");function JZ(e,t){let r=t.state.ancestors[0].schema;return I0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(JZ,"validateTableExists");function XZ(e,t){return e.toLowerCase()===KZ.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(XZ,"validateSchemaName");w0.exports={commonValidators:Ba,schemaRegex:Hu,hdbSchemaTable:YZ,validateSchemaExists:QZ,validateTableExists:JZ,validateSchemaName:XZ,checkValidTable:jZ,hdbDatabase:WZ,hdbTable:zZ}});var eI=v((jCe,C0)=>{var{hdbTable:ZZ,hdbDatabase:N0}=Fi(),e9=dt(),ZA=require("joi"),t9={undefined:"undefined",null:"null"},r9=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||t9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),n9=ZA.object({database:N0,schema:N0,table:ZZ,records:ZA.array().items(ZA.object().custom(r9)).required()});C0.exports=function(e){return e9.validateBySchema(e,n9)}});var P0=v((JCe,O0)=>{"use strict";var tI=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")}};O0.exports=tI});var D0=v((ZCe,L0)=>{"use strict";var rI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};L0.exports=rI});var v0=v((tOe,M0)=>{"use strict";var nI=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}};M0.exports=nI});var x0=v((nOe,U0)=>{"use strict";var sI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};U0.exports=sI});var ol=v((cOe,k0)=>{"use strict";var s9=ht(),i9=D0(),o9=v0(),a9=x0(),ki=Cn(),Km=Kr().LMDB_ERRORS_ENUM,c9=Gt(),vo=(H(),M(W)),l9=ce(),u9=require("uuid"),iOe=require("lmdb"),{handleHDBError:d9,hdbErrors:f9}=Ee(),{OVERFLOW_MARKER:oOe,MAX_SEARCH_KEY_LENGTH:aOe}=c9,B0=fe();B0.initSync();var og=B0.get(vo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),iI=vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,il=vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m9(e,t,r,n,s=ki.getNextMonotonicTime()){lI(e,t,r,n),oI(e,t,r);let i=new i9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];F0(u,!0,s);let d=p9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return aI(a,c,n,i,s)}o(m9,"insertRecords");function p9(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][vo.FUNC_VAL],n[a]=c)}let l=ki.getIndexedValues(c),u=e.dbis[a];if(l){og&&u.prefetch(l.map(d=>({key:d,value:s})),ag);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}og&&e.dbis[t].prefetch([s],ag),e.dbis[t].put(s,n,n[il])})}o(p9,"insertRecord");function h9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(h9,"removeSkippedRecords");function F0(e,t,r){let n=r>0;(n||!Number.isInteger(e[il]))&&(e[il]=r||(r=ki.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[iI]))&&(e[iI]=r||ki.getNextMonotonicTime()):delete e[iI]}o(F0,"setTimestamps");function oI(e,t,r){r.indexOf(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),s9.initializeDBIs(e,t,r)}o(oI,"initializeTransaction");async function E9(e,t,r,n,s=ki.getNextMonotonicTime()){lI(e,t,r,n),oI(e,t,r);let i=new o9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=cI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return aI(c,l,n,i,s,a)}o(E9,"updateRecords");async function _9(e,t,r,n,s=ki.getNextMonotonicTime()){try{lI(e,t,r,n)}catch(l){throw d9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST)}oI(e,t,r);let i=new a9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;l9.isEmpty(u[t])?(d=u9.v4(),u[t]=d):d=u[t];let f=cI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return aI(a,c,n,i,s)}o(_9,"upsertRecords");async function aI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||ki.getNextMonotonicTime(),h9(r,i),n}o(aI,"finalizeWrite");function cI(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(F0(r,!d,a),Number.isInteger(r[il])&&u[il]>r[il])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let b=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][vo.FUNC_VAL],r[h]=E)}if(E===b)continue;let S=ki.getIndexedValues(b);if(S){og&&g.prefetch(S.map(R=>({key:R,value:n})),ag);for(let R=0,L=S.length;R<L;R++)g.remove(S[R],n)}if(S=ki.getIndexedValues(E),S){og&&g.prefetch(S.map(R=>({key:R,value:n})),ag);for(let R=0,L=S.length;R<L;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[il])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:cI(e,t,r,n,s,i,a))}o(cI,"updateUpsertRecord");function g9(e,t,r){if(ki.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(g9,"validateBasic");function lI(e,t,r,n){if(g9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(lI,"validateWrite");function ag(){}o(ag,"noop");k0.exports={insertRecords:m9,updateRecords:E9,upsertRecords:_9}});var Hi=v((uOe,S9)=>{S9.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var G0=v((dOe,H0)=>{"use strict";var T9=require("uuid"),uI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||T9.v4(),this.schema_table=`${this.schema}.${this.table}`}};H0.exports=uI});var cg=v((mOe,q0)=>{"use strict";var y9=G0(),dI=class extends y9{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}};q0.exports=dI});var V0=v((hOe,$0)=>{"use strict";$0.exports=b9;var R9="inserted";function b9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===R9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(b9,"returnObject")});var lg=v((gOe,Y0)=>{"use strict";var A9=(H(),M(W)),fI=ht(),I9=ol(),{getSystemSchemaPath:w9,getSchemaPath:N9}=gt(),_Oe=Hi(),{validateBySchema:C9}=dt(),Ym=require("joi"),O9=cg(),P9=V0(),{handleHDBError:L9,hdbErrors:D9,ClientError:M9}=Ee(),K0=ce(),{HTTP_STATUS_CODES:v9}=D9,U9="inserted";Y0.exports=x9;async function x9(e){let t=C9(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new M9(t.message);let r=!e.skip_table_check&&K0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw L9(new Error,r,v9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=K0.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 O9(e.schema,e.table,e.attribute,e.id);try{let i=await fI.openEnvironment(N9(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);fI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await fI.openEnvironment(w9(),A9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await I9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return P9(U9,c,{records:[s]},l)}catch(i){throw i}}o(x9,"lmdbCreateAttribute")});var Wm=v((yOe,z0)=>{"use strict";var Uo=ce(),W0=z(),TOe=eI(),{getDatabases:B9}=(Ne(),M(ft)),{ClientError:al}=Ee();z0.exports=F9;function F9(e){if(Uo.isEmpty(e))throw new al("invalid update parameters defined.");if(Uo.isEmptyOrZeroLength(e.schema))throw new al("invalid schema specified.");if(Uo.isEmptyOrZeroLength(e.table))throw new al("invalid table specified.");if(!Array.isArray(e.records))throw new al("records must be an array");let t=B9()[e.schema]?.[e.table];if(Uo.isEmpty(t))throw new al(`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&&Uo.isEmptyOrZeroLength(a[r]))throw W0.error("a valid hash attribute must be provided with update record:",a),new al("a valid hash attribute must be provided with update record, check log for more info");if(!Uo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw W0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new al(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Uo.isEmpty(a[r])&&a[r]!==""&&n.has(Uo.autoCast(a[r]))&&(a.skip=!0),n.add(Uo.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(F9,"insertUpdateValidate")});var ug=v((bOe,Q0)=>{"use strict";var j0=ce(),k9=(H(),M(W)),H9=z(),G9=lg(),q9=cg(),$9=xo(),{SchemaEventMsg:V9}=ts(),K9="already exists in";Q0.exports=Y9;async function Y9(e,t,r){if(j0.isEmptyOrZeroLength(r))return r;let n=[];j0.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 W9(e,t.schema,t.name,i)})),s}o(Y9,"lmdbCheckForNewAttributes");async function W9(e,t,r,n){let s=new q9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await z9(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(K9))H9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(W9,"createNewAttribute");async function z9(e){let t;return t=await G9(e),$9.signalSchemaChange(new V9(process.pid,k9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(z9,"createAttribute")});var Gu=v((IOe,J0)=>{"use strict";var mI=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}};J0.exports=mI});var Z0=v((NOe,X0)=>{"use strict";var j9=Gu(),Q9=(H(),M(W)).OPERATIONS_ENUM,pI=class extends j9{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(Q9.INSERT,r,n,s,i),this.records=t}};X0.exports=pI});var tB=v((OOe,eB)=>{"use strict";var J9=Gu(),X9=(H(),M(W)).OPERATIONS_ENUM,hI=class extends J9{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(X9.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};eB.exports=hI});var nB=v((LOe,rB)=>{"use strict";var Z9=Gu(),e7=(H(),M(W)).OPERATIONS_ENUM,EI=class extends Z9{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(e7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};rB.exports=EI});var iB=v((MOe,sB)=>{"use strict";var t7=Gu(),r7=(H(),M(W)).OPERATIONS_ENUM,_I=class extends t7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(r7.DELETE,n,s,t,i),this.original_records=r}};sB.exports=_I});var zm=v((xOe,lB)=>{"use strict";var UOe=require("path"),oB=ht(),n7=Z0(),s7=tB(),i7=nB(),o7=iB(),qu=Gt(),aB=ce(),{CONFIG_PARAMS:a7}=(H(),M(W)),cB=fe();cB.initSync();var dg=(H(),M(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:c7}=gt();lB.exports=l7;async function l7(e,t){if(cB.get(a7.LOGGING_AUDITLOG)===!1)return;let r=c7(e.schema,e.table),n=await oB.openEnvironment(r,e.table,!0),s=u7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){oB.initializeDBIs(n,qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),aB.isEmpty(s.user_name)||n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(l7,"writeTransaction");function u7(e,t){let r=aB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===dg.INSERT)return new n7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dg.UPDATE)return new s7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dg.UPSERT)return new i7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dg.DELETE)return new o7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(u7,"createTransactionObject")});var gI=v((kOe,uB)=>{"use strict";var d7=Wm(),FOe=um(),jm=(H(),M(W)),f7=dm(),m7=ol().insertRecords,p7=ht(),h7=z(),E7=ug(),{getSchemaPath:_7}=gt(),g7=zm();uB.exports=S7;async function S7(e){try{let{schemaTable:t,attributes:r}=d7(e);f7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await E7(e.hdb_auth_header,t,r),s=_7(e.schema,e.table),i=await p7.openEnvironment(s,e.table),a=await m7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await g7(e,a)}catch(c){h7.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(S7,"lmdbCreateRecords")});var mB=v((GOe,fB)=>{"use strict";var dB=(H(),M(W)),T7=gI(),y7=um(),R7=require("fs-extra"),{getSchemaPath:b7}=gt();fB.exports=A7;async function A7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new y7(dB.SYSTEM_SCHEMA_NAME,dB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await T7(r),await R7.mkdirp(b7(e.schema))}o(A7,"lmdbCreateSchema")});var hB=v(($Oe,pB)=>{"use strict";var SI=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}};pB.exports=SI});var SB=v((zOe,gB)=>{"use strict";var EB=ht(),TI=Cn(),yI=Kr().LMDB_ERRORS_ENUM,I7=Gt(),_B=z(),KOe=ce(),w7=require("lmdb"),N7=hB(),C7=(H(),M(W)),{OVERFLOW_MARKER:YOe,MAX_SEARCH_KEY_LENGTH:WOe}=I7,O7=C7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function P7(e,t,r,n){if(TI.validateEnv(e),t===void 0)throw new Error(yI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yI.IDS_REQUIRED):new Error(yI.IDS_MUST_BE_ITERABLE);try{let s=EB.listDBIs(e);EB.initializeDBIs(e,t,s);let i=new N7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[O7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,w7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let b=s[g];if(!h.hasOwnProperty(b)||b===t)continue;let S=e.dbis[b],R=h[b];if(R!=null)try{let L=TI.getIndexedValues(R);if(L)for(let O=0,x=L.length;O<x;O++)S.remove(L[O],a)}catch{_B.warn(`cannot delete from attribute: ${b}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){_B.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=TI.getNextMonotonicTime(),i}catch(s){throw s}}o(P7,"deleteRecords");gB.exports={deleteRecords:P7}});var Qm=v((QOe,yB)=>{"use strict";var $u=ce(),L7=SB(),D7=ht(),{getSchemaPath:M7}=gt(),v7=zm(),U7=z();yB.exports=x7;async function x7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if($u.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if($u.isEmptyOrZeroLength(e.hash_values)&&!$u.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];$u.isEmpty(l)||e.hash_values.push(l)}}if($u.isEmptyOrZeroLength(e.hash_values))return TB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if($u.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=M7(e.schema,e.table),i=await D7.openEnvironment(s,e.table),a=await L7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await v7(e,a)}catch(c){U7.error(`unable to write transaction due to ${c.message}`)}return TB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(x7,"lmdbDeleteRecords");function TB(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(TB,"createDeleteResponse")});var bI=v((ZOe,RB)=>{"use strict";var B7=(H(),M(W)),XOe=Cn();function RI(e,t){let r=Object.create(null);if(t.length===1&&B7.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(RI,"parseRow");function F7(e,t,r,n){let s=RI(r,e);n.push(s)}o(F7,"searchAll");function k7(e,t,r,n){let s=RI(r,e);n[t]=s}o(k7,"searchAllToMap");function H7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(H7,"iterateDBI");function cl(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(cl,"pushResults");function G7(e,t,r,n,s,i){t.toString().endsWith(e)&&cl(t,r,n,s,i)}o(G7,"endsWith");function q7(e,t,r,n,s,i){t.toString().includes(e)&&cl(t,r,n,s,i)}o(q7,"contains");function $7(e,t,r,n,s,i){t>e&&cl(t,r,n,s,i)}o($7,"greaterThanCompare");function V7(e,t,r,n,s,i){t>=e&&cl(t,r,n,s,i)}o(V7,"greaterThanEqualCompare");function K7(e,t,r,n,s,i){t<e&&cl(t,r,n,s,i)}o(K7,"lessThanCompare");function Y7(e,t,r,n,s,i){t<=e&&cl(t,r,n,s,i)}o(Y7,"lessThanEqualCompare");RB.exports={parseRow:RI,searchAll:F7,searchAllToMap:k7,iterateDBI:H7,endsWith:G7,contains:q7,greaterThanCompare:$7,greaterThanEqualCompare:V7,lessThanCompare:K7,lessThanEqualCompare:Y7,pushResults:cl}});var Vu=v((sPe,OB)=>{"use strict";var Fa=ht(),tPe=z(),rs=Cn(),fg=Gt(),er=Kr().LMDB_ERRORS_ENUM,rPe=ce(),W7=(H(),M(W)),mg=bI(),{parseRow:z7}=mg,nPe=require("lmdb"),{OVERFLOW_MARKER:bB,MAX_SEARCH_KEY_LENGTH:j7}=fg;function AB(e,t,r,n=!1,s=void 0,i=void 0){return ll(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(AB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ll(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ll(e,t,r,n){let s=e.database||e,i=Fa.openDBI(s,r);i[fg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fa.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(ll,"setupTransaction");function IB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(bB)){if(!s)if(r)s=Fa.openDBI(e,r);else{let l=Fa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Fa.openDBI(e,l[u]),!s[fg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(IB,"getOverflowCheck");function Q7(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return ll(e,t,t,(a,c,l)=>(pg(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=>z7(u.value,r))))}o(Q7,"searchAll");function J7(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);pg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of AB(e,t,t,n,s,i))a.set(c,mg.parseRow(l,r));return a}o(J7,"searchAllToMap");function X7(e,t,r=!1,n=void 0,s=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=AB(e,void 0,t,r,n,s),c=a.transaction,l=IB(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(X7,"iterateDBI");function Z7(e,t){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return Fa.statDBI(e,t).entryCount}o(Z7,"countAll");function eee(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,t,r,(c,l,u,d)=>(n=rs.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(eee,"equals");function tee(e,t,r){return ka(e,t,r),Fa.openDBI(e,t).getValuesCount(r)}o(tee,"count");function ree(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,null,r,(c,l)=>{n=rs.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(ree,"startsWith");function nee(e,t,r,n,s=!1,i=void 0,a=void 0){return wB(e,t,r,n,s,i,a,!0)}o(nee,"endsWith");function wB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return ka(e,r,n),ll(e,null,r,(l,u,d,f)=>{let m=IB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(bB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[fg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(wB,"contains");function see(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(see,"greaterThan");function iee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(iee,"greaterThanEqual");function oee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(oee,"lessThan");function aee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(aee,"lessThanEqual");function cee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(rs.validateEnv(e),r===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(er.START_VALUE_REQUIRED);if(s===void 0)throw new Error(er.END_VALUE_REQUIRED);if(n=rs.convertKeyValueToWrite(n),s=rs.convertKeyValueToWrite(s),n>s)throw new Error(er.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(cee,"between");function lee(e,t,r,n){rs.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(pg(r),r=Xm(s,r),n===void 0)throw new Error(er.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=mg.parseRow(c,r)),a}o(lee,"searchByHash");function uee(e,t,r){rs.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(uee,"checkHashExists");function dee(e,t,r,n,s=[]){return CB(e,t,r,n,s),NB(e,t,r,n,s).map(i=>i[1])}o(dee,"batchSearchByHash");function fee(e,t,r,n,s=[]){CB(e,t,r,n,s);let i=new Map;for(let[a,c]of NB(e,t,r,n,s))i.set(a,c);return i}o(fee,"batchSearchByHashToMap");function NB(e,t,r,n,s=[]){return ll(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,mg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(NB,"batchHashSearch");function CB(e,t,r,n,s){if(rs.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(pg(r),n==null)throw new Error(er.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(er.IDS_MUST_BE_ITERABLE)}o(CB,"initializeBatchSearchByHash");function pg(e){if(!Array.isArray(e))throw e===void 0?new Error(er.FETCH_ATTRIBUTES_REQUIRED):new Error(er.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(pg,"validateFetchAttributes");function ka(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.SEARCH_VALUE_REQUIRED);if(r?.length>j7)throw new Error(er.SEARCH_VALUE_TOO_LARGE)}o(ka,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&W7.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fa.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");OB.exports={searchAll:Q7,searchAllToMap:J7,count:tee,countAll:Z7,equals:eee,startsWith:ree,endsWith:nee,contains:wB,searchByHash:lee,setGetWholeRowAttributes:Xm,batchSearchByHash:dee,batchSearchByHashToMap:fee,checkHashExists:uee,iterateDBI:X7,greaterThan:see,greaterThanEqual:iee,lessThan:oee,lessThanEqual:aee,between:cee}});var Ku=v((oPe,vB)=>{var PB=require("lodash"),LB=dt(),Ye=require("joi"),mee=ce(),{hdbSchemaTable:Zm,checkValidTable:DB,hdbTable:MB,hdbDatabase:hg}=Fi(),{handleHDBError:pee,hdbErrors:hee}=Ee(),{getDatabases:Eee}=(Ne(),M(ft)),{HTTP_STATUS_CODES:_ee}=hee,gee=Ye.object({database:hg,schema:hg,table:MB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),See=Ye.object({database:hg,schema:hg,table:MB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});vB.exports=function(e,t){let r=null;switch(t){case"value":r=LB.validateBySchema(e,gee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(DB("database",e.schema)),i(DB("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=LB.validateBySchema(e,See);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=mee.checkGlobalSchemaTable(e.schema,e.table);if(s)return pee(new Error,s,_ee.NOT_FOUND);let a=Eee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=PB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!PB.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 AI=v((cPe,UB)=>{"use strict";var Tee=ht(),yee=Ku(),{getSchemaPath:Ree}=gt();UB.exports=bee;function bee(e){let t=yee(e,"hashes");if(t)throw t;let r=Ree(e.schema,e.table);return Tee.openEnvironment(r,e.table)}o(bee,"initialize")});var II=v((uPe,xB)=>{"use strict";var Aee=Vu(),Iee=AI();xB.exports=wee;async function wee(e){let t=await Iee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Aee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(wee,"lmdbGetDataByHash")});var Yu=v((fPe,BB)=>{"use strict";var wI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};BB.exports=wI});var kB=v((hPe,FB)=>{"use strict";var pPe=Yu(),Nee=Vu(),Cee=AI();FB.exports=Oee;async function Oee(e){let t=await Cee(e),r=global.hdb_schema[e.schema][e.table];return Nee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Oee,"lmdbSearchByHash")});var ai=v((_Pe,HB)=>{"use strict";var NI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};HB.exports=NI});var Eg=v((SPe,YB)=>{"use strict";var dn=Vu(),Pee=ht(),Lee=ce(),We=Gt(),ul=(H(),M(W)),Dee=Hi(),GB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:Mee}=gt(),Bo=ul.SEARCH_WILDCARDS;async function vee(e,t,r){let n;e.schema===ul.SYSTEM_SCHEMA_NAME?n=Dee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=KB(e,n.hash_attribute,r,t);return $B(e,s,n.hash_attribute,r)}o(vee,"prepSearch");async function $B(e,t,r,n){let s=Mee(e.schema,e.table),i=await Pee.openEnvironment(s,e.table),a=VB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Uee(e,r)===!1){let d=e.attribute;if(d===r)return n?qB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?qB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?dn.batchSearchByHashToMap(c,r,e.get_attributes,u):dn.batchSearchByHash(c,r,e.get_attributes,u)}o($B,"executeSearch");function VB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=dn.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=dn.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=dn.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=dn.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return dn.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return dn.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return dn.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return dn.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=dn.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=dn.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=dn.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=dn.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=dn.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(VB,"searchByType");function qB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(qB,"createMapFromIterable");function Uee(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(Uee,"checkToFetchMore");function KB(e,t,r,n){if(Lee.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Bo.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Bo[0])<0&&s.indexOf(Bo[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Bo.indexOf(i)>=0&&Bo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Bo.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Bo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Bo[0])||s.includes(Bo[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(GB.UNKNOWN_SEARCH_TYPE)}else switch(n){case ul.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case ul.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case ul.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case ul.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case ul.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(GB.UNKNOWN_SEARCH_TYPE)}}o(KB,"createSearchTypeFromSearchObject");YB.exports={executeSearch:$B,createSearchTypeFromSearchObject:KB,prepSearch:vee,searchByType:VB}});var zB=v((RPe,WB)=>{"use strict";var yPe=ai(),xee=Ku(),Bee=ce(),Fee=(H(),M(W)),kee=Eg();WB.exports=Hee;function Hee(e,t){if(!Bee.isEmpty(t)&&Fee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=xee(e,"value");if(n)throw n;return kee.prepSearch(e,t,!0)}o(Hee,"lmdbGetDataByValue")});var ep=v((IPe,jB)=>{"use strict";var APe=ai(),Gee=Ku(),qee=ce(),$ee=(H(),M(W)),Vee=Eg();jB.exports=Kee;async function Kee(e,t){if(!qee.isEmpty(t)&&$ee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Gee(e,"value");if(n)throw n;return Vee.prepSearch(e,t,!1)}o(Kee,"lmdbSearchByValue")});var JB=v((CPe,QB)=>{"use strict";var NPe=Gt(),CI=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}},OI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},PI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};QB.exports={SearchByConditionsObject:CI,SearchCondition:OI,SortAttribute:PI}});var rF=v((MPe,tF)=>{"use strict";var{SearchByConditionsObject:PPe,SearchCondition:LPe}=JB(),Yee=ai(),Wee=Ku(),LI=Vu(),_g=Gt(),{Resource:DPe}=(va(),M(Jx)),eF=Eg(),zee=bI(),jee=require("lodash"),{getSchemaPath:Qee}=gt(),XB=ht(),{handleHDBError:Jee,hdbErrors:Xee}=Ee(),{HTTP_STATUS_CODES:Zee}=Xee,ete=1e8;tF.exports=tte;async function tte(e){let t=Wee(e,"conditions");if(t)throw Jee(t,t.message,Zee.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=Qee(e.schema,e.table),n=await XB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)XB.openDBI(n,u.attribute);let i=jee.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===_g.SEARCH_TYPES.EQUALS?u.estimated_count=LI.count(n,u.attribute,u.value):d===_g.SEARCH_TYPES.CONTAINS||d===_g.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=ete}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await ZB(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(eF.filterByType),f=d.length,m=LI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>zee.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await ZB(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=LI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(tte,"lmdbSearchByConditions");async function ZB(e,t,r,n){let s=new Yee(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===_g.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,eF.searchByType(e,s,i,n).map(a=>a.value)}o(ZB,"executeConditionSearch")});var tp=v((UPe,nF)=>{"use strict";var rte=(H(),M(W)).OPERATIONS_ENUM,DI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=rte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};nF.exports=DI});var MI=v((BPe,dF)=>{"use strict";var aF=ai(),cF=tp(),lF=ep(),uF=Qm(),vn=(H(),M(W)),sF=ce(),iF=ht(),{getTransactionAuditStorePath:nte,getSchemaPath:ste}=gt(),oF=z();dF.exports=ite;async function ite(e){try{if(sF.isEmpty(global.hdb_schema[e.schema])||sF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await ote(e),await ate(e);let t=ste(e.schema,e.table);try{await iF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")oF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=nte(e.schema,e.table);await iF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")oF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(ite,"lmdbDropTable");async function ote(e){let t=new aF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await lF(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 cF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await uF(s)}o(ote,"deleteAttributesFromSystem");async function ate(e){let t=new aF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,vn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await lF(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 cF(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await uF(s)}catch(i){throw i}}o(ate,"dropTableFromSystem")});var mF=v((kPe,fF)=>{"use strict";var cte=require("fs-extra"),lte=ai(),ute=Yu(),dte=tp(),fte=MI(),mte=Qm(),pte=II(),hte=ep(),Fo=(H(),M(W)),{getSchemaPath:Ete}=gt(),{handleHDBError:_te,hdbErrors:gte}=Ee(),{HDB_ERROR_MSGS:Ste,HTTP_STATUS_CODES:Tte}=gte;fF.exports=yte;async function yte(e){let t;try{t=await Rte(e.schema);let r=new lte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await hte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await fte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new dte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await mte(s);let i=Ete(t);await cte.remove(i)}catch(r){throw r}}o(yte,"lmdbDropSchema");async function Rte(e){let t=new ute(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await pte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw _te(new Error,Ste.SCHEMA_NOT_FOUND(e),Tte.NOT_FOUND,void 0,void 0,!0);return n}o(Rte,"validateDropSchema")});var rp=v((GPe,pF)=>{"use strict";var vI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};pF.exports=vI});var xI=v((VPe,hF)=>{"use strict";var bte=require("fs-extra"),gg=ht(),{getTransactionAuditStorePath:Ate}=gt(),UI=Gt(),$Pe=rp();hF.exports=Ite;async function Ite(e){let t;try{let r=Ate(e.schema,e.table);await bte.mkdirp(r),t=await gg.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{gg.createDBI(t,UI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),gg.createDBI(t,UI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),gg.createDBI(t,UI.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(Ite,"createTransactionsAuditEnvironment")});var gF=v((WPe,_F)=>{"use strict";var BI=(H(),M(W)),EF=ht(),wte=ol(),{getSystemSchemaPath:Nte,getSchemaPath:Cte}=gt(),YPe=Hi(),Ote=lg(),FI=cg(),Pte=z(),Lte=xI();_F.exports=Dte;async function Dte(e,t){let r=Cte(t.schema,t.table),n=new FI(t.schema,t.table,BI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new FI(t.schema,t.table,BI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new FI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await EF.createEnvironment(r,t.table),e!==void 0){let a=await EF.openEnvironment(Nte(),BI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await wte.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 kI(n),await kI(s),await kI(i)}await Lte(t)}catch(a){throw a}}o(Dte,"lmdbCreateTable");async function kI(e){try{await Ote(e)}catch(t){Pte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(kI,"createAttribute")});var TF=v((jPe,SF)=>{"use strict";var Mte=Wm(),vte=dm(),Ute=ug(),np=(H(),M(W)),xte=ol().updateRecords,Bte=ht(),{getSchemaPath:Fte}=gt(),kte=zm(),Hte=z();SF.exports=Gte;async function Gte(e){try{let{schemaTable:t,attributes:r}=Mte(e);vte(e,r,t.hash_attribute),e.schema!==np.SYSTEM_SCHEMA_NAME&&(r.includes(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ute(e.hdb_auth_header,t,r),s=Fte(e.schema,e.table),i=await Bte.openEnvironment(s,e.table),a=await xte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await kte(e,a)}catch(c){Hte.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(Gte,"lmdbUpdateRecords")});var RF=v((JPe,yF)=>{"use strict";var qte=(H(),M(W)).OPERATIONS_ENUM,HI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=qte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};yF.exports=HI});var AF=v((eLe,bF)=>{"use strict";var ZPe=RF(),$te=Wm(),Vte=dm(),Kte=ug(),sp=(H(),M(W)),Yte=ol().upsertRecords,Wte=ht(),{getSchemaPath:zte}=gt(),jte=zm(),Qte=z(),{handleHDBError:Jte,hdbErrors:Xte}=Ee();bF.exports=Zte;async function Zte(e){let t;try{t=$te(e)}catch(l){throw Jte(l,l.message,Xte.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Vte(e,n,r.hash_attribute),e.schema!==sp.SYSTEM_SCHEMA_NAME&&(n.includes(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Kte(e.hdb_auth_header,r,n),i=zte(e.schema,e.table),a=await Wte.openEnvironment(i,e.table),c=await Yte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await jte(e,c)}catch(l){Qte.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(Zte,"lmdbUpsertRecords")});var wF=v((rLe,IF)=>{"use strict";var GI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};IF.exports=GI});var CF=v((sLe,NF)=>{"use strict";var qI=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}};NF.exports=qI});var LF=v((aLe,PF)=>{"use strict";var $I=ht(),{getTransactionAuditStorePath:ere}=gt(),oLe=wF(),ip=Gt(),tre=ce(),OF=CF(),rre=require("util").promisify,nre=rre(setTimeout),sre=1e4,ire=100;PF.exports=ore;async function ore(e){let t=ere(e.schema,e.table),r=await $I.openEnvironment(t,e.table,!0),n=$I.listDBIs(r);$I.initializeDBIs(r,ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new OF;do s=await are(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 nre(ire);while(s.transactions_deleted>0);return i}o(ore,"deleteAuditLogsBefore");async function are(e,t){let r=new OF;try{let n=e.dbis[ip.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[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];tre.isEmpty(c)||(s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>sre)break}return await s,r}catch(n){throw n}}o(are,"deleteTransactions")});var MF=v((lLe,DF)=>{"use strict";var VI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};DF.exports=VI});var UF=v((fLe,vF)=>{"use strict";var cre=ai(),lre=tp(),dLe=MF(),Gi=(H(),M(W)),ure=ce(),KI=ht(),dre=Hi(),fre=ep(),mre=Qm(),{getSchemaPath:pre}=gt();vF.exports=hre;async function hre(e,t=!0){let r;e.schema===Gi.SYSTEM_SCHEMA_NAME?r=dre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await _re(e),s=pre(e.schema,e.table),i=await KI.openEnvironment(s,e.table);return t===!0&&await Ere(e,i,r.hash_attribute),KI.dropDBI(i,e.attribute),n}o(hre,"lmdbDropAttribute");async function Ere(e,t,r){let n=KI.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(Ere,"removeAttributeFromAllObjects");async function _re(e){let t=new cre(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await fre(t)).filter(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(ure.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new lre(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return mre(i)}o(_re,"dropAttributeFromSystem")});var GF=v((hLe,HF)=>{"use strict";var YI=ht(),Wu=Gt(),pLe=Cn(),WI=(H(),M(W)),xF=ce(),{getTransactionAuditStorePath:gre}=gt(),Sre=Vu(),Sg=Gu(),Tre=z();HF.exports=yre;async function yre(e){let t=gre(e.schema,e.table),r=await YI.openEnvironment(t,e.table,!0),n=YI.listDBIs(r);YI.initializeDBIs(r,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return BF(r,e.search_values);case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,bre(r,e.search_values,s);case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Rre(r,e.search_values);default:return BF(r)}}o(yre,"readAuditLog");function BF(e,t=[0,Date.now()]){xF.isEmpty(t[0])&&(t[0]=0),xF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Wu.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 Sg,s))}o(BF,"searchTransactionsByTimestamp");function Rre(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[Wu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,kF(e,i))}return Object.fromEntries(r)}o(Rre,"searchTransactionsByUsername");function bre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Sre.equals(e,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=kF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);FF(l,"records",r,d,a),FF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(bre,"searchTransactionsByHashValues");function FF(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 Sg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Sg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(FF,"loopRecords");function kF(e,t){let r=[];try{let n=e.dbis[Wu.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 Sg,i);r.push(a)}}catch(i){Tre.warn(i)}return r}catch(n){throw n}}o(kF,"batchSearchTransactions")});var $F=v((SLe,qF)=>{"use strict";var{getSchemaPath:_Le}=gt(),gLe=ht(),{database:Are}=(Ne(),M(ft));qF.exports={writeTransaction:Ire};async function Ire(e,t,r){return Are({database:e,table:t}).transaction(r)}o(Ire,"writeTransaction")});var WF=v((yLe,YF)=>{"use strict";var{getSchemaPath:VF}=gt(),KF=ht();YF.exports={flush:wre,resetReadTxn:Nre};async function wre(e,t){return(await KF.openEnvironment(VF(e,t),t.toString())).flushed}o(wre,"flush");async function Nre(e,t){try{(await KF.openEnvironment(VF(e,t),t.toString())).resetReadTxn()}catch{}}o(Nre,"resetReadTxn")});var JF=v((bLe,QF)=>{"use strict";var{Readable:Cre}=require("stream"),{getDatabases:Ore}=(Ne(),M(ft)),{readSync:Pre,openSync:Lre,createReadStream:zF}=require("fs"),{open:Dre}=require("lmdb"),{OpenDBIObject:jF}=qm(),Mre=$m(),{AUDIT_STORE_OPTIONS:vre}=(Ro(),M(nx)),{INTERNAL_DBIS_NAME:Ure,AUDIT_STORE_NAME:xre}=Gt();QF.exports=Fre;var zI=32768,Bre=100;async function Fre(e){let t=e.database||e.schema||"data",r=Ore()[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=Dre({noSync:!0,maxDbs:Mre.MAX_DBS}),m,p=f.openDB(Ure,new jF(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let L=f.openDB(S,R),O=d.openDB(S,R);for(let{key:x,version:j,value:k}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=L.put(x,k,j),E++%Bre===0&&(await new Promise(F=>setTimeout(F,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(L=>S.startsWith?.(L+"/"))){p.put(S,R);let[,L]=S.split("/"),O=!L,x=new jF(!O,O);await g(S,x)}e.include_audit&&await g(xre,{...vre}),await m;let b=zF(f.path);return b.headers=l(),b.on("close",()=>{h.done(),f.close()}),b}let a=r[Object.keys(r)[0]].primaryStore,c=Lre(a.path);return a.transaction(()=>{let u=Buffer.alloc(zI);Pre(c,u,0,zI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=zF(null,{fd:c,start:zI}),m=new Cre.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(Fre,"getBackup")});var ek=v((ILe,ZF)=>{"use strict";var kre=z(),{handleHDBError:Hre}=Ee(),Gre=P0(),qre=lg(),$re=gI(),Vre=mB(),Kre=Qm(),Yre=II(),Wre=kB(),zre=zB(),jre=ep(),Qre=rF(),Jre=mF(),Xre=gF(),Zre=TF(),ene=AF(),tne=LF(),rne=MI(),nne=UF(),sne=GF(),ine=$F(),XF=WF(),one=JF(),jI=class extends Gre{static{o(this,"LMDBBridge")}async searchByConditions(t){return Qre(t)}async getDataByHash(t){return await Yre(t)}async searchByHash(t){return await Wre(t)}async getDataByValue(t,r){return await zre(t,r)}async searchByValue(t){return await jre(t)}async createSchema(t){return await Vre(t)}async dropSchema(t){return await Jre(t)}async createTable(t,r){return await Xre(t,r)}async dropTable(t){return await rne(t)}async createAttribute(t){return await qre(t)}async createRecords(t){return await $re(t)}async updateRecords(t){return await Zre(t)}async upsertRecords(t){try{return await ene(t)}catch(r){throw Hre(r,null,null,kre.ERR,r)}}async deleteRecords(t){return await Kre(t)}async dropAttribute(t){return await nne(t)}async deleteAuditLogsBefore(t){return await tne(t)}async readAuditLog(t){return await sne(t)}writeTransaction(t,r,n){return ine.writeTransaction(t,r,n)}flush(t,r){return XF.flush(t,r)}resetReadTxn(t,r){return XF.resetReadTxn(t,r)}getBackup(t){return one(t)}};ZF.exports=jI});function Un(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ap(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a string, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a string, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a number, attempt to assign ${p}`);Un(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be a number, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ns.ClientError(`${u} must be a Date, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof As||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Un(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Un(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be an object, attempt to assign ${m}`);Un(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=QI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");Un(this)[l]=u}),a("deleteProperty",function(l){Un(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?nk:rk);break}c=l}while(c&&c!==rk&&c!==nk)}function sk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(tk[t])return tk[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=QI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function ane(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 QI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends fl{static{o(this,"TrackedObject")}},ap(r,t)),new r(e)):new fl(e);case Array:let n=new yg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=QI(a,t?.elements)),n[s]=a}return n;default:return e}}function Rg(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=Rg(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 ml(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=ml(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=Fb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ml(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)cne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Tg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[dl]||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(Tg(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(Tg(s))return!0}else return!0}else return!0}}return!1}var ns,tk,rk,nk,fl,cne,dl,yg,op,JI=oe(()=>{ns=w(Ee());p_();Is();o(Un,"getChanges");o(ap,"assignTrackedAccessors");tk=Object.prototype,rk=new Proxy({},{get:sk}),nk=new Proxy({},{get:sk,set:ane});o(sk,"getProxiedProperty");o(ane,"setProxiedProperty");o(QI,"trackObject");fl=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}};ap(fl,{},!0);o(Rg,"collapseData");cne=Object.prototype.hasOwnProperty;o(ml,"updateAndFreeze");o(Tg,"hasChanges");dl=Symbol.for("has-array-changes"),yg=class extends Array{static{o(this,"TrackedArray")}#e;[dl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[dl]=!0,super.splice(...t)}push(...t){return this[dl]=!0,super.push(...t)}pop(){return this[dl]=!0,super.pop()}unshift(...t){return this[dl]=!0,super.unshift(...t)}shift(){return this[dl]=!0,super.shift()}};yg.prototype.constructor=Array;op=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var fk={};be(fk,{ResourceBridge:()=>ew});function tw({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 ik(e,t){let r=qi(e),n=tw(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;St(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&&Rg(d)}catch(f){d={message:(0,dk.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 qi(e){let t=e.database||e.schema||une,r=ot()[t];if(!r)throw(0,ci.handleHDBError)(new Error,lne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function ok(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*ak(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 ck,bg,ci,lk,XI,ZI,uk,dk,lne,une,dne,fne,ew,mk=oe(()=>{ck=w(ek()),bg=w(Ku()),ci=w(Ee());Ne();lk=w(Wm());H();XI=w(xo()),ZI=w(ts()),uk=w(ce());Na();JI();dk=w(z()),{HDB_ERROR_MSGS:lne}=ci.hdbErrors,une="data",dne=1e4,fne=10,ew=class extends ck.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=qi(t);if(!r)throw new ci.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,bg.default)(t,"conditions");if(s)throw(0,ci.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:tw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new 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}]}Je({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await qi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=qi(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 qi(t).dropTable()}createSchema(t){return zu({database:t.schema,table:null}),XI.signalSchemaChange(new ZI.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await rw(t.schema),XI.signalSchemaChange(new ZI.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,lk.default)(t),s,i=ot()[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),St(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=Rg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ot()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),St(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 ok(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ot()[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:zE.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,uk.asyncSetTimeout)(fne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%dne===0&&await u();return l.length>0&&await u(),s?ok(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,bg.default)(t,"hashes");if(r)throw r;return ik(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ik(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&gb[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,bg.default)(t,"value");if(n)throw n;let s=qi(t);if(!s)throw new ci.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===zE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:tw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=qi(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){qi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return qi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=qi(t),n={};switch(t.search_type){case jE.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 jE.USERNAME:{let s=t.search_values;for await(let i of ak(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return ak(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(tw,"getSelect");o(ik,"getRecords");o(qi,"getTable");o(ok,"createDeleteResponse");o(ak,"groupRecordsInHistory")});var ss=v((xLe,pk)=>{"use strict";var{ResourceBridge:mne}=(mk(),M(fk)),pne=fe();pne.initSync();var Ag;function hne(){return Ag||(Ag=new mne,Ag)}o(hne,"getBridge");pk.exports=hne()});var li=v((FLe,_k)=>{var Ene=Hi(),{promisify:_ne}=require("util"),{getDatabases:Ek}=(Ne(),M(ft));_k.exports={setSchemaDataToGlobal:hk,getTableSchema:gne,getSystemSchema:Sne,setSchemaDataToGlobalAsync:_ne(hk)};function hk(e){global.hdb_schema=Ek(),e&&e()}o(hk,"setSchemaDataToGlobal");function gne(e,t,r){let n=Ek()[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(gne,"getTableSchema");function Sne(){return Ene}o(Sne,"getSystemSchema")});var xn=v((HLe,yk)=>{"use strict";var wg=eI(),Qr=ce(),Tne=require("util"),Ng=ss(),yne=li(),gk=z(),{handleHDBError:pl,hdbErrors:Rne}=Ee(),{HTTP_STATUS_CODES:hl}=Rne,bne=Tne.promisify(yne.getTableSchema),Ane="updated",Sk="inserted",Tk="upserted";yk.exports={insert:wne,update:Nne,upsert:Cne,validation:Ine,flush:One};async function Ine(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await bne(e.schema,e.table),r=wg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw gk.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw gk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Ine,"validation");async function wne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=wg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Ng.createRecords(e);return Ig(Sk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(wne,"insertData");async function Nne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=wg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Ng.updateRecords(e);return Qr.isEmpty(n.existing_rows)?Ig(Ane,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Ig(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Nne,"updateData");async function Cne(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=wg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Ng.upsertRecords(e);return Ig(Tk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Cne,"upsertData");function Ig(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===Sk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Tk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Ig,"returnObject");function One(e){return Qr.transformReq(e),Ng.flush(e.schema,e.table)}o(One,"flush")});var sw=v((qLe,Ak)=>{var Pne=dt(),nw=require("joi"),{hdbTable:Lne,hdbDatabase:Rk}=Fi(),bk={schema:Rk,database:Rk,table:Lne},Dne={date:nw.date().iso().required()},Mne={timestamp:nw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ak.exports=function(e,t){let r=t==="timestamp"?{...bk,...Mne}:{...bk,...Dne},n=nw.object(r);return Pne.validateBySchema(e,n)}});var Nk=v(($Le,wk)=>{var vne=dt(),iw=require("joi"),{hdbTable:Une,hdbDatabase:Ik}=Fi(),xne=iw.object({schema:Ik,database:Ik,table:Une,hash_values:iw.array().required(),ids:iw.array()});wk.exports=function(e){return vne.validateBySchema(e,xne)}});var lw=v((VLe,Ck)=>{"use strict";var ow=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}},aw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},cw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ck.exports={InsertObject:ow,NoSQLSeachObject:aw,DeleteResponseObject:cw}});var gl=v((YLe,Mk)=>{"use strict";var Pk=sw(),Bne=Nk(),El=ce(),Ok=require("moment"),Lk=z(),{promisify:Fne,callbackify:kne}=require("util"),_l=(H(),M(W)),Hne=li(),uw=Fne(Hne.getTableSchema),dw=ss(),{DeleteResponseObject:Gne}=lw(),{handleHDBError:Ha,hdbErrors:qne}=Ee(),{HDB_ERROR_MSGS:Cg,HTTP_STATUS_CODES:Ga}=qne,$ne="records successfully deleted",Vne=kne(Dk);Mk.exports={delete:Vne,deleteRecord:Dk,deleteFilesBefore:Kne,deleteAuditLogsBefore:Yne};async function Kne(e){let t=Pk(e,"date");if(t)throw Ha(t,t.message,Ga.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!Ok(e.date,Ok.ISO_8601).isValid())throw Ha(new Error,Cg.INVALID_DATE,Ga.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Cg.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ha(new Error,n,Ga.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await dw.deleteRecordsBefore(e);if(await uw(e.schema,e.table),Lk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Kne,"deleteFilesBefore");async function Yne(e){let t=Pk(e,"timestamp");if(t)throw Ha(t,t.message,Ga.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ha(new Error,Cg.INVALID_VALUE("Timestamp"),Ga.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Cg.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,Ga.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await dw.deleteAuditLogsBefore(e);return await uw(e.schema,e.table),Lk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Yne,"deleteAuditLogsBefore");async function Dk(e){e.ids&&(e.hash_values=e.ids);let t=Bne(e);if(t)throw Ha(t,t.message,Ga.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,Ga.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await uw(e.schema,e.table);let n=await dw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${$ne}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new Gne;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Dk,"deleteRecord")});var Ew={};be(Ew,{HASH_FUNCTION:()=>kr,hash:()=>pw,validate:()=>hw});function fw(e=lp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(cp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function pw(e,t=kr[Uk?.toUpperCase()]??kr.SHA256){return mw[t](e)}function hw(e,t,r=kr[Uk?.toUpperCase()]??kr.SHA256){return e?Wne[r](e,t):!1}var cp,ju,vk,Uk,lp,xk,kr,mw,Wne,_w=oe(()=>{cp=w(require("node:crypto")),ju=w(require("argon2")),vk=w(fe());H();Uk=(0,vk.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),lp=16,xk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(fw,"generateSalt");mw={[kr.MD5]:(e,t=void 0)=>{t=t??fw(xk);let r=cp.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??fw(lp);let r=cp.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=fw(lp),r=await ju.hash(e,{type:ju.argon2id,salt:Buffer.from(t)});return t+r}},Wne={[kr.MD5]:(e,t)=>{let r=e.slice(0,xk);return e===mw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,lp);return e===mw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await ju.verify(e.slice(lp),t)};o(pw,"hash");o(hw,"validate")});var Fk=v((QLe,Bk)=>{var gw=dt(),fn={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 zne(e){return fn.password.presence=!0,fn.username.presence=!0,fn.role.presence=!0,fn.active.presence=!0,gw.validateObject(e,fn)}o(zne,"addUserValidation");function jne(e){return fn.password.presence=!1,fn.username.presence=!0,fn.role.presence=!1,fn.active.presence=!1,gw.validateObject(e,fn)}o(jne,"alterUserValidation");function Qne(e){return fn.password.presence=!1,fn.username.presence=!0,fn.role.presence=!1,fn.active.presence=!1,gw.validateObject(e,fn)}o(Qne,"dropUserValidation");Bk.exports={addUserValidation:zne,alterUserValidation:jne,dropUserValidation:Qne}});var Jk=v((ZLe,Qk)=>{"use strict";var Sw=require("recursive-iterator"),Jne=require("alasql"),Tw=require("clone"),kk=ce(),{handleHDBError:Hk,hdbErrors:Xne}=Ee(),{HDB_ERROR_MSGS:Gk,HTTP_STATUS_CODES:qk}=Xne,{getDatabases:Zne}=(Ne(),M(ft)),ese=["DISTINCT_ARRAY"],$k=Symbol("validateTables"),yw=Symbol("validateTable"),XLe=Symbol("getAllColumns"),Vk=Symbol("validateAllColumns"),Og=Symbol("findColumn"),Kk=Symbol("validateOrderBy"),up=Symbol("validateSegment"),Rw=Symbol("validateColumn"),Yk=Symbol("setColumnsForTable"),Wk=Symbol("checkColumnsForAsterisk"),zk=Symbol("validateGroupBy"),jk=Symbol("hasColumns"),bw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$k](),this[Wk](),this[Vk]()}[$k](){if(this[jk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yw](t.table)})}}[jk](){let t=!1,r=new Sw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[yw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Zne();if(!r[t.databaseid])throw Hk(new Error,Gk.SCHEMA_NOT_FOUND(t.databaseid),qk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Hk(new Error,Gk.TABLE_NOT_FOUND(t.databaseid,t.tableid),qk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Tw(s);i.table=Tw(t),this.attributes.push(i)})}[Og](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)}[Wk](){let t=new Sw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Yk](r.tableid)}[Yk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Jne.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Vk](){this[up](this.statement.columns,!1),this[up](this.statement.joins,!1),this[up](this.statement.where,!1),this[zk](this.statement.group,!1),this[up](this.statement.order,!0)}[up](t,r){if(!t)return;let n=new Sw(t),s=[];for(let{node:i,path:a}of n)!kk.isEmpty(i)&&!kk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kk](i):s.push(this[Rw](i)));return s}[zk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&ese.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Tw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Og](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[Og](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Kk](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[Rw](t)}[Rw](t){let r=this[Og](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]}};Qk.exports=bw});var tH=v((tDe,eH)=>{"use strict";var Xk=require("lodash"),dp=require("mathjs"),tse=require("jsonata"),Zk=ce();eH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?Xk.uniqWith(e,Xk.isEqual):e,"distinct_array"),searchJSON:rse,mad:fp.bind(null,dp.mad),mean:fp.bind(null,dp.mean),mode:fp.bind(null,dp.mode),prod:fp.bind(null,dp.prod),median:fp.bind(null,dp.median)};function fp(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(fp,"aggregateFunction");function rse(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(Zk.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Zk.isEmpty(this.__ala__.res[r])){let n=tse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(rse,"searchJSON")});var nH=v((nDe,rH)=>{"use strict";var ur=require("moment"),Aw="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;rH.exports={current_date:o(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ur(e).utc().format(Aw),"date"),date_format:o((e,t)=>ur(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ur().utc().valueOf(),"now"),get_server_time:o(()=>ur().format(Aw),"get_server_time"),offset_utc:o((e,t)=>ur(e).utc().utcOffset(t).format(Aw),"offset_utc")}});var aH=v((iDe,oH)=>{"use strict";var nse=require("@turf/area"),sse=require("@turf/length"),ise=require("@turf/circle"),ose=require("@turf/difference"),ase=require("@turf/distance"),cse=require("@turf/boolean-contains"),lse=require("@turf/boolean-equal"),use=require("@turf/boolean-disjoint"),dse=require("@turf/helpers"),sH=(H(),M(W)),je=ce(),ko=z();oH.exports={geoArea:fse,geoLength:mse,geoCircle:pse,geoDifference:hse,geoDistance:iH,geoNear:Ese,geoContains:_se,geoEqual:gse,geoCrosses:Sse,geoConvert:Tse};function fse(e){if(je.isEmpty(e))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e));try{return nse.default(e)}catch(t){return ko.trace(t,e),NaN}}o(fse,"geoArea");function mse(e,t){if(je.isEmpty(e))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e));try{return sse.default(e,{units:t||"kilometers"})}catch(r){return ko.trace(r,e),NaN}}o(mse,"geoLength");function pse(e,t,r){if(je.isEmpty(e))return NaN;if(je.isEmpty(t))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e));try{return ise.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(pse,"geoCircle");function hse(e,t){if(je.isEmpty(e))return NaN;if(je.isEmpty(t))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return ose(e,t)}catch(r){return ko.trace(r,e,t),NaN}}o(hse,"geoDifference");function iH(e,t,r){if(je.isEmpty(e))return NaN;if(je.isEmpty(t))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return ase.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(iH,"geoDistance");function Ese(e,t,r,n){if(je.isEmpty(e)||je.isEmpty(t))return!1;if(je.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iH(e,t,n)<=r}catch(s){return ko.trace(s,e,t),!1}}o(Ese,"geoNear");function _se(e,t){if(je.isEmpty(e)||je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return cse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(_se,"geoContains");function gse(e,t){if(je.isEmpty(e)||je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return lse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(gse,"geoEqual");function Sse(e,t){if(je.isEmpty(e)||je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return!use.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Sse,"geoCrosses");function Tse(e,t,r){if(je.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(je.isEmpty(t))throw new Error("geo_type is required");if(je.isEmpty(sH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(sH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=je.autoCastJSON(e)),dse[t](e,r)}o(Tse,"geoConvert")});var Pg=v((aDe,cH)=>{var Sl=tH(),is=nH(),$i=aH();cH.exports=e=>{e.aggr.mad=e.aggr.MAD=Sl.mad,e.aggr.mean=e.aggr.MEAN=Sl.mean,e.aggr.mode=e.aggr.MODE=Sl.mode,e.aggr.prod=e.aggr.PROD=Sl.prod,e.aggr.median=e.aggr.MEDIAN=Sl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Sl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Sl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=is.current_date,e.fn.current_time=e.fn.CURRENT_TIME=is.current_time,e.fn.extract=e.fn.EXTRACT=is.extract,e.fn.date=e.fn.DATE=is.date,e.fn.date_format=e.fn.DATE_FORMAT=is.date_format,e.fn.date_add=e.fn.DATE_ADD=is.date_add,e.fn.date_sub=e.fn.DATE_SUB=is.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=is.date_diff,e.fn.now=e.fn.NOW=is.now,e.fn.offset_utc=e.fn.OFFSET_UTC=is.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=is.get_server_time,e.fn.getdate=e.fn.GETDATE=is.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=is.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=$i.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=$i.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=$i.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=$i.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=$i.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=$i.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=$i.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=$i.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=$i.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=$i.geoNear}});var fH=v((cDe,dH)=>{"use strict";var mp=require("lodash"),Bn=require("alasql");Bn.options.cache=!1;var yse=Pg(),lH=require("clone"),Lg=require("recursive-iterator"),qe=z(),nt=ce(),Qu=ss(),Rse=(H(),M(W)),{hdbErrors:bse}=Ee(),{getDatabases:uH}=(Ne(),M(ft)),Ase="IS NULL",ui="There was a problem performing this search. Please check the logs and try again.";yse(Bn);var Iw=class{static{o(this,"SQLSearch")}constructor(t,r){if(nt.isEmpty(t))throw qe.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(),nt.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!nt.isEmptyOrZeroLength(n))return qe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw qe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),qe.error(n),new Error(ui)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw qe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),qe.error(n),new Error(ui)}if(Object.keys(this.data).length===0)return qe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw qe.error("Error thrown from processJoins in SQLSearch class method search."),qe.error(n),new Error(ui)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw qe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),qe.error(n),new Error(ui)}try{return t=await this._finalSQL(),t}catch(n){throw qe.error("Error thrown from finalSQL in SQLSearch class method search."),qe.error(n),new Error(ui)}}_getColumns(){let t=new Lg(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(lH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=mp.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=uH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(nt.isEmpty(this.statement.where)){qe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Lg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!nt.isEmpty(r)&&r.right)if(nt.isNotEmptyAndHasValue(r.right.value)){let n=nt.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Bn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=nt.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Bn.yy.LogicValue({value:i}):n instanceof Bn.yy.StringValue&&nt.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Bn.yy.NumValue({value:i}))});if(t){qe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Lg(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(!nt.isEmpty(Rse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(nt.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(nt.isEmptyOrZeroLength(r.left.columnid)||nt.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(nt.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"=":!nt.isEmpty(r.right.value)||!nt.isEmpty(r.left.value)?n.add(nt.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(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from)&&nt.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&&mp.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(nt.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);nt.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(nt.isEmptyOrZeroLength(this.all_table_attributes)&&!nt.isEmptyOrZeroLength(this.columns.columns))return t;if(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Bn.promise(r)}catch(r){throw qe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),qe.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(lH(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(nt.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(Ase)>-1&&this.tables.forEach(s=>{let i={columnid:uH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=mp.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),!nt.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!nt.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Qu.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 qe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),qe.error(d),new Error(ui)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await Qu.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw qe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),qe.error(d),new Error(ui)}else if(!nt.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!nt.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await Qu.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw qe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),qe.error(d),new Error(ui)}else try{c.attribute=s.attribute,c.value="*";let d=await Qu.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 qe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),qe.error(d),new Error(ui)}}}_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 Bn.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 Bn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Bn.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 Bn.yy.FuncValue:new Bn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Bn.promise(h,t),t=null}catch(p){throw qe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),qe.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=mp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,b=E.length;g<b;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Lg(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=mp.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 qe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),qe.error(i),new Error(ui)}}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 Qu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw qe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),qe.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();qe.trace(`Final SQL: ${s}`),n=await Bn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),qe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw qe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),qe.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 qe.error(bse.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),qe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await Qu.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 qe.error("There was an error when processing this SQL operation. Check your logs"),qe.error(a),new Error(ui)}}return Object.values(Object.values(this.data)[0].__mergedData)}};dH.exports=Iw});var mn=v((uDe,mH)=>{"use strict";var Ise=Jk();mH.exports={searchByConditions:Nse,searchByHash:Cse,searchByValue:Ose,search:Pse};var ww=ss(),{transformReq:Nw}=ce(),wse=fH();async function Nse(e){return Nw(e),ww.searchByConditions(e)}o(Nse,"searchByConditions");async function Cse(e){Nw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ww.searchByHash(e))r&&t.push(r);return t}o(Cse,"searchByHash");async function Ose(e){Nw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ww.searchByValue(e))t.push(r);return t}o(Ose,"searchByValue");function Pse(e,t){try{let r=new Ise(e);r.validate(),new wse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Pse,"search")});var Vi=v((fDe,_H)=>{"use strict";var pp=require("crypto"),Lse=fe(),{CONFIG_PARAMS:Dse}=(H(),M(W)),hH="aes-256-cbc",Mse=32,vse=16,Cw=64,EH=32,Use=Cw+EH,pH=new Map;_H.exports={encrypt:xse,decrypt:Bse,createNatsTableStreamName:Fse};function xse(e){let t=pp.randomBytes(Mse),r=pp.randomBytes(vse),n=pp.createCipheriv(hH,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(xse,"encrypt");function Bse(e){let t=e.substr(0,Cw),r=e.substr(Cw,EH),n=e.substr(Use,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=pp.createDecipheriv(hH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Bse,"decrypt");function Fse(e,t){let r=Lse.get(Dse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=pH.get(r);return n||(n=pp.createHash("md5").update(r).digest("hex"),pH.set(r,n)),n}o(Fse,"createNatsTableStreamName")});var At=v((hDe,SH)=>{"use strict";var{platform:pDe}=require("os"),kse="nats-server.zip",Ow="nats-server",Hse=process.platform==="win32"?`${Ow}.exe`:Ow,Gse=/^[^\s.,*>]+$/,gH="__request__",qse=o(e=>`${e}.${gH}`,"REQUEST_SUBJECT"),$se={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Vse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Kse={HUB:"hub.pid",LEAF:"leaf.pid"},Yse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Wse={SUCCESS:"success",ERROR:"error"},zse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},jse={TXN:"txn",MSGID:"msgid"},Ju={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Qse={[Ju.ERR]:1,[Ju.WRN]:2,[Ju.INF]:3,[Ju.DBG]:4,[Ju.TRC]:5},Jse={debug:"-D",trace:"-DVV"};SH.exports={NATS_SERVER_ZIP:kse,NATS_SERVER_NAME:Ow,NATS_BINARY_NAME:Hse,PID_FILES:Kse,NATS_CONFIG_FILES:Vse,SERVER_SUFFIX:Yse,NATS_TERM_CONSTRAINTS_RX:Gse,REQUEST_SUFFIX:gH,UPDATE_REMOTE_RESPONSE_STATUSES:Wse,CLUSTER_STATUS_STATUSES:zse,REQUEST_SUBJECT:qse,SUBJECT_PREFIXES:jse,MSG_HEADERS:$se,LOG_LEVELS:Ju,LOG_LEVEL_FLAGS:Jse,LOG_LEVEL_HIERARCHY:Qse}});var Fn=v((_De,Hr)=>{"use strict";var RH="username is required",bH="nothing to update, must supply active, role or password to update",AH="password cannot be an empty string",IH="If role is specified, it cannot be empty.",wH="active must be true or false";Hr.exports.addUser=oie;Hr.exports.alterUser=aie;Hr.exports.dropUser=lie;Hr.exports.getSuperUser=pie;Hr.exports.userInfo=uie;Hr.exports.listUsers=Mg;Hr.exports.listUsersExternal=die;Hr.exports.setUsersWithRolesCache=Tl;Hr.exports.findAndValidateUser=Fw;Hr.exports.getClusterUser=hie;Hr.exports.getUsersWithRolesCache=mie;Hr.exports.USERNAME_REQUIRED=RH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=bH;Hr.exports.EMPTY_PASSWORD=AH;Hr.exports.EMPTY_ROLE=IH;Hr.exports.ACTIVE_BOOLEAN=wH;var NH=xn(),Xse=gl(),hp=(_w(),M(Ew)),CH=Fk(),Ep=mn(),vw=xo(),Ki=ce(),OH=require("validate.js"),Uw=z(),{promisify:Zse}=require("util"),xw=Vi(),Lw=(H(),M(W)),TH=At(),eie=pt(),tie=fe(),rie=Hi(),{hdbErrors:nie,ClientError:di}=Ee(),{HTTP_STATUS_CODES:Ho,AUTHENTICATION_ERROR_MSGS:Pw,HDB_ERROR_MSGS:Xu}=nie,{UserEventMsg:Bw}=ts(),Dw=require("lodash"),{server:Dg}=(xr(),M(em)),sie=z();Dg.getUser=(e,t)=>Fw(e,t,t!=null);Dg.authenticateUser=(e,t)=>Fw(e,t);var PH={username:!0,active:!0,role:!0,password:!0},yH=new Map,iie=Zse(Xse.delete),Mw=tie.get(Lw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,Yi;async function oie(e){let t=OH.cleanAttributes(e,PH),r=CH.addUserValidation(t);if(r)throw new di(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new di(Xu.ROLE_NAME_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new di(Xu.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=xw.encrypt(t.password)),t.password=await hp.hash(t.password,Mw),t.hash_function=Mw,t.role=n[0].id;let s=await NH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Uw.debug(s),await Tl(),s.skipped_hashes.length===1)throw new di(Xu.USER_ALREADY_EXISTS(t.username),Ho.CONFLICT);return vw.signalUserChange(new Bw(process.pid)),`${t.username} successfully added`}o(oie,"addUser");async function aie(e){let t=OH.cleanAttributes(e,PH);if(Ki.isEmptyOrZeroLength(t.username))throw new Error(RH);if(Ki.isEmptyOrZeroLength(t.password)&&Ki.isEmptyOrZeroLength(t.role)&&Ki.isEmptyOrZeroLength(t.active))throw new Error(bH);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(wH);if(!Ki.isEmpty(t.password)&&!Ki.isEmptyOrZeroLength(t.password.trim())&&(cie(t.username)&&(t.hash=xw.encrypt(t.password)),t.password=await hp.hash(t.password,Mw)),t.role==="")throw new Error(IH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new di(Xu.ALTER_USER_ROLE_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new di(Xu.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);t.role=n[0].id}let r=await NH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Tl(),vw.signalUserChange(new Bw(process.pid)),r}o(aie,"alterUser");function cie(e){let t=!1,r=Yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(cie,"isClusterUser");async function lie(e){let t=CH.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),Ho.NOT_FOUND);let r=await iie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Uw.debug(r),await Tl(),vw.signalUserChange(new Bw(process.pid)),`${e.username} successfully deleted`}o(lie,"dropUser");async function uie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Dw.cloneDeep(e.hdb_user);let r=await Ep.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(uie,"userInfo");async function die(){let e=await Mg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(die,"listUsersExternal");async function Mg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Dw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Dw.cloneDeep(s),s.role=t[s.role],fie(s.role),n.set(s.username,s);return n}o(Mg,"listUsers");function fie(e){if(!e){Uw.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(rie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(fie,"appendSystemTablesToRole");async function Tl(e=void 0){e?Yi=e:Yi=await Mg()}o(Tl,"setUsersWithRolesCache");async function mie(){return Yi||await Tl(),Yi}o(mie,"getUsersWithRolesCache");async function Fw(e,t,r=!0){Yi||await Tl();let n=Yi.get(e);if(!n){if(!r)return{username:e};throw new di(Pw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}if(n&&!n.active)throw new di(Pw.USER_INACTIVE,Ho.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(yH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)yH.set(t,n.password);else throw new di(Pw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}}return s}o(Fw,"findAndValidateUser");async function pie(){Yi||await Tl();for(let[,e]of Yi)if(e.role.role==="super_user")return e}o(pie,"getSuperUser");async function hie(){let e=await Mg(),t=eie.getConfigFromFile(Lw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Lw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=xw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+TH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+TH.SERVER_SUFFIX.ADMIN,r}o(hie,"getClusterUser");var LH=[];Dg.invalidateUser=function(e){for(let t of LH)try{t(e)}catch(r){sie.error("Error invalidating user",r)}};Dg.onInvalidatedUser=function(e){LH.push(e)}});var He,Zu=oe(()=>{He={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var ed,kw=oe(()=>{Zu();ed=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==He.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(He.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=He.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(He.WARNING,t)}markLoading(t){this.updateStatus(He.LOADING,t||"Component is loading")}isHealthy(){return this.status===He.HEALTHY}hasError(){return this.status===He.ERROR}isLoading(){return this.status===He.LOADING}hasWarning(){return this.status===He.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var yl,qa,Hw,td,Gw,rd,qw,vg=oe(()=>{yl=w(Kr()),qa=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},Hw=class extends qa{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,yl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},td=class extends qa{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Gw=class extends qa{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},rd=class extends qa{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},qw=class extends qa{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,yl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
+ `)}}});var DH,Rl,MH,$a,_p,nd,Eie,Ug,$w=oe(()=>{DH=w(ts()),Rl=w(rt());H();MH=w(Qn());Zu();vg();$a=(0,MH.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Rl.onMessageByType)(QE.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;$a.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&($a.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,Rl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),$a.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),b=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),$a.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(b)},"cleanup");this.responseCheckers.set(r,g),(0,DH.sendItcEvent)({type:QE.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new td("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Rl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return $a.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof td?$a.error?.(`ITC failure during component status collection: ${r.message}`):$a.warn?.("Failed to collect component status from all threads:",r),$a.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Rl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},nd=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let b=parseInt(E.substring(7));isNaN(b)||(n.workers[b]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==He.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[He.ERROR,He.WARNING,He.LOADING,He.UNKNOWN,He.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return He.UNKNOWN}},Eie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Ug=new _p(Eie)});var Va,xg=oe(()=>{kw();Zu();$w();vg();Va=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new rd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(He).includes(r))throw new rd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(He).join(", ")}`);this.statusMap.set(t,new ed(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,He.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,He.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,He.WARNING,r)}initializeLoading(t,r){this.setStatus(t,He.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,He.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,He.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[He.HEALTHY]:0,[He.ERROR]:0,[He.WARNING]:0,[He.LOADING]:0,[He.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Ug.collect(t);return nd.aggregate(r)}}});var dr,Bg=oe(()=>{xg();dr=new Va});function UH(e){let t=vH.get(e);return t||(t=new Vw(e),vH.set(e,t)),t}function xH(){dr.reset()}var Vw,vH,Go,BH,FH=oe(()=>{Bg();Zu();Vw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return dr.setStatus(this.componentName,He.HEALTHY,t),this}warning(t){return dr.setStatus(this.componentName,He.WARNING,t),this}error(t,r){return dr.setStatus(this.componentName,He.ERROR,t,r),this}loading(t){return dr.setStatus(this.componentName,He.LOADING,t||"Loading..."),this}unknown(t){return dr.setStatus(this.componentName,He.UNKNOWN,t),this}get(){return dr.getStatus(this.componentName)}},vH=new Map;o(UH,"statusForComponent");Go={loading(e,t){dr.initializeLoading(e,t)},loaded(e,t){dr.markLoaded(e,t)},failed(e,t,r){dr.markFailed(e,t,r)}};o(xH,"reset");BH=He});var gp={};be(gp,{AggregationError:()=>Gw,COMPONENT_STATUS_LEVELS:()=>He,ComponentStatus:()=>ed,ComponentStatusError:()=>qa,ComponentStatusOperationError:()=>rd,ComponentStatusRegistry:()=>Va,CrossThreadCollectionError:()=>qw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>Hw,ITCError:()=>td,StatusAggregator:()=>nd,componentStatusRegistry:()=>dr,crossThreadCollector:()=>Ug,query:()=>_ie});var _ie,kH=oe(()=>{Bg();xg();kw();xg();$w();Bg();vg();Zu();_ie={get(e){return dr.getStatus(e)},all(){return dr.getAllStatuses()},byStatus(e){return dr.getComponentsByStatus(e)},summary(){return dr.getStatusSummary()},async allThreads(){return Va.getAggregatedFromAllThreads(dr)}}});var Kw={};be(Kw,{STATUS:()=>BH,internal:()=>gp,lifecycle:()=>Go,reset:()=>xH,statusForComponent:()=>UH});var Sp=oe(()=>{FH();kH()});var yp=v((JDe,qH)=>{"use strict";var os=z(),pn=(H(),M(W)),gie=A0(),Sie=Fn(),{validateEvent:Yw}=ts(),Tp=ss(),Tie=require("process"),{resetDatabases:yie}=(Ne(),M(ft)),Rie={[pn.ITC_EVENT_TYPES.SCHEMA]:bie,[pn.ITC_EVENT_TYPES.USER]:GH,[pn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Iie};async function bie(e){let t=Yw(e);if(t){os.error(t);return}os.trace("ITC schemaHandler received schema event:",e),await gie(e.message),await Aie(e.message)}o(bie,"schemaHandler");async function Aie(e){try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=yie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){os.error(t)}}o(Aie,"syncSchemaMetadata");var HH=[];async function GH(e){try{try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){os.warn(r)}let t=Yw(e);if(t){os.error(t);return}os.trace(`ITC userHandler ${pn.HDB_ITC_CLIENT_PREFIX}${Tie.pid} received user event:`,e),await Sie.setUsersWithRolesCache();for(let r of HH)r()}catch(t){os.error(t)}}o(GH,"userHandler");GH.addListener=function(e){HH.push(e)};async function Iie(e){try{let t=Yw(e);if(t){os.error(t);return}os.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),M(Kw)),{getWorkerIndex:n}=rt(),{sendItcEvent:s}=ts(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:pn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?os.trace(`Sent component status response directly to thread ${u}`):(u===void 0?os.debug("No originator threadId, falling back to broadcast"):os.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){os.error("Error handling component status request:",t)}}o(Iie,"componentStatusRequestHandler");qH.exports=Rie});var ts=v((nMe,VH)=>{"use strict";var ZDe=z(),Ww=ce(),wie=(H(),M(W)),{ITC_ERRORS:Rp}=Kr(),{parentPort:eMe,threadId:Nie,isMainThread:Cie,workerData:tMe}=require("worker_threads"),{onMessageFromWorkers:Oie,broadcast:rMe,broadcastWithAcknowledgement:Pie}=rt();VH.exports={sendItcEvent:Lie,validateEvent:$H,SchemaEventMsg:Die,UserEventMsg:Mie};var Fg;Oie(async(e,t)=>{Fg=Fg||yp(),$H(e),Fg[e.type]&&await Fg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Lie(e){return!Cie&&e.message&&(e.message.originator=Nie),Pie(e)}o(Lie,"sendItcEvent");function $H(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ww.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ww.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ww.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(wie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o($H,"validateEvent");function Die(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(Die,"SchemaEventMsg");function Mie(e){this.originator=e}o(Mie,"UserEventMsg")});var xo=v((oMe,zH)=>{"use strict";var KH=(H(),M(W)),iMe=ce(),kg=z(),YH=o0(),sd,{sendItcEvent:WH}=ts();function vie(e){try{kg.debug("signalSchemaChange called with message:",e),sd=sd||yp();let t=new YH(KH.ITC_EVENT_TYPES.SCHEMA,e);return sd.schema(t),WH(t)}catch(t){kg.error(t)}}o(vie,"signalSchemaChange");function Uie(e){try{kg.trace("signalUserChange called with message:",e),sd=sd||yp();let t=new YH(KH.ITC_EVENT_TYPES.USER,e);return sd.user(t),WH(t)}catch(t){kg.error(t)}}o(Uie,"signalUserChange");zH.exports={signalSchemaChange:vie,signalUserChange:Uie}});function bp(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 Ds(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 Ds,Ap=oe(()=>{Ds=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(bp,"appendHeader");o(jH,"mergeHeaders")});function Hg(e,t,r=Bie){let n;return function(...i){return n?n.length*zw>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();zw=(zw*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var XH,xie,Bie,QH,Fie,jw,JH,zw,Qw=oe(()=>{XH=w(Qn()),xie=3e3,Bie=2e4,QH=0,Fie=3e4,jw=3e3,JH=performance.now()+jw,zw=0;o(Hg,"throttle");setInterval(()=>{let e=performance.now();e-JH-jw>xie&&QH+Fie<e&&(XH.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"),QH=e),JH=e},jw).unref()});var lG={};be(lG,{EVICTED:()=>Ma,INVALIDATED:()=>Ln,coerceType:()=>qg,makeTable:()=>Vg});function Vg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:b}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=DA(i,n,l),L,O,x={},j=Promise.resolve(),k,F,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(k=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(F=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(x=K);let Y,de=[],le=[],ee=1,Re=2,Ie={},$e={},Fe=864e5,yr=0,Jt,kt,Xt,kf=!1,Dc,Ht,Hf,Gf=Al.get(U.REPLICATION_DATABASES);if(Array.isArray(Gf)){for(let K of Gf)if(K.name===c&&K.replicateTo>=0){Hf=K.replicateTo;break}}let FE=i.getRange({start:!1,end:!1}).constructor,kE=10,sb=6;g&&pu(),Nm(i.env.path,K=>{if(O)return Uc(K)});class qf extends fl{static{o(this,"Updatable")}getUpdatedTime(){return La.get(this.getRecord())?.version}getExpiresAt(){return La.get(this.getRecord())?.expiresAt}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.set(_,new op(y));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,y){return this.addTo(_,-y)}}class Oe extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=k;static updatedTimeProperty=F;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,y){if(y&&(this.sourceOptions=y,(y.expiration||y.eviction||y.scanInterval)&&this.setTTLExpiration(y)),y?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(P=>!P.intermediateSource)){if(this.sources.some(P=>P.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),L=L||_.load;let T=o(P=>{let D=this.sources;if(D=D.filter(G=>G.intermediateSource&&G[P]&&(!G[P].reliesOnPrototype||G.prototype[P])),D.length>0)if(D.length===1){let G=D[0];return(C,B,q)=>{if(C?.source!==G)return G[P](B,q,C)}}else return(G,C,B)=>{let q=[];for(let te of D){if(G?.source===te)break;q.push(te[P](C,B,G))}return Promise.all(q)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1];A.intermediateSource&&(A={});let I=o(P=>{if(A[P]&&(!A[P].reliesOnPrototype||A.prototype[P]))return(D,G,C)=>{if(!D?.source)return A[P](G,C,D)}},"getApplyToCanonicalSource");Ie={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},$e={put:T("put"),patch:T("patch"),delete:T("delete"),publish:T("publish"),invalidate:T("invalidate")};let N=A.shouldRevalidateEvents;return(async()=>{let P=!1,D,G=o(async(C,B)=>{let q=C.value,te=C.table?De[c][C.table]:Oe;if(c===Qf&&(C.table===Eu.ROLE_TABLE_NAME||C.table===Eu.USER_TABLE_NAME)&&(P=!0),C.id===void 0&&(C.id=q[te.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=_;let X={residencyId:go(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},$=C.id,Le=await te.getResource($,B,X);switch(C.finished&&await C.finished,C.type){case"put":return N?Le._writeInvalidate($,q,X):Le._writeUpdate($,q,!0,X);case"patch":return N?Le._writeInvalidate($,q,X):Le._writeUpdate($,q,!1,X);case"delete":return Le._writeDelete($,X);case"publish":case"message":return Le._writePublish($,q,X);case"invalidate":return Le._writeInvalidate($,q,X);case"relocate":return Le._writeRelocate($,X);default:Ue.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=_.subscribe;C&&b==null&&(b=!0);let B={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},q=_.subscribeOnThisThread?_.subscribeOnThisThread((0,bl.getWorkerIndex)(),B):(0,bl.getWorkerIndex)()===0,te=C&&q&&await _.subscribe?.(B);if(te){let X;for await(let $ of te)try{if(!($.type==="transaction"?$.writes[0]:$)){Ue.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&D!==$.localTime){if($.remoteNodeIds?.length>0){let ie=[Symbol.for("seq"),$.remoteNodeIds[0]],re=d.get(ie),ne=re?.nodes;ne||(ne=[]);for(let me of $.remoteNodeIds.slice(1)){let he=ne.find(Ve=>Ve.id===me);ne=ne.filter(Ve=>Ve.id!==me||Ve===he),he||(he={id:me,seqId:0},ne.push(he)),he.seqId=Math.max(re?.seqId??1,$.localTime),me===X?.nodeId&&(he.lastTxnTime=$.timestamp)}let _e=Math.max(re?.seqId??1,$.localTime);Ue.default.trace?.("Received txn",c,_e,new Date(_e),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(ie,{seqId:_e,nodes:ne})}D=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(G($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let ae=St($,()=>{if($.type==="transaction"){let ie=[];for(let re of $.writes)try{ie.push(G(re,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify($),ne}return Promise.all(ie)}else if($.type==="define_schema"){let ie=this.attributes.slice(0),re=!1;for(let ne of $.attributes)ie.find(_e=>_e.name===ne.name)||(ie.push(ne),re=!0);re&&(Je({table:s,database:c,attributes:ie,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[G($,$)],new Promise(ie=>{X.resolve=()=>ie(Promise.all(X.write_promises))})):G($,$)});X&&(X.committed=ae),P&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),$.onCommit&&(ae?ae.then($.onCommit):$.onCommit())}catch(Le){Ue.default.error?.("error in subscription handler",Le)}}}catch(C){Ue.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Oe.prototype.get}static getResource(_,y,T){let A=super.getResource(_,y,T);if(this.loadAsInstance===!1&&(y._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(A.getRecord?.())return A;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let I=!T?.async||i.cache?.get?.(_),N=br(y),P=N.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Mc(_,y,{transaction:P,ensureLoaded:T?.ensureLoaded},I,D=>{if(D?Oe._updateResource(A,D):A.#e=null,y.onlyIfCached){if(!A.doesExist())throw new ct.ServerError("Entry is not cached",504)}else if(T?.ensureLoaded){let G=ya(_,D,y,A);if(G)return N?.disregardReadTxn(),A.#i=!0,y.loadedFromSource=!0,Ms(G,C=>(Oe._updateResource(A,C),A))}return A})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(_)),I}}return A}static _updateResource(_,y){_.#n=y,_.#e=y?.value??null,_.#r=y?.version}ensureLoaded(){let _=ya(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Ms(_,y=>{this.#n=y,this.#e=y.value,this.#r=y.version})}static getNewId(){let _=x?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Ht){let I=i.getEntry(Symbol.for("id_allocation")),N=I?.value,P;if(N&&N.nodeName===server.hostname&&(!Qie(i)||N.pid===process.pid)){let D=N.start,G=N.end;P=D;for(let C of i.getKeys({start:G,end:D,limit:1,reverse:!0}))P=C}else N=A(I?.version??null),P=N.start;Ht=new BigInt64Array([BigInt(P)+1n]),Ht=new BigInt64Array(i.getUserSharedBuffer("id",Ht.buffer)),Ht.maxSafeId=N.end}let y=Number(Atomics.add(Ht,0,1n)),T=_==="Int"?512:1048576;if(y+T>=Ht.maxSafeId){let I=o(N=>{Ht.maxSafeId=y+(_==="Int"?1023:4194303);let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=N?void 0:i.useReadTransaction(),G=Number(Ht[0]);for(let q of i.getKeys({start:G+1,end:P,limit:1,transaction:D}))P=q;D?.done();let{value:C,version:B}=i.getEntry(Symbol.for("id_allocation"));if(Ht.maxSafeId<P){if(C.end>Ht.maxSafeId-100)return;Ue.default.info?.("New id allocation",y,Ht.maxSafeId,B),i.put(Symbol.for("id_allocation"),{start:C.start,end:Ht.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),B)}else{Ue.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ht.maxSafeId}, but id of ${P} detected`);let q=A(B);q.alreadyUpdated||Atomics.store(Ht,0,BigInt(q.start+1)),Ht.maxSafeId=q.end}},"updateEnd");y+T===Ht.maxSafeId?setImmediate(I):y+100>=Ht.maxSafeId&&(Ue.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return y;function A(I){let N=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,P=N/4,D,G,C=!1,B,q;do{B=Math.floor(Math.random()*N),q={start:B,end:B+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let te of i.getKeys({start:B,limit:1,reverse:!0}))D=te;G=N;for(let te of i.getKeys({start:B+1,end:N,limit:1}))G=te;P*=.875,P<1e3&&!C&&(C=!0,Ue.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,B,D,G,P))}while(!(P<G-B&&(P<B-D||D===0)));return i.transactionSync(()=>{let te=i.getEntry(Symbol.for("id_allocation"));return(te?.version??null)==I?(Ue.default.info?.("Allocated new id range",q),i.put(Symbol.for("id_allocation"),q,Date.now()),q):(Ue.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...te.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,Fe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Fe=Fe||(h+E)/4,Uc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Oe.getResidency=_&&((y,T)=>{try{return _(y,T)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static setResidencyById(_){Oe.getResidencyById=_&&(y=>{try{return _(y)}catch(T){throw T.message+=` in residency function for table ${s}`,T}})}static getResidency(_,y){if(Oe.getResidencyById)return Oe.getResidencyById(_[t]);let T=Hf;if(y.replicateTo!=null){if(Array.isArray(y.replicateTo))return y.replicateTo.includes(server.hostname)?y.replicateTo:[server.hostname,...y.replicateTo];y.replicateTo>=0&&(T=y.replicateTo)}if(T>=0&&server.nodes){let A=[server.hostname];if(y.previousResidency)A.push(...y.previousResidency.slice(0,T));else{let I=server.nodes.map(D=>D.name),N=Math.floor(I.length*Math.random());A.push(...I.slice(N,N+T));let P=N+T-I.length;P>0&&A.push(...I.slice(0,P))}return A}}static enableAuditing(){g||(g=!0,pu(),Oe.audit=!0)}static coerceId(_){return _===""?null:qg(_,x)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Pn&&_.value&&Ca(_.value);if(c===a){for(let _ of S)d.remove(Oe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Oe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Xw.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let y=this.constructor;if(typeof _=="string"&&y.loadAsInstance!==!1)return this.getProperty(_);if(Vf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let T={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Oe.getRecordCount().then(A=>(T.recordCount=A.recordCount,T.estimatedRecordRange=A.estimatedRange,T)):T}if(_!==void 0&&y.loadAsInstance===!1){let T=this.getContext(),A=br(T),I=A.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let N=Rr(_);Mr(N);let P=!0;return _.checkPermission&&(P=this.allowRead(T.user,_)),Ms(Ms(P,D=>{if(!D)throw new ct.AccessViolation(T.user);let G=!0;return Mc(N,T,{transaction:I,ensureLoaded:G},!1,C=>{if(T.onlyIfCached){if(!C?.value)throw new ct.ServerError("Entry is not cached",504)}else if(G){let B=ya(N,C,T);if(B)return A?.disregardReadTxn(),T.loadedFromSource=!0,B.then(q=>q?.value)}return C?.value})}),D=>{let G=_?.select;return G&&D!=null?Bu(G,this.constructor)(D):D})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,y){let T=Vr(_,y);if(T?.read){if(T.isSuperUser)return!0;let A=T.attribute_permissions,I=y?.select;if(A?.length>0||kf&&I){if(y||(y={}),I){let N=A?.length>0&&Jw(A,"read");y.select=I.map(P=>{let D=P.name||P;if(!N||N[D]){let G=Xt[D]?.definition?.tableClass;if(G){if(P.name||(P={name:P}),!P.checkPermission&&y.checkPermission&&(P.checkPermission=y.checkPermission),!G.prototype.allowRead.call(null,_,P))return!1;if(!P.select)return P.name}return P}}).filter(Boolean)}else y.select=A.filter(N=>N.read&&!Xt[N.attribute_name]).map(N=>N.attribute_name);return y}else return!0}}allowUpdate(_,y,T){let A=Vr(_,T);if(A?.update){let I=A.attribute_permissions;if(I?.length>0){let N=Jw(I,"update");for(let P in y)if(!N[P])return!1;for(let P of I){let D=P.attribute_name;!P.update&&!(D in y)&&(y[D]=this.getProperty(D))}}return vc(this.getContext())}}allowCreate(_,y,T){if(this.isCollection){let A=Vr(_,T);if(A?.insert){let I=A.attribute_permissions;if(I?.length>0){let N=Jw(I,"insert");for(let P in y)if(!N[P])return!1;return vc(this.getContext())}else return vc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,y){return Vr(_,y)?.delete&&vc(this.getContext())}update(_,y){let T,A=typeof y=="boolean"||y===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),I=!1;A?(I=y,y=_,T=this.getId()):T=Rr(_);let N=this.getContext();if(!br(N))throw new Error("Can not update a table resource outside of a transaction");if(y===!1)return this;if(typeof y=="object"&&y)if(I)Object.isFrozen(y)&&(y={...y}),this.#e={},this.#t=y;else if(A){let D=this.#t;D&&(y=Object.assign(D,y)),this.#t=y}else{let D=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(D=this.allowUpdate(N.user,y,_)),Ms(D,G=>{if(!G)throw new ct.AccessViolation(N.user);return Ms(i.get(Rr(_)),C=>{let B=new qf(C);return B._setChanges(y),this._writeUpdate(T,B.getChanges(),!1),B})})}return this._writeUpdate(T,this.#t,I),this}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.#s===eG?this.set(_,(+this.getProperty(_)||0)+y):(this.#s||this.update(),this.set(_,new op(y)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,y){if(typeof y=="number")return this.addTo(_,-y);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let y=!0,T=this.getContext();return _?.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new ct.AccessViolation(T.user);this._writeInvalidate(_?Rr(_):this.getId())})}_writeInvalidate(_,y,T){let A=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.invalidate?.bind(this,A,_),beforeIntermediate:Bc(y,$e.invalidate?.bind(this,A,_)),commit:o((N,P)=>{if(!(Ra(N,P,T?.nodeId)<=0)){y??=null;for(let D in r)y||(y={}),y[D]===void 0&&(y[D]=this.getProperty(D));Ue.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,y,P,N,Ln,g,{user:A?.user,residencyId:T?.residencyId,nodeId:T?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,y){let T=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.relocate?.bind(this,T,_),beforeIntermediate:$e.relocate?.bind(this,T,_),commit:o((I,N)=>{if(Ra(I,N,y?.nodeId)<=0)return;let P=Oe.getResidencyRecord(y.residencyId),D=0,G=null,C=N?.value;if(P&&!P.includes(server.hostname)){for(let B in r)G||(G={}),G[B]=C[B];D=Ln}else G=C;Ue.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(I).toISOString()}`),R(_,G,N,I,D,g,{user:T.user,residencyId:y.residencyId,nodeId:y.nodeId,expiresAt:y.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,y){let T={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},A=xc(this.getResidency(y.value,T)),I;if(A){if(!A.includes(server.hostname))return!1;I=go(A)}let N=0;Ue.default.debug?.("Performing a relocate of an entry",existing_entry.key,y.value,A);let P=R(_.key,y.value,_,_.version,N,!0,{residencyId:I,expiresAt:y.expiresAt},"relocate",!1,null);return!0}static evict(_,y,T){let A=this.Source,I;if(!((O||g)&&(!y||(I=i.getEntry(_),!I||!y)||I.version!==T))){if(O){if(i.hasLock(_,I.version))return;let N;for(let P in r)N||(N={}),N[P]=y[P];if(N)return R(_,N,I,T,Ma,null,null,null,!0)}if(i.ifVersion(_,T,()=>{_o(_,y,null)}),g)return R(_,null,I,T,Ma,null,null,null,!0);rl(i,I??i.getEntry(_),T)}}lock(){throw new Error("Not yet implemented")}static operation(_,y){return _.table||=s,_.schema||=c,global.operation(_,y)}put(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!0);else{let T=!0;if(_==null)throw new TypeError("Can not put a record without a target");let A=this.getContext();return _.checkPermission&&(T=this.allowUpdate(A.user,y,_)),Ms(T,I=>{if(!I)throw new ct.AccessViolation(A.user);if(Array.isArray(y))for(let N of y){let P=N[t];this._writeUpdate(P,N,!0)}else{let N=Rr(_);this._writeUpdate(N,y,!0)}})}}create(_,y){let T=!0,A=this.getContext();if(!y&&!(_ instanceof URLSearchParams)&&(y=_,_=void 0),!y||typeof y!="object"||Array.isArray(y))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(T=this.allowCreate(A.user,y,_)),Ms(T,I=>{if(!I)throw new ct.AccessViolation(A.user);let N=Rr(_)??y[t];if(N===void 0)N=this.constructor.getNewId();else if(i.get(N))throw new ct.ClientError("Record already exists",409);return this._writeUpdate(N,y,!0),y})}patch(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!1);else{let T=this.update(_,y);if(T?.then)return T.then(()=>{})}}_writeUpdate(_,y,T,A){let I=this.getContext(),N=br(I);Mr(_);let P=this.#n??i.getEntry(_);this.#s=T?eG:Yie;let D=o(C=>T?C.put?()=>C.put(I,_,y):null:C.patch?()=>C.patch(I,_,y):C.put?()=>C.put(I,_,ml(this)):null,"writeToSources"),G={key:_,store:i,entry:P,nodeName:I?.nodeName,validate:o(C=>{y||(y=this.#t),T||y&&Tg(this.#t===y?this:y)?I?.source||(N.checkOverloaded(),this.validate(y,!T),F&&(y[F.name]=F.type==="Date"?new Date(C):F.type==="String"?new Date(C).toISOString():C),T&&(t&&y[t]!==_&&(y[t]=_),k&&(P?.value?y[k.name]=P?.value[k.name]:y[k.name]=k.type==="Date"?new Date(C):k.type==="String"?new Date(C).toISOString():C),y=ml(y))):N.removeWrite(G)},"validate"),before:D(Ie),beforeIntermediate:Bc(y,D($e)),commit:o((C,B,q)=>{if(q){if(I&&B?.version>(I.lastModified||0)&&(I.lastModified=B.version),this.#n=B,B?.value&&B.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");T||(this.#e=B?.value??null)}this.#t=void 0,this.#r=C;let te=B?.value,X;this.#s=0;let $=!1,Le=Ra(C,B,A?.nodeId),ae;if(Le<=0){if(g){let me=B.localTime,he=B.version;Ue.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(C),"applying later update from:",new Date(he),"local recorded time",new Date(me));let Ve=[];for(;me>C||he>=C&&me>0;){let we=l.get(me);if(!we)break;let Xe=vt(we);if(he=Xe.version,he>=C){if(he===C){if(Le=Ra(C,{version:he,localTime:me},A?.nodeId),Le===0)return;if(Le>0)continue}if(Xe.type==="patch")Ve.push(Xe),ae=y;else if(Xe.type==="put"||Xe.type==="delete")return}me=Xe.previousLocalTime}me||Ue.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",B),Ve.sort((we,Xe)=>we.version-Xe.version);for(let we of Ve){let Xe=we.getValue(i);if(Ue.default.debug?.("Rebuilding update with future patch:",new Date(we.version),Xe,we),X=m_(X??y,Xe,T),!X)return}}else{if(T)return;X=m_(X??y,te,T),Ue.default.debug?.("Rebuilding update without audit:",X)}Ue.default.trace?.("Rebuilt record to save:",X," is full update:",T)}let ie;if(T&&!X?ie=y:this.constructor.loadAsInstance===!1?ie=ml(te,X??y):(this.#e=te,ie=ml(this,X??y)),this.#e=ie,ie&&ie.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let re;if(A?.residencyId!=null)re=A.residencyId;else{P?.residencyId&&(I.previousResidency=Oe.getResidencyRecord(P.residencyId));let me=xc(Oe.getResidency(ie,I));if(me&&!me.includes(server.hostname))if(ae??=ie,$=!0,Oe.getResidencyById)ie=void 0;else{ie=null;for(let he in r)ie||(ie={}),ie[he]=ae[he]}re=go(me)}T||(ae=y);let ne=I?.expiresAt??(h?h+Date.now():-1);Ue.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(C).toISOString()}${ne?", expires at: "+new Date(ne).toISOString():""}${B?", replaces entry from: "+new Date(B.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ie).slice(0,100)}catch{return""}})()),_o(_,te,ie);let _e=T?"put":"patch";R(_,ie,B,C,$?Ln:0,g,{omitLocalRecord:$,user:I?.user,residencyId:re,expiresAt:ne,nodeId:A?.nodeId,originatingOperation:I?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ae),I.expiresAt&&Uc()},"commit")};N.addWrite(G)}async delete(_){if(Vf(_)){_.select=["$id"];for await(let y of this.search(_))this._writeDelete(y.$id);return!0}if(_){let y=!0,T=this.getContext();return _.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new ct.AccessViolation(T.user);let I=Rr(_);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,y){let T=br(this.getContext());Mr(_);let A=this.getContext();return T.addWrite({key:_,store:i,entry:this.#n,nodeName:A?.nodeName,before:Ie.delete?.bind(this,A,_),beforeIntermediate:$e.delete?.bind(this,A,_),commit:o((I,N,P)=>{let D=N?.value;P&&(A&&N?.version>(A.lastModified||0)&&(A.lastModified=N.version),Oe._updateResource(this,N)),!(Ra(I,N,y?.nodeId)<=0)&&(_o(this.getId(),D),Ue.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(I).toISOString()}`),g||b?(R(_,null,N,I,0,g,{user:A?.user,nodeId:y?.nodeId,tableToTrack:s},"delete"),g||Uc()):rl(i,N))},"commit")}),!0}search(_){let y=this.getContext(),T=br(y);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(y.user,_))throw new ct.AccessViolation(y.user);y&&(y.lastModified=qie);let A=_.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let I=_.id??this.getId();I&&(A=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(A));let N,P={};function D(ne,_e){let me;switch(_e){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+_e)}for(let he of ne){if(he.conditions){he.conditions=D(he.conditions,he.operator);continue}let Ve=he[0]??he.attribute,we=Ve==null?x:xi(S,Ve);if(we)(we.type||vA[he.comparator])&&(he[1]===void 0?he.value=C(he.value,we):he[1]=C(he[1],we));else if(Ve!=null)throw(0,ct.handleHDBError)(new Error,`${Ve} is not a defined attribute`,404);if(he.chainedConditions)if(he.chainedConditions.length===1&&(!he.operator||he.operator=="and")){let Xe=he.chainedConditions[0],vr,Js;if(Xe.comparator==="gt"||Xe.comparator==="greater_than"||Xe.comparator==="ge"||Xe.comparator==="greater_than_equal"?(vr=he,Js=Xe):(vr=Xe,Js=he),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Te=Js.comparator==="ge"||Js.comparator==="greater_than_equal",yt=vr.comparator==="le"||vr.comparator==="less_than_equal";he.comparator=(Te?"ge":"gt")+(yt?"le":"lt"),he.value=[Js.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(D,"prepareConditions");function G(ne,_e){if(_.enforceExecutionOrder)return ne;for(let me of ne)me.conditions&&(me.conditions=G(me.conditions,me.operator));return ne.length>1&&_e!=="or"?kie(ne,j_(Oe)):ne}o(G,"orderConditions");function C(ne,_e){return Array.isArray(ne)?ne.map(me=>qg(me,_e)):qg(ne,_e)}o(C,"coerceTypedValues");let B=_.operator;(A.length>0||B)&&(A=D(A,B));let q=typeof _.sort=="object"&&_.sort,te;if(q&&B!=="or"){let ne=q.attribute;if(ne==null)throw new ct.ClientError("Sort requires an attribute");if(N=A.find(_e=>vu(_e.attribute)===vu(ne)),!N){let _e=xi(S,ne);if(!_e)throw(0,ct.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(_e.indexed)N={...q,comparator:"sort"},A.push(N);else if(A.length===0&&!_.allowFullScan)throw(0,ct.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!q.descending)}A=G(A,B),q&&(N&&A[0]===N?q.next&&(te={dbOrderedAttribute:q.attribute,attribute:q.next.attribute,descending:q.next.descending,next:q.next.next}):(N&&A.splice(A.indexOf(N),1),te=q));let X=_.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:A,operator:B,postOrdering:te,selectApplied:!!X};let $=T.useReadTxn(),Le=UA(A,B,Oe,$,_,y,(ne,_e)=>Kf(ne,X,y,$,_e),P),ae=_.ensureLoaded!==!1,ie=Oe.transformEntryForSelect(X,y,$,P,ae,!0),re=Oe.transformToOrderedSelect(Le,X,te,y,$,ie);return(_.offset||_.limit!==void 0)&&(re=re.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),re.onDone=()=>{re.onDone=null,T.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(X){let ne=[];for(let _e of X)_e==="*"?ne.push(...S.map(me=>me.name)):ne.push(_e.name||_e);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},re}static transformToOrderedSelect(_,y,T,A,I,N){let P=new FE;if(T){_=Kf(_,y,A,I,null);let D;P.iterate=function(){let C,B=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),q,te=T.dbOrderedAttribute,X,$,Le=!0;function ae(re){let ne=re.next&&ae(re.next),_e=re.descending;return A.sort=re,(me,he)=>{let Ve=fu(me,re.attribute,A),we=fu(he,re.attribute,A),Xe=_e?(0,Il.compareKeys)(we,Ve):(0,Il.compareKeys)(Ve,we);return Xe===0?ne?.(me,he)||0:Xe}}o(ae,"createComparator");let ie=ae(T);return{async next(){let re;if(C)if(re=C.next(),re.done){if(q)return P.onDone&&P.onDone(),re}else return{value:await N.call(this,re.value)};D=[],X&&D.push(X);do if(re=await B.next(),re.done){if(q=!0,D.length)break;return P.onDone&&P.onDone(),re}else{let ne=re.value;if(ne?.then&&(ne=await ne),te){let _e=fu(ne,te,A);if(Le)Le=!1,$=_e;else if(_e!==$){$=_e,X=ne;break}}D.push(ne)}while(!0);return T.isGrouped,D.sort(ie),C=D[Symbol.iterator](),re=C.next(),re.done?(P.onDone&&P.onDone(),re):{value:await N.call(this,re.value)}},return(){return P.onDone&&P.onDone(),B.return()},throw(){return P.onDone&&P.onDone(),B.throw()}}};let G=o(C=>{if(typeof y=="object"&&Array.isArray(C.attribute))for(let B=0;B<y.length;B++){let q=y[B],te;if(q.name===C.attribute[0]){for(te=q.sort||(q.sort={});te.next;)te=te.next;te.attribute=C.attribute.slice(1),te.descending=C.descending}else q===C.attribute[0]&&(y[B]=te={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(T)}else P.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),P=P.map(function(D){try{let G=N.call(this,D);return typeof G?.catch=="function"?G.catch(C=>{throw C.partialObject={[t]:D.key},C}):G}catch(G){throw G.partialObject={[t]:D.key},G}});return P}static transformEntryForSelect(_,y,T,A,I,N){let P;I&&O&&!(typeof _=="string"?[_]:_)?.every(C=>{let B;return typeof C=="object"?B=C.name:B=C,r[B]||B===t})&&(P=!0);let D,G=o(function(C){let B;if(y?.transaction?.stale&&(y.transaction.stale=!1),C!=null){if(B=C.deref?C.deref():C.value,!B&&(C.key===void 0||C.deref)||C.metadataFlags&Ln){if(C.metadataFlags&Ln&&y.replicateFrom===!1&&N&&C.residencyId)return Ya.SKIP;if(C=Mc(C.key??C,y,{transaction:T,lazy:_?.length<4,ensureLoaded:I},this?.isSync,q=>q),C?.then)return C.then(G.bind(this));B=C?.value}if(P&&C?.metadataFlags&(Ln|Ma)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(y.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let q=ya(C.key??C,C,y);if(q?.then)return q.then(G)}}if(B==null)return N?Ya.SKIP:B;if(_&&!(_[0]==="*"&&_.length===1)){let q,te=o(($,Le)=>{let ae;typeof $=="object"?ae=$.name:ae=$;let ie=Xt?.[ae],re;if(ie){let ne=A?.[ae];if(ne)if(ne.hasMappings){let me=ie.from?B[ie.from]:vu(C.key);re=ne.get(me),re||(re=[])}else re=ne.fromRecord?.(B);else re=ie(B,y,C,!0);let _e=o(me=>{if(ie.directReturn)return Le(me,ae);if(me&&typeof me=="object"){let he=ie.definition?.tableClass||Oe;D||(D={});let Ve=D[ae]||(D[ae]=he.transformEntryForSelect(ae===$?null:$.select||(Array.isArray($)?$:null),y,T,ne,I));if(Array.isArray(me)){let we=[],Xe=he.transformToOrderedSelect(me,$.select,typeof $.sort=="object"&&$.sort,y,T,Ve)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Te=>{for(;!Te.done;){if(Te?.then)return Te.then(vr);we.push(Te.value),Te=Xe.next()}Le(we,ae)},"nextValue"),Js=vr(Xe.next());Js&&(q||(q=[]),q.push(Js));return}else if(me=Ve.call(this,me),me?.then){q||(q=[]),q.push(me.then(we=>Le(we,ae)));return}}Le(me,ae)},"handleResolvedValue");re?.then?(q||(q=[]),q.push(re.then(_e))):_e(re);return}else re=B[ae],re&&typeof re=="object"&&ae!==$&&(re=Oe.transformEntryForSelect($.select||$,y,T,null)({value:re}));Le(re,ae)},"selectAttribute"),X;if(typeof _=="string")te(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,Le)=>{$==="*"?_[Le]=B:te($,ae=>X[Le]=ae)});else{X={};let $=_.forceNulls;for(let Le of _)if(Le==="*")for(let ae in B)X[ae]=B[ae];else te(Le,(ae,ie)=>{ae===void 0&&$&&(ae=null),X[ie]=ae})}else throw new ct.ClientError("Invalid select"+_);return q?Promise.all(q).then(()=>X):X}return B},"transform");return G}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Je({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let y=!_.rawEvents,T=[],A=qA(Oe,this.getId()??null,function(P,D,G,C){try{let B=D.getValue?.(i,y),q=D.type;if(!B&&q==="patch"&&y){let X=i.getEntry(P);X?.version===D.version?B=X.value:B=D.getValue?.(i,!0,G),q="put"}let te={id:P,localTime:G,value:B,version:D.version,type:q,beginTxn:C};T?T.push(te):(c!=="system"&&Ge(D.size??1,"db-message",s,null),this.send(te))}catch(B){Ue.default.error?.(B)}},_.startTime||0,_),I=(async()=>{this.isCollection&&(A.includeDescendants=!0,_.onlyChildren&&(A.onlyChildren=!0)),_.supportsTransactions&&(A.supportsTransactions=!0);let P=this.getId(),D=_.previousCount;D>1e3&&(D=1e3);let G=_.startTime;if(this.isCollection){if(G){if(D)throw new ct.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:B}of l.getRange({start:G,exclusiveStart:!0,snapshot:!1})){let q=vt(B);if(q.tableId!==n)continue;let te=q.recordId;if(P==null||sG(P,te)){let X=q.getValue(i,y,C);if(N({id:te,localTime:C,value:X,version:q.version,type:q.type,size:q.size}),A.queue?.length>rG&&await A.waitForDrain()===!1)return}A.startTime=C}}else if(D){let C=[];for(let{key:B,value:q}of l.getRange({start:"z",end:!1,reverse:!0}))try{let te=vt(q);if(te.tableId!==n)continue;let X=te.recordId;if(P==null||sG(P,X)){let $=te.getValue(i,y,B);if(C.push({id:X,localTime:B,value:$,version:te.version,type:te.type}),--D<=0)break}}catch(te){Ue.default.error("Error getting history entry",B,te)}for(let B=C.length;B>0;)N(C[--B]);C[0]&&(A.startTime=C[0].localTime)}else if(!_.omitCurrent){for(let{key:C,value:B,version:q,localTime:te,size:X}of i.getRange({start:P??!1,end:P==null?void 0:[P,Il.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(B&&(N({id:C,localTime:te,value:B,version:q,type:"put",size:X}),A.queue?.length>rG&&await A.waitForDrain()===!1))return}}else{D&&!G&&(G=0);let C=this.#n?.localTime;if(C===LA&&(i.cache?.delete(P),this.#n=i.getEntry(P),Ue.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),Ue.default.trace?.("Subscription from",G,"from",P,C),G<C){let B=[],q=C;do{let te=l.get(q);if(te){_.omitCurrent=!0;let X=vt(te),$=X.getValue(i,y,q);y&&(X.type="put"),B.push({id:P,value:$,localTime:q,...X}),q=X.previousLocalTime}else break;D&&D--}while(q>G&&D!==0);for(let te=B.length;te>0;)N(B[--te]);A.startTime=C}!_.omitCurrent&&this.doesExist()&&N({id:P,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of T)N(C);T=null})();function N(P){c!=="system"&&Ge(P.size??1,"db-message",s,null),A.send(P)}return o(N,"send"),_.listener&&A.on("data",_.listener),A}static subscribeOnThisThread(_,y){return _===0||y?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,y,T){if(y===void 0||y instanceof URLSearchParams)this._writePublish(this.getId(),_,y);else{let A=!0,I=this.getContext();return _.checkPermission&&(A=this.allowCreate(I.user,_,I)),Ms(A,N=>{if(!N)throw new ct.AccessViolation(I.user);let P=Rr(_);this._writePublish(P,y,T)})}}_writePublish(_,y,T){let A=br(this.getContext());_??=null,_!==null&&Mr(_);let I=this.getContext();A.addWrite({key:_,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(A.checkOverloaded(),this.validate(y))},"validate"),before:Ie.publish?.bind(this,I,_,y),beforeIntermediate:Bc(y,$e.publish?.bind(this,I,_,y)),commit:o((N,P,D)=>{P===void 0&&b&&!g&&Uc(),Ue.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,P?.value??null,P,P?.version||N,0,!0,{user:I?.user,residencyId:T?.residencyId,expiresAt:I?.expiresAt,nodeId:T?.nodeId,tableToTrack:s},"message",!1,y)},"commit")})}validate(_,y){let T,A=o((I,N,P)=>{if(N.type&&I!=null)if(y&&I.__op__&&(I=I.value),N.properties){typeof I!="object"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an object${N.type?" ("+N.type+")":""}`);let D=N.properties;for(let G=0,C=D.length;G<C;G++){let B=D[G];if(B.relationship||B.computed){_.hasOwnProperty(B.name)&&(T||(T=[])).push(`Computed property ${P}.${B.name} may not be directly assigned a value`);continue}let q=A(I[B.name],B,P+"."+B.name);q&&(I[B.name]=q)}if(N.sealed&&I!=null&&typeof I=="object")for(let G in I)D.find(C=>C.name===G)||(T||(T=[])).push(`Property ${G} is not allowed within object in property ${P}`)}else switch(N.type){case"Int":(typeof I!="number"||I>>0!==I)&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string`);break;case"Boolean":typeof I!="boolean"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof As)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(N.elements)for(let D=0,G=I.length;D<G;D++){let C=I[D],B=A(C,N.elements,P+"[*]");B&&(I[D]=B)}}else(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an Array`);break}N.nullable===!1&&I==null&&(T||(T=[])).push(`Property ${P} is required (and not does not allow null values)`)},"validateValue");for(let I=0,N=S.length;I<N;I++){let P=S[I];if(P.relationship||P.computed){Object.hasOwn(_,P.name)&&(T||(T=[])).push(`Computed property ${P.name} may not be directly assigned a value`);continue}if(!y||P.name in _){let D=A(_[P.name],P,P.name);D!==void 0&&(_[P.name]=D)}}if(f)for(let I in _)S.find(N=>N.name===I)||(T||(T=[])).push(`Property ${I} is not allowed`);if(T)throw new ct.ClientError(T.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let y=S.slice(0);for(let T of _){if(!T.name)throw new ct.ClientError("Attribute name is required");if(T.name.match(/[`/]/))throw new ct.ClientError("Attribute names cannot include backticks or forward slashes");Hie(T.name),y.push(T)}return Je({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static async removeAttributes(_){let y=S.filter(T=>!_.includes(T.name));return Je({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,y=Xw.default.statfsSync?.(_)??{};return{available:y.bavail*y.bsize,free:y.bfree*y.bsize,size:y.blocks*y.bsize}}static async getRecordCount(_){let y=i.getStats().entryCount,T=1e3/2,A=performance.now(),I=Math.floor(y/2),N=_?.exactCount,P=0,D=0,G;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&P++,D++,await Ka(),!N&&D<I&&performance.now()-A>T){G=D;break}if(G){let C=P;P=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:G,snapshot:!1}))re!=null&&P++,await Ka();let B=G*2,q=(P+C)/B,te=Math.pow((P-C+1)/G/2,2)+q*(1-q)/B,X=Math.max(Math.sqrt(te)*y,1),$=Math.round(q*y),Le=Math.max($-1.96*X,P+C),ae=Math.min($+1.96*X,y),ie=Math.pow(10,Math.round(Math.log10(X)));return ie>$&&(ie=ie/10),P=Math.round($/ie)*ie,{recordCount:P,estimatedRange:[Math.round(Le),Math.round(ae)]}}return{recordCount:P}}static updatedAttributes(){Xt=this.propertyResolvers={$id:o((_,y,T)=>({value:T.key}),"$id"),$updatedtime:o((_,y,T)=>T.version,"$updatedtime"),$updatedTime:o((_,y,T)=>T.version,"$updatedTime"),$expiresAt:o((_,y,T)=>T.expiresAt,"$expiresAt"),$record:o((_,y,T)=>T?{value:_}:_,"$record"),$distance:o((_,y,T)=>T&&(T.distance??y?.vectorDistances?.get(T)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(x=_),_.resolve=null;let y=_.relationship,T=_.computed;if(y)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),T&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),kf=!0,y.to)_.elements?.definition?(Xt[_.name]=_.resolve=(A,I,N,P)=>{let D=A[y.from?y.from:t],G=_.elements.definition.tableClass;return P?Mu({attribute:y.to,value:D},br(I).getReadTxn(),!1,G,!1).map(C=>C&&C.key!==void 0?C:G.primaryStore.getEntry(C,{transaction:br(I).getReadTxn()})).asArray:G.search([{attribute:y.to,value:D}],I).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=y.to,y.from&&(_.resolve.from=y.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(y.from){let A=_.definition||_.elements?.definition;A?(Xt[_.name]=_.resolve=(I,N,P,D)=>{let G=I[y.from];if(G===void 0)return;if(_.elements){let B,q=G?.map(te=>{let X=A.tableClass.primaryStore[D?"getEntry":"get"](te,{transaction:br(N).getReadTxn()});return X?.then&&(B=!0),Oe.loadAsInstance===!1&&Object.freeze(D?X?.value:X),X});return y.filterMissing?B?Promise.all(q).then(te=>te.filter(iG)):q.filter(iG):B?Promise.all(q):q}let C=A.tableClass.primaryStore[D?"getEntry":"get"](G,{transaction:br(N).getReadTxn()});return Oe.loadAsInstance===!1&&Object.freeze(D?C?.value:C),C},_.set=(I,N)=>{if(Array.isArray(N)){let P=N.map(D=>D.getId?.()||D[A.tableClass.primaryKey]);I[y.from]=P}else{let P=N.getId?.()||N[A.tableClass.primaryKey];I[y.from]=P}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=y.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(T)typeof T.from=="function"&&this.setComputedAttribute(_.name,T.from),Xt[_.name]=_.resolve=(A,I,N)=>{let P=typeof T.from=="string"?A[T.from]:A,D=this.userResolvers[_.name];if(D)return D(P,I,N);Ue.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let A=r[_.name].customIndex;Xt[_.name]=(I,N,P)=>{let D=I[_.name];return A.propertyResolver(D,N,P)},Xt[_.name].directReturn=!0}}ap(this,this),ap(qf,this,!0);for(let _ of S){let y=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,y,{get(){return _.resolve(this,xu.getStore())},set(T){return _.set(this,T)},configurable:!0})}}static setComputedAttribute(_,y){let T=xi(S,_);if(!T){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!T.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=y}static async deleteHistory(_=0,y=!1){let T;for(let{key:A,value:I}of l.getRange({start:0,end:_}))await Ka(),vt(I).tableId===n&&(T=v_(l,A,I));if(y)for(let A of i.getRange({start:0,versions:!0})){let{key:I,value:N,localTime:P}=A;await Ka(),N===null&&P<_&&(T=rl(i,A))}await T}static async*getHistory(_=0,y=1/0){for(let{key:T,value:A}of l.getRange({start:_||1,end:y})){await Ka();let I=vt(A);I.tableId===n&&(yield{id:I.recordId,localTime:T,version:I.version,type:I.type,value:I.getValue(i,!0,T),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(_){let y=[];if(_==null)throw new Error("An id is required");let T=i.getEntry(_);if(!T)return y;let A=T.localTime;if(!A)throw new Error("The entry does not have a local audit time");let I=0;do{await Ka();let N=l.get(A);if(N){let P=vt(N);y.push({id:P.recordId,localTime:A,version:P.version,type:P.type,value:P.getValue(i,!0,A),user:P.user}),A=P.previousLocalTime}else break}while(I<1e3&&A);return y.reverse()}static cleanup(){Y?.remove()}}let HE=Hg(async(K,_,y)=>{for(let T of Oe.sources)if(T.get&&(!T.get.reliesOnPrototype||T.prototype.get)){if(T.available?.(y)===!1)continue;_.source=T;let A=await T.get(K,_);if(A)return A}},()=>{throw new ct.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Oe.updatedAttributes();let $f=Oe.prototype;return h&&Oe.setTTLExpiration(h/1e3),Q&&GE(),Oe;function _o(K,_,y){let T;for(let A in r){let I=r[A],N=I.isIndexing,P=Xt[A],D=y&&(P?P(y):y[A]),G=_&&(P?P(_):_[A]);if(D===G&&!N)continue;if(I.customIndex){I.customIndex.index(K,D,G);continue}T=!0;let C=I.indexNulls,B=(0,Ip.getIndexedValues)(D,C),q=(0,Ip.getIndexedValues)(G,C);if(q?.length>0){let te=new Set(q);if(B=B?B.filter(X=>{if(te.has(X))te.delete(X);else return!0}):[],q=Array.from(te),(q.length>0||B.length>0)&&ZH){let X=q.concat(B).map($=>({key:$,value:K}));I.prefetch(X,nG)}for(let X=0,$=q.length;X<$;X++)I.remove(q[X],K)}else B?.length>0&&ZH&&I.prefetch(B.map(te=>({key:te,value:K})),nG);if(B)for(let te=0,X=B.length;te<X;te++)I.put(B[te],K)}return T}o(_o,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>tG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Il.writeKey)(K,Wie,0)>tG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Rr(K){return typeof K=="object"&&K?K.id:K}o(Rr,"requestTargetToId");function Vf(K){return typeof K=="object"&&K&&K.isCollection}o(Vf,"isSearchTarget");function ib(K){}o(ib,"isRequestTarget");function Mc(K,_,y,T,A){if(Oe.getResidencyById&&y.ensureLoaded&&_?.replicateFrom!==!1){let N=xc(Oe.getResidencyById(K));if(N&&!N.includes(server.hostname)&&L)return L({key:K,residency:N}).then(A)}let I=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),y.transaction?.isDone)return A(null,K);let N=i.getEntry(K,y);return(c!=="system"||s==="hdb_analytics")&&(cG.default.trace?.("Recording db-read action for",`${c}.${s}`),Ge(N?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(N?.value),N?.residencyId&&N.metadataFlags&Ln&&L&&y.ensureLoaded&&_?.replicateFrom!==!1?L(N).then(P=>A(P,K),P=>(Ue.default.error?.("Error loading remote record",K,N,y,P),A(null,K))):(N&&_&&(N?.version>(_.lastModified||0)&&(_.lastModified=N.version),N?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=N.localTime)),A(N,K))},"whenPrefetched");return T?I():ee>0?(ee--,I()):new Promise((N,P)=>{ee===0?(ee--,i.prefetch([K],()=>{D(),G()})):(de.push(K),le.push(G),de.length>sb&&(ee--,D()));function D(){if(de.length>0){let C=le;i.prefetch(de,()=>{ee===-1?D():ee++;for(let B of C)B()}),de=[],le=[],Re>2&&Re--}else ee=Re,Re<kE&&Re++}o(D,"prefetch");function G(){try{N(I())}catch(C){P(C)}}o(G,"load")})}o(Mc,"loadLocalRecord");function Vr(K,_){let y=_?.checkPermission;if(typeof y!="object"){if(!K?.role)return;y=K.role.permission}if(y.super_user)return zie;let T=y[c],A,I=T?.tables;if(I)return I[s];if(c==="data"&&(A=y[s])&&!A.tables)return A}o(Vr,"getTablePermissions");function ya(K,_,y,T){if(O){let A=!1;if(y.noCache?A=!0:(_?(!_.value||_.metadataFlags&(Ln|Ma)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(A=!0):A=!0,zr(!A,"cache-hit",s)),A){let I=mu(K,_,y).then(N=>(N?.value&&N?.value.getRecord?.()&&Ue.default.error?.("Can not assign a record that is already a resource"),y&&(N?.version>(y.lastModified||0)&&(y.lastModified=N.version),y.lastRefreshed=Date.now()),N));if(y?.onlyIfCached||_?.value&&T?.allowStaleWhileRevalidate?.(_,K)){if(I.catch(N=>Ue.default.warn?.(N)),y?.onlyIfCached&&!T.doesExist())throw new ct.ServerError("Entry is not cached",504);return}else return I}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Oe.evict(_.key,_.value,_.version),_.value=null,{then(A){return A(_)}}}o(ya,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let y=_.next;if(!y)return _=_.next=new yo,_.lmdbDb=i,_;_=y}while(!0)}else return new d_}o(br,"txnForContext");function fu(K,_,y){if(!K)return;let T=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let I=Xt,N=T;for(let P=0,D=_.length;P<D;P++){let G=_[P],C=I?.[G];N=C&&N?C(N,y,K):N?.[G],K=null,I=C?.definition?.tableClass?.propertyResolvers}return N}let A=Xt[_];return A?A(T,y,K):T[_]}o(fu,"getAttributeValue");function Kf(K,_,y,T,A){let I=A?.length,N={transaction:T,lazy:I>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},P;function D(G,C){let B=G?.value;if(!B)return Ya.SKIP;for(let q=0;q<I;q++)if(!P?.includes(q)&&!A[q](B,G))return Ya.SKIP;return C!==void 0&&(G.key=C),G}if(o(D,"processEntry"),I>0||!K.hasEntries){let G=K.map(C=>{if(P=null,typeof C=="object"&&C?.key!==void 0)return I>0?D(C):C;if(C==null)return Ya.SKIP;for(let B=0;B<I;B++){let te=A[B].idFilter;if(te){if(!te(C))return Ya.SKIP;P||(P=[]),P.push(B)}}return Mc(C,y,N,!1,D)});return Array.isArray(K)&&(G=G.filter(C=>C!==Ya.SKIP)),G.hasEntries=!0,G}return K}o(Kf,"transformToEntries");function Ra(K,_,y=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&y!==void 0){let T=server.replication?.exportIdMapping(l),A=_.localTime,I=A&&l.get(A);if(I){let N,P,D=vt(I);for(let G in T)T[G]===y&&(N=G),T[G]===D.nodeId&&(P=G);if(N>P)return 1;if(N===P)return 0}}return-1}return 1}o(Ra,"precedesExistingVersion");async function mu(K,_,y){let T=_?.metadataFlags,A=_?.version,I,N;if(!i.attemptLock(K,A,()=>{clearTimeout(N);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ln|Ma)?I(mu(K,i.getEntry(K),y)):I(C)}))return new Promise(C=>{I=C,N=setTimeout(()=>{i.unlock(K,A)},Kie)});let P=_?.value,D={requestContext:y,replacingRecord:P,replacingEntry:_,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:y?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},G=y?.responseHeaders;return new Promise((C,B)=>{let q;Ms(St(D,async te=>{let X=performance.now(),$,Le,ae;try{$=await HE(K,D,_),ae=T&Ln;let re=D.lastModified||ae&&A;Le=ae||re>A||!P,re||(re=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Ge(ne,"cache-resolution",s,null,"success"),G&&bp(G,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),te.timestamp=re,h&&D.expiresAt==null&&(D.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=P,re=A;else throw new ct.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}q=!0,C({key:K,version:re,value:$})}catch(re){re.message+=` while resolving record ${K} for ${s}`,P&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!y?.mustRevalidate||y?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({key:K,version:A,value:P}),Ue.default.trace?.(re.message,"(returned stale record)")):B(re);let ne=performance.now()-X;Ge(ne,"cache-resolution",s,null,"fail"),G&&bp(G,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),D.transaction.abort();return}if(y?.noCacheStore||D.noCacheStore){D.transaction.abort();return}br(D).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Bc($),commit:o((re,ne)=>{if(ne?.version!==A)return;let _e=_o(K,P,$);if($){$e.put?.(D,K,$),ne&&(y.previousResidency=Oe.getResidencyRecord(ne.residencyId));let me,he=!1,Ve,we=xc(Oe.getResidency($,y));if(we){if(!we.includes(server.hostname))if(me=$,he=!0,Oe.getResidencyById)$=void 0;else{$=null;for(let Xe in r)$||($={}),$[Xe]=me[Xe]}Ve=go(we)}Ue.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),R(K,$,ne,re,he?Ln:0,g&&(Le||he)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:Ve,tableToTrack:s},"put",!!ae,me)}else ne&&($e.delete?.(D,K),Ue.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),g||b?R(K,null,ne,re,0,g&&Le||null,{user:D?.user,tableToTrack:s},"delete",!!ae):rl(i,ne,A))},"commit")})}),()=>{i.unlock(K,A)},te=>{i.unlock(K,A),q&&Ue.default.error?.("Error committing cache update",te)})})}o(mu,"getFromSource");function vc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new ct.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new ct.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(vc,"checkContextPermissions");function Uc(K){let _=!1;if(K&&(K-yr>1&&(_=!0),yr=K),!(Fe===Jt&&!_)&&(Jt=Fe,(0,bl.getWorkerIndex)()===(0,bl.getWorkerCount)()-1))return kt&&clearTimeout(kt),Fe?new Promise(y=>{let T=new Date;T.setMonth(0),T.setDate(1),T.setHours(0),T.setMinutes(0),T.setSeconds(0);let A=Fe/(1+yr),I=_?Date.now():Math.ceil((Date.now()-T.getTime())/A)*A+T.getTime(),N=o(P=>{Ue.default.trace?.(`Scheduled next cleanup scan at ${new Date(P)}`),kt=setTimeout(()=>j=j.then(async()=>{if(N(Math.max(P+Fe,Date.now())),i.rootStore.status!=="open"){clearTimeout(kt);return}let D=50,G=new Array(D),C=0,B=Math.pow(yr,8)*(Al.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),q=E/Math.pow(Math.max(yr,1),4);Ue.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${B}, adjusted eviction ${q}ms`);function te(X,$,Le,ae){let ie=X+q-Date.now();if(ie<0)return!0;if(yr){let re=i.lastSize;return Le&Pn&&bu(ae,ne=>{ne.size&&(re+=ne.size)}),Ue.default.trace?.(`shouldEvict adjusted ${ie} ${re}, ${ie*(X-$)/re} < ${B}`),ie*(X-$)/re<B}return!1}o(te,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Le,value:ae,version:ie,expiresAt:re,metadataFlags:ne}=$,_e;ae===null&&!g&&ie+Vie<Date.now()?_e=rl(i,$,ie):re!=null&&te(re,ie,ne,ae)&&(_e=Oe.evict(Le,ae,ie),X++),_e&&(await G[C],G[C]=_e.catch(me=>{Ue.default.error?.("Cleanup error",me)}),++C>=D&&(C=0)),await Ka()}Ue.default.debug?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){Ue.default.warn?.(`Error in cleanup scan for ${s}:`,X)}y(void 0),yr=0}),Math.min(P-Date.now(),2147483647)).unref()},"startNextTimer");N(I)}):void 0}o(Uc,"scheduleCleanup");function pu(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(pu,"addDeleteRemoval");function GE(){(0,bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dc){Dc=!0;try{let K=Q.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let y of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let T of _.getValues(y)){let A=i.getEntry(T);A?.value?A.value[K]<Date.now()&&Oe.evict(T,A.value,A.version):i.ifVersion(T,A?.version,()=>_.remove(y,T))}await Ka()}}catch(K){Ue.default.error?.("Error in evicting old records",K)}finally{Dc=!1}}},$ie).unref()}o(GE,"runRecordExpirationEviction");function xc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return Ue.default.trace?.(`Shard ${K} mapped to ${_.map(y=>y.name).join(", ")}`),_.map(y=>y.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(xc,"residencyFromFunction");function go(K){if(K){let _=K.join(","),y=d.get([Symbol.for("residency_by_set"),_]);return y||(d.put([Symbol.for("residency_by_set"),_],y=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),y],K),y)}}o(go,"getResidencyId");function Bc(K,_){let y=eA(K,i.rootStore);if(y){let T=_;return T?async()=>{await T(),await y}:()=>y}return _}o(Bc,"preCommitBlobsForRecordBefore")}function Jw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function nG(){}function qg(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 Gg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Gg(+e);case"Float":return e==="null"?null:Gg(+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;jie.test(e)||(e+="Z");let n=new Date(e);return Gg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,$g.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Gg(e){if(isNaN(e))throw new SyntaxError;return e}function sG(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 Ms(e,t,r){return e?.then?e.then(t,r):t(e)}function iG(e){return e!=null}function vs(e){try{return JSON.stringify(e)}catch{return e}}function Qie(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ya,Ip,oG,aG,Al,ct,wp,Np,Ue,Il,bl,$g,Xw,cG,kie,Hie,Gie,qie,$ie,Vie,ZH,Kie,eG,Yie,Ln,Ma,Wie,tG,rG,zie,CMe,jie,Ka,X_=oe(()=>{H();Ya=require("lmdb"),Ip=w(Cn()),oG=w(require("lodash")),aG=w(dm());va();mm();Al=w(fe());$A();ct=w(Ee()),wp=w(xo()),Np=w(ts());Ne();J_();Ue=w(Qn());JI();Na();Il=require("ordered-binary"),bl=w(rt());Ro();$g=w(ce());Zc();Jn();p_();Ap();Xw=w(require("node:fs"));Is();P_();cG=w(z());Qw();({sortBy:kie}=oG.default),{validateAttribute:Hie}=aG.default,Gie=new Uint8Array(9);Gie[8]=192;qie=1/0,$ie=6e4,Vie=864e5;Al.initSync();ZH=Al.get(U.STORAGE_PREFETCHWRITES),Kie=1e4,eG=1,Yie=2,Ln=1,Ma=8,Wie=Buffer.allocUnsafeSlow(8192),tG=1978,rG=100,zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},CMe=(0,$g.convertToMS)(Al.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Vg,"makeTable");o(Jw,"attributesAsObject");o(nG,"noop");jie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(qg,"coerceType");o(Gg,"rejectNaN");o(sG,"isDescendantId");Ka=o(()=>new Promise(setImmediate),"rest");o(Ms,"when");o(iG,"exists");o(vs,"stringify");o(Qie,"hasOtherProcesses")});function Kg(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 Yg(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 uG=oe(()=>{o(Kg,"euclideanDistance");o(Yg,"cosineDistance")});var dG,fG,od,Wi,id,Jie,Xie,Wg,mG=oe(()=>{uG();dG=require("msgpackr"),fG=w(Qn()),od=w(Ee()),Wi=(0,fG.loggerWithTag)("HNSW"),id=Symbol.for("entryPoint"),Jie=Symbol.for("key"),Xie=10,Wg=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=dG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Kg:Yg,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"?[Jie,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(id);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let b=0;b<=E;b++)g[b]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Wi.debug?.("setting entry point to",i),this.indexStore.put(id,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Xie),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Wi.debug?.("setting entry point to",i),this.indexStore.put(id,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Wi.info?.("should not have zero connections for",l);let b=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:L,node:O}=g[S];if(R===i)continue;let x=[];if(this.optimizeRouting){let F=!1,Q=O[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let de=0;de<Q.length;de++){let{id:le,distance:ee}=Q[de],Re=1+this.optimizeRouting*(1+.5*de/this.M);for(let Ie=0;Ie<b.length;Ie++){let{id:$e,distance:Fe}=b[Ie];if($e===le){L*Y>Fe+ee?F=!0:ee*Re>L+Fe&&(x.push({fromId:$e,toId:R}),x.push({fromId:R,toId:$e}));break}}if(F)break}if(F)continue}else if(S>=(E>0?this.M:this.M<<1))continue;b.push({id:R,distance:L});for(let{fromId:F,toId:Q}of x){let Y=d(F);Y||(Y=d(F,this.indexStore.get(F)));for(let de=0;de<Y[E].length;de++)if(Y[E][de].id===Q){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(de,1);break}}let j=c[E],k=j?.find(({id:F})=>F===R);if(k){let F=j?.indexOf(k);j.copied||(j=[...j],j.copied=!0,c[E]=j),j.splice(F,1)}else this.addConnection(R,d(R,O),i,E,L,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(id);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Wi.debug?.("setting entry point to",l),this.indexStore.put(id,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Wi.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(id);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new od.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new od.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Yg;else if(s==="euclidean")c=Kg;else{if(s)throw new od.ClientError("Unknown distance function");c=this.distance}if(!t)throw new od.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new od.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){Wi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Wi.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)){Wi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Wi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Wi.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"?Kg:Yg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var Zw,pG=oe(()=>{mG();Zw={HNSW:Wg}});var ft={};be(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>zg,database:()=>zu,databaseEnvs:()=>qo,databases:()=>De,dropDatabase:()=>rw,dropTableMeta:()=>soe,getDatabases:()=>ot,getDefaultCompression:()=>tS,getTables:()=>eoe,onRemovedDB:()=>vp,onUpdatedTable:()=>wl,readMetaDb:()=>Cp,resetDatabases:()=>dd,table:()=>Je,tables:()=>hn});function Mp(e,t){let r=Zg.OpenDBIObject??Zg.default.OpenDBIObject;return new r(e,t)}function eoe(){return Xg||ot(),hn||{}}function ot(){if(Xg)return De;Xg=!0,ld=new Map;let e=(0,$t.getHdbBasePath)()&&(0,Ut.join)((0,$t.getHdbBasePath)(),kc),t=(0,$t.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,$t.get)(U.STORAGE_PATH)||e&&((0,as.existsSync)(e)?e:(0,Ut.join)((0,$t.getHdbBasePath)(),WE)),!!e){if((0,as.existsSync)(e))for(let r of(0,as.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ut.basename)(r.name,".mdb");r.isFile()&&(0,Ut.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Cp((0,Ut.join)(e,r.name),null,n)}if((0,as.existsSync)((0,cd.getBaseSchemaPath)())){for(let r of(0,as.readdirSync)((0,cd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ut.join)((0,cd.getBaseSchemaPath)(),r.name),s=(0,Ut.join)((0,cd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,as.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ut.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Ut.join)(s,i.name);Cp((0,Ut.join)(n,i.name),(0,Ut.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,as.existsSync)(s))for(let a of(0,as.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Ut.extname)(a.name).toLowerCase()===".mdb"&&Cp((0,Ut.join)(s,a.name),(0,Ut.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Ut.join)(c.path,(0,Ut.basename)(a+".mdb"));(0,as.existsSync)(l)&&Cp(l,a,r,null,!0)}}for(let r in De){let n=ld.get(r);if(n){let s=De[r];r.includes("delete")&&wr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(wr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in hn)delete hn[s];delete hn[eS]}}if((0,$t.get)(U.ANALYTICS_REPLICATE)===!1?zg.includes("hdb_analytics")||zg.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of zg)De.system[r]&&(De.system[r].replicate=!1);return ld=null,De}}function dd(){Xg=!1;for(let[,e]of qo)e.needsDeletion=!0;ot();for(let[e,t]of qo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),qo.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return De}function Cp(e,t,r=rN,n,s){let i=new eN.default(e,!1);try{let a=qo.get(e);a?a.needsDeletion=!1:(a=(0,ud.open)(i),qo.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(jg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,as.existsSync)(n)&&(i.path=n,u=(0,ud.open)(i),u.isLegacy=!0):u=M_(a));let d=SG(r),f=d[eS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let b=m.get(E);b||m.set(E,b={attributes:[]}),(g==null||h.is_hash_attribute)&&(b.primary=h),g!=null&&b.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let ee of E)if(ee.is_hash_attribute||ee.isPrimaryKey){g=ee;break}if(!g){wr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let b=d[p],S={},R=[],L,O,x=typeof g.audit=="boolean"?g.audit:(0,$t.get)(U.LOGGING_AUDITLOG),j=g.trackDeletes,k=g.expiration,F=g.eviction,Q=g.sealed,Y=g.splitSegments,de=g.replicate;if(b)S=b.indices,R=b.attributes,b.schemaVersion++;else{L=g.tableId,L?L>=(l.get(ad)||0)&&(l.putSync(ad,L+1),wr.info(`Updating next table id (it was out of sync) to ${L+1} for ${p}`)):(g.tableId=L=l.get(ad),L||(L=1),wr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(ad,L+1),l.putSync(g.key,g));let ee=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(ee.compression=g.compression,ee.compression){let Re=(0,$t.get)(U.STORAGE_COMPRESSION_THRESHOLD)||gG;ee.compression.threshold=Re}O=W_(a.openDB(g.key,ee),a),a.databaseName=r,O.tableId=L}let le;for(let ee of E){ee.attribute=ee.name;try{if(!ee.is_hash_attribute&&(ee.indexed||ee.attribute&&!ee.name)){if(!S[ee.name]){let Ie=yG(ee.key,a,ee);S[ee.name]=Ie,S[ee.name].indexNulls=ee.indexNulls}let Re=R.find(Ie=>Ie.name===ee.name);Re?R.splice(R.indexOf(Re),1,ee):R.push(ee),le=!0}}catch(Re){wr.error("Error trying to update attribute",ee,R,S,Re)}}for(let ee of R)if(!E.find(Ie=>Ie.name===ee.name)){if(ee.is_hash_attribute){wr.error("Unable to remove existing primary key attribute",ee);continue}ee.indexed&&(R.splice(R.indexOf(ee),1),le=!0)}if(b)le&&(b.schemaVersion++,b.updatedAttributes());else{b=TG(d,p,Vg({primaryStore:O,auditStore:u,audit:x,sealed:Q,splitSegments:Y,replicate:de,expirationMS:k&&k*1e3,evictionMS:F&&F*1e3,trackDeletes:j,tableName:p,tableId:L,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),b.schemaVersion=1;for(let ee of Op)ee(b)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function SG(e){let t=De[e];if(t||(e==="data"?t=De[e]=hn:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),ld&&!ld.has(e)){let r=new Set;t[eS]=r,ld.set(e,r)}return t}function TG(e,t,r){return e[t]=r,r}function zu({database:e,table:t}){e||(e=rN),ot();let r=SG(e),n=(0,Ut.join)((0,$t.getHdbBasePath)(),kc),s=(0,$t.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,$t.get)(U.STORAGE_PATH)||((0,as.existsSync)(n)?n:(0,Ut.join)((0,$t.getHdbBasePath)(),WE));let a=(0,Ut.join)(n,(i?t:e)+".mdb"),c=qo.get(a);if(!c||c.status==="closed"){let l=new eN.default(a,!1);c=(0,ud.open)(l),qo.set(a,c)}return c.auditStore||(c.auditStore=M_(c)),c}async function rw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,qo.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=zu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in hn)delete hn[n];delete hn[eS]}delete De[e],Pp.forEach(n=>n(e)),await Zb(r)}function yG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&Zw[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=Zw[r.indexed.type];a?i.customIndex=new a(i,r.indexed):wr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Je(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=rN);let h=zu({database:r,table:t}),E=De[r];wr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let b,S,R;m==null&&(m=!0);let L=new Mp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let O,x;if(g){if(b=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},b=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=tS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,$t.get)(U.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),wr.trace(`${t} table loading, opening primary store`);let de=new Mp(!1,!0);de.compression=S.compression;let le=t+"/";if(R=h.dbisDb=h.openDB(jg.INTERNAL_DBIS_NAME,L),Q(),R.get(le))return x&&x(),dd(),Je(e);let ee=W_(h.openDB(le,de),h);h.databaseName=r,ee.tableId=R.get(ad),wr.trace(`Assigning new table id ${ee.tableId} for ${t}`),ee.tableId||(ee.tableId=1),R.put(ad,ee.tableId+1),S.tableId=ee.tableId,g=TG(E,t,Vg({primaryStore:ee,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:b,tableName:t,tableId:ee.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(le,S)}let j=g.indices;R=R||(h.dbisDb=h.openDB(jg.INTERNAL_DBIS_NAME,L)),g.dbisDB=R;let k=[];for(let{key:Y,value:de}of R.getRange({start:!0})){let[le,ee]=Y.toString().split("/");if(ee===""&&(ee=de.name),ee){if(le!==t)continue}else continue;let Re=a.find($e=>$e.name===ee),Ie=!Re?.indexed&&de.indexed&&!de.isPrimaryKey;if((!Re||Ie)&&(Q(),O=!0,Re||R.remove(Y),Ie)){let $e=g.indices[le];$e&&k.push($e)}}let F=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(O=!0,Y.relationship))continue;let de=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:de,configurable:!0});let le=R.get(de);if(Y.isPrimaryKey){if(le=le||R.get(de=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)||Y.type!==le.type){let Re={...le};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),Y.type&&(Re.type=Y.type),O=!0,Q(),R.put(de,Re)}continue}le?.attribute&&!le.name&&(le.indexed=!0);let ee=!le||le.type!==Y.type||JSON.stringify(le.indexed)!==JSON.stringify(Y.indexed)||le.nullable!==Y.nullable||le.version!==Y.version||JSON.stringify(le.properties)!==JSON.stringify(Y.properties)||JSON.stringify(le.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Re=yG(de,h,Y);(ee||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Q(),le=R.get(de),(ee||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=le?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Re}),F.push(Y))),R.put(de,Y)),le?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Re.indexNulls=Y.indexNulls,j[Y.name]=Re}else ee&&(O=!0,Q(),R.put(de,Y))}}finally{x&&x()}if(O&&(g.schemaVersion++,g.updatedAttributes()),wr.trace(`${t} table loading, running index`),F.length>0||k.length>0?g.indexingOperation=noe(g,F,k):O&&Qg.signalSchemaChange(new Jg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let Y of Op)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),wr.trace(`${t} table loaded`),g;function Q(){x||h.transactionSync(()=>({then(Y){x=Y}}))}o(Q,"startTxn")}async function noe(e,t,r){try{wr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Qg.signalSchemaChange(new Jg.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,ud.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,b=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(b.customIndex){b.customIndex.index(f,R);continue}let L=(0,hG.getIndexedValues)(R);if(L)for(let O=0,x=L.length;O<x;O++)b.put(L[O],f)}catch(S){a[g]||(a[g]=!0,wr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,wr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==_G.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>toe?await s:d>roe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await Qg.signalSchemaChange(new Jg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),wr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){wr.error("Error in indexing",n)}}function soe({table:e,database:t}){let r=zu({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 wl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function tS(){let e=(0,$t.get)(U.STORAGE_COMPRESSION),t=(0,$t.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,$t.get)(U.STORAGE_COMPRESSION_THRESHOLD)||gG,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var $t,jg,ud,Ut,as,cd,eN,Lp,tN,hG,Qg,Jg,Dp,EG,_G,Zg,Zie,wr,rN,eS,gG,zg,hn,De,ad,Op,Pp,Xg,qo,ld,toe,roe,Ne=oe(()=>{$t=w(fe()),jg=w(Gt()),ud=require("lmdb"),Ut=require("path"),as=require("fs"),cd=w(gt());X_();eN=w($m());H();Lp=w(require("fs-extra")),tN=w(ti()),hG=w(Cn()),Qg=w(xo()),Jg=w(ts()),Dp=require("worker_threads"),EG=w(z()),_G=w(rt());Ro();Zc();Is();pG();Zg=w(qm()),{forComponent:Zie}=EG.default;o(Mp,"OpenDBIObject");wr=Zie("storage"),rN="data",eS=Symbol("defined-tables"),gG=((0,$t.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,$t.initSync)();zg=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],hn=Object.create(null),De=Object.create(null);(0,tN._assignPackageExport)("databases",De);(0,tN._assignPackageExport)("tables",hn);ad=Symbol.for("next-table-id"),Op=[],Pp=[],qo=new Map;o(eoe,"getTables");o(ot,"getDatabases");o(dd,"resetDatabases");o(Cp,"readMetaDb");o(SG,"ensureDB");o(TG,"setTable");o(zu,"database");o(rw,"dropDatabase");o(yG,"openIndex");o(Je,"table");toe=1e3,roe=10;o(noe,"runIndexing");o(soe,"dropTableMeta");o(wl,"onUpdatedTable");o(vp,"onRemovedDB");o(tS,"getDefaultCompression")});var iN={};be(iN,{loadGQLSchema:()=>aoe,start:()=>sN,startOnMainThread:()=>ooe});function sN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let b of f.definitions)switch(b.kind){case l.OBJECT_TYPE_DEFINITION:let x=function(k){if(k.kind==="NonNullType"){let Y=x(k.type);return Y.nullable=!1,Y}if(k.kind==="ListType")return{type:"array",elements:x(k.type)};let Q={type:k.name?.value};return Object.defineProperty(Q,"location",{value:k.loc.startToken}),Q};o(x,"getProperty");let S=b.name.value,R=[],L={table:null,database:null,properties:R};m.set(S,L),i.allTypes.set(S,L);for(let k of b.directives){if(k.name.value==="table"){for(let Q of k.arguments)L[Q.name.value]=Q.value.value;L.schema&&(L.database=L.schema),L.table||(L.table=S),L.audit&&(L.audit=L.audit!=="false"),L.attributes=L.properties,p.push(L)}if(k.name.value==="sealed"&&(L.sealed=!0),k.name.value==="splitSegments"&&(L.splitSegments=!0),k.name.value==="replicate"&&(L.replicate=!0),k.name.value==="export"){L.export=!0;for(let Q of k.arguments)typeof L.export!="object"&&(L.export={}),L.export[Q.name.value]=Q.value.value}}let O=!1,j={};for(let k of b.fields){let F=x(k.type);F.name=k.name.value,R.push(F),j[F.name]=void 0;for(let Q of k.directives){let Y=Q.name.value;if(Y==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",Q.loc):(F.isPrimaryKey=!0,O=!0);else if(Y==="indexed"){let de={};for(let le of Q.arguments||[])de[le.name.value]=le.value.value;F.indexed=de}else if(Y==="computed"){for(let de of Q.arguments||[])if(de.name.value==="from"){let le=de.value.value;F.computed={from:g(le,de,j)},F.version==null&&(F.version=le)}else de.name.value==="version"&&(F.version=de.value.value);F.computed=F.computed||!0}else if(Y==="relationship"){let de={};for(let le of Q.arguments)de[le.name.value]=le.value.value;F.relationship=de}else if(Y==="createdTime")F.assignCreatedTime=!0;else if(Y==="updatedTime")F.assignUpdatedTime=!0;else if(Y==="expiresAt")F.expiresAt=!0;else if(Y==="allow"){let de=F.authorizedRoles=[];for(let le of Q.arguments)le.name.value==="role"&&de.push(le.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,Q.loc)}}L.type=S,S==="Query"&&(h=L)}function E(b){let S=m.get(b.type);S?(Object.defineProperty(b,"properties",{value:S.properties}),Object.defineProperty(b,"definition",{value:S})):b.type==="array"?E(b.elements):ioe.includes(b.type)||(0,bG.getWorkerIndex)()===0&&console.error(`The type ${b.type} is unknown at line ${b.location.line}, column ${b.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let b of m.values())for(let S of b.properties)E(S);for(let b of p)b.tableClass=e(b),b.export&&(b.export.name===""?i.set((0,nN.dirname)(n),b.tableClass):i.set((0,nN.dirname)(n)+"/"+(b.export.name||b.type),b.tableClass,b.export));function g(b,S,R){return new RG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${b}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var nN,RG,bG,ioe,ooe,aoe,AG=oe(()=>{nN=require("path"),RG=require("node:vm");Ne();bG=w(rt());Ua();ioe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(sN,"start");ooe=sN,aoe=o(e=>sN({ensureTable:Je}).handleFile(e,null,null,new Fu),"loadGQLSchema")});var aN={};be(aN,{start:()=>Eoe});function coe(e){if(e.kind!==Be.Kind.OPERATION_DEFINITION&&e.kind!==Be.Kind.FRAGMENT_DEFINITION)throw new Gr(`Unexpected non-executable definition type ${e.kind}.`)}function IG(e){if(typeof e!="object"||e===null)throw new zi("Request body must be an object.");if(!("query"in e))throw new zi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new zi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new zi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new zi("Request body `operationName` field must be a string.")}function oN(e){return parseInt(e.value,10)}function NG(e){return parseFloat(e.value)}function CG(e,t,r){let n=r.get(e.name.value);return OG(n)?PG(n,t):{attribute:t,value:n}}function OG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function PG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],OG(n)?PG(n,t):{attribute:t,value:n}))}function loe(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:oN(e.value)};case Be.Kind.FLOAT:return{attribute:t,value:NG(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:t,value:e.value.value};case Be.Kind.VARIABLE:return CG(e.value,t,r);case Be.Kind.OBJECT:return LG(e.value,t,r);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Gr(`Value type, ${e.value.kind}, is not supported.`)}}function LG(e,t,r){return e.fields.flatMap(n=>loe(n,t,r))}function uoe(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:oN(e.value)};case Be.Kind.FLOAT:return{attribute:e.name.value,value:NG(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Be.Kind.VARIABLE:return CG(e.value,e.name.value,t);case Be.Kind.OBJECT:return LG(e.value,[e.name.value],t);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Gr(`Argument type, ${e.value.kind}, is not supported.`)}}function doe(e,t){return e.flatMap(r=>uoe(r,t))}function rS(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 Gr(`Fragment \`${n}\` not found.`);return rS(s.selectionSet,t)}case Be.Kind.INLINE_FRAGMENT:return rS(r.selectionSet,t)}})}function DG(e,t){return rS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:DG(r.selectionSet,t)}:r.name.value)}async function foe(e,t,r,n){let s=Os.getMatch(e.name.value,"graphql");if(s===void 0)throw new Gr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:DG(e.selectionSet,r),conditions:doe(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 MG(e){switch(e.kind){case Be.Kind.NULL:return null;case Be.Kind.INT:return oN(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]:MG(r.value),...t}),{});case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Gr(`Value type, ${e.kind}, is not supported.`)}}function moe(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=MG(n.defaultValue)),n.type.kind===Be.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Gr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function poe(e,t,r,n){if(e.operation===Be.OperationTypeNode.SUBSCRIPTION)throw new Gr("Subscriptions are not supported.");if(e.operation===Be.OperationTypeNode.MUTATION)throw new Gr("Mutations are not supported yet.");let s=moe(e.variableDefinitions,t),i=await Promise.all(rS(e.selectionSet,r).map(c=>foe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function wG({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(coe(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 Gr("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 Gr(`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 Gr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Gr(`Operation \`${r}\` not found.`);let l=await poe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function hoe(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 IG(r),wG(r,e)}case"POST":{let r=await wo(e.headers.get("content-type"),!0)(e._nodeRequest);return IG(r),wG(r,e)}default:throw new zi("Method Not Allowed",405,{Allow:"GET, POST"})}}function Eoe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await hoe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof zi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Gr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof zi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Gr)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,Gr,zi,vG=oe(()=>{Be=w(require("graphql"));No();Ua();o(coe,"assertExecutableDefinitionNode");o(IG,"assertRequestParams");o(oN,"processIntValueNode");o(NG,"processFloatValueNode");o(CG,"processVariableNode");o(OG,"isObject");o(PG,"transformObjectIntoQueryCondition");o(loe,"processObjectFieldNode");o(LG,"processObjectValueNode");o(uoe,"processArgumentNode");o(doe,"buildConditionsQuery");o(rS,"fillInFragments");o(DG,"buildSelectQuery");o(foe,"processFieldNode");o(MG,"processConstValueNode");o(moe,"resolveVariables");o(poe,"executeOperation");o(wG,"resolver");Gr=class extends Error{static{o(this,"GraphQLQueryingError")}},zi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(hoe,"graphqlQueryingHandler");o(Eoe,"start")});var HG=v((QMe,kG)=>{var fd=require("validate.js"),xG=dt(),md=(H(),M(W)),{handleHDBError:_oe,hdbErrors:goe}=Ee(),{HDB_ERROR_MSGS:tr,HTTP_STATUS_CODES:Soe}=goe,cN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Toe={STRUCTURE_USER:"structure_user"},UG=Object.values(md.ROLE_TYPES_ENUM),yoe="attribute_permissions",Roe="attribute_name",{PERMS_CRUD_ENUM:pd}=md,boe=[yoe,...Object.values(pd)],BG=[pd.READ,pd.INSERT,pd.UPDATE],Aoe=[Roe,...BG];function Ioe(e){let t=cN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,FG(e,t)}o(Ioe,"addRoleValidation");function woe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,FG(e,t)}o(woe,"alterRoleValidation");function Noe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xG.validateObject(e,t)}o(Noe,"dropRoleValidation");var Coe=["operation","role","id","permission","hdb_user","access"];function FG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Coe.includes(n[a])||s.push(n[a]);s.length>0&&fr(tr.INVALID_ROLE_JSON_KEYS(s),r);let i=xG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=Ooe(e);a&&fr(a,r),UG.forEach(c=>{e.permission[c]&&!fd.isBoolean(e.permission[c])&&fr(tr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(UG.indexOf(a)<0){if(a===Toe.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(tr.SCHEMA_NOT_FOUND(f),r)}continue}fr(tr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(tr.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(tr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{boe.includes(d)||fr(tr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(pd).forEach(d=>{fd.isDefined(u[d])?fd.isBoolean(u[d])||fr(tr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(tr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(tr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(tr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Aoe.includes(E)&&E!==pd.DELETE&&fr(tr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!fd.isDefined(p.attribute_name)){fr(tr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){fr(tr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}BG.forEach(E=>{fd.isDefined(p[E])?fd.isBoolean(p[E])||fr(tr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):fr(tr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(tr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Poe(r)}o(FG,"customValidate");kG.exports={addRoleValidation:Ioe,alterRoleValidation:woe,dropRoleValidation:Noe};function Ooe(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 tr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?md.ROLE_TYPES_ENUM.SUPER_USER:md.ROLE_TYPES_ENUM.CLUSTER_USER;return tr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Ooe,"validateNoSUPerms");function Poe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:tr.ROLE_PERMS_ERROR,...e};return _oe(new Error,n,Soe.BAD_REQUEST)}else return null}o(Poe,"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 xp=v((ZMe,VG)=>{"use strict";var GG=xn(),qG=mn(),Loe=gl(),uN=HG(),dN=xo(),XMe=require("uuid").v4,Doe=require("util"),nS=(H(),M(W)),Moe=ce(),fN=qG.searchByValue,voe=qG.searchByHash,Uoe=Doe.promisify(Loe.delete),xoe=ai(),Boe=Yu(),{hdbErrors:Foe,handleHDBError:Nl}=Ee(),{HDB_ERROR_MSGS:$G,HTTP_STATUS_CODES:Up}=Foe,{UserEventMsg:mN}=ts();VG.exports={addRole:koe,alterRole:Hoe,dropRole:Goe,listRoles:qoe};function lN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(lN,"scrubRoleDetails");async function koe(e){let t=uN.addRoleValidation(e);if(t)throw t;e=lN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await fN(r)||[])}catch(i){throw Nl(i)}if(n&&n.length>0)throw Nl(new Error,$G.ROLE_ALREADY_EXISTS(e.role),Up.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await GG.insert(s),dN.signalUserChange(new mN(process.pid)),e=lN(e),e}o(koe,"addRole");async function Hoe(e){let t=uN.alterRoleValidation(e);if(t)throw t;e=lN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await GG.update(r)}catch(s){throw Nl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Nl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await dN.signalUserChange(new mN(process.pid)),e}o(Hoe,"alterRole");async function Goe(e){let t=uN.dropRoleValidation(e);if(t)throw Nl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new Boe(nS.SYSTEM_SCHEMA_NAME,nS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await voe(r));if(n.length===0)throw Nl(new Error,$G.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new xoe(nS.SYSTEM_SCHEMA_NAME,nS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fN(s)),a=!1;if(Moe.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`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Uoe(c),dN.signalUserChange(new mN(process.pid)),`${n[0].role} successfully deleted`}o(Goe,"dropRole");async function qoe(){return fN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(qoe,"listRoles")});var pN={};be(pN,{start:()=>WG,startOnMainThread:()=>Koe});function WG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,KG.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($oe.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 Voe(i)}}}async function Voe(e){let t=ot().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,YG.isEqual)(i,e)?void 0:(e.id=r.id,(0,sS.alterRole)(e))}return(0,sS.addRole)(e)}var sS,KG,YG,$oe,Koe,zG=oe(()=>{Ne();sS=w(xp()),KG=require("yaml"),YG=require("lodash"),$oe=["super_user","cluster_user","structure_user"];o(WG,"start");o(Voe,"ensureRole");Koe=WG});async function iS(e){let t=(0,JG.pathToFileURL)(e).toString();if(Yoe)return Bp||(Bp=Woe(joe)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Woe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:zoe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,QG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=hn,s.databases=De}};let n=await(0,jG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function zoe(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 joe(){return{Resource:Fr,tables:hn}}var jG,QG,JG,Yoe,Bp,hN=oe(()=>{va();Ne();jG=require("fs/promises"),QG=require("path"),JG=require("url"),Yoe=!1;o(iS,"secureImport");o(Woe,"getCompartment");o(zoe,"secureOnlyFetch");o(joe,"getGlobalVars")});var EN={};be(EN,{handleApplication:()=>Qoe,suppressHandleApplicationWarning:()=>Joe});function XG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Qoe(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}iS(t.absolutePath).then(r=>{let n=(0,oS.dirname)(t.urlPath);XG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),ZG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function ZG(e,t,r){for(let n in t){let s=t[n],i=(0,oS.join)(r,n);XG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&ZG(e,s,i)}}var oS,Joe,eq=oe(()=>{hN();oS=require("path");o(XG,"isResource");o(Qoe,"handleApplication");o(ZG,"recurseForResources");Joe=!0});var gN={};be(gN,{start:()=>Xoe});function Xoe({resources:e}){e.set("login",_N),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var _N,tq=oe(()=>{va();o(Xoe,"start");_N=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function aq(e){let t={openapi:Zoe,info:{title:"HarperDB HTTP REST interface",version:iq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)aS[c.type]?i[c.name]=new TN(aS[c.type],c.type):c.properties?(i[c.name]=new cq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new iae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new sq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let j=e.allTypes.get(s.path);l=j.sealed,c=j.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:j,name:k,elements:F,relationship:Q,definition:Y,nullable:de}of c){let le=Y??F?.definition;le&&n(le),de===!1&&p.push(k),Q?j==="array"?f[k]={type:"array",items:{$ref:Us+F.type}}:f[k]={$ref:Us+j}:le?j==="array"?f[k]={type:"array",items:{$ref:Us+le.type}}:f[k]={$ref:Us+le.type}:j==="array"?F.type==="Any"?f[k]={type:"array",items:{format:F.type}}:f[k]={type:"array",items:new TN(aS[F.type],F.type)}:j==="Any"?f[k]={format:j}:f[k]=new TN(aS[j],j),m.push(new yN(k,"query",f[k]))}let h=Object.keys(f),E=new yN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new yN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new sq(f,!l,p);let b=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",L=typeof u.delete=="function",O=typeof u.patch=="function",x="/"+i+"/";b&&(t.paths[x]={},t.paths[x].post=new eae(a,r,{200:new hd({$ref:Us+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[x]||(t.paths[x]={}),t.paths[x].get=new SN(m,r,{200:new hd({type:"array",items:{$ref:Us+a}})},"search for records by the specified property name and value pairs")),t.paths[x]||(t.paths[x]={}),t.paths[x].options=new tae(m,r,{200:new rae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new nq(m,r,"delete all the records that match the provided query",{204:new rq})),x="/"+i+"/{"+d+"}",R&&(t.paths[x]={},t.paths[x].get=new SN([E],r,{200:new hd({$ref:Us+a})},"retrieve a record by its primary key")),S&&(t.paths[x]||(t.paths[x]={}),t.paths[x].put=new nae([E],r,a,{200:new hd({$ref:Us+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[x]||(t.paths[x]={}),t.paths[x].patch=new sae([E],r,a,{200:new hd({$ref:Us+a})},"patch the record with the URL path that maps to the record's primary key")),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new nq([E],r,"delete a record with the given primary key",{204:new rq})),R&&g.schema.enum.length>0&&(x="/"+i+"/{"+d+"}.{property}",t.paths[x]={},t.paths[x].get=new SN([E,g],r,{200:new hd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function eae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Us+e}}}},this.security=t,this.responses=r}function SN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function rae(){this.description=oq,this.headers={},this.content={}}function hd(e,t){this.description=oq,this.content={"application/json":{schema:e}},this.headers=t}function rq(){this.description="successfully processed request, no content returned to client"}function nae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function sae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function nq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function sq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function TN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function cq(e){this.$ref=`#/components/schemas/${e}`}function iae(e){this.type="array",this.items=new cq(e)}function yN(e,t,r){this.name=e,this.in=t,this.schema=r}var iq,Zoe,aS,Us,oq,lq=oe(()=>{iq=w(Rt()),Zoe="3.0.3",aS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Us="#/components/schemas/",oq="successful operation";o(aq,"generateJsonApi");o(eae,"Post");o(SN,"Get");o(tae,"Options");o(rae,"ResponseOptions200");o(hd,"Response200");o(rq,"Response204");o(nae,"Put");o(sae,"Patch");o(nq,"Delete");o(sq,"ResourceSchema");o(TN,"Type");o(cq,"Ref");o(iae,"ArrayRef");o(yN,"Parameter")});var dq={};be(dq,{Request:()=>Wa,createReuseportFd:()=>cS});var uq,Wa,RN,bN,cS,Fp=oe(()=>{uq=require("os"),Wa=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new bN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new RN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},RN=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},bN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,uq.platform)()!="win32"&&(cS=require("node-unix-socket").createReuseportFd)});var uS={};be(uS,{parseHeaderValue:()=>IN,start:()=>cae});async function aae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Q_(e);let i=new Ds;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==fq){let g=lS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new si(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let b=IN(g);for(let S of b)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=IN(u).map(b=>(b.next?.name==="confirm"&&b.next.value>=0&&(e.replicatedConfirmation=+b.next.value),b.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 St(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=wo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Ed.ClientError(g,400)}if(e.authorize=!0,a===fq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return aq(lS);throw new Ed.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 Ed.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Ed.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,AN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).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=Sm(f.data,e,f)),f}else if(isFinite(p)){oae[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),b=r["if-none-match"];b&&g==b?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),AN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Sm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}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=Sm(a.contentType?a:hq(a),e,c),c}}function cae(e){AN=e,e.includeExpensiveRecordCountEstimates&&(Wa.prototype.includeExpensiveRecordCountEstimates=!0),!mq&&(mq=!0,lS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return aae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new jn;pq||(pq=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,fi.warn(l)});let a;t.on("message",o(function(u){a||(a=wo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Ge(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=lS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ge(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new si(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await St(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Io(p.value,r);t.send(h),Ge(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?fi.warn(l):fi.info(l):fi.error(l),t.close(lae[l.statusCode]||1011,hq(l))}t.close()},e))}function IN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var fi,Ed,hq,Jr,oae,AN,fq,mq,lS,pq,kp,lae,Eq=oe(()=>{No();Jn();fi=w(z()),Ed=w(Ee());J_();yu();Na();Ap();lq();Fp();Z_();({errorToString:hq}=fi),Jr=new Uint8Array(8),oae=new Float64Array(Jr.buffer,0,1),AN={},fq="openapi";o(aae,"http");kp=0;o(cae,"start");lae={401:3e3,403:3003};o(IN,"parseHeaderValue")});var wN=v((Ive,gq)=>{var{recordAction:dS,recordActionBinary:_q}=(Jn(),M(q_)),uae=require("fastify-plugin"),dae=200;gq.exports=uae(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),dS(a,"duration",u,f,d),_q(s.raw.statusCode<400,"success",u,f,d),_q(1,"response_"+s.raw.statusCode,u,f,d);let m=dae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{dS(performance.now()-c,"transfer",u,f,d),dS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,dS(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var Tq=v((wve,Sq)=>{var fae=dt(),mae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Sq.exports=function(e){return fae.validateObject(e,mae)}});var fS=v((Nve,yq)=>{"use strict";var pae=(H(),M(W)).OPERATIONS_ENUM,NN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=pae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};yq.exports=NN});var qp={};be(qp,{createTokens:()=>PN,getJWTRSAKeys:()=>_S,refreshOperationToken:()=>LN,validateOperationToken:()=>DN,validateRefreshToken:()=>gS});async function _S(){if(mS)return mS;try{let e=Hp.default.join(Gp.default.getHdbBasePath(),hb),t=await pS.default.readFile(Hp.default.join(e,Xf.JWT_PASSPHRASE_NAME),"utf8"),r=await pS.default.readFile(Hp.default.join(e,Xf.JWT_PRIVATE_KEY_NAME),"utf8");return mS={publicKey:await pS.default.readFile(Hp.default.join(e,Xf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},mS}catch(e){throw ES.default.error(e),new mi.ClientError(gd.NO_ENCRYPTION_KEYS,_d.INTERNAL_SERVER_ERROR)}}async function PN(e){let t=(0,CN.validateBySchema)(e,ji.default.object({username:ji.default.string().optional(),password:ji.default.string().optional(),role:ji.default.string().optional(),expires_in:ji.default.alternatives(ji.default.string(),ji.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,ON.findAndValidateUser)(e.username,e.password,f)}catch(f){throw ES.default.error(f),new mi.ClientError(gd.INVALID_CREDENTIALS,_d.UNAUTHORIZED)}if(!r)throw new mi.ClientError(gd.INVALID_CREDENTIALS,_d.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 _S(),c=await Sd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??wq,algorithm:hS,subject:Td.OPERATION}),l=await Sd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:hae,algorithm:hS,subject:Td.REFRESH}),u=pw(l,kr.SHA256);if((await(0,Rq.update)(new bq.default(Qf,Eu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new mi.ClientError(gd.REFRESH_TOKEN_SAVE_FAILED,_d.INTERNAL_SERVER_ERROR);return Aq.default.signalUserChange(new Iq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function LN(e){let t=(0,CN.validateBySchema)(e,ji.default.object({refresh_token:ji.default.string().required()}).required());if(t)throw new mi.ClientError(t.message);let{refresh_token:r}=e;await gS(r);let n=await _S(),s=await Sd.default.decode(r);return{operation_token:await Sd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:wq,algorithm:hS,subject:Td.OPERATION})}}async function DN(e){return Nq(e,Td.OPERATION)}async function gS(e){return Nq(e,Td.REFRESH)}async function Nq(e,t){try{let r=await _S(),n=await Sd.default.verify(e,r.publicKey,{algorithms:hS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,ON.findAndValidateUser)(n.username,void 0,!1);if(t===Td.REFRESH&&!hw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw ES.default.warn(r),r?.name==="TokenExpiredError"?new mi.ClientError(gd.TOKEN_EXPIRED,_d.FORBIDDEN):new mi.ClientError(gd.INVALID_TOKEN,_d.UNAUTHORIZED)}}var Sd,pS,Hp,ji,CN,mi,ES,ON,Rq,bq,Aq,Iq,Gp,_d,gd,wq,hae,hS,Td,mS,yd=oe(()=>{Sd=w(require("jsonwebtoken")),pS=w(require("fs-extra")),Hp=w(require("node:path")),ji=w(require("joi")),CN=w(dt());H();mi=w(Ee()),ES=w(z());_w();ON=w(Fn()),Rq=w(xn()),bq=w(fS()),Aq=w(xo()),Iq=w(ts()),Gp=w(fe()),{HTTP_STATUS_CODES:_d,AUTHENTICATION_ERROR_MSGS:gd}=mi.hdbErrors;Gp.default.initSync();wq=Gp.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",hae=Gp.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",hS="RS256",Td={OPERATION:"operation",REFRESH:"refresh"};o(_S,"getJWTRSAKeys");o(PN,"createTokens");o(LN,"refreshOperationToken");o(DN,"validateOperationToken");o(gS,"validateRefreshToken");o(Nq,"validateToken")});var MN=v((Dve,Pq)=>{"use strict";var Eae=Tq(),Rd=require("passport"),_ae=require("passport-local").Strategy,gae=require("passport-http").BasicStrategy,Sae=require("util"),Tae=Fn(),Oq=Sae.callbackify(Tae.findAndValidateUser),Lve=Kr(),yae=(H(),M(W)),Cq=(yd(),M(qp));Rd.use(new _ae(function(e,t,r){Oq(e,t,r)}));Rd.use(new gae(function(e,t,r){Oq(e,t,r)}));Rd.serializeUser(function(e,t){t(null,e)});Rd.deserializeUser(function(e,t){t(null,e)});function Rae(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===yae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Cq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Cq.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(Rae,"authorize");function bae(e,t){let r=Eae(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(bae,"checkPermissions");Pq.exports={authorize:Rae,checkPermissions:bae}});var SS=v((vve,Lq)=>{"use strict";var Aae=ss();Lq.exports={writeTransaction:Iae};function Iae(e,t,r){return Aae.writeTransaction(e,t,r)}o(Iae,"writeTransaction")});var Uq=v((Bve,vq)=>{"use strict";var wae=mn(),Nae=li(),Dq=z(),Cae=xn(),xve=SS(),Oae=require("clone"),UN=require("alasql"),Pae=Pg(),Mq=require("util"),Lae=Mq.promisify(Nae.getTableSchema),Dae=Mq.promisify(wae.search),Mae=(H(),M(W)),vN=ce();Pae(UN);vq.exports={update:Uae};var vae="There was a problem performing this update. Please check the logs and try again.";async function Uae({statement:e,hdb_user:t}){let r=await Lae(e.table.databaseid,e.table.tableid),n=xae(e.columns);vN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Oae(s),c=vN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=UN.parse(l).statements[0],d=await Dae(u),f=Bae(n,d);return Fae(a,f,t)}o(Uae,"update");function xae(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=UN.compile(`SELECT ${r.expression.toString()} AS [${Mae.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Dq.error(t),new Error(vae)}}o(xae,"createUpdateRecord");function Bae(e,t){return vN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Bae,"buildUpdateRecords");async function Fae(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Cae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Dq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Fae,"updateRecords")});var Bq=v((Gve,xq)=>{var kae=require("alasql"),Hae=mn(),Gae=z(),qae=ss(),BN=require("util"),xN=ce(),$ae=(H(),M(W)),Vae=li(),kve=SS(),Hve=xn(),Kae="record",Yae="successfully deleted",Wae=BN.callbackify(Jae),zae=BN.promisify(Hae.search),jae=BN.promisify(Vae.getTableSchema);xq.exports={convertDelete:Wae};function Qae(e){return`${e.deleted_hashes.length} ${Kae}${e.deleted_hashes.length===1?"":"s"} ${Yae}`}o(Qae,"generateReturnMessage");async function Jae({statement:e,hdb_user:t}){let r=await jae(e.table.databaseid,e.table.tableid);xN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=xN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=kae.parse(a).statements[0],l={operation:$ae.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await zae(c);let u=await qae.deleteRecords(l);return xN.isEmptyOrZeroLength(u.message)&&(u.message=Qae(u)),delete u.txn_time,u}catch(u){throw Gae.error(u),u.hdb_code?u.message:u}}o(Jae,"convertDelete")});var Cl=v((Vve,Gq)=>{"use strict";var $ve=mn(),$p=z(),{validateBySchema:Fq}=dt(),$o=require("joi"),Xae=Vi(),TS=ce(),{handleHDBError:yS,hdbErrors:Zae,ClientError:kq}=Ee(),{HDB_ERROR_MSGS:RS,HTTP_STATUS_CODES:FN}=Zae,Hq=fe();Hq.initSync();var{getDatabases:kN}=(Ne(),M(ft)),ece=require("fs-extra"),tce=(H(),M(W));Gq.exports={describeAll:rce,describeTable:bS,describeSchema:nce};async function rce(e={}){try{let t=TS.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=kN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await bS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await bS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){$p.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],a[l[m].schema]&&delete a[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],a[l[m].schema]&&delete a[l[m].schema]);for(let m in a)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return $p.error("Got an error in describeAll"),$p.error(t),yS(new Error,RS.DESCRIBE_ALL_ERR)}}o(rce,"describeAll");async function bS(e,t){TS.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=Fq(e,$o.object({database:$o.string(),table:$o.string().required(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(i)throw new kq(i.message);let c=kN()[r];if(!c)throw yS(new Error,RS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let l=c[n];if(!l)throw yS(new Error,RS.TABLE_NOT_FOUND(e.schema,e.table),FN.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await ece.stat(l.primaryStore.env.path)).size}catch(p){$p.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),Hq.get(tce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Xae.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){$p.warn(`unable to stat table dbi due to ${p}`)}return m}o(bS,"descTable");async function nce(e){TS.transformReq(e);let t=Fq(e,$o.object({database:$o.string(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(t)throw new kq(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=kN()[n];if(!i)throw yS(new Error,RS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),TS.isEmpty(l)||l.describe){let u=await bS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(nce,"describeSchema")});var Yq=v((Yve,Kq)=>{"use strict";var sce=Cl(),{hdbErrors:qq}=Ee(),{getDatabases:$q}=(Ne(),M(ft));Kq.exports={checkSchemaExists:Vq,checkSchemaTableExists:ice,schemaDescribe:sce};async function Vq(e){if(!$q()[e])return qq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Vq,"checkSchemaExists");async function ice(e,t){let r=await Vq(e);if(r)return r;if(!$q()[e][t])return qq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ice,"checkSchemaTableExists")});var VN=v((Jve,s$)=>{"use strict";var{decode:oce}=require("msgpackr"),{isMainThread:zve,parentPort:jve,threadId:Qve}=require("worker_threads"),wS=rr(),bd=At(),qN=(H(),M(W)),En=z(),GN=fe(),ace=(H(),M(W)),{onMessageByType:cce}=rt(),Qq=Vi(),{recordAction:Wq,recordActionBinary:lce}=(Jn(),M(q_)),{publishToStream:uce}=wS,{ConsumerEvents:zq}=require("nats"),dce=mn(),{promisify:fce}=require("util"),{decodeBlobsWithWrites:mce}=(Is(),M(tA)),Jq=fce(setTimeout),NS=1e4,CS,IS,pce,hce,Xq,Vp=new Map,Ad=new Map;s$.exports={initialize:Zq,ingestConsumer:$N,setSubscription:Ece,setIgnoreOrigin:Sce,getDatabaseSubscriptions:gce,updateConsumer:e$};async function Zq(){cce(qN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await e$(n)}),Xq=!0,En.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await wS.getNATSReferences();CS=e,IS=e.info.server_name,pce=t,hce=r}o(Zq,"initialize");async function e$(e){if(e.status==="start"){let{js:t,jsm:r}=await t$(e.node_domain_name);$N(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Vp.get(e.stream_name+e.node_domain_name);t&&(En.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Vp.set(e.stream_name+e.node_domain_name,"close")),Ad.get(e.node_domain_name)==="failed"&&Ad.set(e.node_domain_name,"close")}}o(e$,"updateConsumer");var OS=new Map;function Ece(e,t,r){let n=OS.get(e);n||OS.set(e,n=new Map),n.set(t,r),Xq||Zq().then(_ce)}o(Ece,"setSubscription");async function _ce(){let e=await dce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+bd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await t$(r),!n))break;let{schema:a,table:c}=i,l=Qq.createNatsTableStreamName(a,c);$N(l,n,s,r)}}}o(_ce,"accessConsumers");async function t$(e){let t,r,n=1;for(;!r;)try{t=await CS.jetstream({domain:e}),r=await CS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ad.get(e)==="close")break;Ad.set(e,"failed"),n%10===1&&En.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<NS?n++*100:NS;await Jq(i)}return{js:t,jsm:r}}o(t$,"connectToRemoteJS");function gce(){return OS}o(gce,"getDatabaseSubscriptions");var r$;function Sce(e){r$=e}o(Sce,"setIgnoreOrigin");var n$=100,jq=new Array(n$),AS=0;async function $N(e,t,r,n){let{connection:s}=await wS.getNATSReferences();CS=s,IS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,IS),En.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Ad.get(n)==="close")break;a%10===1&&En.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(En.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await wS.createConsumer(r,e,IS,new Date(Date.now()).toISOString()));let d=a++*100<NS?a++*100:NS;await Jq(d)}let c=!1,l;for(;!c;){if(Vp.get(e+n)==="close"||Ad.get(n)==="close"){Vp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:GN.get(qN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Vp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===zq.ConsumerDeleted&&(await l.close(),c=!0),d.type===zq.HeartbeatsMissed){let f=d.data;En.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(En.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await jq[AS],jq[AS]=Tce(d).catch(f=>{En.error(f)}),++AS>=n$&&(AS=0)}catch(d){d.message==="consumer deleted"?(En.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):En.error("Error consuming clustering ingest, restarting consumer",d)}}}o($N,"ingestConsumer");async function Tce(e){let t;await mce(()=>{t=oce(e.data)}),Wq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),En.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=GN.get(qN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(bd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!r$),lce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(bd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;En.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),En.trace(`messageProcessor nats msg id: ${e.headers.get(bd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:b,node_name:S}=m||{},R=OS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:HN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:b,nodeName:S});else{let O=d.map((x,j)=>({type:HN(a),value:x,expiresAt:p,id:f?.[j],table:u}));for(;l;)O.push({type:HN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:b,nodeName:S})}GN.get(ace.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&uce(e.subject.split(".").slice(0,-1).join("."),Qq.createNatsTableStreamName(c,u),e.headers,e.data),await E;let L=Date.now()-g;g&&Wq(L,"replication-latency",e.subject,a,"ingest")}catch(a){En.error(a)}e.ack()}o(Tce,"messageProcessor");function HN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(HN,"convertOperation")});var rr=v((sUe,y$)=>{"use strict";var qr=fe();qr.initSync();var yce=require("fs-extra"),Rce=require("semver"),Wp=require("path"),{monotonicFactory:bce}=require("ulidx"),o$=bce(),Ace=require("util"),a$=require("child_process"),Ice=Ace.promisify(a$.exec),wce=a$.spawn,Xr=At(),et=(H(),M(W)),{packageJson:Nce,PACKAGE_ROOT:Cce}=Rt(),PS=ce(),pi=z(),LS=Vi(),Oce=SS(),Kp=pt(),{broadcast:Pce,onMessageByType:Lce,getWorkerIndex:Dce}=rt(),{isMainThread:c$}=require("worker_threads"),{Encoder:Mce,decode:zN}=require("msgpackr"),l$=new Mce,{isEmpty:Dl}=PS,u$=Fn(),Zve=48*36e11;c$&&Lce(et.ITC_EVENT_TYPES.RESTART,()=>{_n=void 0,Ll=void 0});var{connect:vce,StorageType:Uce,RetentionPolicy:xce,AckPolicy:jN,DeliverPolicy:QN,DiscardPolicy:Bce,NatsConnection:eUe,JetStreamManager:tUe,JetStreamClient:rUe,StringCodec:nUe,JSONCodec:Fce,createInbox:JN,headers:kce,ErrorCode:i$}=require("nats"),{recordAction:Hce}=(Jn(),M(q_)),{encodeBlobsAsBuffers:Gce}=(Is(),M(tA)),d$=Fce(),qce="clustering",$ce=Nce.engines[Xr.NATS_SERVER_NAME],Vce=Wp.join(Cce,"dependencies"),WN=Wp.join(Vce,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),KN,YN,Yp,Ol,Pl;y$.exports={runCommand:f$,checkNATSServerInstalled:Kce,createConnection:XN,getConnection:zp,getJetStreamManager:jp,getJetStream:p$,getNATSReferences:Qi,getServerList:Wce,createLocalStream:ZN,listStreams:h$,deleteLocalStream:zce,getServerConfig:Id,listRemoteStreams:jce,viewStream:Qce,viewStreamIterator:Jce,publishToStream:Xce,request:tle,reloadNATS:eC,reloadNATSHub:rle,reloadNATSLeaf:nle,extractServerName:ele,requestErrorHandler:sle,createLocalTableStream:S$,createTableStreams:ale,purgeTableStream:T$,purgeSchemaTableStreams:cle,getStreamInfo:lle,updateLocalStreams:dle,closeConnection:Yce,getJsmServerName:DS,addNatsMsgHeader:E$,clearClientCache:m$,updateRemoteConsumer:ile,createConsumer:_$,updateConsumerIterator:ole};async function f$(e,t=void 0){let{stdout:r,stderr:n}=await Ice(e,{cwd:t});if(n)throw new Error(n.replace(`
16
16
  `,""));return r.replace(`
17
- `,"")}o(m$,"runCommand");async function Yce(){try{await Rce.access(WN)}catch{return!1}let e=await m$(`${WN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return bce.eq(t,Vce)}o(Yce,"checkNATSServerInstalled");async function XN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await d$.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}pi.trace("create nats connection called");let i=await Uce({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),pi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&pi.error("Error with Nats client connection, connection closed",a),i===_n&&p$()}),i}o(XN,"createConnection");function p$(){_n=void 0,Ol=void 0,Pl=void 0,Ll=void 0}o(p$,"clearClientCache");async function Wce(){_n&&(await _n.drain(),_n=void 0,Ol=void 0,Pl=void 0,Ll=void 0)}o(Wce,"closeConnection");var _n,Ll;async function zp(){return Ll||(Ll=XN(qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_n=await Ll),_n||Ll}o(zp,"getConnection");async function jp(){if(Ol)return Ol;Dl(_n)&&await zp();let{domain:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await _n.jetstreamManager({domain:e,timeout:6e4}),Ol}o(jp,"getJetStreamManager");async function h$(){if(Pl)return Pl;Dl(_n)&&await zp();let{domain:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=_n.jetstream({domain:e,timeout:6e4}),Pl}o(h$,"getJetStream");async function Qi(){let e=_n||await zp(),t=Ol||await jp(),r=Pl||await h$();return{connection:e,jsm:t,js:r}}o(Qi,"getNATSReferences");async function zce(e){let t=qr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await d$.getClusterUser(),s=await XN(t,r,n),i=JN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=f$.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 LS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(zce,"getServerList");async function ZN(e,t){let{jsm:r}=await Qi(),n=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:xce.File,retention:Bce.Limits,subjects:t,discard:Fce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(ZN,"createLocalStream");async function E$(){let{jsm:e}=await Qi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(E$,"listStreams");async function jce(e){let{jsm:t}=await Qi();await t.streams.delete(e)}o(jce,"deleteLocalStream");async function Qce(e){let{connection:t}=await Qi(),r=[],n=JN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(f$.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(Qce,"listRemoteStreams");async function Jce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Qi(),i=a$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=zN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Jce,"viewStream");async function*Xce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Qi(),i=a$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=zN(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Xce,"viewStreamIterator");async function Zce(e,t,r,n){pi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=_$(n,r);let{js:s}=await Qi(),i=await MS(),a=`${e}.${i}`,c=await qce(()=>n instanceof Uint8Array?n:u$.encode(n));try{pi.trace(`publishToStream publishing to subject: ${a}`),Gce(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 S$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){pi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await ZN(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Zce,"publishToStream");function _$(e,t){t===void 0&&(t=Hce());let r=qr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(_$,"addNatsMsgHeader");function Id(e){e=e.toLowerCase();let t=Wp.join(qr.get(et.CONFIG_PARAMS.ROOTPATH),$ce);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(YN)&&(YN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),YN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(KN)&&(KN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:Wp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),KN;pi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Id,"getServerConfig");async function g$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:jN.Explicit,durable_name:r,deliver_policy:QN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(g$,"createConsumer");async function ele(e,t,r){await e.consumers.delete(t,r)}o(ele,"removeConsumer");function tle(e){return e.split(".")[1]}o(tle,"extractServerName");async function rle(e,t,r=6e4,n=JN()){if(!LS.isObject(t))throw new Error("data param must be an object");let s=u$.encode(t),{connection:i}=await Qi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return zN(c.data)}o(rle,"request");function eC(e){return new Promise(async(t,r)=>{let n=Nce(WN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(eC,"reloadNATS");async function nle(){let{pid_file_path:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await eC(e)}o(nle,"reloadNATSHub");async function sle(){let{pid_file_path:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await eC(e)}o(sle,"reloadNATSLeaf");function ile(e,t,r){let n;switch(e.code){case o$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case o$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(ile,"requestErrorHandler");async function ole(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Qi(),{jsm:s}=await ple(r),{schema:i,table:a}=e,c=DS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await S$(async()=>{if(e.subscribe===!0)await g$(s,c,n.info.server_name,l);else try{await ele(s,c,n.info.server_name)}catch(u){pi.trace(u)}})}o(ole,"updateRemoteConsumer");async function ale(e,t,r,n){let s=DS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!l$&&Mce()<qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=VN();await c(a)}await Lce(a),n==="stop"&&await LS.asyncSetTimeout(1e3)}o(ale,"updateConsumerIterator");function S$(e){return Pce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(S$,"exclusiveLock");async function T$(e,t){let r=DS.createNatsTableStreamName(e,t),n=await MS(),s=dle(e,t,n);await ZN(r,[s])}o(T$,"createLocalTableStream");async function cle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await T$(n,s)}}o(cle,"createTableStreams");async function y$(e,t,r=void 0){if(qr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=DS.createNatsTableStreamName(e,t),{domain:s}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await zp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")pi.warn(n);else throw n}}o(y$,"purgeTableStream");async function lle(e,t){if(qr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await y$(e,t[r])}o(lle,"purgeSchemaTableStreams");async function ule(e){return(await jp()).streams.info(e)}o(ule,"getStreamInfo");function dle(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(dle,"createSubjectName");async function MS(){if(Yp)return Yp;if(Yp=(await jp())?.nc?.info?.server_name,Yp===void 0)throw new Error("Unable to get jetstream manager server name");return Yp}o(MS,"getJsmServerName");async function fle(){let e=await jp(),t=await MS(),r=await E$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=mle(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(".");pi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(fle,"updateLocalStreams");function mle(e){let{config:t}=e,r=!1,n=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(mle,"updateStreamLimits");async function ple(e){let t,r;try{t=await _n.jetstream({domain:e}),r=await _n.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw pi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(ple,"connectToRemoteJS")});function tC(e){let t=e.get(vS),r=t?(0,wd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=st(),s=!1;r.nodeName=st();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:Jp(e)??1,nodes:[]})})}i[n]=0,e.putSync(vS,(0,wd.pack)(r))}return r}function Qp(e){return tC(e).remoteNameToId}function A$(e,t){let r=tC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(vS,(0,wd.pack)(r)),s}function US(e,t){let r=tC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(vS,(0,wd.pack)(r))}return b$.trace?.("The remote node name map",e,n,s),s}var b$,wd,vS,rC=oe(()=>{b$=w(Qn());cs();wd=require("msgpackr"),vS=Symbol.for("remote-ids");o(tC,"getIdMappingRecord");o(Qp,"exportIdMapping");o(A$,"remoteToLocalNodeId");o(US,"getIdOfRemoteNode")});var P$={};be(P$,{commitsAwaitingReplication:()=>Cd,getHDBNodeTable:()=>Vt,getReplicationSharedStatus:()=>Od,iterateRoutes:()=>Zp,shouldReplicateToNode:()=>Xp,subscribeToNodeUpdates:()=>Pd});function Vt(){return I$||(I$=Je({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Od(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Pd(e){Vt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;O$.debug?.("adding node",n,"on node",st()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==st()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Vt().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 Xp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Vt().primaryStore.get(st())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function hle(){Pd(e=>{za({},(t,r)=>{let n=e.name,s=w$.get(n);if(s||w$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Od(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Cd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Zp(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=Nd.default.get(U.REPLICATION_SECUREPORT)??(!Nd.default.get(U.REPLICATION_PORT)&&Nd.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||Nd.default.get(U.REPLICATION_PORT)||Nd.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){N$.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 N$,C$,Nd,O$,I$,w$,Cd,Ld=oe(()=>{Ne();cs();mm();N$=require("worker_threads"),C$=w(Ee()),Nd=w(fe());H();O$=w(Qn());server.nodes=[];o(Vt,"getHDBNodeTable");o(Od,"getReplicationSharedStatus");o(Pd,"subscribeToNodeUpdates");o(Xp,"shouldReplicateToNode");w$=new Map;lU((e,t,r)=>{if(r>server.nodes.length)throw new C$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Cd||(Cd=new Map,hle());let n=Cd.get(e);return n||(n=[],Cd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(hle,"startSubscriptionToReplications");o(Zp,"iterateRoutes")});var U$={};be(U$,{connectedToNode:()=>Ml,disconnectedFromNode:()=>Md,ensureNode:()=>Vo,requestClusterStatus:()=>v$,startOnMainThread:()=>sC});async function sC(e){let t=0,r=ot();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){xS.set(i,Jp(l.auditStore));break}}}Xi.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=st();function c(){let l=Vt().primaryStore.get(a);if(l!==null){let u=e.url??ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Vo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Vt().primaryStore.get(a)&&c();for(let l of Zp(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)}Pd(s)});let n;function s(i,a=i?.name){let c=st()&&a===st()||ja()&&i?.url===ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Vt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(lt.trace("Setting up node replication for",i),!i){for(let[f,m]of Ji){let p;for(let[h,{worker:E,nodes:g}]of m){let b=g[0];if(b&&b.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),lt.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){Ji.get(f).iterator.remove(),Ji.delete(f);return}}return}if(c)return;if(!i.url){lt.info(`Node ${i.name} is missing url`);return}let l=Ji.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(lt.info(`Added node ${i.name} at ${i.url} for process ${st()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Dd)if(i.url===m.url){Dd.delete(f);break}Dd.set(i.name,i)}let u=ot();if(l||(l=new Map,Ji.set(i.url,l)),l.iterator=za(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(lt.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){lt.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];xS.has(f)&&(E.push({replicateByDefault:m,name:st(),startTime:xS.get(f),endTime:Date.now(),replicates:!0}),xS.delete(f));let g=Xp(i,f),b=Xi.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%b.length,h=b[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):eh(S)},Ele);else{lt.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Vt().primaryStore.get(st())?.replicates}),Vt().primaryStore.get(st())?.replicates||(n=!1,lt.info("Disabling replication, this node name",st(),Vt().primaryStore.get(st()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):FS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Md=o(function(i){try{lt.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Dd.keys()),c=a.sort(),l=c.indexOf(i.name||hi(i.url));if(l===-1){lt.warn("Disconnected node not found in node map",i.name,a);return}let u=Ji.get(i.url),d=u?.get(i.database);if(!d){lt.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!nC.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,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=Dd.get(h);u=Ji.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:b,nodes:S}=g,R=!1;for(let L of d.nodes){if(S.some(O=>O.name===L.name)){lt.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}L.endTime<Date.now()||(S.push(L),R=!0)}if(d.nodes=[d.nodes[0]],!R){lt.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}lt.info(`Failing over ${i.database} from ${i.name} to ${h}`),b?b.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):eh({database:i.database,nodes:S});return}lt.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){lt.error("Error failing over node",a)}},"disconnectedFromNode"),Ml=o(function(i){let a=Ji.get(i.url),c=a?.get(i.database);if(!c){lt.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){lt.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){lt.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of Ji.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,Xi.onMessageByType)("disconnected-from-node",Md),(0,Xi.onMessageByType)("connected-to-node",Ml),(0,Xi.onMessageByType)("request-cluster-status",v$)}function v$(e,t){let r=[];for(let[n,s]of Dd)try{let i=Ji.get(s.url);lt.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=D$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){lt.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Vo(e,t){let r=Vt();e=e??hi(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){lt.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(lt.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!nC.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=D$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}lt.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Xi,BS,lt,L$,nC,M$,D$,Ele,Ji,Md,Ml,Dd,xS,th=oe(()=>{Ne();Xi=w(rt());cs();BS=require("worker_threads");Ld();lt=w(z()),L$=w(require("lodash")),nC=w(fe());H();M$=require("crypto"),{cloneDeep:D$}=L$.default,Ele=200,Ji=new Map,Dd=new Map,xS=new Map;o(sC,"startOnMainThread");o(v$,"requestClusterStatus");BS.parentPort&&(Md=o(e=>{BS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ml=o(e=>{BS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Xi.onMessageByType)("subscribe-to-node",e=>{eh(e)}),(0,Xi.onMessageByType)("unsubscribe-from-node",e=>{FS(e)}));o(Vo,"ensureNode")});var us=v(Kt=>{"use strict";var mr=require("path"),{watch:_le}=require("chokidar"),kn=require("fs-extra"),vd=require("node-forge"),G$=require("net"),{generateKeyPair:iC,X509Certificate:Ko,createPrivateKey:q$}=require("crypto"),gle=require("util");iC=gle.promisify(iC);var wt=vd.pki,Ei=require("joi"),{v4:$$}=require("uuid"),{validateBySchema:lC}=dt(),{forComponent:Sle}=z(),ls=fe(),xs=(H(),M(W)),{CONFIG_PARAMS:Ul}=xs,_i=Tb(),{ClientError:Qa}=Ee(),HS=require("node:tls"),{relative:V$,join:Tle}=require("node:path"),{CERTIFICATE_VALUES:x$}=_i,yle=Hc(),oC=pt(),{table:Rle,getDatabases:ble,databases:kS}=(Ne(),M(ft)),{getJWTRSAKeys:B$}=(yd(),M(qp)),je=Sle("tls").conditional;Kt.generateKeys=fC;Kt.updateConfigCert=X$;Kt.createCsr=Ple;Kt.signCertificate=Lle;Kt.setCertTable=Ud;Kt.loadCertificates=j$;Kt.reviewSelfSignedCert=pC;Kt.createTLSSelector=eV;Kt.listCertificates=rV;Kt.addCertificate=Ble;Kt.removeCertificate=kle;Kt.createNatsCerts=vle;Kt.generateCertsKeys=Mle;Kt.getReplicationCert=nh;Kt.getReplicationCertAuth=Ole;Kt.renewSelfSigned=Ule;Kt.hostnamesFromCert=EC;Kt.getKey=Hle;Kt.getHostnamesFromCertificate=Gle;Kt.getPrimaryHostName=hC;var{urlToNodeName:K$,getThisNodeUrl:Ale,getThisNodeName:qS,clearThisNodeName:Ile}=(cs(),M(Yo)),{readFileSync:wle,statSync:Y$}=require("node:fs"),AUe=fe(),{getTicketKeys:Nle,onMessageFromWorkers:Cle}=rt(),{isMainThread:W$}=require("worker_threads"),{TLSSocket:z$,createSecureContext:IUe}=require("node:tls"),uC=3650,rh=["127.0.0.1","localhost","::1"],dC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Cle(async e=>{e.type===xs.ITC_EVENT_TYPES.RESTART&&(ls.initSync(!0),await pC())});var Zr;function Xa(){return Zr||(Zr=ble().system.hdb_certificate,Zr||(Zr=Rle({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(Xa,"getCertTable");async function nh(){let e=eV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(qS());if(!r)return;let n=new Ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(nh,"getReplicationCert");async function Ole(){Xa();let e=(await nh()).options.cert,r=new Ko(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(Ole,"getReplicationCertAuth");var F$,Ja=new Map;function j$(){if(F$)return;F$=!0;let e=[{configKey:Ul.TLS},{configKey:Ul.OPERATIONSAPI_TLS}];Xa();let t=mr.dirname(oC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=oC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&V$(Tle(t,"keys"),a);c&&k$(a,l=>{Ja.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&W$){let d;k$(u,f=>{if(x$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=Z$(u),h=new Ko(p),E;try{E=hC(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Ko(x$.cert)))return;let g=Zr.primaryStore.get(E),b=Y$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&b<=S){b<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(b)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:b,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(j$,"loadCertificates");function k$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&W$&&je.warn?.(`Reloading ${r}:`,i),n=c,t(Z$(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");kn.existsSync(e)?s(e,Y$(e)):je.error?.(`${r} file not found:`,e),_le(e,{persistent:!1}).on("change",s)}o(k$,"loadAndWatch");function aC(){let e=Ale();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return K$(e)}o(aC,"getHost");function GS(){let e=qS();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(GS,"getCommonName");async function Ple(){let e=await nh(),t=wt.certificateFromPem(e.options.cert),r=wt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=wt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:GS()},...dC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:Q$()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),vd.pki.certificationRequestToPem(n)}o(Ple,"createCsr");function Q$(){let e=rh.includes(GS())?rh:[...rh,GS()];return e.includes(aC())||e.push(aC()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>G$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(Q$,"certExtensions");async function Lle(e){let t={},r=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Xa();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Ja.has(d.private_key_name)){n=Ja.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await kn.exists(mr.join(r,d.private_key_name))){n=kn.readFile(mr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await cC();s=d.ca,n=d.private_key}n=wt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=wt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=wt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=vd.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()+uC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,vd.md.sha256.create()),t.certificate=wt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Lle,"signCertificate");async function Dle(e,t){await Ud({name:qS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Ud({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:wt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Dle,"createCertificateTable");async function Ud(e){let t;try{t=new Ko(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Xa(),await Zr.patch(e)}o(Ud,"setCertTable");async function fC(){let e=await iC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:wt.publicKeyFromPem(e.publicKey),privateKey:wt.privateKeyFromPem(e.privateKey)}}o(fC,"generateKeys");async function mC(e,t,r){let n=wt.createCertificate();if(!t){let a=await nh();t=wt.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()+uC);let i=[{name:"commonName",value:GS()},...dC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(Q$()),n.sign(e,vd.md.sha256.create()),wt.certificateToPem(n)}o(mC,"generateCertificates");async function cC(){let e=await rV(),t;for(let r of e){if(!r.is_authority)continue;let n=await tV(r.private_key_name);if(r.private_key_name&&n&&new Ko(r.certificate).checkPrivateKey(q$(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(cC,"getCertAuthority");async function J$(e,t,r=!0){let n=wt.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()+uC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ls.get(Ul.REPLICATION_HOSTNAME)??K$(ls.get(Ul.REPLICATION_URL))??$$().split("-")[0]}`},...dC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,vd.md.sha256.create());let a=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=mr.join(a,_i.PRIVATEKEY_PEM_NAME);return r&&await kn.writeFile(c,wt.privateKeyToPem(e)),n}o(J$,"generateCertAuthority");async function Mle(){let{privateKey:e,publicKey:t}=await fC(),r=await J$(e,t),n=await mC(e,t,r);await Dle(n,r),X$()}o(Mle,"generateCertsKeys");async function vle(){let e=await mC(wt.privateKeyFromPem(_i.CERTIFICATE_VALUES.key),void 0,wt.certificateFromPem(_i.CERTIFICATE_VALUES.cert)),t=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,_i.NATS_CERTIFICATE_PEM_NAME);await kn.exists(r)||await kn.writeFile(r,e);let n=mr.join(t,_i.NATS_CA_PEM_NAME);await kn.exists(n)||await kn.writeFile(n,_i.CERTIFICATE_VALUES.cert)}o(vle,"createNatsCerts");async function Ule(){Xa();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await pC()}o(Ule,"renewSelfSigned");async function pC(){Ile(),await j$(),Xa();let e=await cC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:wt.privateKeyFromPem(kn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ls.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=ls.get(Ul.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=V$(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await fC(),kn.existsSync(mr.join(a,_i.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${$$().split("-")[0]}.pem`),await kn.writeFile(mr.join(a,c),wt.privateKeyToPem(s)));let l=await J$(s,wt.setRsaPublicKey(s.n,s.e),!1);await Ud({name:l.subject.getField("CN").value,uses:["https"],certificate:wt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await nh()){let r=qS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await cC();let n=wt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await mC(wt.privateKeyFromPem(e.private_key),s,n);await Ud({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(pC,"reviewSelfSignedCert");function X$(){let e=yle(Object.keys(xs.CONFIG_PARAM_MAP),!0),t=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,_i.PRIVATEKEY_PEM_NAME),n=mr.join(t,_i.NATS_CERTIFICATE_PEM_NAME),s=mr.join(t,_i.NATS_CA_PEM_NAME),i=xs.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),oC.updateConfigValue(void 0,void 0,a,!1,!0)}o(X$,"updateConfigCert");function Z$(e){return e.startsWith("-----BEGIN")?e:wle(e,"utf8")}o(Z$,"readPEM");var H$=HS.createSecureContext;HS.createSecureContext=function(e){if(!e.cert||!e.key)return H$(e);let t={...e};delete t.key,delete t.cert;let r=H$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var xle=z$.prototype._init;z$.prototype._init=function(e,t){xle.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 eV(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),vl.clear();let d=0;if(kS===void 0){c();return}for await(let f of kS.system.hdb_certificate.search([])){let m=f.certificate,p=new Ko(m);f.is_authority&&(p.asString=m,vl.set(p.subject,m))}for await(let f of kS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await tV(f.private_key_name),E=f.certificate,g=new Ko(E);if(vl.has(g.issuer)&&(E+=`
18
- `+vl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let b={ciphers:f.ciphers,ticketKeys:Nle(),availableCAs:vl,ca:t&&Array.from(vl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(b.sessionIdContext=a.sessionIdContext);let S=HS.createSecureContext(b);S.name=f.name,S.options=b,S.quality=p,S.certificateAuthorities=Array.from(vl),S.certStart=E.toString().slice(0,100);let R=f.hostnames??EC(g);Array.isArray(R)||(R=[R]);let L;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===aC()&&(p+=2),G$.isIP(O)&&(L=!0);let x=r.get(O)?.quality??0;p>x&&r.set(O,S)}else je.error?.("No hostname found for certificate at",HS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),kS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(eV,"createTLSSelector");async function tV(e){let t=Ja.get(e);return!t&&e?await kn.readFile(mr.join(ls.get(Ul.ROOTPATH),xs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(tV,"getPrivateKeyByName");async function rV(){Xa();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(rV,"listCertificates");async function Ble(e){let t=lC(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 Qa(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[p,h]of Ja)!s&&!c&&a.checkPrivateKey(q$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Qa("A suitable private key was not found for this certificate");let d;if(!r){try{d=hC(a)}catch(p){je.error?.(p)}if(d==null)throw new Qa("Error extracting certificate host name, please provide a name parameter")}let f=Fle(r??d);s&&!c&&!l&&(await kn.writeFile(mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,f+".pem"),s),Ja.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 Ud(m),"Successfully added certificate: "+f}o(Ble,"addCertificate");function Fle(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Fle,"sanitizeName");async function kle(e){let t=lC(e,Ei.object({name:Ei.string().required()}));if(t)throw new Qa(t.message);let{name:r}=e;Xa();let n=await Zr.get(r);if(!n)throw new Qa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await kn.remove(mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(kle,"removeCertificate");function hC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||EC(e)[0]}o(hC,"getPrimaryHostName");function EC(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(EC,"hostnamesFromCert");async function Hle(e){if(e.bypass_auth!==!0)throw new Qa("Unauthorized","401");let t=lC(e,Ei.object({name:Ei.string().required()}));if(t)throw new Qa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await B$()).privateKey;if(r===".jwtPublic")return(await B$()).publicKey;if(Ja.get(r))return Ja.get(e.name);throw new Qa("Key not found")}o(Hle,"getKey");function Gle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Gle,"getHostnamesFromCertificate")});var wV={};be(wV,{CONFIRMATION_STATUS_POSITION:()=>bV,LATENCY_POSITION:()=>jS,NodeReplicationConnection:()=>Bd,OPERATION_REQUEST:()=>yC,RECEIVED_TIME_POSITION:()=>bC,RECEIVED_VERSION_POSITION:()=>RC,RECEIVING_STATUS_POSITION:()=>AC,RECEIVING_STATUS_RECEIVING:()=>IV,RECEIVING_STATUS_WAITING:()=>AV,SENDING_TIME_POSITION:()=>sh,createWebSocket:()=>QS,databaseSubscriptions:()=>ec,replicateOverWS:()=>ih,tableUpdateListeners:()=>wC});async function QS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=st(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!SC){let l=(0,gV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),SC=u.secureContexts}if(i=SC.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,TV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(zS?.caCount!==Wo.size&&(zS=SV.createSecureContext({...i.options,ca:[...Wo,...i.options.availableCAs.values()]}),zS.caCount=Wo.size),c.secureContext=zS),new hV.WebSocket(e,"harperdb-replication-v1",c)}function ih(e,t,r){let n=t.port||t.securePort,s=xl.pid%1e3+"-"+EV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ue.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||ec,f,m,p=!1,h=t.subscription;h?.then&&h.then(T=>{h=T,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&ot()[u],g,b=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,L,O,x,j,k,F,Q=6e4,Y,de=0,le=0,ee=0,Re=pV.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Ie=new Map,$e=[],ke=0,yr;if(t.url){let T=o(()=>{j&&le===e._socket?.bytesRead&&ee===e._socket?.bytesWritten?e.terminate():(j=performance.now(),e.ping(),le=e._socket?.bytesRead,ee=e._socket?.bytesWritten)},"sendPing");O=setInterval(T,fV).unref(),T()}else Jt();e._socket?.setMaxListeners(200);function Jt(){clearTimeout(x),le=e._socket?.bytesRead,ee=e._socket?.bytesWritten,x=setTimeout(()=>{le===e._socket?.bytesRead&&ee===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},fV*2).unref()}o(Jt,"resetPingTimer");function kt(){if(!(!g||!u))return m||(m=Od(f,u,g)),m}o(kt,"getSharedStatus"),u&&vc(u);let Xt,kf,Dc=[],Ht=[],Hf,Gf=[],kE=[],HE=[],sb=150,qf=25,Oe=0,GE=0,$f=!1,_o,Mr,Rr,Vf;e.on("message",ib);async function ib(T){if(r=await r,!r){ue.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Mc(T),e.off("message",ib),e.on("message",Mc)}o(ib,"onWSMessageWhenAuthorized");function Mc(T){de=performance.now();try{let A=T.dataView=new jc(T.buffer,T.byteOffset,T.byteLength);if(T[0]>127){let D=(0,it.decode)(T),[G,C,B]=D;switch(G){case sV:{if(C){if(g){if(g!==C){ue.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${C}, disconnecting`),e.send((0,it.encode)([xd])),Vr(1008,"Node name mismatch");return}}else if(g=C,t.connection?.tentativeNode){let ae=t.connection.tentativeNode;ae.name=g,t.connection.tentativeNode=null,Vo(g,ae)}if(t.connection&&(t.connection.nodeName=g),ue.debug?.(s,"received node name:",g,"db:",u??D[2]),!u)try{vc(u=D[2]),u==="system"&&(Xt=za(t,(ae,ie)=>{mu(ie)&&pu(ie)}),e.on("close",()=>{Xt?.remove()}))}catch(ae){ue.warn?.(s,"Error setting database",ae),e.send((0,it.encode)([xd])),Vr(1008,ae.message);return}Kf()}break}case uV:{ue.debug?.(s,"Received table definitions for",C.map(ae=>ae.table));for(let ae of C){let ie=D[2];ae.database=ie;let re;if(mu(ie)){if(u==="system")De[ie]?.[ae.table]||(re=y(ae,De[ie]?.[ae.table]));else{if(ie!=="data"&&!De[ie]){ue.warn?.("Database not found",ie);return}re=y(ae,De[ie]?.[ae.table])}f||(f=re?.auditStore),E||(E=ot()?.[ie])}}break}case xd:Vr();break;case yC:try{let ae=r?.replicates||r?.subscribers||r?.name;ue.debug?.("Received operation request",C,"from",g),server.operation(C,{user:r},!ae).then(ie=>{ue.debug?.("Requested request from finished",g,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=C.requestId,e.send((0,it.encode)([VS,ie]))},ie=>{ue.debug?.("Failed requested operation from",g,ie),e.send((0,it.encode)([VS,{requestId:C.requestId,error:_C(ie)}]))})}catch(ae){e.send((0,it.encode)([VS,{requestId:C.requestId,error:_C(ae)}]))}break;case VS:let{resolve:q,reject:te}=b.get(C.requestId);ue.debug?.("Received completed operation request",g,C),C.error?te(new Error(C.error)):q(C),b.delete(C.requestId);break;case gC:let X=D[3];if(!E){u?ue.error?.(s,"No database found for",u):ue.error?.(s,"Database name never received"),Vr();return}let $=E[X];$=y({table:X,database:u,attributes:C.attributes,schemaDefined:C.schemaDefined},$),Dc[B]={name:X,decoder:new it.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:C.typedStructs,structures:C.structures}),getEntry(ae){return $.primaryStore.getEntry(ae)},rootStore:$.primaryStore.rootStore};break;case iV:Vf=f?A$(C,f):new Map,Hf=D[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Hf}`);break;case oV:let Le=B;HE[Le]=C;break;case lV:kt()[bV]=C,ue.trace?.(s,"received and broadcasting committed update",C),kt().buffer.notify();break;case cV:R=C,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case KS:{let ae=D[1],{fileId:ie,size:re,finished:ne,error:_e}=ae,me=Ie.get(ie);ue.debug?.("Received blob",ie,"has stream",!!me,"connectedToBlob",!!me?.connectedToBlob,"length",D[2].length,"finished",ne),me||(me=new TC.PassThrough,me.expectedSize=re,Ie.set(ie,me)),me.lastChunk=Date.now();let he=D[2];Ge(he.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{ne?(_e?(me.on("error",()=>{}),me.destroy(new Error("Blob error: "+_e+" for record "+(me.recordId??"unknown")+" from "+remote_node_name))):me.end(he),me.connectedToBlob&&Ie.delete(ie)):me.write(he)}catch(Ve){ue.error?.(`Error receiving blob for ${me.recordId} from ${g} and streaming to storage`,Ve),Ie.delete(ie)}break}case aV:{let ae=C,ie;try{let re=D[3],ne=Ht[B]||(Ht[B]=E[D[4]]);if(!ne)return ue.warn?.("Unknown table id trying to handle record request",B);let _e=ne.primaryStore.getBinaryFast(Symbol.for("structures")),me=_e?.length??0;if(me>0&&me!==GE){GE=me;let Ve=(0,it.decode)(_e);e.send((0,it.encode)([gC,{typedStructs:Ve.typed,structures:Ve.named},B,ne.tableName]))}let he=ne.primaryStore.getBinaryFast(re);if(he){let Ve=ne.primaryStore.decoder.decode(he,{valueAsBuffer:!0}),we=at||{};we.version=(0,yV.getLastVersion)(),at&&at[Ou]&Pn&&(Ve=Buffer.from(Ve),wm(()=>ne.primaryStore.decoder.decode(he),Xe=>br(Xe,re),ne.primaryStore.rootStore)),ie=(0,it.encode)([$S,ae,{value:Ve,expiresAt:we.expiresAt,version:we.version,residencyId:we.residencyId,nodeId:we.nodeId,user:we.user}])}else ie=(0,it.encode)([$S,ae])}catch(re){ie=(0,it.encode)([$S,ae,{error:re.message}])}e.send(ie);break}case $S:{let{resolve:ae,reject:ie,tableId:re,key:ne}=b.get(D[1]),_e=D[2];if(_e?.error)ie(new Error(_e.error));else if(_e){let me;N_(()=>{let he=Dc[re].decoder.decode(_e.value);_e.value=he,_e.key=ne,ae(_e)||me&&setTimeout(()=>me.forEach(A_),6e4).unref()},f?.rootStore,he=>{let Ve=fu(he,ne);return me||(me=[]),me.push(Ve),Ve})}else ae();b.delete(D[1]);break}case nV:{Rr=C;let ae,ie,re=!1;if(h){if(u!==h.databaseName&&!h.then){ue.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",Rr),!h){let Te;h=new Promise(Rt=>{ue.debug?.("Waiting for subscription to database "+u),Te=Rt}),h.ready=Te,ec.set(u,h)}if(r.name)ie=Vt().subscribe(r.name),ie.then(async Te=>{ae=Te;for await(let Rt of ae){let Pt=Rt.value;if(!(Pt?.replicates===!0||Pt?.replicates?.receives||Pt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){re=!0,e.send((0,it.encode)([xd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Te=>{ue.error?.(s,"Error subscribing to HDB nodes",Te)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,it.encode)([xd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(ue.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Rr.length===0)return;let ne=Rr[0],_e=o(Te=>{if(Te&&(ne.replicateByDefault?!ne.tables.includes(Te.tableName):ne.tables.includes(Te.tableName)))return{table:Te}},"tableToTableEntry"),me={txnTime:0},he,Ve,we=1/0,Xe,vr=o((Te,Rt)=>{if(Te.type==="end_txn"){me.txnTime&&(a[i]!==66&&ue.error?.("Invalid encoding of message"),go(9),go(B_),K(Xe=Rt),Js()),i=c,me.txnTime=0;return}let Pt=Te.nodeId,Ur=Te.tableId,Lt=Ve[Ur];if(!Lt&&(Lt=Ve[Ur]=_e(h.tableById[Ur]),!Lt))return ue.debug?.("Not subscribed to table",Ur);let Rs=Lt.table,Dt=Rs.primaryStore,Xs=Dt.encoder;(Te.extendedType&W_||!Xs.typedStructs)&&(Xs._mergeStructures(Xs.getStructures()),Xs.typedStructs&&(Xs.lastTypedStructuresLength=Xs.typedStructs.length));let hu=he[Pt];if(!(hu&&hu.startTime<Rt&&(!hu.endTime||hu.endTime>Rt)))return WS&&ue.trace?.(s,"skipping replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he),HM();WS&&ue.trace?.(s,"sending replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he);let ob=Te.version;me.txnTime!==ob&&(me.txnTime&&(WS&&ue.trace?.(s,"new txn time, sending queued txn",me.txnTime),a[i]!==66&&ue.error?.("Invalid encoding of message"),Js()),me.txnTime=ob,i=c,K(ob));let Fc=Te.residencyId,ab=Ra(Fc,Rs),$E;if(ab&&!ab.includes(g)){let Zs=Ra(Te.previousResidencyId,Rs);if(Zs&&!Zs.includes(g)&&(Te.type==="put"||Te.type==="patch")||Rs.getResidencyById)return HM();let Yf=Te.recordId;ue.trace?.(s,"sending invalidation",Yf,g,"from",Pt);let Wf=0;Fc&&(Wf|=Qc),Te.previousResidencyId&&(Wf|=Jc);let ub,VE=null;for(let GM in Rs.indices){if(!VE){if(ub=Te.getValue(Dt,!0),!ub)break;VE={}}VE[GM]=ub[GM]}$E=Xc(Te.version,Ur,Yf,null,Pt,Te.user,Te.type==="put"||Te.type==="patch"?"invalidate":Te.type,Xs.encode(VE),Wf,Fc,Te.previousResidencyId,Te.expiresAt)}function HM(){return ue.trace?.(s,"skipping audit record",Te.recordId),k||(k=setTimeout(()=>{k=null,(Xe||0)+dV/2<we&&(WS&&ue.trace?.(s,"sending skipped sequence update",we),e.send((0,it.encode)([cV,we])))},dV).unref()),new Promise(setImmediate)}o(HM,"skipAuditRecord");let cb=Xs.typedStructs,lb=Xs.structures;if((cb?.length!=Lt.typed_length||lb?.length!=Lt.structure_length)&&(Lt.typed_length=cb?.length,Lt.structure_length=lb.length,ue.debug?.(s,"send table struct",Lt.typed_length,Lt.structure_length),Lt.sentName||(Lt.sentName=!0),e.send((0,it.encode)([gC,{typedStructs:cb,structures:lb,attributes:Rs.attributes,schemaDefined:Rs.schemaDefined},Ur,Lt.table.tableName]))),Fc&&!kE[Fc]&&(e.send((0,it.encode)([oV,ab,Fc])),kE[Fc]=!0),$E)go($E.length),Bc($E);else{let Zs=Te.encoded;Te.extendedType&Pn&&wm(()=>Te.getValue(Dt),Wf=>br(Wf,Te.recordId),Dt.rootStore);let Yf=Zs[0]===66?8:0;go(Zs.length-Yf),Bc(Zs,Yf),ue.trace?.("wrote record",Te.recordId,"length:",Zs.length)}return e._socket.writableNeedDrain?new Promise(Zs=>{ue.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Zs)}):ke>qf?new Promise(Zs=>{yr=Zs}):new Promise(setImmediate)},"sendAuditRecord"),Js=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ge(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new IC.EventEmitter,Mr.once("close",()=>{re=!0,ae?.end()});for(let{startTime:Te}of Rr)Te<we&&(we=Te);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Ve=h.tableById.map(_e),he=[];for(let{name:Rt,startTime:Pt,endTime:Ur}of Rr){let Lt=US(Rt,f);ue.debug?.("subscription to",Rt,"using local id",Lt,"starting",Pt),he[Lt]={startTime:Pt,endTime:Ur}}pu(u),Xt||(Xt=wl(Rt=>{Rt.databaseName===u&&pu(u)}),kf=vp(Rt=>{Rt===u&&(e.send((0,it.encode)([xd])),Vr())}),e.on("close",()=>{Xt?.remove(),kf?.remove()})),e.send((0,it.encode)([iV,Qp(h.auditStore),Rr.map(({name:Rt})=>Rt)]));let Te=!0;do{isFinite(we)||(ue.warn?.("Invalid sequence id "+we),Vr(1008,"Invalid sequence id"+we));let Rt;if(Te&&!re&&(Te=!1,we===0)){ue.info?.("Replicating all tables to",g);let Pt=we,Ur=JS(f);for(let Lt in E){if(!_e(Lt))continue;let Rs=E[Lt];for(let Dt of Rs.primaryStore.getRange({snapshot:!1,versions:!0})){if(re)return;if(Dt.localTime>=we){ue.trace?.(s,"Copying record from",u,Lt,Dt.key,Dt.localTime),Pt=Math.max(Dt.localTime,Pt),Rt=!0,kt()[sh]=1;let Xs=Xc(Dt.version,Rs.tableId,Dt.key,null,Ur,null,"put",wm(()=>Rs.primaryStore.encoder.encode(Dt.value),hu=>br(hu,Dt.key)),Dt.metadataFlags&-256,Dt.residencyId,null,Dt.expiresAt);await vr({recordId:Dt.key,tableId:Rs.tableId,type:"put",getValue(){return Dt.value},encoded:Xs,version:Dt.version,residencyId:Dt.residencyId,nodeId:Ur,extendedType:Dt.metadataFlags},Dt.localTime)}}}Rt&&vr({type:"end_txn"},we),kt()[sh]=0,we=Pt}for(let{key:Pt,value:Ur}of f.getRange({start:we||1,exclusiveStart:!0,snapshot:!1})){if(re)return;let Lt=vt(Ur);ue.debug?.("sending audit record",new Date(Pt)),kt()[sh]=Pt,we=Pt,await vr(Lt,Pt),Mr.startTime=Pt,Rt=!0}Rt&&vr({type:"end_txn"},we),kt()[sh]=0,await i0(f)}while(!re)}).catch(Te=>{ue.error?.(s,"Error handling subscription to node",Te),Vr(1008,"Error handling subscription to node")});break}}return}A.position=8;let I=!0,N,P;do{kt();let D=A.readInt();if(D===9&&A.getUint8(A.position)==B_){A.position++,R=P=A.readFloat64(),m[RC]=R,m[bC]=Date.now(),m[AC]=AV,ue.trace?.("received remote sequence update",R,u);break}let G=A.position,C=vt(T,G,G+D),B=Dc[C.tableId];B||ue.error?.(`No table found with an id of ${C.tableId}`);let q;C.residencyId&&(q=HE[C.residencyId],ue.trace?.(s,"received residency list",q,C.type,C.recordId));try{let te=C.recordId;N_(()=>{N={table:B.name,id:C.recordId,type:C.type,nodeId:Vf.get(C.nodeId),residencyList:q,timestamp:C.version,value:C.getValue(B),user:C.user,beginTxn:I,expiresAt:C.expiresAt}},f?.rootStore,X=>fu(X,te))}catch(te){throw te.message+="typed structures for current decoder"+JSON.stringify(B.decoder.typedStructs),te}I=!1,ue.trace?.(s,"received replication message",C.type,"id",N.id,"version",new Date(C.version),"nodeId",N.nodeId),m[RC]=C.version,m[bC]=Date.now(),m[AC]=IV,h.send(N),A.position=G+D}while(A.position<T.byteLength);Oe++,u!=="system"&&Ge(T.byteLength,"bytes-received",`${g}.${u}.${N?.table||"unknown_table"}`,"replication","ingest"),Oe>sb&&!$f&&($f=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(N){let D=Date.now()-N.timestamp;u!=="system"&&Ge(D,"replication-latency",g+"."+u+"."+N.table,N.type,"ingest")}Oe--,$f&&($f=!1,e.resume(),ue.debug?.(`Replication resuming ${g}`)),$e.length>0&&await Promise.all($e),ue.trace?.("All blobs finished"),!L&&P&&(ue.trace?.(s,"queuing confirmation of a commit at",P),setTimeout(()=>{e.send((0,it.encode)([lV,L])),ue.trace?.(s,"sent confirmation of a commit at",L),L=null},Vle)),L=P,ue.debug?.("last sequence committed",new Date(P),u)}})}catch(A){ue.error?.(s,"Error handling incoming replication message",A)}}o(Mc,"onWSMessage"),e.on("ping",Jt),e.on("pong",()=>{if(t.connection){let T=performance.now()-j;t.connection.latency=T,kt()&&(m[jS]=T),t.isSubscriptionConnection&&Ml({name:g,database:u,url:t.url,latency:T})}j=null}),e.on("close",(T,A)=>{clearInterval(O),clearTimeout(x),clearInterval(F),Mr&&Mr.emit("close"),_o&&_o.end();for(let[I,{reject:N}]of b)N(new Error(`Connection closed ${A?.toString()} ${T}`));ue.debug?.(s,"closed",T,A?.toString())});function Vr(T,A){try{e.isFinished=!0,ue.debug?.(s,"closing",g,u,T,A),e.close(T,A),t.connection?.emit("finished")}catch(I){ue.error?.(s,"Error closing connection",I)}}o(Vr,"close");let ya=new Set;async function br(T,A){let I=I_(T);if(ya.has(I)){ue.debug?.("Blob already being sent",I);return}ya.add(I);try{let N;ke++;for await(let P of T.stream())N&&(ue.debug?.("Sending blob chunk",I,"length",N.length),e.send((0,it.encode)([KS,{fileId:I,size:T.size},N]))),N=P,e._socket.writableNeedDrain&&(ue.debug?.("draining",I),await new Promise(D=>e._socket.once("drain",D)),ue.debug?.("drained",I)),Ge(P.length,"bytes-sent",`${g}.${u}`,"replication","blob");ue.debug?.("Sending final blob chunk",I,"length",N.length),e.send((0,it.encode)([KS,{fileId:I,size:T.size,finished:!0},N]))}catch(N){ue.warn?.("Error sending blob",N,"blob id",I,"for record",A),e.send((0,it.encode)([KS,{fileId:I,finished:!0,error:_C(N)},Buffer.alloc(0)]))}finally{ya.delete(I),ke--,ke<qf&&yr?.()}}o(br,"sendBlobs");function fu(T,A){let I=I_(T),N=Ie.get(I);ue.debug?.("Received transaction with blob",I,"has stream",!!N,"ended",!!N?.writableEnded),N?N.writableEnded&&Ie.delete(I):(N=new TC.PassThrough,Ie.set(I,N)),N.connectedToBlob=!0,N.lastChunk=Date.now(),N.recordId=A,T.size===void 0&&N.expectedSize&&(T.size=N.expectedSize);let P=N.blob??createBlob(N,T);N.blob=P;let D=Po(()=>Am(P).saving,h.auditStore?.rootStore);return D&&(D.blobId=I,$e.push(D),D.finally(()=>{ue.debug?.(`Finished receiving blob stream ${I}`),$e.splice($e.indexOf(D),1)})),P}o(fu,"receiveBlobs");function Kf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Kf)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let T=new Map;f||(f=h?.auditStore);try{for(let N of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let P of N.value.nodes||[])P.lastTxnTime>(T.get(P.id)??0)&&T.set(P.id,P.lastTxnTime)}catch(N){if(!N.message.includes("Can not re"))throw N}let A=t.connection?.nodeSubscriptions?.[0];S=[];let I=t.connection?.nodeSubscriptions.map((N,P)=>{let D=[],{replicateByDefault:G}=N;if(N.subscriptions){for(let te of N.subscriptions)if(te.subscribe&&(te.schema||te.database)===u){let X=te.table;E?.[X]?.replicate!==!1&&D.push(X)}G=!1}else for(let te in E)(G?E[te].replicate===!1:E[te].replicate)&&D.push(te);let C=f&&US(N.name,f),B=h?.dbisDB?.get([Symbol.for("seq"),C])??1,q=Math.max(B?.seqId??1,(typeof N.startTime=="string"?new Date(N.startTime).getTime():N.startTime)??1);if(ue.debug?.("Starting time recorded in db",N.name,C,u,B?.seqId,"start time:",q,new Date(q)),A!==N){let te=f&&US(A.name,f),X=h?.dbisDB?.get([Symbol.for("seq"),te])??1;for(let $ of X?.nodes||[])$.name===N.name&&(q=$.seqId,ue.debug?.("Using sequence id from proxy node",A.name,q))}if(C===void 0?ue.warn("Starting subscription request from node",N,"but no node id found"):S.push(C),T.get(C)>q&&(q=T.get(C),ue.debug?.("Updating start time from more recent txn recorded",A.name,q)),q===1&&YS)try{new URL(YS).hostname===N.name?(ue.warn?.(`Requesting full copy of database ${u} from ${YS}`),q=0):q=Date.now()-6e4}catch(te){ue.error?.("Error parsing leader URL",YS,te)}return ue.trace?.(s,"defining subscription request",N.name,u,new Date(q)),{name:N.name,replicateByDefault:G,tables:D,startTime:q,endTime:N.endTime}});if(I)if(ue.debug?.(s,"sending subscription request",I,h?.dbisDB?.path),clearTimeout(Y),I.length>0)e.send((0,it.encode)([nV,I]));else{let N=o(()=>{let P=performance.now();Y=setTimeout(()=>{de<=P?Vr(1008,"Connection has no subscriptions and is no longer used"):N()},Q).unref()},"scheduleClose");N()}}o(Kf,"sendSubscriptionRequestUpdate");function Ra(T,A){if(!T)return;let I=Gf[T];return I||(I=A.getResidencyRecord(T),Gf[T]=I),I}o(Ra,"getResidence");function mu(T){return!(Za&&Za!="*"&&!Za[T]&&!Za.includes?.(T)&&!Za.some?.(A=>A.name===T))}o(mu,"checkDatabaseAccess");function vc(T){if(h=h||d.get(T),!mu(T))throw new Error(`Access to database "${T}" is not permitted`);h||ue.warn?.(`No database named "${T}" was declared and registered`),f=h?.auditStore,E||(E=ot()?.[T]);let A=st();if(A===g)throw A?new Error("Should not connect to self",A):new Error("Node name not defined");return Uc(A,T),!0}o(vc,"setDatabase");function Uc(T,A){let I=ot()?.[A],N=[];for(let P in I){let D=I[P];N.push({table:P,schemaDefined:D.schemaDefined,attributes:D.attributes.map(G=>({name:G.name,type:G.type,isPrimaryKey:G.isPrimaryKey}))})}ue.trace?.("Sending database info for node",T,"database name",A),e.send((0,it.encode)([sV,T,A,N]))}o(Uc,"sendNodeDBName");function pu(T){let A=ot()?.[T],I=[];for(let N in A){if(Rr&&!Rr.some(D=>D.replicateByDefault?!D.tables.includes(N):D.tables.includes(N)))continue;let P=A[N];I.push({table:N,schemaDefined:P.schemaDefined,attributes:P.attributes.map(D=>({name:D.name,type:D.type,isPrimaryKey:D.isPrimaryKey}))})}e.send((0,it.encode)([uV,I,T]))}o(pu,"sendDBSchema"),F=setInterval(()=>{for(let[T,A]of Ie)A.lastChunk+Re<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${T} for record ${A.recordId??"unknown"} from ${g}`),Ie.delete(T),A.end())},Re).unref();let qE=1,xc=[];return{end(){_o&&_o.end(),Mr&&Mr.emit("close")},getRecord(T){let A=qE++;return new Promise((I,N)=>{let P=[aV,A,T.table.tableId,T.id];xc[T.table.tableId]||(P.push(T.table.tableName),xc[T.table.tableId]=!0),e.send((0,it.encode)(P)),de=performance.now(),b.set(A,{tableId:T.table.tableId,key:T.id,resolve(D){let{table:G,entry:C}=T;if(I(D),D)return G._recordRelocate(C,D)},reject:N})})},sendOperation(T){let A=qE++;return T.requestId=A,e.send((0,it.encode)([yC,T])),new Promise((I,N)=>{b.set(A,{resolve:I,reject:N})})}};function go(T){_(5),T<128?a[c++]=T:T<16384?(l.setUint16(c,T|32768),c+=2):T<1056964608?(l.setUint32(c,T|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,T),c+=5)}function Bc(T,A=0,I=T.length){let N=I-A;_(N),T.copy(a,c,A,I),c+=N}function K(T){_(8),l.setFloat64(c,T),c+=8}function _(T){if(T+16>a.length-c){let A=Buffer.allocUnsafeSlow(c+T-i+65536>>10<<11);a.copy(A,0,i,c),c=c-i,i=0,a=A,l=new DataView(a.buffer,0,a.length)}}function y(T,A){let I=T.database??"data";A||(A={});let N=A.schemaDefined,P=!1,D=T.schemaDefined,G=A.attributes||[];for(let C=0;C<T.attributes?.length;C++){let B=T.attributes[C],q=G.find(te=>te.name===B.name);(!q||q.type!==B.type)&&(N?ue.error?.(`Schema for '${u}.${T.table}' is defined locally, but attribute '${B.name}: ${B.type}' from '${g}' does not match local attribute ${q?"'"+q.name+": "+q.type+"'":"which does not exist"}`):(P=!0,D||(B.indexed=!0),q?G[G.indexOf(q)]=B:G.push(B)))}return P?(ue.debug?.("(Re)creating",T),Je({table:T.table,database:T.database,schemaDefined:T.schemaDefined,attributes:G,...A})):A}}var pV,it,hV,EV,_V,IC,gV,SV,xl,TV,TC,yV,RV,qle,_C,ue,nV,sV,iV,xd,oV,gC,aV,$S,yC,VS,cV,lV,uV,KS,bV,RC,bC,sh,jS,AC,AV,IV,$le,YS,wC,ec,WS,dV,Vle,fV,SC,zS,mV,Bd,NC=oe(()=>{Ne();Ro();rC();$A();cs();pV=w(fe());H();Zc();it=require("msgpackr"),hV=require("ws"),EV=require("worker_threads"),_V=w(z());th();IC=require("events"),gV=w(us()),SV=w(require("node:tls"));Ld();xl=w(require("node:process")),TV=require("node:net");Jn();Is();TC=require("node:stream"),yV=require("lmdb"),RV=w(require("minimist")),{forComponent:qle,errorToString:_C}=_V.default,ue=qle("replication").conditional,nV=129,sV=140,iV=141,xd=142,oV=130,gC=132,aV=133,$S=134,yC=136,VS=137,cV=143,lV=144,uV=145,KS=146,bV=0,RC=1,bC=2,sh=3,jS=4,AC=5,AV=0,IV=1,$le=(0,RV.default)(xl.argv),YS=$le.HDB_LEADER_URL??xl.env.HDB_LEADER_URL,wC=new Map,ec=new Map,WS=!0,dV=300,Vle=2,fV=3e4;o(QS,"createWebSocket");mV=500,Bd=class extends IC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=mV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??hi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await QS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${xl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=mV,this.nodeSubscriptions&&Ml({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=ih(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Md({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ue.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(ih,"replicateOverWS")});function oh(e){return e===CV||e===Kle}function Yle(e){return e===OV||e===PV}function CC(e){return e===CV?OV:PV}function Wle(){if(NV)return;NV=!0;let e=Bl.CryptoEngine.prototype,t=Bl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return oh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return oh(s)?{name:CC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Yle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Bl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(oh(i)){let a=CC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(oh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ah.X509Certificate(Buffer.from(i)),l=new ah.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(oh(c)){let l=CC(c);try{let u=this.crypto?.subtle||this.subtle||Bl.getCrypto(!0)?.subtle||ah.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Bl,ah,CV,Kle,OV,PV,NV,LV=oe(()=>{Bl=w(require("pkijs")),ah=require("node:crypto"),CV="1.3.101.112",Kle="1.3.101.113",OV="Ed25519",PV="Ed448",NV=!1;o(oh,"isEd25519OrEd448");o(Yle,"isEdDSAAlgorithmName");o(CC,"getEdDSAAlgorithmName");o(Wle,"applyEd25519Patch");Wle()});function zle(){return XS||(XS=Je({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),XS.sourcedFrom(OC)),XS}function jle(e){if(Yt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return Yt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return Yt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Fd(e,t){Yt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=jle(t);if(r===!1)return Yt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Xle(e);return Yt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(Yt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(Yt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):Qle(n[0].cert,n[0].issuer,r)}async function Qle(e,t,r){Yt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=DV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=DV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,vV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;Yt.trace?.("OCSP cache key:",i);let c=await zle().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(Yt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return Yt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return Yt.error?.("OCSP verification error:",n),(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(Yt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Jle(e,t,r){Yt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,MV.getCertStatus)(e,{ca:t,timeout:r});return Yt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function DV(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
19
- `)}function Xle(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var MV,vV,UV,Yt,OC,ch,XS,ZS=oe(()=>{LV();MV=require("easy-ocsp"),vV=require("node:crypto"),UV=w(Qn());Ne();va();Yt=(0,UV.loggerWithTag)("cert-verification"),OC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){Yt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;Yt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ch.timeout,l=await Promise.race([Jle(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);Yt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ch.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return Yt.error?.("OCSP verification error:",c),(a?.failureMode??ch.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(Yt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ch={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(zle,"getCertificateCacheTable");o(jle,"getCertificateVerificationConfig");o(Fd,"verifyCertificate");o(Qle,"verifyOCSP");o(Jle,"performOCSPCheck");o(DV,"bufferToPem");o(Xle,"extractCertificateChain")});var Yo={};be(Yo,{clearThisNodeName:()=>aue,disableReplication:()=>rue,enabledDatabases:()=>Za,forEachReplicatedDatabase:()=>za,getThisNodeId:()=>JS,getThisNodeName:()=>st,getThisNodeUrl:()=>ja,hostnameToUrl:()=>nT,lastTimeInAuditStore:()=>Jp,monitorNodeCAs:()=>VV,replicateOperation:()=>lue,replicationCertificateAuthorities:()=>Wo,sendOperationToNode:()=>lh,servers:()=>eue,setReplicator:()=>YV,start:()=>tue,startOnMainThread:()=>sC,subscribeToNode:()=>eh,unsubscribeFromNode:()=>FS,urlToNodeName:()=>hi});function tue(e){if(!e.port&&!e.securePort&&(e.port=Bs.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Bs.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!st())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Zp(e))t.set(hi(s.url),s);nue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Me.ws(async(s,i,a,c)=>{if(Tt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),ih(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Tt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Me.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Tt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Tt.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=Vt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,qV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Fd(s.peerCertificate,e);if(!u.valid){Tt.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){Tt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else Tt.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:Tt.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(Wo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=rT.createSecureContext(u)}catch(l){Tt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}VV(()=>{for(let s of n)s()})}function VV(e){let t=0;Pd(r=>{r?.ca&&(Wo.add(r.ca),Wo.size!==t&&(t=Wo.size,e?.()))})}function rue(e=!0){$V=e}function nue(e){$V||(ot(),Za=e.databases,za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ec;for(let[s,i]of tT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];YV(r,s,e),wC.get(s)?.forEach(i=>i(s))}}))}function YV(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class KV extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ec,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Tt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new jn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Me.hostname)continue;let E=iue(h,KV.subscription,e);if(E?.isConnected){let g=Od(t.auditStore,e,h)[jS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new HV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Zle++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;Tt.warn("Error in load from node",Fl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function sue(e,t,r,n,s){let i=tT.get(e);i||tT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Bd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function iue(e,t,r){let n=xV.get(Fl);n||(n=new Map,xV.set(Fl,n));let s=n.get(r);if(s)return s;let i=Vt().primaryStore.get(e);return i?.url&&(s=new Bd(i.url,t,r,Fl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await QS(e.url,r),s=ih(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Tt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Tt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function eh(e){try{GV.isMainThread&&Tt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ec.get(e.database);if(!t){let n;t=new Promise(s=>{Tt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ec.set(e.database,t)}let r=sue(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=>Xp(n,e.database)),e.replicateByDefault)}catch(t){Tt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function FS({name:e,url:t,database:r}){Tt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Vt().primaryStore.getRange({})));let n=tT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function oue(){if(PC!==void 0)return PC;let e=Bs.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Bs.default.get(U.TLS_CERTIFICATE);if(e)return PC=new FV.X509Certificate((0,kV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function st(){return Fl||(Fl=Bs.default.get("replication_hostname")??hi(Bs.default.get("replication_url"))??oue()??BV("operationsapi_network_secureport")??BV("operationsapi_network_port")??"127.0.0.1")}function aue(){Fl=void 0}function BV(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function eT(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function JS(e){return Qp(e)?.[st()]}function ja(){let e=Bs.default.get("replication_url");return e||nT(st())}function nT(e){let t=eT("replication_port");if(t)return`ws://${e}:${t}`;if(t=eT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=eT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=eT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function hi(e){if(e)return new URL(e).hostname}function za(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return vp(n=>{r(n)}),wl((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];Tt.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=De[e];for(let r in t)if(t[r].replicate)return!0}function Jp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function lue(e){let t={message:""};if(e.replicated){e.replicated=!1,Tt.trace?.("Replicating operation",e.operation,"to nodes",Me.nodes.map(n=>n.name));let r=await Promise.allSettled(Me.nodes.map(n=>lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Me.nodes[s]?.name,i})}return t}var Bs,Tt,FV,kV,rT,HV,GV,qV,$V,Zle,eue,Wo,Za,tT,xV,PC,Fl,cs=oe(()=>{Ne();va();yu();NC();xr();Bs=w(fe()),Tt=w(z()),FV=require("crypto");ZS();kV=require("fs");th();Ld();H();rC();rT=w(require("node:tls")),HV=w(Ee()),GV=require("worker_threads"),qV=w(us()),Zle=1,eue=[],Wo=Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(rT.rootCertificates):new Set;o(tue,"start");o(VV,"monitorNodeCAs");o(rue,"disableReplication");o(nue,"assignReplicationSource");o(YV,"setReplicator");tT=new Map;o(sue,"getSubscriptionConnection");xV=new Map;o(iue,"getRetrievalConnectionByName");o(lh,"sendOperationToNode");o(eh,"subscribeToNode");o(FS,"unsubscribeFromNode");o(oue,"getCommonNameFromCert");o(st,"getThisNodeName");o(aue,"clearThisNodeName");Object.defineProperty(Me,"hostname",{get(){return st()}});o(BV,"getHostFromListeningPort");o(eT,"getPortFromListeningPort");o(JS,"getThisNodeId");Me.replication={getThisNodeId:JS,exportIdMapping:Qp};o(ja,"getThisNodeUrl");o(nT,"hostnameToUrl");o(hi,"urlToNodeName");o(za,"forEachReplicatedDatabase");o(cue,"hasExplicitlyReplicatedTable");o(Jp,"lastTimeInAuditStore");o(lue,"replicateOperation")});var cT=v((sxe,JV)=>{"use strict";var kd=Wq(),{validateBySchema:uh}=dt(),{commonValidators:Hd,schemaRegex:LC}=Fi(),pr=require("joi"),uue=z(),due=require("uuid").v4,oT=xo(),Gd=(H(),M(W)),fue=require("util"),tc=ss(),{handleHDBError:zo,hdbErrors:mue,ClientError:dh}=Ee(),{HDB_ERROR_MSGS:sT,HTTP_STATUS_CODES:jo}=mue,{SchemaEventMsg:aT}=ts(),WV=rr(),{getDatabases:pue}=(Ne(),M(ft)),{transformReq:qd}=ce(),{replicateOperation:zV}=(cs(),M(Yo)),iT=pr.string().min(1).max(Hd.schema_length.maximum).pattern(LC).messages({"string.pattern.base":"{:#label} "+Hd.schema_format.message}),hue=pr.string().min(1).max(Hd.schema_length.maximum).pattern(LC).messages({"string.pattern.base":"{:#label} "+Hd.schema_format.message}).required(),Eue=pr.string().min(1).max(Hd.schema_length.maximum).pattern(LC).messages({"string.pattern.base":"{:#label} "+Hd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();JV.exports={createSchema:_ue,createSchemaStructure:jV,createTable:gue,createTableStructure:QV,createAttribute:bue,dropSchema:Sue,dropTable:Tue,dropAttribute:yue,getBackup:Aue};async function _ue(e){let t=await jV(e);return oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema)),t}o(_ue,"createSchema");async function jV(e){let t=uh(e,pr.object({database:iT,schema:iT}));if(t)throw new dh(t.message);if(qd(e),!await kd.checkSchemaExists(e.schema))throw zo(new Error,sT.SCHEMA_EXISTS_ERR(e.schema),jo.BAD_REQUEST,Gd.LOG_LEVELS.ERROR,sT.SCHEMA_EXISTS_ERR(e.schema),!0);return await tc.createSchema(e),`database '${e.schema}' successfully created`}o(jV,"createSchemaStructure");async function gue(e){return qd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await QV(e)}o(gue,"createTable");async function QV(e){let t=uh(e,pr.object({database:iT,schema:iT,table:hue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Eue}));if(t)throw new dh(t.message);if(!await kd.checkSchemaTableExists(e.schema,e.table))throw zo(new Error,sT.TABLE_EXISTS_ERR(e.schema,e.table),jo.BAD_REQUEST,Gd.LOG_LEVELS.ERROR,sT.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 tc.createTable(n,e);else throw zo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",jo.BAD_REQUEST);else await tc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(QV,"createTableStructure");async function Sue(e){let t=uh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new dh(t.message);qd(e);let r=await kd.checkSchemaExists(e.schema);if(r)throw zo(new Error,r,jo.NOT_FOUND,Gd.LOG_LEVELS.ERROR,r,!0);let n=await kd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await tc.dropSchema(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema)),await WV.purgeSchemaTableStreams(e.schema,s);let i=await zV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Sue,"dropSchema");async function Tue(e){let t=uh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new dh(t.message);qd(e);let r=await kd.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Gd.LOG_LEVELS.ERROR,r,!0);await tc.dropTable(e),await WV.purgeTableStream(e.schema,e.table);let n=await zV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Tue,"dropTable");async function yue(e){let t=uh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new dh(t.message);qd(e);let r=await kd.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Gd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw zo(new Error,"You cannot drop a hash attribute",jo.BAD_REQUEST,void 0,void 0,!0);if(Gd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw zo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,jo.BAD_REQUEST,void 0,void 0,!0);try{return await tc.dropAttribute(e),Rue(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw uue.error(`Got an error deleting attribute ${fue.inspect(e)}.`),n}}o(yue,"dropAttribute");function Rue(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(Rue,"dropAttributeFromGlobal");async function bue(e){qd(e);let t=pue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw zo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,jo.BAD_REQUEST,void 0,void 0,!0);return await tc.createAttribute(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(bue,"createAttribute");function Aue(e){return tc.getBackup(e)}o(Aue,"getBackup")});var ZV=v((oxe,XV)=>{"use strict";var{OPERATIONS_ENUM:Iue}=(H(),M(W)),DC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Iue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};XV.exports=DC});var MC=v((lxe,s1)=>{"use strict";var wue=ss(),cxe=ZV(),lT=ce(),uT=(H(),M(W)),Nue=fe(),{handleHDBError:e1,hdbErrors:Cue}=Ee(),{HDB_ERROR_MSGS:t1,HTTP_STATUS_CODES:r1}=Cue,Oue=Object.values(uT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),n1="To use this operation audit log must be enabled in harperdb-config.yaml";s1.exports=Pue;async function Pue(e){if(lT.isEmpty(e.schema))throw new Error(t1.SCHEMA_REQUIRED_ERR);if(lT.isEmpty(e.table))throw new Error(t1.TABLE_REQUIRED_ERR);if(!Nue.get(uT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw e1(new Error,n1,r1.BAD_REQUEST,uT.LOG_LEVELS.ERROR,n1,!0);let t=lT.checkSchemaTableExist(e.schema,e.table);if(t)throw e1(new Error,t,r1.NOT_FOUND,uT.LOG_LEVELS.ERROR,t,!0);if(!lT.isEmpty(e.search_type)&&Oue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await wue.readAuditLog(e)}o(Pue,"readAuditLog")});var o1=v((dxe,i1)=>{"use strict";var{OPERATIONS_ENUM:Lue}=(H(),M(W)),vC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Lue.GET_BACKUP,this.schema=t,this.table=r}};i1.exports=vC});var l1=v((hxe,c1)=>{"use strict";var Due=ss(),mxe=o1(),UC=ce(),Mue=(H(),M(W)),pxe=fe(),{handleHDBError:vue,hdbErrors:Uue}=Ee(),{HDB_ERROR_MSGS:a1,HTTP_STATUS_CODES:xue}=Uue;c1.exports=Bue;async function Bue(e){if(UC.isEmpty(e.schema))throw new Error(a1.SCHEMA_REQUIRED_ERR);if(UC.isEmpty(e.table))throw new Error(a1.TABLE_REQUIRED_ERR);let t=UC.checkSchemaTableExist(e.schema,e.table);if(t)throw vue(new Error,t,xue.NOT_FOUND,Mue.LOG_LEVELS.ERROR,t,!0);return await Due.getBackup(readAuditLogObject)}o(Bue,"getBackup")});var m1=v((_xe,f1)=>{"use strict";var Fue=fe(),rc=require("joi"),kue=dt(),u1=require("moment"),Hue=require("fs-extra"),xC=require("path"),Gue=require("lodash"),fh=(H(),M(W)),{LOG_LEVELS:kl}=(H(),M(W)),que="YYYY-MM-DD hh:mm:ss",$ue=xC.resolve(__dirname,"../logs");f1.exports=function(e){return kue.validateBySchema(e,Vue)};var Vue=rc.object({from:rc.custom(d1),until:rc.custom(d1),level:rc.valid(kl.NOTIFY,kl.FATAL,kl.ERROR,kl.WARN,kl.INFO,kl.DEBUG,kl.TRACE),order:rc.valid("asc","desc"),limit:rc.number().min(1),start:rc.number().min(0),log_name:rc.custom(Kue)});function d1(e,t){if(u1(e,u1.ISO_8601).format(que)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(d1,"validateDatetime");function Kue(e,t){if(Gue.invert(fh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Fue.get(fh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?fh.LOG_NAMES.HDB:e,i=s===fh.LOG_NAMES.INSTALL?xC.join($ue,fh.LOG_NAMES.INSTALL):xC.join(n,s);return Hue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Kue,"validateReadLogPath")});var FC=v((Sxe,h1)=>{"use strict";var dT=(H(),M(W)),Yue=z(),Wue=fe(),zue=m1(),BC=require("path"),p1=require("fs-extra"),{once:jue}=require("events"),{handleHDBError:Que,hdbErrors:Jue}=Ee(),{PACKAGE_ROOT:Xue}=bt(),{replicateOperation:Zue}=(cs(),M(Yo)),ede=BC.join(Xue,"logs"),tde=1e3,rde=200;h1.exports=nde;async function nde(e){let t=zue(e);if(t)throw Que(t,t.message,Jue.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Zue(e),n=Wue.get(dT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?dT.LOG_NAMES.HDB:e.log_name,i=s===dT.LOG_NAMES.INSTALL?BC.join(ede,dT.LOG_NAMES.INSTALL):BC.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?tde:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(p1.statSync(i).size-(E+5)*rde,0));let b=p1.createReadStream(i,{start:g});b.on("error",k=>{Yue.error(k)});let S=0,R=[],L="",O;b.on("data",k=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;k=L+k;let Q=0,Y;for(;(Y=F.exec(k))&&!b.destroyed;){O&&(O.message=k.slice(Q,Y.index),x(O));let[de,le,ee]=Y,Re=ee.split("] ["),Ie=Re[0],$e=Re[1];Re.splice(0,2),O={timestamp:le,thread:Ie,level:$e,tags:Re,message:""},Q=Y.index+de.length}L=k.slice(Q)}),b.on("end",k=>{b.destroyed||O&&(O.message=L.trim(),x(O))}),b.resume();function x(k){let F,Q,Y;switch(!0){case(a&&l&&d):F=new Date(k.timestamp),Q=new Date(u),Y=new Date(f),k.level===c&&F>=Q&&F<=Y&&S<h?S++:k.level===c&&F>=Q&&F<=Y&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case(a&&l):F=new Date(k.timestamp),Q=new Date(u),k.level===c&&F>=Q&&S<h?S++:k.level===c&&F>=Q&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case(a&&d):F=new Date(k.timestamp),Y=new Date(f),k.level===c&&F<=Y&&S<h?S++:k.level===c&&F<=Y&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case(l&&d):F=new Date(k.timestamp),Q=new Date(u),Y=new Date(f),F>=Q&&F<=Y&&S<h?S++:F>=Q&&F<=Y&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case a:k.level===c&&S<h?S++:k.level===c&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case l:F=new Date(k.timestamp),Q=new Date(u),F>=Q&&S<h?S++:F>=Q&&S>=h&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case d:F=new Date(k.timestamp),Y=new Date(f),F<=Y&&S<h?S++:F<=Y&&S>=h&&(Zi(k,p,R),S++,S===E&&b.destroy());break;default:S<h?S++:(Zi(k,p,R),S++,S===E&&b.destroy())}}o(x,"onLogMessage"),await jue(b,"close");let j=await r;if(j.replicated){for(let k of R)k.node=server.hostname;for(let k of j.replicated){let F=k.node;if(k.status==="failed")Zi({timestamp:new Date().toISOString(),level:"error",node:F,message:`Error retrieving logs: ${k.reason}`},p,R);else for(let Q of k.results)Q.node=F,Zi(Q,p,R)}}return R}o(nde,"readLog");function Zi(e,t,r){t==="desc"?sde(e,r):t==="asc"?ide(e,r):r.push(e)}o(Zi,"pushLineToResult");function sde(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(sde,"insertDescending");function ide(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(ide,"insertAscending")});var fT=v((Ixe,S1)=>{"use strict";var kC=require("joi"),{string:$d,boolean:E1,date:ode}=kC.types(),ade=dt(),{validateSchemaExists:yxe,validateTableExists:Rxe,validateSchemaName:bxe}=Fi(),cde=(H(),M(W)),lde=It(),_1=fe();_1.initSync();var Axe=$d.invalid(_1.get(cde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(lde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),g1={operation:$d.valid("add_node","update_node","set_node_replication"),node_name:$d.optional(),subscriptions:kC.array().items({table:$d.optional(),schema:$d.optional(),database:$d.optional(),subscribe:E1.required(),publish:E1.required().custom(dde),start_time:ode.iso()})};function ude(e){return ade.validateBySchema(e,kC.object(g1))}o(ude,"addUpdateNodeValidator");function dde(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(dde,"checkForFalsy");S1.exports={addUpdateNodeValidator:ude,validationSchema:g1}});var Vd=v((Nxe,T1)=>{"use strict";var HC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},GC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};T1.exports={Node:HC,NodeSubscription:GC}});var R1=v((Oxe,y1)=>{"use strict";var fde=(H(),M(W)).OPERATIONS_ENUM,qC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=fde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};y1.exports=qC});var mh=v((Lxe,b1)=>{"use strict";var $C=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},VC=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)}};b1.exports={RemotePayloadObject:$C,RemotePayloadSubscription:VC}});var I1=v((Mxe,A1)=>{"use strict";var KC=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}};A1.exports=KC});var N1=v((kxe,w1)=>{"use strict";var mde=I1(),Uxe=Gt(),xxe=ht(),pde=z(),{getSchemaPath:Bxe,getTransactionAuditStorePath:Fxe}=gt(),{getDatabases:hde}=(Ne(),M(ft));w1.exports=Ede;async function Ede(e){let t=new mde;try{let r=hde()[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){pde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Ede,"lmdbGetTableSize")});var O1=v((Gxe,C1)=>{"use strict";var YC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};C1.exports=YC});var hh=v((Wxe,M1)=>{"use strict";var _de=require("fs-extra"),gde=require("path"),gn=require("systeminformation"),nc=z(),P1=rr(),$xe=It(),Kd=(H(),M(W)),Sde=N1(),Tde=Cl(),{getThreadInfo:L1}=rt(),ph=fe();ph.initSync();var yde=O1(),{openEnvironment:Vxe}=ht(),{getSchemaPath:Kxe}=gt(),{database:Yxe,databases:WC}=(Ne(),M(ft)),mT;M1.exports={getHDBProcessInfo:JC,getNetworkInfo:ZC,getDiskInfo:XC,getMemoryInfo:QC,getCPUInfo:jC,getTimeInfo:zC,getSystemInformation:eO,systemInformation:Rde,getTableSize:tO,getMetrics:rO};function zC(){return gn.time()}o(zC,"getTimeInfo");async function jC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await gn.cpu();d.cpu_speed=await gn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:b,...S}=await gn.currentLoad();return S.cpus=[],b.forEach(R=>{let{rawLoad:L,rawLoadIdle:O,rawLoadIrq:x,rawLoadNice:j,rawLoadSystem:k,rawLoadUser:F,...Q}=R;S.cpus.push(Q)}),d.current_load=S,d}catch(e){return nc.error(`error in getCPUInfo: ${e}`),{}}}o(jC,"getCPUInfo");async function QC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await gn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return nc.error(`error in getMemoryInfo: ${e}`),{}}}o(QC,"getMemoryInfo");async function JC(){let e={core:[],clustering:[]};try{let t=await gn.processes(),r;try{r=Number.parseInt(await _de.readFile(gde.join(ph.get(Kd.CONFIG_PARAMS.ROOTPATH),Kd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Kd.NODE_ERROR_CODES.ENOENT)nc.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 nc.error(`error in getHDBProcessInfo: ${t}`),e}}o(JC,"getHDBProcessInfo");async function XC(){let e={};try{if(!ph.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await gn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await gn.fsStats();return e.read_write=u,e.size=await gn.fsSize(),e}catch(t){return nc.error(`error in getDiskInfo: ${t}`),e}}o(XC,"getDiskInfo");async function ZC(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ph.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await gn.networkInterfaceDefault(),e.latency=await gn.inetChecksite("google.com"),(await gn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await gn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return nc.error(`error in getNetworkInfo: ${t}`),e}}o(ZC,"getNetworkInfo");async function eO(){if(mT!==void 0)return mT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await gn.osInfo();e=c;let l=await gn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,mT=e,mT}catch(t){return nc.error(`error in getSystemInformation: ${t}`),e}}o(eO,"getSystemInformation");async function tO(){let e=[],t=await Tde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Sde(n));return e}o(tO,"getTableSize");async function rO(){let e={};for(let t in WC){let r=e[t]={},n=r.tables={};for(let s in WC[t])try{let i=WC[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){nc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(rO,"getMetrics");async function D1(){if(ph.get(Kd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await P1.getNATSReferences(),t=await P1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(D1,"getNatsStreamInfo");async function Rde(e){let t=new yde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eO(),t.time=zC(),t.cpu=await jC(),t.memory=await QC(),t.disk=await XC(),t.network=await ZC(),t.harperdb_processes=await JC(),t.table_size=await tO(),t.metrics=await rO(),t.threads=await L1(),t.replication=await D1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eO();break;case"time":t.time=zC();break;case"cpu":t.cpu=await jC();break;case"memory":t.memory=await QC();break;case"disk":t.disk=await XC();break;case"network":t.network=await ZC();break;case"harperdb_processes":t.harperdb_processes=await JC();break;case"table_size":t.table_size=await tO();break;case"database_metrics":case"metrics":t.metrics=await rO();break;case"threads":t.threads=await L1();break;case"replication":t.replication=await D1();break;default:break}return t}o(Rde,"systemInformation")});var Qo=v((Xxe,B1)=>{"use strict";var bde=xn(),nO=ce(),Ade=require("util"),Hl=(H(),M(W)),v1=fe();v1.initSync();var Ide=MN(),U1=mn(),{Node:jxe,NodeSubscription:Qxe}=Vd(),wde=Yu(),Nde=R1(),{RemotePayloadObject:Cde,RemotePayloadSubscription:Ode}=mh(),{handleHDBError:Pde,hdbErrors:Lde}=Ee(),{HTTP_STATUS_CODES:Dde,HDB_ERROR_MSGS:Mde}=Lde,vde=ai(),Ude=hh(),{packageJson:xde}=bt(),{getDatabases:Bde}=(Ne(),M(ft)),Jxe=Ade.promisify(Ide.authorize),Fde=U1.searchByHash,kde=U1.searchByValue;B1.exports={isEmpty:Hde,getNodeRecord:Gde,upsertNodeRecord:qde,buildNodePayloads:$de,checkClusteringEnabled:Vde,getAllNodeRecords:Kde,getSystemInfo:Yde,reverseSubscription:x1};function Hde(e){return e==null}o(Hde,"isEmpty");async function Gde(e){let t=new wde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Fde(t)}o(Gde,"getNodeRecord");async function qde(e){let t=new Nde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return bde.upsert(t)}o(qde,"upsertNodeRecord");function x1(e){if(nO.isEmpty(e.subscribe)||nO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(x1,"reverseSubscription");function $de(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=nO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=x1(c),p=Bde()[l]?.[u],h=new Ode(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Cde(r,t,s,n)}o($de,"buildNodePayloads");function Vde(){if(!v1.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Pde(new Error,Mde.CLUSTERING_NOT_ENABLED,Dde.BAD_REQUEST,void 0,void 0,!0)}o(Vde,"checkClusteringEnabled");async function Kde(){let e=new vde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await kde(e))}o(Kde,"getAllNodeRecords");async function Yde(){let e=await Ude.getSystemInformation();return{hdb_version:xde.version,node_version:e.node_version,platform:e.platform}}o(Yde,"getSystemInfo")});var sO=v((e0e,K1)=>{"use strict";var pT=rr(),F1=ce(),k1=It(),H1=(H(),M(W)),hT=z(),G1=cT(),Wde=rp(),{RemotePayloadObject:zde}=mh(),{handleHDBError:q1,hdbErrors:jde}=Ee(),{HTTP_STATUS_CODES:$1}=jde,{NodeSubscription:V1}=Vd();K1.exports=Qde;async function Qde(e,t){let r;try{r=await pT.request(`${t}.${k1.REQUEST_SUFFIX}`,new zde(H1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),hT.trace("Response from remote describe all request:",r)}catch(a){hT.error(`addNode received error from describe all request to remote node: ${a}`);let c=pT.requestErrorHandler(a,"add_node",t);throw q1(new Error,c,$1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===k1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw q1(new Error,a,$1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===H1.SYSTEM_SCHEMA_NAME){await pT.createLocalTableStream(l,c);let h=new V1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=F1.doesSchemaExist(l),d=n[l]!==void 0,f=c?F1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(hT.trace(`addNode creating schema: ${l}`),await G1.createSchema({operation:"create_schema",schema:l})),!f&&m){hT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Wde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await G1.createTable(h)}await pT.createLocalTableStream(l,c);let p=new V1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Qde,"reviewSubscriptions")});var Yd={};be(Yd,{addNodeBack:()=>iO,removeNodeBack:()=>oO,setNode:()=>efe});async function efe(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=hi(t)):t=nT(r);let n=(0,W1.validateBySchema)(e,Zde);if(n)throw(0,Jo.handleHDBError)(n,n.message,Xde.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Jo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Vt(),E=await h.get(p);if(!E)throw new Jo.ClientError(p+" does not exist");try{await lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?st():p},void 0)}catch(g){ds.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Jo.ClientError("url required for this operation");let s=ja();if(s==null)throw new Jo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Fs.getReplicationCert)();let p=await(0,Fs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Fs.createCsr)(),ds.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ds.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ic.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ic.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ic.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(Y1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=Y1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ds.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(ds.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Fs.setCertTable)({name:Jde.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Fs.setCertTable)({name:st(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ic.get)(U.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ic.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Vo(st(),p)}await Vo(u?u.nodeName:f.name??hi(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 iO(e){ds.trace("addNodeBack received request:",e);let t=await(0,Fs.signCertificate)(e),r;e.csr?(r=t.signingCA,ds.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,ds.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,Fs.getReplicationCertAuth)();if(n.replicates){let i={url:ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ic.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ic.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Vo(st(),i)}return await Vo(e.hostname,n),t.nodeName=st(),t.usingCA=s?.certificate,ds.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function oO(e){ds.trace("removeNodeBack received request:",e),await Vt().delete(e.name)}function Y1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Fs,W1,sc,ic,ds,Jo,Jde,Xde,Zde,Wd=oe(()=>{Fs=w(us()),W1=w(dt()),sc=w(require("joi")),ic=w(fe());H();th();Ld();cs();ds=w(z()),Jo=w(Ee()),{pki:Jde}=require("node-forge"),{HTTP_STATUS_CODES:Xde}=Jo.hdbErrors,Zde=sc.default.object({hostname:sc.default.string(),verify_tls:sc.default.boolean(),replicates:sc.default.boolean(),subscriptions:sc.default.array(),revoked_certificates:sc.default.array(),shard:sc.default.number()});o(efe,"setNode");o(iO,"addNodeBack");o(oO,"removeNodeBack");o(Y1,"reverseSubscription")});var TT=v((l0e,j1)=>{"use strict";var{handleHDBError:ET,hdbErrors:tfe}=Ee(),{HTTP_STATUS_CODES:_T}=tfe,{addUpdateNodeValidator:rfe}=fT(),gT=z(),ST=(H(),M(W)),z1=It(),nfe=ce(),Eh=rr(),_h=Qo(),aO=fe(),sfe=sO(),{Node:ife,NodeSubscription:ofe}=Vd(),{broadcast:afe}=rt(),{setNode:cfe}=(Wd(),M(Yd)),a0e=fe(),c0e=(H(),M(W)),lfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",ufe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",dfe=aO.get(ST.CONFIG_PARAMS.CLUSTERING_NODENAME);j1.exports=ffe;async function ffe(e,t=!1){if(gT.trace("addNode called with:",e),aO.get(ST.CONFIG_PARAMS.REPLICATION_URL)||aO.get(ST.CONFIG_PARAMS.REPLICATION_HOSTNAME))return cfe(e);_h.checkClusteringEnabled();let r=rfe(e);if(r)throw ET(r,r.message,_T.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await _h.getNodeRecord(n);if(!nfe.isEmptyOrZeroLength(f))throw ET(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,_T.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await sfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=lfe,a;let c=_h.buildNodePayloads(s,dfe,ST.OPERATIONS_ENUM.ADD_NODE,await _h.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new ofe(p.schema,p.table,p.publish,p.subscribe))}gT.trace("addNode sending remote payload:",c);let u;try{u=await Eh.request(`${n}.${z1.REQUEST_SUFFIX}`,c)}catch(f){gT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Eh.updateRemoteConsumer(E,n)}let m=Eh.requestErrorHandler(f,"add_node",n);throw ET(new Error,m,_T.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===z1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw ET(new Error,f,_T.INTERNAL_SERVER_ERROR,"error",f)}gT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Eh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Eh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new ife(n,l,u.system_info);return await _h.upsertNodeRecord(d),afe({type:"nats_update"}),i.length>0?a.message=ufe:a.message=`Successfully added '${n}' to manifest`,a}o(ffe,"addNode")});var dO=v((f0e,J1)=>{"use strict";var{handleHDBError:cO,hdbErrors:mfe}=Ee(),{HTTP_STATUS_CODES:lO}=mfe,{addUpdateNodeValidator:pfe}=fT(),gh=z(),yT=(H(),M(W)),Q1=It(),d0e=ce(),Sh=rr(),Th=Qo(),uO=fe(),{cloneDeep:hfe}=require("lodash"),Efe=sO(),{Node:_fe,NodeSubscription:gfe}=Vd(),{broadcast:Sfe}=rt(),{setNode:Tfe}=(Wd(),M(Yd)),yfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Rfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",bfe=uO.get(yT.CONFIG_PARAMS.CLUSTERING_NODENAME);J1.exports=Afe;async function Afe(e){if(gh.trace("updateNode called with:",e),uO.get(yT.CONFIG_PARAMS.REPLICATION_URL)??uO.get(yT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Tfe(e);Th.checkClusteringEnabled();let t=pfe(e);if(t)throw cO(t,t.message,lO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Th.getNodeRecord(r);s.length>0&&(n=hfe(s));let{added:i,skipped:a}=await Efe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=yfe,c;let l=Th.buildNodePayloads(i,bfe,yT.OPERATIONS_ENUM.UPDATE_NODE,await Th.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];gh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}gh.trace("updateNode sending remote payload:",l);let u;try{u=await Sh.request(`${r}.${Q1.REQUEST_SUFFIX}`,l)}catch(d){gh.error(`updateNode received error from request: ${d}`);let f=Sh.requestErrorHandler(d,"update_node",r);throw cO(new Error,f,lO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===Q1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw cO(new Error,d,lO.INTERNAL_SERVER_ERROR,"error",d)}gh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Sh.updateRemoteConsumer(m,r),m.subscribe===!0?await Sh.updateConsumerIterator(m.schema,m.table,r,"start"):await Sh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new _fe(r,[],u.system_info)]),await Ife(n[0],i,u.system_info),a.length>0?c.message=Rfe:c.message=`Successfully updated '${r}'`,c}o(Afe,"updateNode");async function Ife(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 Th.upsertNodeRecord(n),Sfe({type:"nats_update"})}o(Ife,"updateNodeTable")});var rK=v((p0e,tK)=>{"use strict";var eK=require("joi"),{string:X1}=eK.types(),wfe=dt(),Z1=(H(),M(W)),Nfe=fe(),Cfe=It();tK.exports=Ofe;function Ofe(e){let t=X1.invalid(Nfe.get(Z1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Cfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=eK.object({operation:X1.valid(Z1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return wfe.validateBySchema(e,r)}o(Ofe,"removeNodeValidator")});var RT=v((E0e,aK)=>{"use strict";var{handleHDBError:nK,hdbErrors:Pfe}=Ee(),{HTTP_STATUS_CODES:sK}=Pfe,Lfe=rK(),yh=z(),iK=Qo(),Dfe=ce(),zd=(H(),M(W)),oK=It(),fO=rr(),mO=fe(),{RemotePayloadObject:Mfe}=mh(),{NodeSubscription:vfe}=Vd(),Ufe=tp(),xfe=gl(),{broadcast:Bfe}=rt(),{setNode:Ffe}=(Wd(),M(Yd)),kfe=mO.get(zd.CONFIG_PARAMS.CLUSTERING_NODENAME);aK.exports=Hfe;async function Hfe(e){if(yh.trace("removeNode called with:",e),mO.get(zd.CONFIG_PARAMS.REPLICATION_URL)??mO.get(zd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ffe(e);iK.checkClusteringEnabled();let t=Lfe(e);if(t)throw nK(t,t.message,sK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await iK.getNodeRecord(r);if(Dfe.isEmptyOrZeroLength(n))throw nK(new Error,`Node '${r}' was not found.`,sK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Mfe(zd.OPERATIONS_ENUM.REMOVE_NODE,kfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await fO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await fO.updateRemoteConsumer(new vfe(d.schema,d.table,!1,!1),r)}catch(f){yh.error(f)}}try{i=await fO.request(`${r}.${oK.REQUEST_SUFFIX}`,s),yh.trace("Remove node reply from remote node:",r,i)}catch(l){yh.error("removeNode received error from request:",l),a=!0}let c=new Ufe(zd.SYSTEM_SCHEMA_NAME,zd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xfe.deleteRecord(c),Bfe({type:"nats_update"}),i?.status===oK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(yh.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(Hfe,"removeNode")});var uK=v((g0e,lK)=>{"use strict";var cK=require("joi"),{string:Gfe,array:qfe}=cK.types(),$fe=dt(),Vfe=fT();lK.exports=Kfe;function Kfe(e){let t=cK.object({operation:Gfe.valid("configure_cluster").required(),connections:qfe.items(Vfe.validationSchema).required()});return $fe.validateBySchema(e,t)}o(Kfe,"configureClusterValidator")});var pO=v((T0e,hK)=>{"use strict";var dK=(H(),M(W)),bT=z(),Yfe=ce(),Wfe=fe(),zfe=RT(),jfe=TT(),Qfe=Qo(),Jfe=uK(),{handleHDBError:fK,hdbErrors:Xfe}=Ee(),{HTTP_STATUS_CODES:mK}=Xfe,Zfe="Configure cluster complete.",eme="Failed to configure the cluster. Check the logs for more details.",tme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";hK.exports=rme;async function rme(e){bT.trace("configure cluster called with:",e);let t=Jfe(e);if(t)throw fK(t,t.message,mK.BAD_REQUEST,void 0,void 0,!0);let r=await Qfe.getAllNodeRecords(),n=[];if(Wfe.get(dK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await pK(zfe,{operation:dK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}bT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await pK(jfe,f,f.node_name);s.push(m)}bT.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"&&(bT.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(Yfe.isEmptyOrZeroLength(a))return{message:Zfe,connections:c};if(l)return{message:tme,failed_nodes:a,connections:c};throw fK(new Error,eme,mK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(rme,"configureCluster");async function pK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(pK,"functionWrapper")});var SK=v((R0e,gK)=>{"use strict";var Rh=require("joi"),nme=dt(),{validateSchemaExists:EK,validateTableExists:sme,validateSchemaName:_K}=Fi(),ime=Rh.object({operation:Rh.string().valid("purge_stream"),schema:Rh.string().custom(EK).custom(_K).optional(),database:Rh.string().custom(EK).custom(_K).optional(),table:Rh.string().custom(sme).required()});function ome(e){return nme.validateBySchema(e,ime)}o(ome,"purgeStreamValidator");gK.exports=ome});var hO=v((A0e,TK)=>{"use strict";var{handleHDBError:ame,hdbErrors:cme}=Ee(),{HTTP_STATUS_CODES:lme}=cme,ume=SK(),dme=rr(),fme=Qo();TK.exports=mme;async function mme(e){e.schema=e.schema??e.database;let t=ume(e);if(t)throw ame(t,t.message,lme.BAD_REQUEST,void 0,void 0,!0);fme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await dme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(mme,"purgeStream")});var gO=v((w0e,NK)=>{"use strict";var _O=Qo(),pme=rr(),IT=fe(),jd=(H(),M(W)),Gl=It(),hme=ce(),EO=z(),{RemotePayloadObject:Eme}=mh(),{ErrorCode:yK}=require("nats"),{parentPort:RK}=require("worker_threads"),{onMessageByType:_me}=rt(),{getThisNodeName:gme}=(cs(),M(Yo)),{requestClusterStatus:Sme}=(th(),M(U$)),{getReplicationSharedStatus:Tme,getHDBNodeTable:yme}=(Ld(),M(P$)),{CONFIRMATION_STATUS_POSITION:Rme,RECEIVED_VERSION_POSITION:bme,RECEIVED_TIME_POSITION:Ame,SENDING_TIME_POSITION:Ime,RECEIVING_STATUS_POSITION:wme,RECEIVING_STATUS_RECEIVING:Nme}=(NC(),M(wV)),bK=IT.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED),AK=IT.get(jd.CONFIG_PARAMS.CLUSTERING_NODENAME);NK.exports={clusterStatus:Cme,buildNodeStatus:wK};var IK;_me("cluster-status",async e=>{IK(e)});async function Cme(){if(IT.get(jd.CONFIG_PARAMS.REPLICATION_URL)||IT.get(jd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(RK){RK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{IK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Tme(u,l,a);c.lastCommitConfirmed=AT(d[Rme]),c.lastReceivedRemoteTime=AT(d[bme]),c.lastReceivedLocalTime=AT(d[Ame]),c.sendingMessage=AT(d[Ime]),c.lastReceivedStatus=d[wme]===Nme?"Receiving":"Waiting"}}}else n=Sme();n.node_name=gme();let s=yme().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:AK,is_enabled:bK,connections:[]};if(!bK)return e;let t=await _O.getAllNodeRecords();if(hme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(wK(t[n],e.connections));return await Promise.allSettled(r),e}o(Cme,"clusterStatus");function AT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(AT,"asDate");async function wK(e,t){let r=e.name,n=new Eme(jd.OPERATIONS_ENUM.CLUSTER_STATUS,AK,void 0,await _O.getSystemInfo()),s,i,a=Gl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await pme.request(Gl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Gl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Gl.CLUSTER_STATUS_STATUSES.CLOSED,EO.error(`Error getting node status from ${r} `,s))}catch(l){EO.warn(`Error getting node status from ${r}`,l),l.code===yK.NoResponders?a=Gl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===yK.Timeout?a=Gl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Gl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ome(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!==jd.PRE_4_0_0_VERSION&&await _O.upsertNodeRecord(l)}catch(l){EO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(wK,"buildNodeStatus");function Ome(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(Ome,"NodeStatusObject")});var TO=v((C0e,CK)=>{"use strict";var{handleHDBError:Pme,hdbErrors:Lme}=Ee(),{HTTP_STATUS_CODES:Dme}=Lme,Mme=rr(),vme=Qo(),SO=ce(),wT=require("joi"),Ume=dt(),xme=2e3,Bme=wT.object({timeout:wT.number().min(1),connected_nodes:wT.boolean(),routes:wT.boolean()});CK.exports=Fme;async function Fme(e){vme.checkClusteringEnabled();let t=Ume.validateBySchema(e,Bme);if(t)throw Pme(t,t.message,Dme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||SO.autoCastBoolean(n),a=s===void 0||SO.autoCastBoolean(s),c={nodes:[]},l=await Mme.getServerList(r??xme),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:SO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Fme,"clusterNetwork")});var DK=v((P0e,LK)=>{"use strict";var yO=require("joi"),OK=dt(),{routeConstraints:PK}=Rb();LK.exports={setRoutesValidator:kme,deleteRoutesValidator:Hme};function kme(e){let t=yO.object({server:yO.valid("hub","leaf"),routes:PK.required()});return OK.validateBySchema(e,t)}o(kme,"setRoutesValidator");function Hme(e){let t=yO.object({routes:PK.required()});return OK.validateBySchema(e,t)}o(Hme,"deleteRoutesValidator")});var NT=v((D0e,kK)=>{"use strict";var Xo=pt(),RO=ce(),ks=(H(),M(W)),Qd=fe(),MK=DK(),{handleHDBError:vK,hdbErrors:Gme}=Ee(),{HTTP_STATUS_CODES:UK}=Gme,xK="cluster routes successfully set",BK="cluster routes successfully deleted";kK.exports={setRoutes:$me,getRoutes:Vme,deleteRoutes:Kme};function qme(e){let t=Xo.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=RO.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"?Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:xK,set:i,skipped:s}}o(qme,"setRoutesNats");function $me(e){let t=MK.setRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(Qd.get(ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return qme(e);let r=[],n=[],s=Qd.get(ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{FK(s,i)?n.push(i):(s.push(i),r.push(i))}),Xo.updateConfigValue(ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:xK,set:r,skipped:n}}o($me,"setRoutes");function FK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(FK,"existsInArray");function Vme(){if(Qd.get(ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Xo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Qd.get(ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Vme,"getRoutes");function Kme(e){let t=MK.deleteRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(Qd.get(ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Yme(e);let r=[],n=[],s=Qd.get(ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{FK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Xo.updateConfigValue(ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:BK,deleted:r,skipped:n}}o(Kme,"deleteRoutes");function Yme(e){let t=Xo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=RO.isEmptyOrZeroLength(r)?null:r,Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=RO.isEmptyOrZeroLength(n)?null:n,Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:BK,deleted:s,skipped:i}}o(Yme,"deleteRoutesNats")});var GK=v((v0e,HK)=>{"use strict";var bh=require("alasql"),ql=require("recursive-iterator"),gi=z(),Wme=ce(),Ah=(H(),M(W)),bO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,jme(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>Ah.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!Ah.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,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][Ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=zme(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=>!Ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new bh.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function zme(e){return e.filter(t=>t[Ah.PERMS_CRUD_ENUM.READ])}o(zme,"filterReadRestrictedAttrs");function jme(e,t,r,n,s){Qme(e,t,r,n,s)}o(jme,"interpretAST");function Ih(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(Ih,"addSchemaTableToMap");function Qme(e,t,r,n,s){if(!e){gi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof bh.yy.Insert?epe(e,t,r):e instanceof bh.yy.Select?Jme(e,t,r,n,s):e instanceof bh.yy.Update?Xme(e,t,r):e instanceof bh.yy.Delete?Zme(e,t,r):gi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Qme,"getRecordAttributesAST");function Jme(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(Wme.isEmptyOrZeroLength(i)){gi.error("No schema specified");return}e.from.forEach(c=>{Ih(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ih(c.table,t,r,n,s)});let a=new ql(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 ql(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 ql(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 ql(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(Jme,"getSelectAttributes");function Xme(e,t,r){if(!e){gi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ql(e.columns),s=e.table.databaseid;Ih(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&AO(e.table.tableid,s,i.columnid,t,r)}o(Xme,"getUpdateAttributes");function Zme(e,t,r){if(!e){gi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ql(e.where),s=e.table.databaseid;Ih(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&AO(e.table.tableid,s,i.columnid,t,r)}o(Zme,"getDeleteAttributes");function epe(e,t,r){if(!e){gi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ql(e.columns),s=e.into.databaseid;Ih(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&AO(e.into.tableid,s,i.columnid,t,r)}o(epe,"getInsertAttributes");function AO(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(AO,"pushAttribute");HK.exports=bO});var $K=v((x0e,qK)=>{"use strict";var tpe=It(),IO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+tpe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};qK.exports=IO});var YK=v((F0e,KK)=>{"use strict";var VK=It(),wO=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+VK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+VK.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"}};KK.exports=wO});var zK=v((H0e,WK)=>{"use strict";var NO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};WK.exports=NO});var QK=v((q0e,jK)=>{"use strict";var rpe=It(),CO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+rpe.SERVER_SUFFIX.ADMIN,this.password=r}};jK.exports=CO});var LT=v((V0e,ZK)=>{"use strict";var $l=require("path"),Vl=require("fs-extra"),npe=$K(),spe=YK(),ipe=zK(),ope=QK(),OO=Fn(),Xd=ce(),Hn=pt(),OT=(H(),M(W)),wh=It(),{CONFIG_PARAMS:nr}=OT,Zd=z(),Nh=fe(),JK=Vi(),PO=rr(),ape=us(),Jd="clustering",cpe=1e4,XK=50;ZK.exports={generateNatsConfig:upe,removeNatsConfig:dpe,getHubConfigPath:lpe};function lpe(){let e=Nh.get(nr.ROOTPATH);return $l.join(e,Jd,wh.NATS_CONFIG_FILES.HUB_SERVER)}o(lpe,"getHubConfigPath");async function upe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Nh.get(nr.ROOTPATH);Vl.ensureDirSync($l.join(r,"clustering","leaf")),Nh.initSync();let n=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Hn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Vl.exists(i)&&!await Vl.exists(!n)&&await ape.createNatsCerts();let a=$l.join(r,Jd,wh.PID_FILES.HUB),c=$l.join(r,Jd,wh.PID_FILES.LEAF),l=Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=$l.join(r,Jd,wh.NATS_CONFIG_FILES.HUB_SERVER),d=$l.join(r,Jd,wh.NATS_CONFIG_FILES.LEAF_SERVER),f=Hn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Hn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),p=Hn.getConfigFromFile(nr.CLUSTERING_NODENAME),h=Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await PO.checkNATSServerInstalled()||PT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await OO.listUsers(),g=Hn.getConfigFromFile(nr.CLUSTERING_USER),b=await OO.getClusterUser();(Xd.isEmpty(b)||b.active!==!0)&&PT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await CT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await CT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await CT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await CT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[Q,Y]of E.entries())Y.role?.role===OT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new ope(Y.username,JK.decrypt(Y.hash))),R.push(new ipe(Y.username,JK.decrypt(Y.hash))));let L=[],{hub_routes:O}=Hn.getClusteringRoutes();if(!Xd.isEmptyOrZeroLength(O))for(let Q of O)L.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let x=new npe(Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,S,R);n==null&&(delete x.tls.ca_file,delete x.leafnodes.tls.ca_file),t=Xd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vl.writeJson(u,x),Zd.trace(`Hub server config written to ${u}`));let j=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new spe(Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[j],[k],S,R,i,s,n,f);n==null&&delete F.tls.ca_file,(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vl.writeJson(d,F),Zd.trace(`Leaf server config written to ${d}`))}o(upe,"generateNatsConfig");async function CT(e){let t=Nh.get(e);return Xd.isEmpty(t)&&PT(`port undefined for '${e}'`),await Xd.isPortTaken(t)&&PT(`'${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(CT,"isPortAvailable");function PT(e){let t=`Error generating clustering config: ${e}`;Zd.error(t),console.error(t),process.exit(1)}o(PT,"generateNatsConfigError");async function dpe(e){let{port:t,config_file:r}=PO.getServerConfig(e),{username:n,decrypt_hash:s}=await OO.getClusterUser(),i=0,a=2e3;for(;i<XK;){try{let d=await PO.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>=XK)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(cpe),l=$l.join(Nh.get(nr.ROOTPATH),Jd,r);await Vl.writeFile(l,c),await Vl.remove(l),Zd.notify(e,"started.")}o(dpe,"removeNatsConfig")});var iY=v((Y0e,sY)=>{"use strict";var fs=fe(),Qe=(H(),M(W)),Ch=It(),Zo=require("path"),{PACKAGE_ROOT:MT}=bt(),eY=fe(),DT=ce(),ef="/dev/null",fpe=Zo.join(MT,"launchServiceScripts"),tY=Zo.join(MT,"utility/scripts"),mpe=Zo.join(tY,Qe.HDB_RESTART_SCRIPT),rY=Zo.resolve(MT,"dependencies",`${process.platform}-${process.arch}`,Ch.NATS_BINARY_NAME);function nY(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return DT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:MT}}o(nY,"generateMainServerConfig");var ppe=9930;function hpe(){fs.initSync(!0);let e=fs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Zo.join(e,"clustering",Ch.NATS_CONFIG_FILES.HUB_SERVER),r=Zo.join(fs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=eY.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ch.LOG_LEVEL_FLAGS[fs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==ppe?"-"+n:""),binFile:rY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ef,i.error_file=ef),i}o(hpe,"generateNatsHubServerConfig");var Epe=9940;function _pe(){fs.initSync(!0);let e=fs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Zo.join(e,"clustering",Ch.NATS_CONFIG_FILES.LEAF_SERVER),r=Zo.join(fs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=eY.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ch.LOG_LEVEL_FLAGS[fs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Epe?"-"+n:""),binFile:rY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ef,i.error_file=ef),i}o(_pe,"generateNatsLeafServerConfig");function gpe(){fs.initSync();let e=Zo.join(fs.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fpe,autorestart:!1};return fs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ef,t.error_file=ef),t}o(gpe,"generateClusteringUpgradeV4ServiceConfig");function Spe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return DT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:tY},script:mpe}}o(Spe,"generateRestart");function Tpe(){return{apps:[nY()]}}o(Tpe,"generateAllServiceConfigs");sY.exports={generateAllServiceConfigs:Tpe,generateMainServerConfig:nY,generateRestart:Spe,generateNatsHubServerConfig:hpe,generateNatsLeafServerConfig:_pe,generateClusteringUpgradeV4ServiceConfig:gpe}});var tf=v((j0e,fY)=>{"use strict";var Nr=(H(),M(W)),z0e=ce(),ta=LT(),vT=rr(),ea=It(),oc=iY(),DO=fe(),ac=z(),ype=Qo(),{startWorker:oY,onMessageFromWorkers:Rpe}=rt(),aY=require("fs"),bpe=require("node:path"),Ape=(H(),M(W)),{setTimeout:Ipe}=require("node:timers/promises"),{execFile:wpe,fork:Npe}=require("node:child_process");fY.exports={start:cc,restart:Ope,kill:Mpe,startAllServices:vpe,startService:lY,restartHdb:Ppe,startClusteringProcesses:uY,startClusteringThreads:dY,isHdbRestartRunning:Lpe,getHdbPid:Dpe,cleanupChildrenProcesses:Oh,reloadClustering:xpe,expectedRestartOfChildren:cY};Rpe(e=>{e.type==="restart"&&DO.initSync(!0)});var eo=[],Cpe=10,LO;function cc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?Npe(e.script,r,e):wpe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=eo.indexOf(n);c>-1&&eo.splice(c,1),!LO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Cpe&&(aY.existsSync(ta.getHubConfigPath())?cc(e):(await ta.generateNatsConfig(!0),cc(e),await new Promise(l=>setTimeout(l,3e3)),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=DO.get(Nr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&ea.LOG_LEVEL_HIERARCHY[c]>=ea.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ea.LOG_LEVELS.ERR||f===ea.LOG_LEVELS.WRN?ac.OUTPUTS.STDERR:ac.OUTPUTS.STDOUT;ac.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ea.LOG_LEVELS[p]}if(ea.LOG_LEVEL_HIERARCHY[c]>=ea.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ea.LOG_LEVELS.ERR||f===ea.LOG_LEVELS.WRN?ac.OUTPUTS.STDERR:ac.OUTPUTS.STDOUT;ac.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),eo.length===0&&(t||(process.on("exit",Oh),process.on("SIGINT",Oh),process.on("SIGQUIT",Oh),process.on("SIGTERM",Oh))),eo.push(n)}o(cc,"start");function Oh(e=!0){if(!LO&&(LO=!0,eo.length!==0))if(ac.info("Killing child processes..."),eo.map(t=>t.kill()),e)process.exit(0);else return Ipe(2e3)}o(Oh,"cleanupChildrenProcesses");function Ope(e){cY();for(let t of eo)t.name===e&&t.kill()}o(Ope,"restart");function cY(){for(let e of eo)e.config&&(e.config.restarts=0)}o(cY,"expectedRestartOfChildren");async function Ppe(){await cc(oc.generateRestart())}o(Ppe,"restartHdb");async function Lpe(){let e=await list();for(let t in e)if(e[t].name===Nr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Lpe,"isHdbRestartRunning");function Dpe(){let e=DO.getHdbBasePath();if(!e)return;let t=bpe.join(e,Ape.HDB_PID_FILE),r=Bpe(t);if(r&&Fpe(r))return r}o(Dpe,"getHdbPid");function Mpe(){for(let e of eo)e.kill();eo=[]}o(Mpe,"kill");async function vpe(){await uY(),await dY(),await cc(oc.generateAllServiceConfigs())}o(vpe,"startAllServices");async function lY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Nr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=oc.generateMainServerConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=oc.generateNatsIngestServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=oc.generateNatsReplyServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=oc.generateNatsHubServerConfig(),await cc(r,t),await ta.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=oc.generateNatsLeafServerConfig(),await cc(r,t),await ta.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=oc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}cc(r,t)}o(lY,"startService");var Upe;async function uY(e=!1){for(let t in Nr.CLUSTERING_PROCESSES){let r=Nr.CLUSTERING_PROCESSES[t];await lY(r,e)}}o(uY,"startClusteringProcesses");async function dY(){Upe=oY(Nr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Nr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await vT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await vT.updateLocalStreams();let e=await ype.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Nr.PRE_4_0_0_VERSION){ac.info("Starting clustering upgrade 4.0.0 process"),oY(Nr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(dY,"startClusteringThreads");async function xpe(){await ta.generateNatsConfig(!0),await vT.reloadNATSHub(),await vT.reloadNATSLeaf(),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(xpe,"reloadClustering");function Bpe(e){try{return Number.parseInt(aY.readFileSync(e,"utf8"),10)}catch{return null}}o(Bpe,"readPidFile");function Fpe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(Fpe,"isProcessRunning")});var UO={};be(UO,{compactOnStart:()=>kpe,copyDb:()=>gY});async function kpe(){lc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,MO.get)(U.ROOTPATH),t=new Map,r=ot();(0,vO.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,kc,n+"-copy.mdb"),c=0;try{c=await mY(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 gY(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)}}try{dd()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Kl.move)(i,s,{overwrite:!0}),await(0,Kl.remove)((0,UT.join)(e,kc,`${n}-copy.mdb-lock`));try{dd()}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,vO.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 dd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await mY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
17
+ `,"")}o(f$,"runCommand");async function Kce(){try{await yce.access(WN)}catch{return!1}let e=await f$(`${WN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Rce.eq(t,$ce)}o(Kce,"checkNATSServerInstalled");async function XN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await u$.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}pi.trace("create nats connection called");let i=await vce({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),pi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&pi.error("Error with Nats client connection, connection closed",a),i===_n&&m$()}),i}o(XN,"createConnection");function m$(){_n=void 0,Ol=void 0,Pl=void 0,Ll=void 0}o(m$,"clearClientCache");async function Yce(){_n&&(await _n.drain(),_n=void 0,Ol=void 0,Pl=void 0,Ll=void 0)}o(Yce,"closeConnection");var _n,Ll;async function zp(){return Ll||(Ll=XN(qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_n=await Ll),_n||Ll}o(zp,"getConnection");async function jp(){if(Ol)return Ol;Dl(_n)&&await zp();let{domain:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await _n.jetstreamManager({domain:e,timeout:6e4}),Ol}o(jp,"getJetStreamManager");async function p$(){if(Pl)return Pl;Dl(_n)&&await zp();let{domain:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=_n.jetstream({domain:e,timeout:6e4}),Pl}o(p$,"getJetStream");async function Qi(){let e=_n||await zp(),t=Ol||await jp(),r=Pl||await p$();return{connection:e,jsm:t,js:r}}o(Qi,"getNATSReferences");async function Wce(e){let t=qr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await u$.getClusterUser(),s=await XN(t,r,n),i=JN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=d$.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 PS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Wce,"getServerList");async function ZN(e,t){let{jsm:r}=await Qi(),n=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Uce.File,retention:xce.Limits,subjects:t,discard:Bce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(ZN,"createLocalStream");async function h$(){let{jsm:e}=await Qi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(h$,"listStreams");async function zce(e){let{jsm:t}=await Qi();await t.streams.delete(e)}o(zce,"deleteLocalStream");async function jce(e){let{connection:t}=await Qi(),r=[],n=JN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(d$.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(jce,"listRemoteStreams");async function Qce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Qi(),i=o$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=zN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Qce,"viewStream");async function*Jce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Qi(),i=o$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=zN(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Jce,"viewStreamIterator");async function Xce(e,t,r,n){pi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=E$(n,r);let{js:s}=await Qi(),i=await DS(),a=`${e}.${i}`,c=await Gce(()=>n instanceof Uint8Array?n:l$.encode(n));try{pi.trace(`publishToStream publishing to subject: ${a}`),Hce(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 g$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){pi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await ZN(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Xce,"publishToStream");function E$(e,t){t===void 0&&(t=kce());let r=qr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(E$,"addNatsMsgHeader");function Id(e){e=e.toLowerCase();let t=Wp.join(qr.get(et.CONFIG_PARAMS.ROOTPATH),qce);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(YN)&&(YN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),YN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(KN)&&(KN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:Wp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),KN;pi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Id,"getServerConfig");async function _$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:jN.Explicit,durable_name:r,deliver_policy:QN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(_$,"createConsumer");async function Zce(e,t,r){await e.consumers.delete(t,r)}o(Zce,"removeConsumer");function ele(e){return e.split(".")[1]}o(ele,"extractServerName");async function tle(e,t,r=6e4,n=JN()){if(!PS.isObject(t))throw new Error("data param must be an object");let s=l$.encode(t),{connection:i}=await Qi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return zN(c.data)}o(tle,"request");function eC(e){return new Promise(async(t,r)=>{let n=wce(WN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(eC,"reloadNATS");async function rle(){let{pid_file_path:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await eC(e)}o(rle,"reloadNATSHub");async function nle(){let{pid_file_path:e}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await eC(e)}o(nle,"reloadNATSLeaf");function sle(e,t,r){let n;switch(e.code){case i$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case i$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(sle,"requestErrorHandler");async function ile(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Qi(),{jsm:s}=await mle(r),{schema:i,table:a}=e,c=LS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await g$(async()=>{if(e.subscribe===!0)await _$(s,c,n.info.server_name,l);else try{await Zce(s,c,n.info.server_name)}catch(u){pi.trace(u)}})}o(ile,"updateRemoteConsumer");async function ole(e,t,r,n){let s=LS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!c$&&Dce()<qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=VN();await c(a)}await Pce(a),n==="stop"&&await PS.asyncSetTimeout(1e3)}o(ole,"updateConsumerIterator");function g$(e){return Oce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(g$,"exclusiveLock");async function S$(e,t){let r=LS.createNatsTableStreamName(e,t),n=await DS(),s=ule(e,t,n);await ZN(r,[s])}o(S$,"createLocalTableStream");async function ale(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(ale,"createTableStreams");async function T$(e,t,r=void 0){if(qr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=LS.createNatsTableStreamName(e,t),{domain:s}=Id(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await zp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")pi.warn(n);else throw n}}o(T$,"purgeTableStream");async function cle(e,t){if(qr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await T$(e,t[r])}o(cle,"purgeSchemaTableStreams");async function lle(e){return(await jp()).streams.info(e)}o(lle,"getStreamInfo");function ule(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(ule,"createSubjectName");async function DS(){if(Yp)return Yp;if(Yp=(await jp())?.nc?.info?.server_name,Yp===void 0)throw new Error("Unable to get jetstream manager server name");return Yp}o(DS,"getJsmServerName");async function dle(){let e=await jp(),t=await DS(),r=await h$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=fle(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(".");pi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(dle,"updateLocalStreams");function fle(e){let{config:t}=e,r=!1,n=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(fle,"updateStreamLimits");async function mle(e){let t,r;try{t=await _n.jetstream({domain:e}),r=await _n.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw pi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(mle,"connectToRemoteJS")});function tC(e){let t=e.get(MS),r=t?(0,wd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=st(),s=!1;r.nodeName=st();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:Jp(e)??1,nodes:[]})})}i[n]=0,e.putSync(MS,(0,wd.pack)(r))}return r}function Qp(e){return tC(e).remoteNameToId}function b$(e,t){let r=tC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(MS,(0,wd.pack)(r)),s}function vS(e,t){let r=tC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(MS,(0,wd.pack)(r))}return R$.trace?.("The remote node name map",e,n,s),s}var R$,wd,MS,rC=oe(()=>{R$=w(Qn());cs();wd=require("msgpackr"),MS=Symbol.for("remote-ids");o(tC,"getIdMappingRecord");o(Qp,"exportIdMapping");o(b$,"remoteToLocalNodeId");o(vS,"getIdOfRemoteNode")});var O$={};be(O$,{commitsAwaitingReplication:()=>Cd,getHDBNodeTable:()=>Vt,getReplicationSharedStatus:()=>Od,iterateRoutes:()=>Zp,shouldReplicateToNode:()=>Xp,subscribeToNodeUpdates:()=>Pd});function Vt(){return A$||(A$=Je({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Od(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Pd(e){Vt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;C$.debug?.("adding node",n,"on node",st()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==st()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Vt().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 Xp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Vt().primaryStore.get(st())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function ple(){Pd(e=>{za({},(t,r)=>{let n=e.name,s=I$.get(n);if(s||I$.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=Od(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Cd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Zp(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=Nd.default.get(U.REPLICATION_SECUREPORT)??(!Nd.default.get(U.REPLICATION_PORT)&&Nd.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||Nd.default.get(U.REPLICATION_PORT)||Nd.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){w$.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 w$,N$,Nd,C$,A$,I$,Cd,Ld=oe(()=>{Ne();cs();mm();w$=require("worker_threads"),N$=w(Ee()),Nd=w(fe());H();C$=w(Qn());server.nodes=[];o(Vt,"getHDBNodeTable");o(Od,"getReplicationSharedStatus");o(Pd,"subscribeToNodeUpdates");o(Xp,"shouldReplicateToNode");I$=new Map;cU((e,t,r)=>{if(r>server.nodes.length)throw new N$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Cd||(Cd=new Map,ple());let n=Cd.get(e);return n||(n=[],Cd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(ple,"startSubscriptionToReplications");o(Zp,"iterateRoutes")});var v$={};be(v$,{connectedToNode:()=>Ml,disconnectedFromNode:()=>Md,ensureNode:()=>Vo,requestClusterStatus:()=>M$,startOnMainThread:()=>sC});async function sC(e){let t=0,r=ot();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){US.set(i,Jp(l.auditStore));break}}}Xi.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=st();function c(){let l=Vt().primaryStore.get(a);if(l!==null){let u=e.url??ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Vo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Vt().primaryStore.get(a)&&c();for(let l of Zp(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)}Pd(s)});let n;function s(i,a=i?.name){let c=st()&&a===st()||ja()&&i?.url===ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Vt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(lt.trace("Setting up node replication for",i),!i){for(let[f,m]of Ji){let p;for(let[h,{worker:E,nodes:g}]of m){let b=g[0];if(b&&b.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),lt.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){Ji.get(f).iterator.remove(),Ji.delete(f);return}}return}if(c)return;if(!i.url){lt.info(`Node ${i.name} is missing url`);return}let l=Ji.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(lt.info(`Added node ${i.name} at ${i.url} for process ${st()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Dd)if(i.url===m.url){Dd.delete(f);break}Dd.set(i.name,i)}let u=ot();if(l||(l=new Map,Ji.set(i.url,l)),l.iterator=za(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(lt.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){lt.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];US.has(f)&&(E.push({replicateByDefault:m,name:st(),startTime:US.get(f),endTime:Date.now(),replicates:!0}),US.delete(f));let g=Xp(i,f),b=Xi.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%b.length,h=b[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):eh(S)},hle);else{lt.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Vt().primaryStore.get(st())?.replicates}),Vt().primaryStore.get(st())?.replicates||(n=!1,lt.info("Disabling replication, this node name",st(),Vt().primaryStore.get(st()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):BS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Md=o(function(i){try{lt.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Dd.keys()),c=a.sort(),l=c.indexOf(i.name||hi(i.url));if(l===-1){lt.warn("Disconnected node not found in node map",i.name,a);return}let u=Ji.get(i.url),d=u?.get(i.database);if(!d){lt.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!nC.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,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=Dd.get(h);u=Ji.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:b,nodes:S}=g,R=!1;for(let L of d.nodes){if(S.some(O=>O.name===L.name)){lt.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}L.endTime<Date.now()||(S.push(L),R=!0)}if(d.nodes=[d.nodes[0]],!R){lt.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}lt.info(`Failing over ${i.database} from ${i.name} to ${h}`),b?b.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):eh({database:i.database,nodes:S});return}lt.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){lt.error("Error failing over node",a)}},"disconnectedFromNode"),Ml=o(function(i){let a=Ji.get(i.url),c=a?.get(i.database);if(!c){lt.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){lt.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){lt.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of Ji.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,Xi.onMessageByType)("disconnected-from-node",Md),(0,Xi.onMessageByType)("connected-to-node",Ml),(0,Xi.onMessageByType)("request-cluster-status",M$)}function M$(e,t){let r=[];for(let[n,s]of Dd)try{let i=Ji.get(s.url);lt.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=L$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){lt.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Vo(e,t){let r=Vt();e=e??hi(t.url),t.name=e;try{if(t.ca){let s=new D$.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){lt.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(lt.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!nC.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=L$(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])]}lt.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Xi,xS,lt,P$,nC,D$,L$,hle,Ji,Md,Ml,Dd,US,th=oe(()=>{Ne();Xi=w(rt());cs();xS=require("worker_threads");Ld();lt=w(z()),P$=w(require("lodash")),nC=w(fe());H();D$=require("crypto"),{cloneDeep:L$}=P$.default,hle=200,Ji=new Map,Dd=new Map,US=new Map;o(sC,"startOnMainThread");o(M$,"requestClusterStatus");xS.parentPort&&(Md=o(e=>{xS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ml=o(e=>{xS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Xi.onMessageByType)("subscribe-to-node",e=>{eh(e)}),(0,Xi.onMessageByType)("unsubscribe-from-node",e=>{BS(e)}));o(Vo,"ensureNode")});var us=v(Kt=>{"use strict";var mr=require("path"),{watch:Ele}=require("chokidar"),kn=require("fs-extra"),vd=require("node-forge"),H$=require("net"),{generateKeyPair:iC,X509Certificate:Ko,createPrivateKey:G$}=require("crypto"),_le=require("util");iC=_le.promisify(iC);var It=vd.pki,Ei=require("joi"),{v4:q$}=require("uuid"),{validateBySchema:lC}=dt(),{forComponent:gle}=z(),ls=fe(),xs=(H(),M(W)),{CONFIG_PARAMS:Ul}=xs,_i=Tb(),{ClientError:Qa}=Ee(),kS=require("node:tls"),{relative:$$,join:Sle}=require("node:path"),{CERTIFICATE_VALUES:U$}=_i,Tle=Hc(),oC=pt(),{table:yle,getDatabases:Rle,databases:FS}=(Ne(),M(ft)),{getJWTRSAKeys:x$}=(yd(),M(qp)),ze=gle("tls").conditional;Kt.generateKeys=fC;Kt.updateConfigCert=J$;Kt.createCsr=Ole;Kt.signCertificate=Ple;Kt.setCertTable=Ud;Kt.loadCertificates=z$;Kt.reviewSelfSignedCert=pC;Kt.createTLSSelector=Z$;Kt.listCertificates=tV;Kt.addCertificate=xle;Kt.removeCertificate=Fle;Kt.createNatsCerts=Mle;Kt.generateCertsKeys=Dle;Kt.getReplicationCert=nh;Kt.getReplicationCertAuth=Cle;Kt.renewSelfSigned=vle;Kt.hostnamesFromCert=EC;Kt.getKey=kle;Kt.getHostnamesFromCertificate=Hle;Kt.getPrimaryHostName=hC;var{urlToNodeName:V$,getThisNodeUrl:ble,getThisNodeName:GS,clearThisNodeName:Ale}=(cs(),M(Yo)),{readFileSync:Ile,statSync:K$}=require("node:fs"),yUe=fe(),{getTicketKeys:wle,onMessageFromWorkers:Nle}=rt(),{isMainThread:Y$}=require("worker_threads"),{TLSSocket:W$,createSecureContext:RUe}=require("node:tls"),uC=3650,rh=["127.0.0.1","localhost","::1"],dC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Nle(async e=>{e.type===xs.ITC_EVENT_TYPES.RESTART&&(ls.initSync(!0),await pC())});var Zr;function Xa(){return Zr||(Zr=Rle().system.hdb_certificate,Zr||(Zr=yle({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(Xa,"getCertTable");async function nh(){let e=Z$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(GS());if(!r)return;let n=new Ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(nh,"getReplicationCert");async function Cle(){Xa();let e=(await nh()).options.cert,r=new Ko(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(Cle,"getReplicationCertAuth");var B$,Ja=new Map;function z$(){if(B$)return;B$=!0;let e=[{configKey:Ul.TLS},{configKey:Ul.OPERATIONSAPI_TLS}];Xa();let t=mr.dirname(oC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=oC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&$$(Sle(t,"keys"),a);c&&F$(a,l=>{Ja.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&Y$){let d;F$(u,f=>{if(U$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=X$(u),h=new Ko(p),E;try{E=hC(h)}catch(R){ze.error?.("error extracting host name from certificate",R);return}if(E==null){ze.error?.("No host name found on certificate");return}if(h.checkIssued(new Ko(U$.cert)))return;let g=Zr.primaryStore.get(E),b=K$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&b<=S){b<S&&ze.info?.(`Certificate ${E} at ${u} is older (${new Date(b)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:b,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(z$,"loadCertificates");function F$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&Y$&&ze.warn?.(`Reloading ${r}:`,i),n=c,t(X$(i)))}catch(c){ze.error?.(`Error loading ${r}:`,i,c)}},"loadFile");kn.existsSync(e)?s(e,K$(e)):ze.error?.(`${r} file not found:`,e),Ele(e,{persistent:!1}).on("change",s)}o(F$,"loadAndWatch");function aC(){let e=ble();if(e==null){let t=rh[0];return ze.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return V$(e)}o(aC,"getHost");function HS(){let e=GS();if(e==null){let t=rh[0];return ze.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(HS,"getCommonName");async function Ole(){let e=await nh(),t=It.certificateFromPem(e.options.cert),r=It.privateKeyFromPem(e.options.key);ze.info?.("Creating CSR with cert named:",e.name);let n=It.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:HS()},...dC];ze.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:j$()}];return ze.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),vd.pki.certificationRequestToPem(n)}o(Ole,"createCsr");function j$(){let e=rh.includes(HS())?rh:[...rh,HS()];return e.includes(aC())||e.push(aC()),[{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=>H$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(j$,"certExtensions");async function Ple(e){let t={},r=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Xa();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Ja.has(d.private_key_name)){n=Ja.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await kn.exists(mr.join(r,d.private_key_name))){n=kn.readFile(mr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await cC();s=d.ca,n=d.private_key}n=It.privateKeyFromPem(n),t.signingCA=s.certificate;let i=It.certificateFromPem(s.certificate);ze.info?.("Signing CSR with cert named",s.name);let a=It.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return ze.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=vd.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()+uC),ze.info?.("sign cert setting validity:",c.validity),ze.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),ze.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;ze.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,vd.md.sha256.create()),t.certificate=It.certificateToPem(c)}else ze.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Ple,"signCertificate");async function Lle(e,t){await Ud({name:GS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Ud({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:It.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Lle,"createCertificateTable");async function Ud(e){let t;try{t=new Ko(e.certificate)}catch(r){ze.error?.(`Failed to parse certificate for ${e.name}:`,r.message),ze.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Xa(),await Zr.patch(e)}o(Ud,"setCertTable");async function fC(){let e=await iC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:It.publicKeyFromPem(e.publicKey),privateKey:It.privateKeyFromPem(e.privateKey)}}o(fC,"generateKeys");async function mC(e,t,r){let n=It.createCertificate();if(!t){let a=await nh();t=It.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()+uC);let i=[{name:"commonName",value:HS()},...dC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(j$()),n.sign(e,vd.md.sha256.create()),It.certificateToPem(n)}o(mC,"generateCertificates");async function cC(){let e=await tV(),t;for(let r of e){if(!r.is_authority)continue;let n=await eV(r.private_key_name);if(r.private_key_name&&n&&new Ko(r.certificate).checkPrivateKey(G$(n))){ze.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ze.trace?.("No CA found with matching private key")}o(cC,"getCertAuthority");async function Q$(e,t,r=!0){let n=It.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()+uC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ls.get(Ul.REPLICATION_HOSTNAME)??V$(ls.get(Ul.REPLICATION_URL))??q$().split("-")[0]}`},...dC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,vd.md.sha256.create());let a=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=mr.join(a,_i.PRIVATEKEY_PEM_NAME);return r&&await kn.writeFile(c,It.privateKeyToPem(e)),n}o(Q$,"generateCertAuthority");async function Dle(){let{privateKey:e,publicKey:t}=await fC(),r=await Q$(e,t),n=await mC(e,t,r);await Lle(n,r),J$()}o(Dle,"generateCertsKeys");async function Mle(){let e=await mC(It.privateKeyFromPem(_i.CERTIFICATE_VALUES.key),void 0,It.certificateFromPem(_i.CERTIFICATE_VALUES.cert)),t=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,_i.NATS_CERTIFICATE_PEM_NAME);await kn.exists(r)||await kn.writeFile(r,e);let n=mr.join(t,_i.NATS_CA_PEM_NAME);await kn.exists(n)||await kn.writeFile(n,_i.CERTIFICATE_VALUES.cert)}o(Mle,"createNatsCerts");async function vle(){Xa();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await pC()}o(vle,"renewSelfSigned");async function pC(){Ale(),await z$(),Xa();let e=await cC();if(!e){ze.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:It.privateKeyFromPem(kn.readFileSync(u)),keyPath:u}}catch(d){return ze.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ls.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=ls.get(Ul.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=$$(a,i);s||(ze.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await fC(),kn.existsSync(mr.join(a,_i.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${q$().split("-")[0]}.pem`),await kn.writeFile(mr.join(a,c),It.privateKeyToPem(s)));let l=await Q$(s,It.setRsaPublicKey(s.n,s.e),!1);await Ud({name:l.subject.getField("CN").value,uses:["https"],certificate:It.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await nh()){let r=GS();ze.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await cC();let n=It.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await mC(It.privateKeyFromPem(e.private_key),s,n);await Ud({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(pC,"reviewSelfSignedCert");function J$(){let e=Tle(Object.keys(xs.CONFIG_PARAM_MAP),!0),t=mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,_i.PRIVATEKEY_PEM_NAME),n=mr.join(t,_i.NATS_CERTIFICATE_PEM_NAME),s=mr.join(t,_i.NATS_CA_PEM_NAME),i=xs.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),oC.updateConfigValue(void 0,void 0,a,!1,!0)}o(J$,"updateConfigCert");function X$(e){return e.startsWith("-----BEGIN")?e:Ile(e,"utf8")}o(X$,"readPEM");var k$=kS.createSecureContext;kS.createSecureContext=function(e){if(!e.cert||!e.key)return k$(e);let t={...e};delete t.key,delete t.cert;let r=k$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Ule=W$.prototype._init;W$.prototype._init=function(e,t){Ule.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 Z$(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(FS===void 0){c();return}for await(let f of FS.system.hdb_certificate.search([])){let m=f.certificate,p=new Ko(m);f.is_authority&&(p.asString=m,vl.set(p.subject,m))}for await(let f of FS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await eV(f.private_key_name),E=f.certificate,g=new Ko(E);if(vl.has(g.issuer)&&(E+=`
18
+ `+vl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let b={ciphers:f.ciphers,ticketKeys:wle(),availableCAs:vl,ca:t&&Array.from(vl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(b.sessionIdContext=a.sessionIdContext);let S=f.hostnames??EC(g);Array.isArray(S)||(S=[S]);for(let O of S)O===aC()&&(p+=1);let R=kS.createSecureContext(b);R.name=f.name,R.options=b,R.quality=p,R.certificateAuthorities=Array.from(vl),R.certStart=E.toString().slice(0,100);let L;for(let O of S)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),H$.isIP(O)&&(L=!0);let x=r.get(O)?.quality??0;ze.trace?.("Assigning TLS for hostname",O,"if",p,">",x),p>x&&r.set(O,R)}else ze.error?.("No hostname found for certificate at",kS.certificate);ze.trace?.("Adding TLS",R.name,"for",a.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=R,d=p,a&&(a.defaultContext=R))}catch(m){ze.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),FS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){ze.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return ze.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?ze.debug?.("No certificate found to match",a,"using the default certificate"):ze.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):ze.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(Z$,"createTLSSelector");async function eV(e){let t=Ja.get(e);return!t&&e?await kn.readFile(mr.join(ls.get(Ul.ROOTPATH),xs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(eV,"getPrivateKeyByName");async function tV(){Xa();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(tV,"listCertificates");async function xle(e){let t=lC(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 Qa(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[p,h]of Ja)!s&&!c&&a.checkPrivateKey(G$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Qa("A suitable private key was not found for this certificate");let d;if(!r){try{d=hC(a)}catch(p){ze.error?.(p)}if(d==null)throw new Qa("Error extracting certificate host name, please provide a name parameter")}let f=Ble(r??d);s&&!c&&!l&&(await kn.writeFile(mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,f+".pem"),s),Ja.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 Ud(m),"Successfully added certificate: "+f}o(xle,"addCertificate");function Ble(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Ble,"sanitizeName");async function Fle(e){let t=lC(e,Ei.object({name:Ei.string().required()}));if(t)throw new Qa(t.message);let{name:r}=e;Xa();let n=await Zr.get(r);if(!n)throw new Qa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ze.info?.("Removing private key named",s),await kn.remove(mr.join(ls.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(Fle,"removeCertificate");function hC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||EC(e)[0]}o(hC,"getPrimaryHostName");function EC(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(EC,"hostnamesFromCert");async function kle(e){if(e.bypass_auth!==!0)throw new Qa("Unauthorized","401");let t=lC(e,Ei.object({name:Ei.string().required()}));if(t)throw new Qa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await x$()).privateKey;if(r===".jwtPublic")return(await x$()).publicKey;if(Ja.get(r))return Ja.get(e.name);throw new Qa("Key not found")}o(kle,"getKey");function Hle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Hle,"getHostnamesFromCertificate")});var IV={};be(IV,{CONFIRMATION_STATUS_POSITION:()=>RV,LATENCY_POSITION:()=>zS,NodeReplicationConnection:()=>Bd,OPERATION_REQUEST:()=>yC,RECEIVED_TIME_POSITION:()=>bC,RECEIVED_VERSION_POSITION:()=>RC,RECEIVING_STATUS_POSITION:()=>AC,RECEIVING_STATUS_RECEIVING:()=>AV,RECEIVING_STATUS_WAITING:()=>bV,SENDING_TIME_POSITION:()=>sh,createWebSocket:()=>jS,databaseSubscriptions:()=>ec,replicateOverWS:()=>ih,tableUpdateListeners:()=>wC});async function jS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=st(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!SC){let l=(0,_V.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),SC=u.secureContexts}if(i=SC.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,SV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(WS?.caCount!==Wo.size&&(WS=gV.createSecureContext({...i.options,ca:[...Wo,...i.options.availableCAs.values()]}),WS.caCount=Wo.size),c.secureContext=WS),new pV.WebSocket(e,"harperdb-replication-v1",c)}function ih(e,t,r){let n=t.port||t.securePort,s=xl.pid%1e3+"-"+hV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ue.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||ec,f,m,p=!1,h=t.subscription;h?.then&&h.then(T=>{h=T,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&ot()[u],g,b=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,L,O,x,j,k,F,Q=6e4,Y,de=0,le=0,ee=0,Re=mV.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Ie=new Map,$e=[],Fe=0,yr;if(t.url){let T=o(()=>{j&&le===e._socket?.bytesRead&&ee===e._socket?.bytesWritten?e.terminate():(j=performance.now(),e.ping(),le=e._socket?.bytesRead,ee=e._socket?.bytesWritten)},"sendPing");O=setInterval(T,dV).unref(),T()}else Jt();e._socket?.setMaxListeners(200);function Jt(){clearTimeout(x),le=e._socket?.bytesRead,ee=e._socket?.bytesWritten,x=setTimeout(()=>{le===e._socket?.bytesRead&&ee===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},dV*2).unref()}o(Jt,"resetPingTimer");function kt(){if(!(!g||!u))return m||(m=Od(f,u,g)),m}o(kt,"getSharedStatus"),u&&vc(u);let Xt,kf,Dc=[],Ht=[],Hf,Gf=[],FE=[],kE=[],sb=150,qf=25,Oe=0,HE=0,$f=!1,_o,Mr,Rr,Vf;e.on("message",ib);async function ib(T){if(r=await r,!r){ue.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Mc(T),e.off("message",ib),e.on("message",Mc)}o(ib,"onWSMessageWhenAuthorized");function Mc(T){de=performance.now();try{let A=T.dataView=new jc(T.buffer,T.byteOffset,T.byteLength);if(T[0]>127){let D=(0,it.decode)(T),[G,C,B]=D;switch(G){case nV:{if(C){if(g){if(g!==C){ue.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${C}, disconnecting`),e.send((0,it.encode)([xd])),Vr(1008,"Node name mismatch");return}}else if(g=C,t.connection?.tentativeNode){let ae=t.connection.tentativeNode;ae.name=g,t.connection.tentativeNode=null,Vo(g,ae)}if(t.connection&&(t.connection.nodeName=g),ue.debug?.(s,"received node name:",g,"db:",u??D[2]),!u)try{vc(u=D[2]),u==="system"&&(Xt=za(t,(ae,ie)=>{mu(ie)&&pu(ie)}),e.on("close",()=>{Xt?.remove()}))}catch(ae){ue.warn?.(s,"Error setting database",ae),e.send((0,it.encode)([xd])),Vr(1008,ae.message);return}Kf()}break}case lV:{ue.debug?.(s,"Received table definitions for",C.map(ae=>ae.table));for(let ae of C){let ie=D[2];ae.database=ie;let re;if(mu(ie)){if(u==="system")De[ie]?.[ae.table]||(re=y(ae,De[ie]?.[ae.table]));else{if(ie!=="data"&&!De[ie]){ue.warn?.("Database not found",ie);return}re=y(ae,De[ie]?.[ae.table])}f||(f=re?.auditStore),E||(E=ot()?.[ie])}}break}case xd:Vr();break;case yC:try{let ae=r?.replicates||r?.subscribers||r?.name;ue.debug?.("Received operation request",C,"from",g),server.operation(C,{user:r},!ae).then(ie=>{ue.debug?.("Requested request from finished",g,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=C.requestId,e.send((0,it.encode)([$S,ie]))},ie=>{ue.debug?.("Failed requested operation from",g,ie),e.send((0,it.encode)([$S,{requestId:C.requestId,error:_C(ie)}]))})}catch(ae){e.send((0,it.encode)([$S,{requestId:C.requestId,error:_C(ae)}]))}break;case $S:let{resolve:q,reject:te}=b.get(C.requestId);ue.debug?.("Received completed operation request",g,C),C.error?te(new Error(C.error)):q(C),b.delete(C.requestId);break;case gC:let X=D[3];if(!E){u?ue.error?.(s,"No database found for",u):ue.error?.(s,"Database name never received"),Vr();return}let $=E[X];$=y({table:X,database:u,attributes:C.attributes,schemaDefined:C.schemaDefined},$),Dc[B]={name:X,decoder:new it.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:C.typedStructs,structures:C.structures}),getEntry(ae){return $.primaryStore.getEntry(ae)},rootStore:$.primaryStore.rootStore};break;case sV:Vf=f?b$(C,f):new Map,Hf=D[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Hf}`);break;case iV:let Le=B;kE[Le]=C;break;case cV:kt()[RV]=C,ue.trace?.(s,"received and broadcasting committed update",C),kt().buffer.notify();break;case aV:R=C,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case VS:{let ae=D[1],{fileId:ie,size:re,finished:ne,error:_e}=ae,me=Ie.get(ie);ue.debug?.("Received blob",ie,"has stream",!!me,"connectedToBlob",!!me?.connectedToBlob,"length",D[2].length,"finished",ne),me||(me=new TC.PassThrough,me.expectedSize=re,Ie.set(ie,me)),me.lastChunk=Date.now();let he=D[2];Ge(he.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{ne?(_e?(me.on("error",()=>{}),me.destroy(new Error("Blob error: "+_e+" for record "+(me.recordId??"unknown")+" from "+remote_node_name))):me.end(he),me.connectedToBlob&&Ie.delete(ie)):me.write(he)}catch(Ve){ue.error?.(`Error receiving blob for ${me.recordId} from ${g} and streaming to storage`,Ve),Ie.delete(ie)}break}case oV:{let ae=C,ie;try{let re=D[3],ne=Ht[B]||(Ht[B]=E[D[4]]);if(!ne)return ue.warn?.("Unknown table id trying to handle record request",B);let _e=ne.primaryStore.getBinaryFast(Symbol.for("structures")),me=_e?.length??0;if(me>0&&me!==HE){HE=me;let Ve=(0,it.decode)(_e);e.send((0,it.encode)([gC,{typedStructs:Ve.typed,structures:Ve.named},B,ne.tableName]))}let he=ne.primaryStore.getBinaryFast(re);if(he){let Ve=ne.primaryStore.decoder.decode(he,{valueAsBuffer:!0}),we=at||{};we.version=(0,TV.getLastVersion)(),at&&at[Ou]&Pn&&(Ve=Buffer.from(Ve),wm(()=>ne.primaryStore.decoder.decode(he),Xe=>br(Xe,re),ne.primaryStore.rootStore)),ie=(0,it.encode)([qS,ae,{value:Ve,expiresAt:we.expiresAt,version:we.version,residencyId:we.residencyId,nodeId:we.nodeId,user:we.user}])}else ie=(0,it.encode)([qS,ae])}catch(re){ie=(0,it.encode)([qS,ae,{error:re.message}])}e.send(ie);break}case qS:{let{resolve:ae,reject:ie,tableId:re,key:ne}=b.get(D[1]),_e=D[2];if(_e?.error)ie(new Error(_e.error));else if(_e){let me;w_(()=>{let he=Dc[re].decoder.decode(_e.value);_e.value=he,_e.key=ne,ae(_e)||me&&setTimeout(()=>me.forEach(b_),6e4).unref()},f?.rootStore,he=>{let Ve=fu(he,ne);return me||(me=[]),me.push(Ve),Ve})}else ae();b.delete(D[1]);break}case rV:{Rr=C;let ae,ie,re=!1;if(h){if(u!==h.databaseName&&!h.then){ue.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",Rr),!h){let Te;h=new Promise(yt=>{ue.debug?.("Waiting for subscription to database "+u),Te=yt}),h.ready=Te,ec.set(u,h)}if(r.name)ie=Vt().subscribe(r.name),ie.then(async Te=>{ae=Te;for await(let yt of ae){let Pt=yt.value;if(!(Pt?.replicates===!0||Pt?.replicates?.receives||Pt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){re=!0,e.send((0,it.encode)([xd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Te=>{ue.error?.(s,"Error subscribing to HDB nodes",Te)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,it.encode)([xd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(ue.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Rr.length===0)return;let ne=Rr[0],_e=o(Te=>{if(Te&&(ne.replicateByDefault?!ne.tables.includes(Te.tableName):ne.tables.includes(Te.tableName)))return{table:Te}},"tableToTableEntry"),me={txnTime:0},he,Ve,we=1/0,Xe,vr=o((Te,yt)=>{if(Te.type==="end_txn"){me.txnTime&&(a[i]!==66&&ue.error?.("Invalid encoding of message"),go(9),go(x_),K(Xe=yt),Js()),i=c,me.txnTime=0;return}let Pt=Te.nodeId,Ur=Te.tableId,Lt=Ve[Ur];if(!Lt&&(Lt=Ve[Ur]=_e(h.tableById[Ur]),!Lt))return ue.debug?.("Not subscribed to table",Ur);let Rs=Lt.table,Dt=Rs.primaryStore,Xs=Dt.encoder;(Te.extendedType&Y_||!Xs.typedStructs)&&(Xs._mergeStructures(Xs.getStructures()),Xs.typedStructs&&(Xs.lastTypedStructuresLength=Xs.typedStructs.length));let hu=he[Pt];if(!(hu&&hu.startTime<yt&&(!hu.endTime||hu.endTime>yt)))return YS&&ue.trace?.(s,"skipping replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he),HM();YS&&ue.trace?.(s,"sending replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he);let ob=Te.version;me.txnTime!==ob&&(me.txnTime&&(YS&&ue.trace?.(s,"new txn time, sending queued txn",me.txnTime),a[i]!==66&&ue.error?.("Invalid encoding of message"),Js()),me.txnTime=ob,i=c,K(ob));let Fc=Te.residencyId,ab=Ra(Fc,Rs),qE;if(ab&&!ab.includes(g)){let Zs=Ra(Te.previousResidencyId,Rs);if(Zs&&!Zs.includes(g)&&(Te.type==="put"||Te.type==="patch")||Rs.getResidencyById)return HM();let Yf=Te.recordId;ue.trace?.(s,"sending invalidation",Yf,g,"from",Pt);let Wf=0;Fc&&(Wf|=Qc),Te.previousResidencyId&&(Wf|=Jc);let ub,$E=null;for(let GM in Rs.indices){if(!$E){if(ub=Te.getValue(Dt,!0),!ub)break;$E={}}$E[GM]=ub[GM]}qE=Xc(Te.version,Ur,Yf,null,Pt,Te.user,Te.type==="put"||Te.type==="patch"?"invalidate":Te.type,Xs.encode($E),Wf,Fc,Te.previousResidencyId,Te.expiresAt)}function HM(){return ue.trace?.(s,"skipping audit record",Te.recordId),k||(k=setTimeout(()=>{k=null,(Xe||0)+uV/2<we&&(YS&&ue.trace?.(s,"sending skipped sequence update",we),e.send((0,it.encode)([aV,we])))},uV).unref()),new Promise(setImmediate)}o(HM,"skipAuditRecord");let cb=Xs.typedStructs,lb=Xs.structures;if((cb?.length!=Lt.typed_length||lb?.length!=Lt.structure_length)&&(Lt.typed_length=cb?.length,Lt.structure_length=lb.length,ue.debug?.(s,"send table struct",Lt.typed_length,Lt.structure_length),Lt.sentName||(Lt.sentName=!0),e.send((0,it.encode)([gC,{typedStructs:cb,structures:lb,attributes:Rs.attributes,schemaDefined:Rs.schemaDefined},Ur,Lt.table.tableName]))),Fc&&!FE[Fc]&&(e.send((0,it.encode)([iV,ab,Fc])),FE[Fc]=!0),qE)go(qE.length),Bc(qE);else{let Zs=Te.encoded;Te.extendedType&Pn&&wm(()=>Te.getValue(Dt),Wf=>br(Wf,Te.recordId),Dt.rootStore);let Yf=Zs[0]===66?8:0;go(Zs.length-Yf),Bc(Zs,Yf),ue.trace?.("wrote record",Te.recordId,"length:",Zs.length)}return e._socket.writableNeedDrain?new Promise(Zs=>{ue.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Zs)}):Fe>qf?new Promise(Zs=>{yr=Zs}):new Promise(setImmediate)},"sendAuditRecord"),Js=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ge(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new IC.EventEmitter,Mr.once("close",()=>{re=!0,ae?.end()});for(let{startTime:Te}of Rr)Te<we&&(we=Te);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Ve=h.tableById.map(_e),he=[];for(let{name:yt,startTime:Pt,endTime:Ur}of Rr){let Lt=vS(yt,f);ue.debug?.("subscription to",yt,"using local id",Lt,"starting",Pt),he[Lt]={startTime:Pt,endTime:Ur}}pu(u),Xt||(Xt=wl(yt=>{yt.databaseName===u&&pu(u)}),kf=vp(yt=>{yt===u&&(e.send((0,it.encode)([xd])),Vr())}),e.on("close",()=>{Xt?.remove(),kf?.remove()})),e.send((0,it.encode)([sV,Qp(h.auditStore),Rr.map(({name:yt})=>yt)]));let Te=!0;do{isFinite(we)||(ue.warn?.("Invalid sequence id "+we),Vr(1008,"Invalid sequence id"+we));let yt;if(Te&&!re&&(Te=!1,we===0)){ue.info?.("Replicating all tables to",g);let Pt=we,Ur=QS(f);for(let Lt in E){if(!_e(Lt))continue;let Rs=E[Lt];for(let Dt of Rs.primaryStore.getRange({snapshot:!1,versions:!0})){if(re)return;if(Dt.localTime>=we){ue.trace?.(s,"Copying record from",u,Lt,Dt.key,Dt.localTime),Pt=Math.max(Dt.localTime,Pt),yt=!0,kt()[sh]=1;let Xs=Xc(Dt.version,Rs.tableId,Dt.key,null,Ur,null,"put",wm(()=>Rs.primaryStore.encoder.encode(Dt.value),hu=>br(hu,Dt.key)),Dt.metadataFlags&-256,Dt.residencyId,null,Dt.expiresAt);await vr({recordId:Dt.key,tableId:Rs.tableId,type:"put",getValue(){return Dt.value},encoded:Xs,version:Dt.version,residencyId:Dt.residencyId,nodeId:Ur,extendedType:Dt.metadataFlags},Dt.localTime)}}}yt&&vr({type:"end_txn"},we),kt()[sh]=0,we=Pt}for(let{key:Pt,value:Ur}of f.getRange({start:we||1,exclusiveStart:!0,snapshot:!1})){if(re)return;let Lt=vt(Ur);ue.debug?.("sending audit record",new Date(Pt)),kt()[sh]=Pt,we=Pt,await vr(Lt,Pt),Mr.startTime=Pt,yt=!0}yt&&vr({type:"end_txn"},we),kt()[sh]=0,await s0(f)}while(!re)}).catch(Te=>{ue.error?.(s,"Error handling subscription to node",Te),Vr(1008,"Error handling subscription to node")});break}}return}A.position=8;let I=!0,N,P;do{kt();let D=A.readInt();if(D===9&&A.getUint8(A.position)==x_){A.position++,R=P=A.readFloat64(),m[RC]=R,m[bC]=Date.now(),m[AC]=bV,ue.trace?.("received remote sequence update",R,u);break}let G=A.position,C=vt(T,G,G+D),B=Dc[C.tableId];B||ue.error?.(`No table found with an id of ${C.tableId}`);let q;C.residencyId&&(q=kE[C.residencyId],ue.trace?.(s,"received residency list",q,C.type,C.recordId));try{let te=C.recordId;w_(()=>{N={table:B.name,id:C.recordId,type:C.type,nodeId:Vf.get(C.nodeId),residencyList:q,timestamp:C.version,value:C.getValue(B),user:C.user,beginTxn:I,expiresAt:C.expiresAt}},f?.rootStore,X=>fu(X,te))}catch(te){throw te.message+="typed structures for current decoder"+JSON.stringify(B.decoder.typedStructs),te}I=!1,ue.trace?.(s,"received replication message",C.type,"id",N.id,"version",new Date(C.version),"nodeId",N.nodeId),m[RC]=C.version,m[bC]=Date.now(),m[AC]=AV,h.send(N),A.position=G+D}while(A.position<T.byteLength);Oe++,u!=="system"&&Ge(T.byteLength,"bytes-received",`${g}.${u}.${N?.table||"unknown_table"}`,"replication","ingest"),Oe>sb&&!$f&&($f=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(N){let D=Date.now()-N.timestamp;u!=="system"&&Ge(D,"replication-latency",g+"."+u+"."+N.table,N.type,"ingest")}Oe--,$f&&($f=!1,e.resume(),ue.debug?.(`Replication resuming ${g}`)),$e.length>0&&await Promise.all($e),ue.trace?.("All blobs finished"),!L&&P&&(ue.trace?.(s,"queuing confirmation of a commit at",P),setTimeout(()=>{e.send((0,it.encode)([cV,L])),ue.trace?.(s,"sent confirmation of a commit at",L),L=null},$le)),L=P,ue.debug?.("last sequence committed",new Date(P),u)}})}catch(A){ue.error?.(s,"Error handling incoming replication message",A)}}o(Mc,"onWSMessage"),e.on("ping",Jt),e.on("pong",()=>{if(t.connection){let T=performance.now()-j;t.connection.latency=T,kt()&&(m[zS]=T),t.isSubscriptionConnection&&Ml({name:g,database:u,url:t.url,latency:T})}j=null}),e.on("close",(T,A)=>{clearInterval(O),clearTimeout(x),clearInterval(F),Mr&&Mr.emit("close"),_o&&_o.end();for(let[I,{reject:N}]of b)N(new Error(`Connection closed ${A?.toString()} ${T}`));ue.debug?.(s,"closed",T,A?.toString())});function Vr(T,A){try{e.isFinished=!0,ue.debug?.(s,"closing",g,u,T,A),e.close(T,A),t.connection?.emit("finished")}catch(I){ue.error?.(s,"Error closing connection",I)}}o(Vr,"close");let ya=new Set;async function br(T,A){let I=A_(T);if(ya.has(I)){ue.debug?.("Blob already being sent",I);return}ya.add(I);try{let N;Fe++;for await(let P of T.stream())N&&(ue.debug?.("Sending blob chunk",I,"length",N.length),e.send((0,it.encode)([VS,{fileId:I,size:T.size},N]))),N=P,e._socket.writableNeedDrain&&(ue.debug?.("draining",I),await new Promise(D=>e._socket.once("drain",D)),ue.debug?.("drained",I)),Ge(P.length,"bytes-sent",`${g}.${u}`,"replication","blob");ue.debug?.("Sending final blob chunk",I,"length",N.length),e.send((0,it.encode)([VS,{fileId:I,size:T.size,finished:!0},N]))}catch(N){ue.warn?.("Error sending blob",N,"blob id",I,"for record",A),e.send((0,it.encode)([VS,{fileId:I,finished:!0,error:_C(N)},Buffer.alloc(0)]))}finally{ya.delete(I),Fe--,Fe<qf&&yr?.()}}o(br,"sendBlobs");function fu(T,A){let I=A_(T),N=Ie.get(I);ue.debug?.("Received transaction with blob",I,"has stream",!!N,"ended",!!N?.writableEnded),N?N.writableEnded&&Ie.delete(I):(N=new TC.PassThrough,Ie.set(I,N)),N.connectedToBlob=!0,N.lastChunk=Date.now(),N.recordId=A,T.size===void 0&&N.expectedSize&&(T.size=N.expectedSize);let P=N.blob??createBlob(N,T);N.blob=P;let D=Po(()=>Am(P).saving,h.auditStore?.rootStore);return D&&(D.blobId=I,$e.push(D),D.finally(()=>{ue.debug?.(`Finished receiving blob stream ${I}`),$e.splice($e.indexOf(D),1)})),P}o(fu,"receiveBlobs");function Kf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Kf)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let T=new Map;f||(f=h?.auditStore);try{for(let N of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let P of N.value.nodes||[])P.lastTxnTime>(T.get(P.id)??0)&&T.set(P.id,P.lastTxnTime)}catch(N){if(!N.message.includes("Can not re"))throw N}let A=t.connection?.nodeSubscriptions?.[0];S=[];let I=t.connection?.nodeSubscriptions.map((N,P)=>{let D=[],{replicateByDefault:G}=N;if(N.subscriptions){for(let te of N.subscriptions)if(te.subscribe&&(te.schema||te.database)===u){let X=te.table;E?.[X]?.replicate!==!1&&D.push(X)}G=!1}else for(let te in E)(G?E[te].replicate===!1:E[te].replicate)&&D.push(te);let C=f&&vS(N.name,f),B=h?.dbisDB?.get([Symbol.for("seq"),C])??1,q=Math.max(B?.seqId??1,(typeof N.startTime=="string"?new Date(N.startTime).getTime():N.startTime)??1);if(ue.debug?.("Starting time recorded in db",N.name,C,u,B?.seqId,"start time:",q,new Date(q)),A!==N){let te=f&&vS(A.name,f),X=h?.dbisDB?.get([Symbol.for("seq"),te])??1;for(let $ of X?.nodes||[])$.name===N.name&&(q=$.seqId,ue.debug?.("Using sequence id from proxy node",A.name,q))}if(C===void 0?ue.warn("Starting subscription request from node",N,"but no node id found"):S.push(C),T.get(C)>q&&(q=T.get(C),ue.debug?.("Updating start time from more recent txn recorded",A.name,q)),q===1&&KS)try{new URL(KS).hostname===N.name?(ue.warn?.(`Requesting full copy of database ${u} from ${KS}`),q=0):q=Date.now()-6e4}catch(te){ue.error?.("Error parsing leader URL",KS,te)}return ue.trace?.(s,"defining subscription request",N.name,u,new Date(q)),{name:N.name,replicateByDefault:G,tables:D,startTime:q,endTime:N.endTime}});if(I)if(ue.debug?.(s,"sending subscription request",I,h?.dbisDB?.path),clearTimeout(Y),I.length>0)e.send((0,it.encode)([rV,I]));else{let N=o(()=>{let P=performance.now();Y=setTimeout(()=>{de<=P?Vr(1008,"Connection has no subscriptions and is no longer used"):N()},Q).unref()},"scheduleClose");N()}}o(Kf,"sendSubscriptionRequestUpdate");function Ra(T,A){if(!T)return;let I=Gf[T];return I||(I=A.getResidencyRecord(T),Gf[T]=I),I}o(Ra,"getResidence");function mu(T){return!(Za&&Za!="*"&&!Za[T]&&!Za.includes?.(T)&&!Za.some?.(A=>A.name===T))}o(mu,"checkDatabaseAccess");function vc(T){if(h=h||d.get(T),!mu(T))throw new Error(`Access to database "${T}" is not permitted`);h||ue.warn?.(`No database named "${T}" was declared and registered`),f=h?.auditStore,E||(E=ot()?.[T]);let A=st();if(A===g)throw A?new Error("Should not connect to self",A):new Error("Node name not defined");return Uc(A,T),!0}o(vc,"setDatabase");function Uc(T,A){let I=ot()?.[A],N=[];for(let P in I){let D=I[P];N.push({table:P,schemaDefined:D.schemaDefined,attributes:D.attributes.map(G=>({name:G.name,type:G.type,isPrimaryKey:G.isPrimaryKey}))})}ue.trace?.("Sending database info for node",T,"database name",A),e.send((0,it.encode)([nV,T,A,N]))}o(Uc,"sendNodeDBName");function pu(T){let A=ot()?.[T],I=[];for(let N in A){if(Rr&&!Rr.some(D=>D.replicateByDefault?!D.tables.includes(N):D.tables.includes(N)))continue;let P=A[N];I.push({table:N,schemaDefined:P.schemaDefined,attributes:P.attributes.map(D=>({name:D.name,type:D.type,isPrimaryKey:D.isPrimaryKey}))})}e.send((0,it.encode)([lV,I,T]))}o(pu,"sendDBSchema"),F=setInterval(()=>{for(let[T,A]of Ie)A.lastChunk+Re<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${T} for record ${A.recordId??"unknown"} from ${g}`),Ie.delete(T),A.end())},Re).unref();let GE=1,xc=[];return{end(){_o&&_o.end(),Mr&&Mr.emit("close")},getRecord(T){let A=GE++;return new Promise((I,N)=>{let P=[oV,A,T.table.tableId,T.id];xc[T.table.tableId]||(P.push(T.table.tableName),xc[T.table.tableId]=!0),e.send((0,it.encode)(P)),de=performance.now(),b.set(A,{tableId:T.table.tableId,key:T.id,resolve(D){let{table:G,entry:C}=T;if(I(D),D)return G._recordRelocate(C,D)},reject:N})})},sendOperation(T){let A=GE++;return T.requestId=A,e.send((0,it.encode)([yC,T])),new Promise((I,N)=>{b.set(A,{resolve:I,reject:N})})}};function go(T){_(5),T<128?a[c++]=T:T<16384?(l.setUint16(c,T|32768),c+=2):T<1056964608?(l.setUint32(c,T|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,T),c+=5)}function Bc(T,A=0,I=T.length){let N=I-A;_(N),T.copy(a,c,A,I),c+=N}function K(T){_(8),l.setFloat64(c,T),c+=8}function _(T){if(T+16>a.length-c){let A=Buffer.allocUnsafeSlow(c+T-i+65536>>10<<11);a.copy(A,0,i,c),c=c-i,i=0,a=A,l=new DataView(a.buffer,0,a.length)}}function y(T,A){let I=T.database??"data";A||(A={});let N=A.schemaDefined,P=!1,D=T.schemaDefined,G=A.attributes||[];for(let C=0;C<T.attributes?.length;C++){let B=T.attributes[C],q=G.find(te=>te.name===B.name);(!q||q.type!==B.type)&&(N?ue.error?.(`Schema for '${u}.${T.table}' is defined locally, but attribute '${B.name}: ${B.type}' from '${g}' does not match local attribute ${q?"'"+q.name+": "+q.type+"'":"which does not exist"}`):(P=!0,D||(B.indexed=!0),q?G[G.indexOf(q)]=B:G.push(B)))}return P?(ue.debug?.("(Re)creating",T),Je({table:T.table,database:T.database,schemaDefined:T.schemaDefined,attributes:G,...A})):A}}var mV,it,pV,hV,EV,IC,_V,gV,xl,SV,TC,TV,yV,Gle,_C,ue,rV,nV,sV,xd,iV,gC,oV,qS,yC,$S,aV,cV,lV,VS,RV,RC,bC,sh,zS,AC,bV,AV,qle,KS,wC,ec,YS,uV,$le,dV,SC,WS,fV,Bd,NC=oe(()=>{Ne();Ro();rC();$A();cs();mV=w(fe());H();Zc();it=require("msgpackr"),pV=require("ws"),hV=require("worker_threads"),EV=w(z());th();IC=require("events"),_V=w(us()),gV=w(require("node:tls"));Ld();xl=w(require("node:process")),SV=require("node:net");Jn();Is();TC=require("node:stream"),TV=require("lmdb"),yV=w(require("minimist")),{forComponent:Gle,errorToString:_C}=EV.default,ue=Gle("replication").conditional,rV=129,nV=140,sV=141,xd=142,iV=130,gC=132,oV=133,qS=134,yC=136,$S=137,aV=143,cV=144,lV=145,VS=146,RV=0,RC=1,bC=2,sh=3,zS=4,AC=5,bV=0,AV=1,qle=(0,yV.default)(xl.argv),KS=qle.HDB_LEADER_URL??xl.env.HDB_LEADER_URL,wC=new Map,ec=new Map,YS=!0,uV=300,$le=2,dV=3e4;o(jS,"createWebSocket");fV=500,Bd=class extends IC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=fV;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??hi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await jS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${xl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=fV,this.nodeSubscriptions&&Ml({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=ih(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Md({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ue.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(ih,"replicateOverWS")});function oh(e){return e===NV||e===Vle}function Kle(e){return e===CV||e===OV}function CC(e){return e===NV?CV:OV}function Yle(){if(wV)return;wV=!0;let e=Bl.CryptoEngine.prototype,t=Bl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return oh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return oh(s)?{name:CC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Kle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Bl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(oh(i)){let a=CC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(oh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ah.X509Certificate(Buffer.from(i)),l=new ah.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(oh(c)){let l=CC(c);try{let u=this.crypto?.subtle||this.subtle||Bl.getCrypto(!0)?.subtle||ah.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Bl,ah,NV,Vle,CV,OV,wV,PV=oe(()=>{Bl=w(require("pkijs")),ah=require("node:crypto"),NV="1.3.101.112",Vle="1.3.101.113",CV="Ed25519",OV="Ed448",wV=!1;o(oh,"isEd25519OrEd448");o(Kle,"isEdDSAAlgorithmName");o(CC,"getEdDSAAlgorithmName");o(Yle,"applyEd25519Patch");Yle()});function Wle(){return JS||(JS=Je({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),JS.sourcedFrom(OC)),JS}function zle(e){if(Yt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return Yt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return Yt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Fd(e,t){Yt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=zle(t);if(r===!1)return Yt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Jle(e);return Yt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(Yt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(Yt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):jle(n[0].cert,n[0].issuer,r)}async function jle(e,t,r){Yt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=LV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=LV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,MV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;Yt.trace?.("OCSP cache key:",i);let c=await Wle().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(Yt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return Yt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return Yt.error?.("OCSP verification error:",n),(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(Yt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Qle(e,t,r){Yt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,DV.getCertStatus)(e,{ca:t,timeout:r});return Yt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function LV(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
19
+ `)}function Jle(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var DV,MV,vV,Yt,OC,ch,JS,XS=oe(()=>{PV();DV=require("easy-ocsp"),MV=require("node:crypto"),vV=w(Qn());Ne();va();Yt=(0,vV.loggerWithTag)("cert-verification"),OC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){Yt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;Yt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ch.timeout,l=await Promise.race([Qle(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);Yt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ch.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return Yt.error?.("OCSP verification error:",c),(a?.failureMode??ch.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(Yt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ch={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Wle,"getCertificateCacheTable");o(zle,"getCertificateVerificationConfig");o(Fd,"verifyCertificate");o(jle,"verifyOCSP");o(Qle,"performOCSPCheck");o(LV,"bufferToPem");o(Jle,"extractCertificateChain")});var Yo={};be(Yo,{clearThisNodeName:()=>oue,disableReplication:()=>tue,enabledDatabases:()=>Za,forEachReplicatedDatabase:()=>za,getThisNodeId:()=>QS,getThisNodeName:()=>st,getThisNodeUrl:()=>ja,hostnameToUrl:()=>rT,lastTimeInAuditStore:()=>Jp,monitorNodeCAs:()=>$V,replicateOperation:()=>cue,replicationCertificateAuthorities:()=>Wo,sendOperationToNode:()=>lh,servers:()=>Zle,setReplicator:()=>KV,start:()=>eue,startOnMainThread:()=>sC,subscribeToNode:()=>eh,unsubscribeFromNode:()=>BS,urlToNodeName:()=>hi});function eue(e){if(!e.port&&!e.securePort&&(e.port=Bs.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Bs.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!st())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Zp(e))t.set(hi(s.url),s);rue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Me.ws(async(s,i,a,c)=>{if(Tt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),ih(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Tt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Me.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Tt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Tt.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=Vt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,GV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Fd(s.peerCertificate,e);if(!u.valid){Tt.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){Tt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else Tt.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:Tt.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(Wo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=tT.createSecureContext(u)}catch(l){Tt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}$V(()=>{for(let s of n)s()})}function $V(e){let t=0;Pd(r=>{r?.ca&&(Wo.add(r.ca),Wo.size!==t&&(t=Wo.size,e?.()))})}function tue(e=!0){qV=e}function rue(e){qV||(ot(),Za=e.databases,za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ec;for(let[s,i]of eT){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];KV(r,s,e),wC.get(s)?.forEach(i=>i(s))}}))}function KV(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 VV extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ec,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Tt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new jn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Me.hostname)continue;let E=sue(h,VV.subscription,e);if(E?.isConnected){let g=Od(t.auditStore,e,h)[zS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new kV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Xle++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;Tt.warn("Error in load from node",Fl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function nue(e,t,r,n,s){let i=eT.get(e);i||eT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Bd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function sue(e,t,r){let n=UV.get(Fl);n||(n=new Map,UV.set(Fl,n));let s=n.get(r);if(s)return s;let i=Vt().primaryStore.get(e);return i?.url&&(s=new Bd(i.url,t,r,Fl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await jS(e.url,r),s=ih(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Tt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Tt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function eh(e){try{HV.isMainThread&&Tt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ec.get(e.database);if(!t){let n;t=new Promise(s=>{Tt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ec.set(e.database,t)}let r=nue(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=>Xp(n,e.database)),e.replicateByDefault)}catch(t){Tt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function BS({name:e,url:t,database:r}){Tt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Vt().primaryStore.getRange({})));let n=eT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function iue(){if(PC!==void 0)return PC;let e=Bs.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Bs.default.get(U.TLS_CERTIFICATE);if(e)return PC=new BV.X509Certificate((0,FV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function st(){return Fl||(Fl=Bs.default.get("replication_hostname")??hi(Bs.default.get("replication_url"))??iue()??xV("operationsapi_network_secureport")??xV("operationsapi_network_port")??"127.0.0.1")}function oue(){Fl=void 0}function xV(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function ZS(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function QS(e){return Qp(e)?.[st()]}function ja(){let e=Bs.default.get("replication_url");return e||rT(st())}function rT(e){let t=ZS("replication_port");if(t)return`ws://${e}:${t}`;if(t=ZS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=ZS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=ZS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function hi(e){if(e)return new URL(e).hostname}function za(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return vp(n=>{r(n)}),wl((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];Tt.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):aue(n)&&t(s,n,!1)}o(r,"forDatabase")}function aue(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function Jp(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,Tt.trace?.("Replicating operation",e.operation,"to nodes",Me.nodes.map(n=>n.name));let r=await Promise.allSettled(Me.nodes.map(n=>lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Me.nodes[s]?.name,i})}return t}var Bs,Tt,BV,FV,tT,kV,HV,GV,qV,Xle,Zle,Wo,Za,eT,UV,PC,Fl,cs=oe(()=>{Ne();va();yu();NC();xr();Bs=w(fe()),Tt=w(z()),BV=require("crypto");XS();FV=require("fs");th();Ld();H();rC();tT=w(require("node:tls")),kV=w(Ee()),HV=require("worker_threads"),GV=w(us()),Xle=1,Zle=[],Wo=Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(tT.rootCertificates):new Set;o(eue,"start");o($V,"monitorNodeCAs");o(tue,"disableReplication");o(rue,"assignReplicationSource");o(KV,"setReplicator");eT=new Map;o(nue,"getSubscriptionConnection");UV=new Map;o(sue,"getRetrievalConnectionByName");o(lh,"sendOperationToNode");o(eh,"subscribeToNode");o(BS,"unsubscribeFromNode");o(iue,"getCommonNameFromCert");o(st,"getThisNodeName");o(oue,"clearThisNodeName");Object.defineProperty(Me,"hostname",{get(){return st()}});o(xV,"getHostFromListeningPort");o(ZS,"getPortFromListeningPort");o(QS,"getThisNodeId");Me.replication={getThisNodeId:QS,exportIdMapping:Qp};o(ja,"getThisNodeUrl");o(rT,"hostnameToUrl");o(hi,"urlToNodeName");o(za,"forEachReplicatedDatabase");o(aue,"hasExplicitlyReplicatedTable");o(Jp,"lastTimeInAuditStore");o(cue,"replicateOperation")});var aT=v((txe,QV)=>{"use strict";var kd=Yq(),{validateBySchema:uh}=dt(),{commonValidators:Hd,schemaRegex:LC}=Fi(),pr=require("joi"),lue=z(),uue=require("uuid").v4,iT=xo(),Gd=(H(),M(W)),due=require("util"),tc=ss(),{handleHDBError:zo,hdbErrors:fue,ClientError:dh}=Ee(),{HDB_ERROR_MSGS:nT,HTTP_STATUS_CODES:jo}=fue,{SchemaEventMsg:oT}=ts(),YV=rr(),{getDatabases:mue}=(Ne(),M(ft)),{transformReq:qd}=ce(),{replicateOperation:WV}=(cs(),M(Yo)),sT=pr.string().min(1).max(Hd.schema_length.maximum).pattern(LC).messages({"string.pattern.base":"{:#label} "+Hd.schema_format.message}),pue=pr.string().min(1).max(Hd.schema_length.maximum).pattern(LC).messages({"string.pattern.base":"{:#label} "+Hd.schema_format.message}).required(),hue=pr.string().min(1).max(Hd.schema_length.maximum).pattern(LC).messages({"string.pattern.base":"{:#label} "+Hd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();QV.exports={createSchema:Eue,createSchemaStructure:zV,createTable:_ue,createTableStructure:jV,createAttribute:Rue,dropSchema:gue,dropTable:Sue,dropAttribute:Tue,getBackup:bue};async function Eue(e){let t=await zV(e);return iT.signalSchemaChange(new oT(process.pid,e.operation,e.schema)),t}o(Eue,"createSchema");async function zV(e){let t=uh(e,pr.object({database:sT,schema:sT}));if(t)throw new dh(t.message);if(qd(e),!await kd.checkSchemaExists(e.schema))throw zo(new Error,nT.SCHEMA_EXISTS_ERR(e.schema),jo.BAD_REQUEST,Gd.LOG_LEVELS.ERROR,nT.SCHEMA_EXISTS_ERR(e.schema),!0);return await tc.createSchema(e),`database '${e.schema}' successfully created`}o(zV,"createSchemaStructure");async function _ue(e){return qd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await jV(e)}o(_ue,"createTable");async function jV(e){let t=uh(e,pr.object({database:sT,schema:sT,table:pue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:hue}));if(t)throw new dh(t.message);if(!await kd.checkSchemaTableExists(e.schema,e.table))throw zo(new Error,nT.TABLE_EXISTS_ERR(e.schema,e.table),jo.BAD_REQUEST,Gd.LOG_LEVELS.ERROR,nT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:uue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await tc.createTable(n,e);else throw zo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",jo.BAD_REQUEST);else await tc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(jV,"createTableStructure");async function gue(e){let t=uh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new dh(t.message);qd(e);let r=await kd.checkSchemaExists(e.schema);if(r)throw zo(new Error,r,jo.NOT_FOUND,Gd.LOG_LEVELS.ERROR,r,!0);let n=await kd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await tc.dropSchema(e),iT.signalSchemaChange(new oT(process.pid,e.operation,e.schema)),await YV.purgeSchemaTableStreams(e.schema,s);let i=await WV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(gue,"dropSchema");async function Sue(e){let t=uh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new dh(t.message);qd(e);let r=await kd.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Gd.LOG_LEVELS.ERROR,r,!0);await tc.dropTable(e),await YV.purgeTableStream(e.schema,e.table);let n=await WV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Sue,"dropTable");async function Tue(e){let t=uh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new dh(t.message);qd(e);let r=await kd.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Gd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw zo(new Error,"You cannot drop a hash attribute",jo.BAD_REQUEST,void 0,void 0,!0);if(Gd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw zo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,jo.BAD_REQUEST,void 0,void 0,!0);try{return await tc.dropAttribute(e),yue(e),iT.signalSchemaChange(new oT(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 ${due.inspect(e)}.`),n}}o(Tue,"dropAttribute");function yue(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(yue,"dropAttributeFromGlobal");async function Rue(e){qd(e);let t=mue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw zo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,jo.BAD_REQUEST,void 0,void 0,!0);return await tc.createAttribute(e),iT.signalSchemaChange(new oT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Rue,"createAttribute");function bue(e){return tc.getBackup(e)}o(bue,"getBackup")});var XV=v((nxe,JV)=>{"use strict";var{OPERATIONS_ENUM:Aue}=(H(),M(W)),DC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Aue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};JV.exports=DC});var MC=v((oxe,n1)=>{"use strict";var Iue=ss(),ixe=XV(),cT=ce(),lT=(H(),M(W)),wue=fe(),{handleHDBError:ZV,hdbErrors:Nue}=Ee(),{HDB_ERROR_MSGS:e1,HTTP_STATUS_CODES:t1}=Nue,Cue=Object.values(lT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),r1="To use this operation audit log must be enabled in harperdb-config.yaml";n1.exports=Oue;async function Oue(e){if(cT.isEmpty(e.schema))throw new Error(e1.SCHEMA_REQUIRED_ERR);if(cT.isEmpty(e.table))throw new Error(e1.TABLE_REQUIRED_ERR);if(!wue.get(lT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ZV(new Error,r1,t1.BAD_REQUEST,lT.LOG_LEVELS.ERROR,r1,!0);let t=cT.checkSchemaTableExist(e.schema,e.table);if(t)throw ZV(new Error,t,t1.NOT_FOUND,lT.LOG_LEVELS.ERROR,t,!0);if(!cT.isEmpty(e.search_type)&&Cue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Iue.readAuditLog(e)}o(Oue,"readAuditLog")});var i1=v((cxe,s1)=>{"use strict";var{OPERATIONS_ENUM:Pue}=(H(),M(W)),vC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Pue.GET_BACKUP,this.schema=t,this.table=r}};s1.exports=vC});var c1=v((fxe,a1)=>{"use strict";var Lue=ss(),uxe=i1(),UC=ce(),Due=(H(),M(W)),dxe=fe(),{handleHDBError:Mue,hdbErrors:vue}=Ee(),{HDB_ERROR_MSGS:o1,HTTP_STATUS_CODES:Uue}=vue;a1.exports=xue;async function xue(e){if(UC.isEmpty(e.schema))throw new Error(o1.SCHEMA_REQUIRED_ERR);if(UC.isEmpty(e.table))throw new Error(o1.TABLE_REQUIRED_ERR);let t=UC.checkSchemaTableExist(e.schema,e.table);if(t)throw Mue(new Error,t,Uue.NOT_FOUND,Due.LOG_LEVELS.ERROR,t,!0);return await Lue.getBackup(readAuditLogObject)}o(xue,"getBackup")});var f1=v((pxe,d1)=>{"use strict";var Bue=fe(),rc=require("joi"),Fue=dt(),l1=require("moment"),kue=require("fs-extra"),xC=require("path"),Hue=require("lodash"),fh=(H(),M(W)),{LOG_LEVELS:kl}=(H(),M(W)),Gue="YYYY-MM-DD hh:mm:ss",que=xC.resolve(__dirname,"../logs");d1.exports=function(e){return Fue.validateBySchema(e,$ue)};var $ue=rc.object({from:rc.custom(u1),until:rc.custom(u1),level:rc.valid(kl.NOTIFY,kl.FATAL,kl.ERROR,kl.WARN,kl.INFO,kl.DEBUG,kl.TRACE),order:rc.valid("asc","desc"),limit:rc.number().min(1),start:rc.number().min(0),log_name:rc.custom(Vue)});function u1(e,t){if(l1(e,l1.ISO_8601).format(Gue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(u1,"validateDatetime");function Vue(e,t){if(Hue.invert(fh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Bue.get(fh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?fh.LOG_NAMES.HDB:e,i=s===fh.LOG_NAMES.INSTALL?xC.join(que,fh.LOG_NAMES.INSTALL):xC.join(n,s);return kue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Vue,"validateReadLogPath")});var FC=v((Exe,p1)=>{"use strict";var uT=(H(),M(W)),Kue=z(),Yue=fe(),Wue=f1(),BC=require("path"),m1=require("fs-extra"),{once:zue}=require("events"),{handleHDBError:jue,hdbErrors:Que}=Ee(),{PACKAGE_ROOT:Jue}=Rt(),{replicateOperation:Xue}=(cs(),M(Yo)),Zue=BC.join(Jue,"logs"),ede=1e3,tde=200;p1.exports=rde;async function rde(e){let t=Wue(e);if(t)throw jue(t,t.message,Que.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Xue(e),n=Yue.get(uT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?uT.LOG_NAMES.HDB:e.log_name,i=s===uT.LOG_NAMES.INSTALL?BC.join(Zue,uT.LOG_NAMES.INSTALL):BC.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?ede:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(m1.statSync(i).size-(E+5)*tde,0));let b=m1.createReadStream(i,{start:g});b.on("error",k=>{Kue.error(k)});let S=0,R=[],L="",O;b.on("data",k=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;k=L+k;let Q=0,Y;for(;(Y=F.exec(k))&&!b.destroyed;){O&&(O.message=k.slice(Q,Y.index),x(O));let[de,le,ee]=Y,Re=ee.split("] ["),Ie=Re[0],$e=Re[1];Re.splice(0,2),O={timestamp:le,thread:Ie,level:$e,tags:Re,message:""},Q=Y.index+de.length}L=k.slice(Q)}),b.on("end",k=>{b.destroyed||O&&(O.message=L.trim(),x(O))}),b.resume();function x(k){let F,Q,Y;switch(!0){case(a&&l&&d):F=new Date(k.timestamp),Q=new Date(u),Y=new Date(f),k.level===c&&F>=Q&&F<=Y&&S<h?S++:k.level===c&&F>=Q&&F<=Y&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case(a&&l):F=new Date(k.timestamp),Q=new Date(u),k.level===c&&F>=Q&&S<h?S++:k.level===c&&F>=Q&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case(a&&d):F=new Date(k.timestamp),Y=new Date(f),k.level===c&&F<=Y&&S<h?S++:k.level===c&&F<=Y&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case(l&&d):F=new Date(k.timestamp),Q=new Date(u),Y=new Date(f),F>=Q&&F<=Y&&S<h?S++:F>=Q&&F<=Y&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case a:k.level===c&&S<h?S++:k.level===c&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case l:F=new Date(k.timestamp),Q=new Date(u),F>=Q&&S<h?S++:F>=Q&&S>=h&&(Zi(k,p,R),S++,S===E&&b.destroy());break;case d:F=new Date(k.timestamp),Y=new Date(f),F<=Y&&S<h?S++:F<=Y&&S>=h&&(Zi(k,p,R),S++,S===E&&b.destroy());break;default:S<h?S++:(Zi(k,p,R),S++,S===E&&b.destroy())}}o(x,"onLogMessage"),await zue(b,"close");let j=await r;if(j.replicated){for(let k of R)k.node=server.hostname;for(let k of j.replicated){let F=k.node;if(k.status==="failed")Zi({timestamp:new Date().toISOString(),level:"error",node:F,message:`Error retrieving logs: ${k.reason}`},p,R);else for(let Q of k.results)Q.node=F,Zi(Q,p,R)}}return R}o(rde,"readLog");function Zi(e,t,r){t==="desc"?nde(e,r):t==="asc"?sde(e,r):r.push(e)}o(Zi,"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 sde(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(sde,"insertAscending")});var dT=v((Rxe,g1)=>{"use strict";var kC=require("joi"),{string:$d,boolean:h1,date:ide}=kC.types(),ode=dt(),{validateSchemaExists:gxe,validateTableExists:Sxe,validateSchemaName:Txe}=Fi(),ade=(H(),M(W)),cde=At(),E1=fe();E1.initSync();var yxe=$d.invalid(E1.get(ade.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(cde.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),_1={operation:$d.valid("add_node","update_node","set_node_replication"),node_name:$d.optional(),subscriptions:kC.array().items({table:$d.optional(),schema:$d.optional(),database:$d.optional(),subscribe:h1.required(),publish:h1.required().custom(ude),start_time:ide.iso()})};function lde(e){return ode.validateBySchema(e,kC.object(_1))}o(lde,"addUpdateNodeValidator");function ude(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(ude,"checkForFalsy");g1.exports={addUpdateNodeValidator:lde,validationSchema:_1}});var Vd=v((Axe,S1)=>{"use strict";var HC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},GC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};S1.exports={Node:HC,NodeSubscription:GC}});var y1=v((wxe,T1)=>{"use strict";var dde=(H(),M(W)).OPERATIONS_ENUM,qC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=dde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};T1.exports=qC});var mh=v((Cxe,R1)=>{"use strict";var $C=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},VC=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)}};R1.exports={RemotePayloadObject:$C,RemotePayloadSubscription:VC}});var A1=v((Pxe,b1)=>{"use strict";var KC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};b1.exports=KC});var w1=v((xxe,I1)=>{"use strict";var fde=A1(),Dxe=Gt(),Mxe=ht(),mde=z(),{getSchemaPath:vxe,getTransactionAuditStorePath:Uxe}=gt(),{getDatabases:pde}=(Ne(),M(ft));I1.exports=hde;async function hde(e){let t=new fde;try{let r=pde()[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){mde.warn(`unable to stat table dbi due to ${r}`)}return t}o(hde,"lmdbGetTableSize")});var C1=v((Fxe,N1)=>{"use strict";var YC=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}};N1.exports=YC});var hh=v((Vxe,D1)=>{"use strict";var Ede=require("fs-extra"),_de=require("path"),gn=require("systeminformation"),nc=z(),O1=rr(),Hxe=At(),Kd=(H(),M(W)),gde=w1(),Sde=Cl(),{getThreadInfo:P1}=rt(),ph=fe();ph.initSync();var Tde=C1(),{openEnvironment:Gxe}=ht(),{getSchemaPath:qxe}=gt(),{database:$xe,databases:WC}=(Ne(),M(ft)),fT;D1.exports={getHDBProcessInfo:JC,getNetworkInfo:ZC,getDiskInfo:XC,getMemoryInfo:QC,getCPUInfo:jC,getTimeInfo:zC,getSystemInformation:eO,systemInformation:yde,getTableSize:tO,getMetrics:rO};function zC(){return gn.time()}o(zC,"getTimeInfo");async function jC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await gn.cpu();d.cpu_speed=await gn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:b,...S}=await gn.currentLoad();return S.cpus=[],b.forEach(R=>{let{rawLoad:L,rawLoadIdle:O,rawLoadIrq:x,rawLoadNice:j,rawLoadSystem:k,rawLoadUser:F,...Q}=R;S.cpus.push(Q)}),d.current_load=S,d}catch(e){return nc.error(`error in getCPUInfo: ${e}`),{}}}o(jC,"getCPUInfo");async function QC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await gn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return nc.error(`error in getMemoryInfo: ${e}`),{}}}o(QC,"getMemoryInfo");async function JC(){let e={core:[],clustering:[]};try{let t=await gn.processes(),r;try{r=Number.parseInt(await Ede.readFile(_de.join(ph.get(Kd.CONFIG_PARAMS.ROOTPATH),Kd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Kd.NODE_ERROR_CODES.ENOENT)nc.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 nc.error(`error in getHDBProcessInfo: ${t}`),e}}o(JC,"getHDBProcessInfo");async function XC(){let e={};try{if(!ph.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await gn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await gn.fsStats();return e.read_write=u,e.size=await gn.fsSize(),e}catch(t){return nc.error(`error in getDiskInfo: ${t}`),e}}o(XC,"getDiskInfo");async function ZC(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ph.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await gn.networkInterfaceDefault(),e.latency=await gn.inetChecksite("google.com"),(await gn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await gn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return nc.error(`error in getNetworkInfo: ${t}`),e}}o(ZC,"getNetworkInfo");async function eO(){if(fT!==void 0)return fT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await gn.osInfo();e=c;let l=await gn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,fT=e,fT}catch(t){return nc.error(`error in getSystemInformation: ${t}`),e}}o(eO,"getSystemInformation");async function tO(){let e=[],t=await Sde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await gde(n));return e}o(tO,"getTableSize");async function rO(){let e={};for(let t in WC){let r=e[t]={},n=r.tables={};for(let s in WC[t])try{let i=WC[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){nc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(rO,"getMetrics");async function L1(){if(ph.get(Kd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await O1.getNATSReferences(),t=await O1.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(L1,"getNatsStreamInfo");async function yde(e){let t=new Tde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eO(),t.time=zC(),t.cpu=await jC(),t.memory=await QC(),t.disk=await XC(),t.network=await ZC(),t.harperdb_processes=await JC(),t.table_size=await tO(),t.metrics=await rO(),t.threads=await P1(),t.replication=await L1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eO();break;case"time":t.time=zC();break;case"cpu":t.cpu=await jC();break;case"memory":t.memory=await QC();break;case"disk":t.disk=await XC();break;case"network":t.network=await ZC();break;case"harperdb_processes":t.harperdb_processes=await JC();break;case"table_size":t.table_size=await tO();break;case"database_metrics":case"metrics":t.metrics=await rO();break;case"threads":t.threads=await P1();break;case"replication":t.replication=await L1();break;default:break}return t}o(yde,"systemInformation")});var Qo=v((jxe,x1)=>{"use strict";var Rde=xn(),nO=ce(),bde=require("util"),Hl=(H(),M(W)),M1=fe();M1.initSync();var Ade=MN(),v1=mn(),{Node:Yxe,NodeSubscription:Wxe}=Vd(),Ide=Yu(),wde=y1(),{RemotePayloadObject:Nde,RemotePayloadSubscription:Cde}=mh(),{handleHDBError:Ode,hdbErrors:Pde}=Ee(),{HTTP_STATUS_CODES:Lde,HDB_ERROR_MSGS:Dde}=Pde,Mde=ai(),vde=hh(),{packageJson:Ude}=Rt(),{getDatabases:xde}=(Ne(),M(ft)),zxe=bde.promisify(Ade.authorize),Bde=v1.searchByHash,Fde=v1.searchByValue;x1.exports={isEmpty:kde,getNodeRecord:Hde,upsertNodeRecord:Gde,buildNodePayloads:qde,checkClusteringEnabled:$de,getAllNodeRecords:Vde,getSystemInfo:Kde,reverseSubscription:U1};function kde(e){return e==null}o(kde,"isEmpty");async function Hde(e){let t=new Ide(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Bde(t)}o(Hde,"getNodeRecord");async function Gde(e){let t=new wde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Rde.upsert(t)}o(Gde,"upsertNodeRecord");function U1(e){if(nO.isEmpty(e.subscribe)||nO.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(U1,"reverseSubscription");function qde(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=nO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=U1(c),p=xde()[l]?.[u],h=new Cde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Nde(r,t,s,n)}o(qde,"buildNodePayloads");function $de(){if(!M1.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ode(new Error,Dde.CLUSTERING_NOT_ENABLED,Lde.BAD_REQUEST,void 0,void 0,!0)}o($de,"checkClusteringEnabled");async function Vde(){let e=new Mde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Fde(e))}o(Vde,"getAllNodeRecords");async function Kde(){let e=await vde.getSystemInformation();return{hdb_version:Ude.version,node_version:e.node_version,platform:e.platform}}o(Kde,"getSystemInfo")});var sO=v((Jxe,V1)=>{"use strict";var mT=rr(),B1=ce(),F1=At(),k1=(H(),M(W)),pT=z(),H1=aT(),Yde=rp(),{RemotePayloadObject:Wde}=mh(),{handleHDBError:G1,hdbErrors:zde}=Ee(),{HTTP_STATUS_CODES:q1}=zde,{NodeSubscription:$1}=Vd();V1.exports=jde;async function jde(e,t){let r;try{r=await mT.request(`${t}.${F1.REQUEST_SUFFIX}`,new Wde(k1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),pT.trace("Response from remote describe all request:",r)}catch(a){pT.error(`addNode received error from describe all request to remote node: ${a}`);let c=mT.requestErrorHandler(a,"add_node",t);throw G1(new Error,c,q1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===F1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw G1(new Error,a,q1.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===k1.SYSTEM_SCHEMA_NAME){await mT.createLocalTableStream(l,c);let h=new $1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=B1.doesSchemaExist(l),d=n[l]!==void 0,f=c?B1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(pT.trace(`addNode creating schema: ${l}`),await H1.createSchema({operation:"create_schema",schema:l})),!f&&m){pT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Yde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await H1.createTable(h)}await mT.createLocalTableStream(l,c);let p=new $1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(jde,"reviewSubscriptions")});var Yd={};be(Yd,{addNodeBack:()=>iO,removeNodeBack:()=>oO,setNode:()=>Zde});async function Zde(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=hi(t)):t=rT(r);let n=(0,Y1.validateBySchema)(e,Xde);if(n)throw(0,Jo.handleHDBError)(n,n.message,Jde.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Jo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Vt(),E=await h.get(p);if(!E)throw new Jo.ClientError(p+" does not exist");try{await lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?st():p},void 0)}catch(g){ds.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Jo.ClientError("url required for this operation");let s=ja();if(s==null)throw new Jo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Fs.getReplicationCert)();let p=await(0,Fs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Fs.createCsr)(),ds.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ds.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ic.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ic.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ic.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(K1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=K1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ds.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(ds.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Fs.setCertTable)({name:Qde.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Fs.setCertTable)({name:st(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ic.get)(U.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ic.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Vo(st(),p)}await Vo(u?u.nodeName:f.name??hi(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 iO(e){ds.trace("addNodeBack received request:",e);let t=await(0,Fs.signCertificate)(e),r;e.csr?(r=t.signingCA,ds.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,ds.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,Fs.getReplicationCertAuth)();if(n.replicates){let i={url:ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ic.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ic.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Vo(st(),i)}return await Vo(e.hostname,n),t.nodeName=st(),t.usingCA=s?.certificate,ds.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function oO(e){ds.trace("removeNodeBack received request:",e),await Vt().delete(e.name)}function K1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Fs,Y1,sc,ic,ds,Jo,Qde,Jde,Xde,Wd=oe(()=>{Fs=w(us()),Y1=w(dt()),sc=w(require("joi")),ic=w(fe());H();th();Ld();cs();ds=w(z()),Jo=w(Ee()),{pki:Qde}=require("node-forge"),{HTTP_STATUS_CODES:Jde}=Jo.hdbErrors,Xde=sc.default.object({hostname:sc.default.string(),verify_tls:sc.default.boolean(),replicates:sc.default.boolean(),subscriptions:sc.default.array(),revoked_certificates:sc.default.array(),shard:sc.default.number()});o(Zde,"setNode");o(iO,"addNodeBack");o(oO,"removeNodeBack");o(K1,"reverseSubscription")});var ST=v((o0e,z1)=>{"use strict";var{handleHDBError:hT,hdbErrors:efe}=Ee(),{HTTP_STATUS_CODES:ET}=efe,{addUpdateNodeValidator:tfe}=dT(),_T=z(),gT=(H(),M(W)),W1=At(),rfe=ce(),Eh=rr(),_h=Qo(),aO=fe(),nfe=sO(),{Node:sfe,NodeSubscription:ife}=Vd(),{broadcast:ofe}=rt(),{setNode:afe}=(Wd(),M(Yd)),s0e=fe(),i0e=(H(),M(W)),cfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",lfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ufe=aO.get(gT.CONFIG_PARAMS.CLUSTERING_NODENAME);z1.exports=dfe;async function dfe(e,t=!1){if(_T.trace("addNode called with:",e),aO.get(gT.CONFIG_PARAMS.REPLICATION_URL)||aO.get(gT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return afe(e);_h.checkClusteringEnabled();let r=tfe(e);if(r)throw hT(r,r.message,ET.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await _h.getNodeRecord(n);if(!rfe.isEmptyOrZeroLength(f))throw hT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,ET.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=cfe,a;let c=_h.buildNodePayloads(s,ufe,gT.OPERATIONS_ENUM.ADD_NODE,await _h.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new ife(p.schema,p.table,p.publish,p.subscribe))}_T.trace("addNode sending remote payload:",c);let u;try{u=await Eh.request(`${n}.${W1.REQUEST_SUFFIX}`,c)}catch(f){_T.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Eh.updateRemoteConsumer(E,n)}let m=Eh.requestErrorHandler(f,"add_node",n);throw hT(new Error,m,ET.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===W1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw hT(new Error,f,ET.INTERNAL_SERVER_ERROR,"error",f)}_T.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Eh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Eh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new sfe(n,l,u.system_info);return await _h.upsertNodeRecord(d),ofe({type:"nats_update"}),i.length>0?a.message=lfe:a.message=`Successfully added '${n}' to manifest`,a}o(dfe,"addNode")});var dO=v((l0e,Q1)=>{"use strict";var{handleHDBError:cO,hdbErrors:ffe}=Ee(),{HTTP_STATUS_CODES:lO}=ffe,{addUpdateNodeValidator:mfe}=dT(),gh=z(),TT=(H(),M(W)),j1=At(),c0e=ce(),Sh=rr(),Th=Qo(),uO=fe(),{cloneDeep:pfe}=require("lodash"),hfe=sO(),{Node:Efe,NodeSubscription:_fe}=Vd(),{broadcast:gfe}=rt(),{setNode:Sfe}=(Wd(),M(Yd)),Tfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",yfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Rfe=uO.get(TT.CONFIG_PARAMS.CLUSTERING_NODENAME);Q1.exports=bfe;async function bfe(e){if(gh.trace("updateNode called with:",e),uO.get(TT.CONFIG_PARAMS.REPLICATION_URL)??uO.get(TT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Sfe(e);Th.checkClusteringEnabled();let t=mfe(e);if(t)throw cO(t,t.message,lO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Th.getNodeRecord(r);s.length>0&&(n=pfe(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=Tfe,c;let l=Th.buildNodePayloads(i,Rfe,TT.OPERATIONS_ENUM.UPDATE_NODE,await Th.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];gh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}gh.trace("updateNode sending remote payload:",l);let u;try{u=await Sh.request(`${r}.${j1.REQUEST_SUFFIX}`,l)}catch(d){gh.error(`updateNode received error from request: ${d}`);let f=Sh.requestErrorHandler(d,"update_node",r);throw cO(new Error,f,lO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===j1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw cO(new Error,d,lO.INTERNAL_SERVER_ERROR,"error",d)}gh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Sh.updateRemoteConsumer(m,r),m.subscribe===!0?await Sh.updateConsumerIterator(m.schema,m.table,r,"start"):await Sh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Efe(r,[],u.system_info)]),await Afe(n[0],i,u.system_info),a.length>0?c.message=yfe:c.message=`Successfully updated '${r}'`,c}o(bfe,"updateNode");async function Afe(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 _fe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Th.upsertNodeRecord(n),gfe({type:"nats_update"})}o(Afe,"updateNodeTable")});var tK=v((d0e,eK)=>{"use strict";var Z1=require("joi"),{string:J1}=Z1.types(),Ife=dt(),X1=(H(),M(W)),wfe=fe(),Nfe=At();eK.exports=Cfe;function Cfe(e){let t=J1.invalid(wfe.get(X1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Nfe.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=Z1.object({operation:J1.valid(X1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Ife.validateBySchema(e,r)}o(Cfe,"removeNodeValidator")});var yT=v((m0e,oK)=>{"use strict";var{handleHDBError:rK,hdbErrors:Ofe}=Ee(),{HTTP_STATUS_CODES:nK}=Ofe,Pfe=tK(),yh=z(),sK=Qo(),Lfe=ce(),zd=(H(),M(W)),iK=At(),fO=rr(),mO=fe(),{RemotePayloadObject:Dfe}=mh(),{NodeSubscription:Mfe}=Vd(),vfe=tp(),Ufe=gl(),{broadcast:xfe}=rt(),{setNode:Bfe}=(Wd(),M(Yd)),Ffe=mO.get(zd.CONFIG_PARAMS.CLUSTERING_NODENAME);oK.exports=kfe;async function kfe(e){if(yh.trace("removeNode called with:",e),mO.get(zd.CONFIG_PARAMS.REPLICATION_URL)??mO.get(zd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Bfe(e);sK.checkClusteringEnabled();let t=Pfe(e);if(t)throw rK(t,t.message,nK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await sK.getNodeRecord(r);if(Lfe.isEmptyOrZeroLength(n))throw rK(new Error,`Node '${r}' was not found.`,nK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Dfe(zd.OPERATIONS_ENUM.REMOVE_NODE,Ffe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await fO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await fO.updateRemoteConsumer(new Mfe(d.schema,d.table,!1,!1),r)}catch(f){yh.error(f)}}try{i=await fO.request(`${r}.${iK.REQUEST_SUFFIX}`,s),yh.trace("Remove node reply from remote node:",r,i)}catch(l){yh.error("removeNode received error from request:",l),a=!0}let c=new vfe(zd.SYSTEM_SCHEMA_NAME,zd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Ufe.deleteRecord(c),xfe({type:"nats_update"}),i?.status===iK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(yh.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(kfe,"removeNode")});var lK=v((h0e,cK)=>{"use strict";var aK=require("joi"),{string:Hfe,array:Gfe}=aK.types(),qfe=dt(),$fe=dT();cK.exports=Vfe;function Vfe(e){let t=aK.object({operation:Hfe.valid("configure_cluster").required(),connections:Gfe.items($fe.validationSchema).required()});return qfe.validateBySchema(e,t)}o(Vfe,"configureClusterValidator")});var pO=v((_0e,pK)=>{"use strict";var uK=(H(),M(W)),RT=z(),Kfe=ce(),Yfe=fe(),Wfe=yT(),zfe=ST(),jfe=Qo(),Qfe=lK(),{handleHDBError:dK,hdbErrors:Jfe}=Ee(),{HTTP_STATUS_CODES:fK}=Jfe,Xfe="Configure cluster complete.",Zfe="Failed to configure the cluster. Check the logs for more details.",eme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";pK.exports=tme;async function tme(e){RT.trace("configure cluster called with:",e);let t=Qfe(e);if(t)throw dK(t,t.message,fK.BAD_REQUEST,void 0,void 0,!0);let r=await jfe.getAllNodeRecords(),n=[];if(Yfe.get(uK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await mK(Wfe,{operation:uK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}RT.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 mK(zfe,f,f.node_name);s.push(m)}RT.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"&&(RT.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(Kfe.isEmptyOrZeroLength(a))return{message:Xfe,connections:c};if(l)return{message:eme,failed_nodes:a,connections:c};throw dK(new Error,Zfe,fK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(tme,"configureCluster");async function mK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(mK,"functionWrapper")});var gK=v((S0e,_K)=>{"use strict";var Rh=require("joi"),rme=dt(),{validateSchemaExists:hK,validateTableExists:nme,validateSchemaName:EK}=Fi(),sme=Rh.object({operation:Rh.string().valid("purge_stream"),schema:Rh.string().custom(hK).custom(EK).optional(),database:Rh.string().custom(hK).custom(EK).optional(),table:Rh.string().custom(nme).required()});function ime(e){return rme.validateBySchema(e,sme)}o(ime,"purgeStreamValidator");_K.exports=ime});var hO=v((y0e,SK)=>{"use strict";var{handleHDBError:ome,hdbErrors:ame}=Ee(),{HTTP_STATUS_CODES:cme}=ame,lme=gK(),ume=rr(),dme=Qo();SK.exports=fme;async function fme(e){e.schema=e.schema??e.database;let t=lme(e);if(t)throw ome(t,t.message,cme.BAD_REQUEST,void 0,void 0,!0);dme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ume.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(fme,"purgeStream")});var gO=v((b0e,NK)=>{"use strict";var _O=Qo(),mme=rr(),AT=fe(),jd=(H(),M(W)),Gl=At(),pme=ce(),EO=z(),{RemotePayloadObject:hme}=mh(),{ErrorCode:TK}=require("nats"),{parentPort:yK}=require("worker_threads"),{onMessageByType:Eme}=rt(),{getThisNodeName:_me}=(cs(),M(Yo)),{requestClusterStatus:gme}=(th(),M(v$)),{getReplicationSharedStatus:Sme,getHDBNodeTable:Tme}=(Ld(),M(O$)),{CONFIRMATION_STATUS_POSITION:yme,RECEIVED_VERSION_POSITION:RK,RECEIVED_TIME_POSITION:Rme,SENDING_TIME_POSITION:bme,RECEIVING_STATUS_POSITION:Ame,RECEIVING_STATUS_RECEIVING:Ime}=(NC(),M(IV)),bK=AT.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED),AK=AT.get(jd.CONFIG_PARAMS.CLUSTERING_NODENAME);NK.exports={clusterStatus:wme,buildNodeStatus:wK};var IK;Eme("cluster-status",async e=>{IK(e)});async function wme(){if(AT.get(jd.CONFIG_PARAMS.REPLICATION_URL)||AT.get(jd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(yK){yK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{IK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Sme(u,l,a);c.lastCommitConfirmed=bT(d[yme]),c.lastReceivedRemoteTime=bT(d[RK]),c.lastReceivedLocalTime=bT(d[Rme]),c.lastReceivedVersion=d[RK],c.sendingMessage=bT(d[bme]),c.lastReceivedStatus=d[Ame]===Ime?"Receiving":"Waiting"}}}else n=gme();n.node_name=_me();let s=Tme().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:AK,is_enabled:bK,connections:[]};if(!bK)return e;let t=await _O.getAllNodeRecords();if(pme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(wK(t[n],e.connections));return await Promise.allSettled(r),e}o(wme,"clusterStatus");function bT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(bT,"asDate");async function wK(e,t){let r=e.name,n=new hme(jd.OPERATIONS_ENUM.CLUSTER_STATUS,AK,void 0,await _O.getSystemInfo()),s,i,a=Gl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await mme.request(Gl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Gl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Gl.CLUSTER_STATUS_STATUSES.CLOSED,EO.error(`Error getting node status from ${r} `,s))}catch(l){EO.warn(`Error getting node status from ${r}`,l),l.code===TK.NoResponders?a=Gl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===TK.Timeout?a=Gl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Gl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Nme(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!==jd.PRE_4_0_0_VERSION&&await _O.upsertNodeRecord(l)}catch(l){EO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(wK,"buildNodeStatus");function Nme(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(Nme,"NodeStatusObject")});var TO=v((I0e,CK)=>{"use strict";var{handleHDBError:Cme,hdbErrors:Ome}=Ee(),{HTTP_STATUS_CODES:Pme}=Ome,Lme=rr(),Dme=Qo(),SO=ce(),IT=require("joi"),Mme=dt(),vme=2e3,Ume=IT.object({timeout:IT.number().min(1),connected_nodes:IT.boolean(),routes:IT.boolean()});CK.exports=xme;async function xme(e){Dme.checkClusteringEnabled();let t=Mme.validateBySchema(e,Ume);if(t)throw Cme(t,t.message,Pme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||SO.autoCastBoolean(n),a=s===void 0||SO.autoCastBoolean(s),c={nodes:[]},l=await Lme.getServerList(r??vme),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:SO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(xme,"clusterNetwork")});var DK=v((N0e,LK)=>{"use strict";var yO=require("joi"),OK=dt(),{routeConstraints:PK}=Rb();LK.exports={setRoutesValidator:Bme,deleteRoutesValidator:Fme};function Bme(e){let t=yO.object({server:yO.valid("hub","leaf"),routes:PK.required()});return OK.validateBySchema(e,t)}o(Bme,"setRoutesValidator");function Fme(e){let t=yO.object({routes:PK.required()});return OK.validateBySchema(e,t)}o(Fme,"deleteRoutesValidator")});var wT=v((O0e,kK)=>{"use strict";var Xo=pt(),RO=ce(),ks=(H(),M(W)),Qd=fe(),MK=DK(),{handleHDBError:vK,hdbErrors:kme}=Ee(),{HTTP_STATUS_CODES:UK}=kme,xK="cluster routes successfully set",BK="cluster routes successfully deleted";kK.exports={setRoutes:Gme,getRoutes:qme,deleteRoutes:$me};function Hme(e){let t=Xo.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=RO.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"?Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:xK,set:i,skipped:s}}o(Hme,"setRoutesNats");function Gme(e){let t=MK.setRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(Qd.get(ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Hme(e);let r=[],n=[],s=Qd.get(ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{FK(s,i)?n.push(i):(s.push(i),r.push(i))}),Xo.updateConfigValue(ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:xK,set:r,skipped:n}}o(Gme,"setRoutes");function FK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(FK,"existsInArray");function qme(){if(Qd.get(ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Xo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Qd.get(ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(qme,"getRoutes");function $me(e){let t=MK.deleteRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(Qd.get(ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Vme(e);let r=[],n=[],s=Qd.get(ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{FK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Xo.updateConfigValue(ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:BK,deleted:r,skipped:n}}o($me,"deleteRoutes");function Vme(e){let t=Xo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=RO.isEmptyOrZeroLength(r)?null:r,Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=RO.isEmptyOrZeroLength(n)?null:n,Xo.updateConfigValue(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:BK,deleted:s,skipped:i}}o(Vme,"deleteRoutesNats")});var GK=v((L0e,HK)=>{"use strict";var bh=require("alasql"),ql=require("recursive-iterator"),gi=z(),Kme=ce(),Ah=(H(),M(W)),bO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Wme(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>Ah.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!Ah.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,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][Ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Yme(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=>!Ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new bh.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Yme(e){return e.filter(t=>t[Ah.PERMS_CRUD_ENUM.READ])}o(Yme,"filterReadRestrictedAttrs");function Wme(e,t,r,n,s){zme(e,t,r,n,s)}o(Wme,"interpretAST");function Ih(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(Ih,"addSchemaTableToMap");function zme(e,t,r,n,s){if(!e){gi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof bh.yy.Insert?Xme(e,t,r):e instanceof bh.yy.Select?jme(e,t,r,n,s):e instanceof bh.yy.Update?Qme(e,t,r):e instanceof bh.yy.Delete?Jme(e,t,r):gi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(zme,"getRecordAttributesAST");function jme(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(Kme.isEmptyOrZeroLength(i)){gi.error("No schema specified");return}e.from.forEach(c=>{Ih(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ih(c.table,t,r,n,s)});let a=new ql(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 ql(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 ql(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 ql(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(jme,"getSelectAttributes");function Qme(e,t,r){if(!e){gi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ql(e.columns),s=e.table.databaseid;Ih(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&AO(e.table.tableid,s,i.columnid,t,r)}o(Qme,"getUpdateAttributes");function Jme(e,t,r){if(!e){gi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ql(e.where),s=e.table.databaseid;Ih(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&AO(e.table.tableid,s,i.columnid,t,r)}o(Jme,"getDeleteAttributes");function Xme(e,t,r){if(!e){gi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ql(e.columns),s=e.into.databaseid;Ih(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&AO(e.into.tableid,s,i.columnid,t,r)}o(Xme,"getInsertAttributes");function AO(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(AO,"pushAttribute");HK.exports=bO});var $K=v((M0e,qK)=>{"use strict";var Zme=At(),IO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Zme.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};qK.exports=IO});var YK=v((U0e,KK)=>{"use strict";var VK=At(),wO=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+VK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+VK.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"}};KK.exports=wO});var zK=v((B0e,WK)=>{"use strict";var NO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};WK.exports=NO});var QK=v((k0e,jK)=>{"use strict";var epe=At(),CO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+epe.SERVER_SUFFIX.ADMIN,this.password=r}};jK.exports=CO});var PT=v((G0e,ZK)=>{"use strict";var $l=require("path"),Vl=require("fs-extra"),tpe=$K(),rpe=YK(),npe=zK(),spe=QK(),OO=Fn(),Xd=ce(),Hn=pt(),CT=(H(),M(W)),wh=At(),{CONFIG_PARAMS:nr}=CT,Zd=z(),Nh=fe(),JK=Vi(),PO=rr(),ipe=us(),Jd="clustering",ope=1e4,XK=50;ZK.exports={generateNatsConfig:cpe,removeNatsConfig:lpe,getHubConfigPath:ape};function ape(){let e=Nh.get(nr.ROOTPATH);return $l.join(e,Jd,wh.NATS_CONFIG_FILES.HUB_SERVER)}o(ape,"getHubConfigPath");async function cpe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Nh.get(nr.ROOTPATH);Vl.ensureDirSync($l.join(r,"clustering","leaf")),Nh.initSync();let n=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Hn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Vl.exists(i)&&!await Vl.exists(!n)&&await ipe.createNatsCerts();let a=$l.join(r,Jd,wh.PID_FILES.HUB),c=$l.join(r,Jd,wh.PID_FILES.LEAF),l=Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=$l.join(r,Jd,wh.NATS_CONFIG_FILES.HUB_SERVER),d=$l.join(r,Jd,wh.NATS_CONFIG_FILES.LEAF_SERVER),f=Hn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Hn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),p=Hn.getConfigFromFile(nr.CLUSTERING_NODENAME),h=Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await PO.checkNATSServerInstalled()||OT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await OO.listUsers(),g=Hn.getConfigFromFile(nr.CLUSTERING_USER),b=await OO.getClusterUser();(Xd.isEmpty(b)||b.active!==!0)&&OT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await NT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await NT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await NT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await NT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[Q,Y]of E.entries())Y.role?.role===CT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new spe(Y.username,JK.decrypt(Y.hash))),R.push(new npe(Y.username,JK.decrypt(Y.hash))));let L=[],{hub_routes:O}=Hn.getClusteringRoutes();if(!Xd.isEmptyOrZeroLength(O))for(let Q of O)L.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let x=new tpe(Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,S,R);n==null&&(delete x.tls.ca_file,delete x.leafnodes.tls.ca_file),t=Xd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===CT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vl.writeJson(u,x),Zd.trace(`Hub server config written to ${u}`));let j=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new rpe(Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[j],[k],S,R,i,s,n,f);n==null&&delete F.tls.ca_file,(t===void 0||t===CT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vl.writeJson(d,F),Zd.trace(`Leaf server config written to ${d}`))}o(cpe,"generateNatsConfig");async function NT(e){let t=Nh.get(e);return Xd.isEmpty(t)&&OT(`port undefined for '${e}'`),await Xd.isPortTaken(t)&&OT(`'${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(NT,"isPortAvailable");function OT(e){let t=`Error generating clustering config: ${e}`;Zd.error(t),console.error(t),process.exit(1)}o(OT,"generateNatsConfigError");async function lpe(e){let{port:t,config_file:r}=PO.getServerConfig(e),{username:n,decrypt_hash:s}=await OO.getClusterUser(),i=0,a=2e3;for(;i<XK;){try{let d=await PO.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>=XK)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(ope),l=$l.join(Nh.get(nr.ROOTPATH),Jd,r);await Vl.writeFile(l,c),await Vl.remove(l),Zd.notify(e,"started.")}o(lpe,"removeNatsConfig")});var iY=v(($0e,sY)=>{"use strict";var fs=fe(),Qe=(H(),M(W)),Ch=At(),Zo=require("path"),{PACKAGE_ROOT:DT}=Rt(),eY=fe(),LT=ce(),ef="/dev/null",upe=Zo.join(DT,"launchServiceScripts"),tY=Zo.join(DT,"utility/scripts"),dpe=Zo.join(tY,Qe.HDB_RESTART_SCRIPT),rY=Zo.resolve(DT,"dependencies",`${process.platform}-${process.arch}`,Ch.NATS_BINARY_NAME);function nY(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return LT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:DT}}o(nY,"generateMainServerConfig");var fpe=9930;function mpe(){fs.initSync(!0);let e=fs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Zo.join(e,"clustering",Ch.NATS_CONFIG_FILES.HUB_SERVER),r=Zo.join(fs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=eY.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ch.LOG_LEVEL_FLAGS[fs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==fpe?"-"+n:""),binFile:rY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ef,i.error_file=ef),i}o(mpe,"generateNatsHubServerConfig");var ppe=9940;function hpe(){fs.initSync(!0);let e=fs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Zo.join(e,"clustering",Ch.NATS_CONFIG_FILES.LEAF_SERVER),r=Zo.join(fs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=eY.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ch.LOG_LEVEL_FLAGS[fs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ppe?"-"+n:""),binFile:rY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ef,i.error_file=ef),i}o(hpe,"generateNatsLeafServerConfig");function Epe(){fs.initSync();let e=Zo.join(fs.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:upe,autorestart:!1};return fs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ef,t.error_file=ef),t}o(Epe,"generateClusteringUpgradeV4ServiceConfig");function _pe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return LT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:tY},script:dpe}}o(_pe,"generateRestart");function gpe(){return{apps:[nY()]}}o(gpe,"generateAllServiceConfigs");sY.exports={generateAllServiceConfigs:gpe,generateMainServerConfig:nY,generateRestart:_pe,generateNatsHubServerConfig:mpe,generateNatsLeafServerConfig:hpe,generateClusteringUpgradeV4ServiceConfig:Epe}});var tf=v((Y0e,fY)=>{"use strict";var Nr=(H(),M(W)),K0e=ce(),ta=PT(),MT=rr(),ea=At(),oc=iY(),DO=fe(),ac=z(),Spe=Qo(),{startWorker:oY,onMessageFromWorkers:Tpe}=rt(),aY=require("fs"),ype=require("node:path"),Rpe=(H(),M(W)),{setTimeout:bpe}=require("node:timers/promises"),{execFile:Ape,fork:Ipe}=require("node:child_process");fY.exports={start:cc,restart:Npe,kill:Lpe,startAllServices:Dpe,startService:lY,restartHdb:Cpe,startClusteringProcesses:uY,startClusteringThreads:dY,isHdbRestartRunning:Ope,getHdbPid:Ppe,cleanupChildrenProcesses:Oh,reloadClustering:vpe,expectedRestartOfChildren:cY};Tpe(e=>{e.type==="restart"&&DO.initSync(!0)});var eo=[],wpe=10,LO;function cc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?Ipe(e.script,r,e):Ape(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=eo.indexOf(n);c>-1&&eo.splice(c,1),!LO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<wpe&&(aY.existsSync(ta.getHubConfigPath())?cc(e):(await ta.generateNatsConfig(!0),cc(e),await new Promise(l=>setTimeout(l,3e3)),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=DO.get(Nr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&ea.LOG_LEVEL_HIERARCHY[c]>=ea.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ea.LOG_LEVELS.ERR||f===ea.LOG_LEVELS.WRN?ac.OUTPUTS.STDERR:ac.OUTPUTS.STDOUT;ac.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ea.LOG_LEVELS[p]}if(ea.LOG_LEVEL_HIERARCHY[c]>=ea.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ea.LOG_LEVELS.ERR||f===ea.LOG_LEVELS.WRN?ac.OUTPUTS.STDERR:ac.OUTPUTS.STDOUT;ac.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),eo.length===0&&(t||(process.on("exit",Oh),process.on("SIGINT",Oh),process.on("SIGQUIT",Oh),process.on("SIGTERM",Oh))),eo.push(n)}o(cc,"start");function Oh(e=!0){if(!LO&&(LO=!0,eo.length!==0))if(ac.info("Killing child processes..."),eo.map(t=>t.kill()),e)process.exit(0);else return bpe(2e3)}o(Oh,"cleanupChildrenProcesses");function Npe(e){cY();for(let t of eo)t.name===e&&t.kill()}o(Npe,"restart");function cY(){for(let e of eo)e.config&&(e.config.restarts=0)}o(cY,"expectedRestartOfChildren");async function Cpe(){await cc(oc.generateRestart())}o(Cpe,"restartHdb");async function Ope(){let e=await list();for(let t in e)if(e[t].name===Nr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Ope,"isHdbRestartRunning");function Ppe(){let e=DO.getHdbBasePath();if(!e)return;let t=ype.join(e,Rpe.HDB_PID_FILE),r=Upe(t);if(r&&xpe(r))return r}o(Ppe,"getHdbPid");function Lpe(){for(let e of eo)e.kill();eo=[]}o(Lpe,"kill");async function Dpe(){await uY(),await dY(),await cc(oc.generateAllServiceConfigs())}o(Dpe,"startAllServices");async function lY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Nr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=oc.generateMainServerConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=oc.generateNatsIngestServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=oc.generateNatsReplyServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=oc.generateNatsHubServerConfig(),await cc(r,t),await ta.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=oc.generateNatsLeafServerConfig(),await cc(r,t),await ta.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=oc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}cc(r,t)}o(lY,"startService");var Mpe;async function uY(e=!1){for(let t in Nr.CLUSTERING_PROCESSES){let r=Nr.CLUSTERING_PROCESSES[t];await lY(r,e)}}o(uY,"startClusteringProcesses");async function dY(){Mpe=oY(Nr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Nr.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===Nr.PRE_4_0_0_VERSION){ac.info("Starting clustering upgrade 4.0.0 process"),oY(Nr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(dY,"startClusteringThreads");async function vpe(){await ta.generateNatsConfig(!0),await MT.reloadNATSHub(),await MT.reloadNATSLeaf(),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ta.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(vpe,"reloadClustering");function Upe(e){try{return Number.parseInt(aY.readFileSync(e,"utf8"),10)}catch{return null}}o(Upe,"readPidFile");function xpe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(xpe,"isProcessRunning")});var UO={};be(UO,{compactOnStart:()=>Bpe,copyDb:()=>gY});async function Bpe(){lc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,MO.get)(U.ROOTPATH),t=new Map,r=ot();(0,vO.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,vT.join)(e,"backup",n+".mdb"),a=(0,vT.join)(e,kc,n+"-copy.mdb"),c=0;try{c=await mY(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 gY(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)}}try{dd()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Kl.move)(i,s,{overwrite:!0}),await(0,Kl.remove)((0,vT.join)(e,kc,`${n}-copy.mdb-lock`));try{dd()}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,vO.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 dd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await mY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
20
20
  Total record count before compaction: ${i}, total after: ${c}.
21
- Database backup has not been removed and can be found here: ${s}`;lc.error(l),console.error(l)}(0,MO.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Kl.remove)(s))}}async function mY(e){let t=await(0,_Y.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function rf(){}async function gY(e,t){console.log(`Copying database ${e} to ${t}`);let r=ot()[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 p in m.indices){let h=m.indices[p];h.put=rf,h.remove=rf}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,pY.open)(new hY.default(t)),c=a.openDB(xT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=rS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let b=new EY.OpenDBIObject(!h,h);b.encoding="binary",b.compression=E;let S=n.openDB(m,b);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",b.compression=g;let R=a.openDB(m,b);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,R,h,d)}if(i){let m=n.openDB(xT.AUDIT_STORE_NAME,Pm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,b=0,S=1e7,R=null;for(;S-- >0;)try{for(let L of m.getKeys({start:R,transaction:E}))try{R=L;let{value:O,version:x}=m.getEntry(L,{transaction:E});l=p.put(L,O,h?x:void 0),g++,E.openTimer&&(E.openTimer=0),b+=(L?.length||10)+O.length,u++>5e3&&(await l,console.log("copied",g,"entries",b,"bytes"),u=0)}catch(O){console.error("Error copying record",typeof L=="symbol"?"symbol":L,"from",e,"to",t,O)}console.log("finish copying, copied",g,"entries",b,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var pY,UT,Kl,MO,hY,EY,xT,_Y,vO,lc,xO=oe(()=>{Ne();pY=require("lmdb"),UT=require("path"),Kl=require("fs-extra"),MO=w(fe()),hY=w($m()),EY=w(qm()),xT=w(Gt());H();Ro();_Y=w(Cl()),vO=w(pt()),lc=w(z());o(kpe,"compactOnStart");o(mY,"getTotalDBRecordCount");o(rf,"noop");o(gY,"copyDb")});var FO=v((tBe,SY)=>{"use strict";var Ph=fe();Ph.initSync();var nf=require("fs-extra"),BO=require("path"),sf=(H(),M(W)),Hpe=require("crypto"),Gpe=require("uuid").v4;SY.exports=qpe;function qpe(){if(Ph.getHdbBasePath()!==void 0){let e=BO.join(Ph.getHdbBasePath(),sf.LICENSE_KEY_DIR_NAME,sf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=BO.join(Ph.getHdbBasePath(),sf.LICENSE_KEY_DIR_NAME,sf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=BO.join(Ph.getHdbBasePath(),sf.LICENSE_KEY_DIR_NAME,sf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{nf.accessSync(r),nf.accessSync(e),nf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Gpe(),i=Hpe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});nf.writeFileSync(r,s),nf.writeFileSync(e,i.privateKey),nf.writeFileSync(t,i.publicKey)}else throw n}}}o(qpe,"checkJWTTokenExist")});var yY=v((nBe,TY)=>{"use strict";var kO=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};TY.exports={HdbInfoInsertObject:kO}});var AY=v((iBe,bY)=>{"use strict";var RY=(H(),M(W)),HO=class{static{o(this,"UpgradeObject")}constructor(t,r){this[RY.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[RY.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};bY.exports={UpgradeObject:HO}});var BT=v((aBe,wY)=>{"use strict";var Hs=require("prompt"),of=require("chalk"),IY=z(),Si=require("os"),GO=Hc(),qO=["yes","y"];async function $pe(e){let t=`${Si.EOL}`+of.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Si.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}${Si.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Si.EOL}`;Hs.override=GO(["CONFIRM_UPGRADE"]),Hs.start(),Hs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:of.magenta(`${Si.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 Hs.get([r])}catch(s){return IY.error("There was an error when prompting user about an upgrade."),IY.error(s),!1}return qO.includes(n.CONFIRM_UPGRADE)}o($pe,"forceUpdatePrompt");async function Vpe(e){let t=`${Si.EOL}`+of.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}`);Hs.override=GO(["CONFIRM_DOWNGRADE"]),Hs.start(),Hs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:of.magenta(`${Si.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 Hs.get([r]);return qO.includes(n.CONFIRM_DOWNGRADE)}o(Vpe,"forceDowngradePrompt");async function Kpe(){let e=`${Si.EOL}`+of.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Hs.override=GO(["GENERATE_CERTS"]),Hs.start(),Hs.message=e;let t={properties:{GENERATE_CERTS:{description:of.magenta(`${Si.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 Hs.get([t]);return qO.includes(r.GENERATE_CERTS)}o(Kpe,"upgradeCertsPrompt");wY.exports={forceUpdatePrompt:$pe,forceDowngradePrompt:Vpe,upgradeCertsPrompt:Kpe}});var FT=v((lBe,NY)=>{"use strict";var $O=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};NY.exports=$O});var OY=v((hBe,CY)=>{"use strict";var Ype=ce(),Wpe=pt(),dBe=z(),fBe=require("path"),mBe=require("fs"),pBe=(H(),M(W));CY.exports={getOldPropsValue:zpe};function zpe(e,t,r=!1){let n=t.getRaw(e);return Ype.isNotEmptyAndHasValue(n)?n:r?Wpe.getDefaultConfig(e):""}o(zpe,"getOldPropsValue")});var MY=v((_Be,DY)=>{"use strict";var uc=require("path"),dc=require("fs-extra"),jpe=require("properties-reader"),Qpe=FT(),hr=z(),{getOldPropsValue:Et}=OY(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:Yl}=(H(),M(W)),Wl=pt(),kT=fe(),PY=ce(),to=(H(),M(W)),VO=new Qpe("3.1.0"),LY=[];function Jpe(){let e=jpe(kT.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),hr.info(t);let r=` ;Settings for the HarperDB process.
21
+ Database backup has not been removed and can be found here: ${s}`;lc.error(l),console.error(l)}(0,MO.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Kl.remove)(s))}}async function mY(e){let t=await(0,_Y.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function rf(){}async function gY(e,t){console.log(`Copying database ${e} to ${t}`);let r=ot()[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 p in m.indices){let h=m.indices[p];h.put=rf,h.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,pY.open)(new hY.default(t)),c=a.openDB(UT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=tS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let b=new EY.OpenDBIObject(!h,h);b.encoding="binary",b.compression=E;let S=n.openDB(m,b);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",b.compression=g;let R=a.openDB(m,b);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,R,h,d)}if(i){let m=n.openDB(UT.AUDIT_STORE_NAME,Pm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,b=0,S=1e7,R=null;for(;S-- >0;)try{for(let L of m.getKeys({start:R,transaction:E}))try{R=L;let{value:O,version:x}=m.getEntry(L,{transaction:E});l=p.put(L,O,h?x:void 0),g++,E.openTimer&&(E.openTimer=0),b+=(L?.length||10)+O.length,u++>5e3&&(await l,console.log("copied",g,"entries",b,"bytes"),u=0)}catch(O){console.error("Error copying record",typeof L=="symbol"?"symbol":L,"from",e,"to",t,O)}console.log("finish copying, copied",g,"entries",b,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var pY,vT,Kl,MO,hY,EY,UT,_Y,vO,lc,xO=oe(()=>{Ne();pY=require("lmdb"),vT=require("path"),Kl=require("fs-extra"),MO=w(fe()),hY=w($m()),EY=w(qm()),UT=w(Gt());H();Ro();_Y=w(Cl()),vO=w(pt()),lc=w(z());o(Bpe,"compactOnStart");o(mY,"getTotalDBRecordCount");o(rf,"noop");o(gY,"copyDb")});var FO=v((X0e,SY)=>{"use strict";var Ph=fe();Ph.initSync();var nf=require("fs-extra"),BO=require("path"),sf=(H(),M(W)),Fpe=require("crypto"),kpe=require("uuid").v4;SY.exports=Hpe;function Hpe(){if(Ph.getHdbBasePath()!==void 0){let e=BO.join(Ph.getHdbBasePath(),sf.LICENSE_KEY_DIR_NAME,sf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=BO.join(Ph.getHdbBasePath(),sf.LICENSE_KEY_DIR_NAME,sf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=BO.join(Ph.getHdbBasePath(),sf.LICENSE_KEY_DIR_NAME,sf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{nf.accessSync(r),nf.accessSync(e),nf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=kpe(),i=Fpe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});nf.writeFileSync(r,s),nf.writeFileSync(e,i.privateKey),nf.writeFileSync(t,i.publicKey)}else throw n}}}o(Hpe,"checkJWTTokenExist")});var yY=v((eBe,TY)=>{"use strict";var kO=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};TY.exports={HdbInfoInsertObject:kO}});var AY=v((rBe,bY)=>{"use strict";var RY=(H(),M(W)),HO=class{static{o(this,"UpgradeObject")}constructor(t,r){this[RY.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[RY.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};bY.exports={UpgradeObject:HO}});var xT=v((sBe,wY)=>{"use strict";var Hs=require("prompt"),of=require("chalk"),IY=z(),Si=require("os"),GO=Hc(),qO=["yes","y"];async function Gpe(e){let t=`${Si.EOL}`+of.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Si.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}${Si.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Si.EOL}`;Hs.override=GO(["CONFIRM_UPGRADE"]),Hs.start(),Hs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:of.magenta(`${Si.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 Hs.get([r])}catch(s){return IY.error("There was an error when prompting user about an upgrade."),IY.error(s),!1}return qO.includes(n.CONFIRM_UPGRADE)}o(Gpe,"forceUpdatePrompt");async function qpe(e){let t=`${Si.EOL}`+of.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}`);Hs.override=GO(["CONFIRM_DOWNGRADE"]),Hs.start(),Hs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:of.magenta(`${Si.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 Hs.get([r]);return qO.includes(n.CONFIRM_DOWNGRADE)}o(qpe,"forceDowngradePrompt");async function $pe(){let e=`${Si.EOL}`+of.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Hs.override=GO(["GENERATE_CERTS"]),Hs.start(),Hs.message=e;let t={properties:{GENERATE_CERTS:{description:of.magenta(`${Si.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 Hs.get([t]);return qO.includes(r.GENERATE_CERTS)}o($pe,"upgradeCertsPrompt");wY.exports={forceUpdatePrompt:Gpe,forceDowngradePrompt:qpe,upgradeCertsPrompt:$pe}});var BT=v((oBe,NY)=>{"use strict";var $O=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};NY.exports=$O});var OY=v((fBe,CY)=>{"use strict";var Vpe=ce(),Kpe=pt(),cBe=z(),lBe=require("path"),uBe=require("fs"),dBe=(H(),M(W));CY.exports={getOldPropsValue:Ype};function Ype(e,t,r=!1){let n=t.getRaw(e);return Vpe.isNotEmptyAndHasValue(n)?n:r?Kpe.getDefaultConfig(e):""}o(Ype,"getOldPropsValue")});var MY=v((pBe,DY)=>{"use strict";var uc=require("path"),dc=require("fs-extra"),Wpe=require("properties-reader"),zpe=BT(),hr=z(),{getOldPropsValue:Et}=OY(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:Yl}=(H(),M(W)),Wl=pt(),FT=fe(),PY=ce(),to=(H(),M(W)),VO=new zpe("3.1.0"),LY=[];function jpe(){let e=Wpe(FT.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),hr.info(t);let r=` ;Settings for the HarperDB process.
22
22
 
23
23
  ;The directory selected during install where the database files reside.
24
24
  ${Se.HDB_ROOT_KEY} = ${Et(Se.HDB_ROOT_KEY,e)}
@@ -87,53 +87,53 @@ ${Se.CUSTOM_FUNCTIONS_PORT_KEY} = ${Wl.getDefaultConfig(Yl.HTTP_PORT)}
87
87
  ${Se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${uc.join(Et(Se.HDB_ROOT_KEY,e),"custom_functions")}
88
88
  ;Set the max number of processes HarperDB will start for the Custom Functions server
89
89
  ${Se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Wl.getDefaultConfig(Yl.HTTP_THREADS)}
90
- `,n=kT.get("settings_path"),s=uc.dirname(n),i=uc.join(s,"3_1_0_upgrade_settings.bak");try{hr.info(`Backing up old settings file to: ${i}`),dc.copySync(n,i)}catch(c){throw hr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{hr.info("New settings file values for 3.1.0 upgrade:",r),hr.info(`Creating new/upgraded settings file at '${n}'`),dc.writeFileSync(n,r),hr.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."),hr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),hr.error(c),dc.copySync(i,n),c}kT.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),hr.info(a),a}o(Jpe,"updateSettingsFile310");function Xpe(){let e=uc.join(PY.getHomeDir(),to.HDB_HOME_DIR_NAME,to.LICENSE_KEY_DIR_NAME,to.LICENSE_FILE_NAME),t=uc.join(PY.getHomeDir(),to.HDB_HOME_DIR_NAME,to.LICENSE_KEY_DIR_NAME,to.REG_KEY_FILE_NAME),r=uc.join(kT.getHdbBasePath(),to.LICENSE_KEY_DIR_NAME,to.LICENSE_FILE_NAME),n=uc.join(r,to.LICENSE_FILE_NAME),s=uc.join(r,to.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),hr.info(i);let a="Creating .license directory";console.log(a),hr.info(a),dc.mkdirpSync(r);try{dc.accessSync(e);try{let c="Moving licence file";console.log(c),hr.info(c),dc.moveSync(e,n);let l="License file successfully moved.";console.log(l),hr.info(l)}catch{let l="moving license file failed";console.error(l),hr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),hr.warn(l)}try{dc.accessSync(t);try{let c="Moving registration file";console.log(c),hr.info(c),dc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),hr.info(l)}catch{let l="moving registration file failed";console.error(l),hr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),hr.warn(l)}}o(Xpe,"moveLicenseFiles");VO.sync_functions.push(Jpe);VO.sync_functions.push(Xpe);LY.push(VO);DY.exports=LY});var FY=v((SBe,BY)=>{"use strict";var ms=ht(),{insertRecords:Zpe}=ol(),ehe=Cn(),fc=Gt(),the=ce(),ra=z(),rhe=ce(),ro=require("fs-extra"),na=require("path"),nhe=require("cli-progress"),Lh=require("assert"),she=require("pino"),ihe=fe();BY.exports=ohe;var HT,vY,GT,KO,Sn,Dh=!1;async function ohe(e=!0){return HT=ihe.getHdbBasePath(),vY=na.join(HT,"schema"),GT=na.join(HT,"4_0_0_upgrade_tmp"),KO=na.join(HT,"transactions"),console.info("Reindexing upgrade started for schemas"),ra.notify("Reindexing upgrade started for schemas"),await UY(vY,!1,e),await ro.pathExists(KO)&&(console.info(`
90
+ `,n=FT.get("settings_path"),s=uc.dirname(n),i=uc.join(s,"3_1_0_upgrade_settings.bak");try{hr.info(`Backing up old settings file to: ${i}`),dc.copySync(n,i)}catch(c){throw hr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{hr.info("New settings file values for 3.1.0 upgrade:",r),hr.info(`Creating new/upgraded settings file at '${n}'`),dc.writeFileSync(n,r),hr.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."),hr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),hr.error(c),dc.copySync(i,n),c}FT.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),hr.info(a),a}o(jpe,"updateSettingsFile310");function Qpe(){let e=uc.join(PY.getHomeDir(),to.HDB_HOME_DIR_NAME,to.LICENSE_KEY_DIR_NAME,to.LICENSE_FILE_NAME),t=uc.join(PY.getHomeDir(),to.HDB_HOME_DIR_NAME,to.LICENSE_KEY_DIR_NAME,to.REG_KEY_FILE_NAME),r=uc.join(FT.getHdbBasePath(),to.LICENSE_KEY_DIR_NAME,to.LICENSE_FILE_NAME),n=uc.join(r,to.LICENSE_FILE_NAME),s=uc.join(r,to.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),hr.info(i);let a="Creating .license directory";console.log(a),hr.info(a),dc.mkdirpSync(r);try{dc.accessSync(e);try{let c="Moving licence file";console.log(c),hr.info(c),dc.moveSync(e,n);let l="License file successfully moved.";console.log(l),hr.info(l)}catch{let l="moving license file failed";console.error(l),hr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),hr.warn(l)}try{dc.accessSync(t);try{let c="Moving registration file";console.log(c),hr.info(c),dc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),hr.info(l)}catch{let l="moving registration file failed";console.error(l),hr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),hr.warn(l)}}o(Qpe,"moveLicenseFiles");VO.sync_functions.push(jpe);VO.sync_functions.push(Qpe);LY.push(VO);DY.exports=LY});var FY=v((EBe,BY)=>{"use strict";var ms=ht(),{insertRecords:Jpe}=ol(),Xpe=Cn(),fc=Gt(),Zpe=ce(),ra=z(),ehe=ce(),ro=require("fs-extra"),na=require("path"),the=require("cli-progress"),Lh=require("assert"),rhe=require("pino"),nhe=fe();BY.exports=she;var kT,vY,HT,KO,Sn,Dh=!1;async function she(e=!0){return kT=nhe.getHdbBasePath(),vY=na.join(kT,"schema"),HT=na.join(kT,"4_0_0_upgrade_tmp"),KO=na.join(kT,"transactions"),console.info("Reindexing upgrade started for schemas"),ra.notify("Reindexing upgrade started for schemas"),await UY(vY,!1,e),await ro.pathExists(KO)&&(console.info(`
91
91
 
92
- Reindexing upgrade started for transaction logs`),ra.notify("Reindexing upgrade started for transaction logs"),await UY(KO,!0,e)),ra.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Dh?", but errors occurred":"")}o(ohe,"reindexUpgrade");async function UY(e,t,r){let n=await ro.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=na.join(e,a.toString());if(a===".DS_Store")continue;let l=await ro.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&ro.statSync(na.join(c,f)).isDirectory())try{await ahe(a,f,t),Sn.info(`Reindexing started for ${a}.${f}`),ra.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await lhe(a,f,c,t,r),Sn.info(`Reindexing completed for ${a}.${f}`),ra.notify(`Reindexing completed for ${a}.${f}`)}catch(m){Dh=!0,m.schema_path=c,m.table_name=f,ra.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ra.error(m),Sn.error(m),console.error(m)}}}if(!Dh)try{await ro.rm(GT,{recursive:!0})}catch{}}o(UY,"processTables");async function ahe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=na.join(GT,s);await ro.ensureDir(GT),await ro.writeFile(i,""),Sn=she({level:"debug",formatters:{bindings(){}}},i)}o(ahe,"initPinoLogger");var che=20;async function lhe(e,t,r,n,s){let i;try{i=await ms.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ra.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`),Sn.error(S);return}throw S}let a=fhe(i.dbis),c=ms.openDBI(i,a),l=Object.keys(i.dbis),u=ms.statDBI(i,a);Sn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new nhe.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 ms.createEnvironment(r,t,!1);ms.createDBI(f,a,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>che&&await p();await p()}catch(S){throw Dh=!0,Sn.error(S),S}async function p(){let S,R=m.map(({value:O})=>O);n?S=await Promise.all(R.map(O=>uhe(f,O))):S=await Zpe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,x=m.length;O<x;O++){let{key:j,value:k}=m[O];Sn.info(`Record hash value: ${j} hash: ${a}`);let F;n?F=S[O]:F=S.written_hashes.indexOf(j)>-1,Lh(F,!0),dhe(f,a,k[a],n),Sn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ra.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Sn.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=ms.statDBI(i,a),E=ms.statDBI(f,a);if(Sn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),Lh.deepStrictEqual(h.entryCount,E.entryCount),await ms.closeEnvironment(i),await ms.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=na.join(r,t),R=na.join(S,"data.mdb"),L=na.join(S,"lock.mdb");await ro.unlink(R),await ro.unlink(L),await ro.rmdir(S),Sn.info(`Deleted old environment files from schema folder: ${R}, ${L}`)}let g=await ms.openEnvironment(r,t),b=ms.statDBI(g,a);Sn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(b)}`),Lh.deepStrictEqual(b.entryCount,E.entryCount),await ms.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(lhe,"processTable");async function uhe(e,t){ms.initializeDBIs(e,fc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,fc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),rhe.isEmpty(t.user_name)||e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(uhe,"insertTransaction");function dhe(e,t,r,n){let i=e.dbis[t].get(r);Lh.deepStrictEqual(typeof i,"object");let a;if(n){let c={[fc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[fc.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&&!the.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];xY(e,c,f,r)}else xY(e,c,l,r)}o(dhe,"validateIndices");function xY(e,t,r,n){try{let s=!1,i=ehe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Sn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),Lh.deepStrictEqual(s,!0)}catch(s){Dh=!0,Sn.error(s),console.error(s)}}o(xY,"validateIndex");function fhe(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(fhe,"getHashDBI")});var $Y=v((RBe,qY)=>{"use strict";var qT=require("path"),mc=require("fs-extra"),mhe=FT(),zl=z(),kY=pt(),YO=fe(),Ti=(H(),M(W)),$T=ce(),phe=require("properties-reader"),hhe=ai(),Ehe=mS(),_he=mn(),yBe=require("util"),ghe=_he.searchByValue,She=xn(),The=NT(),yhe=It(),Rhe=FY(),HY=us(),bhe=BT(),Uh=new mhe("4.0.0"),GY=[],Mh,vh;async function Ahe(){try{if(await bhe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Mh){let t=$T.changeExtension(Mh,".bak");await mc.move(Mh,t)}if(vh){let t=$T.changeExtension(vh,".bak");await mc.move(vh,t)}await HY.generateKeys()}else console.log("Using existing certificates."),HY.updateConfigCert(Mh,vh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(Ahe,"generateNewKeys");async function Ihe(){console.log("Updating HarperDB nodes."),zl.info("Updating HarperDB nodes.");let e=[];try{let t=new hhe(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await ghe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!yhe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ti.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if($T.isEmptyOrZeroLength(n))return;let s=new Ehe(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await She.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{The.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(Ihe,"updateNodes");async function whe(){let e=YO.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(qT.join("config","settings.js"))){zl.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),zl.info(t);let r=qT.dirname(e),n=YO.get(Ti.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=qT.join(n,"backup","4_0_0_upgrade_settings.bak"),i=qT.join(n,Ti.HDB_CONFIG_FILE);try{zl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),mc.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{zl.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),zl.info("Updating env variables with new settings values");let f=kY.initOldConfig(e);Mh=f[Ti.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],vh=f[Ti.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],kY.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=$T.getPropsFilePath();mc.accessSync(a,mc.constants.F_OK|mc.constants.R_OK);let l=phe(a).get(Ti.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
93
- install_user = ${l}`;try{mc.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{YO.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{mc.removeSync(r),console.log(d),zl.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(whe,"updateSettingsFile400");Uh.async_functions.push(whe);Uh.async_functions.push(Ahe);Uh.async_functions.push(Rhe);Uh.async_functions.push(Ihe);GY.push(Uh);qY.exports=GY});var WY=v((ABe,YY)=>{var Nhe=FT(),{databases:Che,table:Ohe}=(Ne(),M(ft)),Phe=Hi(),WO=z(),VY=new Nhe("4.7.0"),KY=[];async function Lhe(){let e=Che.system?.hdb_license;if(!e){WO.debug?.("system.hdb_license table not found; no migration necessary");return}return WO.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),WO.debug?.("Creating new usage block system.hdb_license table"),Ohe(Phe.hdb_license)}o(Lhe,"convertToUsageBlockLicenses");VY.async_functions.push(Lhe);KY.push(VY);YY.exports=KY});var zO=v((wBe,XY)=>{"use strict";var jl=ce(),Dhe=(H(),M(W)),zY=z(),{DATA_VERSION:Mhe,UPGRADE_VERSION:vhe}=Dhe.UPGRADE_JSON_FIELD_NAMES_ENUM,jY=MY(),VT=$Y(),QY=WY(),pc=new Map;jY&&jY.forEach(e=>{pc.set(e.version,e)});VT&&VT.forEach(e=>{pc.set(e.version,e)});VT&&VT.forEach(e=>{pc.set(e.version,e)});QY&&QY.forEach(e=>{pc.set(e.version,e)});function Uhe(){return[...pc.keys()].sort(jl.compareVersions)}o(Uhe,"getSortedVersions");function JY(e){let t=e[Mhe],r=e[vhe];return jl.isEmptyOrZeroLength(t)||jl.isEmptyOrZeroLength(r)?(zY.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),zY.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."),[]):[...pc.keys()].sort(jl.compareVersions).filter(function(n){return jl.compareVersions(n,t)>0&&jl.compareVersions(n,r)<=0})}o(JY,"getVersionsForUpgrade");function xhe(e){return JY(e).length>0}o(xhe,"hasUpgradesRequired");function Bhe(e){return jl.isEmptyOrZeroLength(e)?null:pc.has(e)?pc.get(e):null}o(Bhe,"getDirectiveByVersion");XY.exports={getSortedVersions:Uhe,getDirectiveByVersion:Bhe,getVersionsForUpgrade:JY,hasUpgradesRequired:xhe}});var YT=v((CBe,nW)=>{"use strict";var Fhe=require("util"),jO=require("chalk"),khe=require("os"),eW=xn(),Hhe=mn(),ps=(H(),M(W)),tW=yY(),JO=lw(),{UpgradeObject:ZY}=AY(),{forceDowngradePrompt:Ghe}=BT(),{packageJson:qhe}=bt(),KT=z(),af=ce(),XO=li(),$he=(Ne(),M(ft)),Vhe=zO(),Khe=Fhe.promisify(XO.setSchemaDataToGlobal),Yhe=Hhe.searchByValue,Whe="info_id",zhe="2.9.9",jhe="3.0.0";async function Qhe(e){let t=new tW.HdbInfoInsertObject(1,e,e),r=new JO.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return XO.setSchemaDataToGlobal(),eW.insert(r)}o(Qhe,"insertHdbInstallInfo");async function QO(e){let t,r=await rW(),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 tW.HdbInfoInsertObject(i,e,e);let a=new JO.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await Khe(),eW.insert(a)}o(QO,"insertHdbUpgradeInfo");async function rW(){let e=new JO.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Whe,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Yhe(e))}catch(r){console.error(r)}return t}o(rW,"getAllHdbInfoRecords");async function Jhe(){let e=await rW();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(Jhe,"getLatestHdbInfoRecord");async function Xhe(){KT.info("Checking if HDB software has been updated");try{let e=qhe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Jhe(),r;if(af.isEmpty(t))r=zhe;else if(r=t.data_version_num,af.compareVersions(r.toString(),e.toString())>0){if(!af.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jO.yellow(`This instance's data was last run on version ${r}`)),console.error(jO.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.${khe.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(jO.yellow(`This instance's data was last run on version ${r}`)),await Ghe(new ZY(r,e))?await QO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(XO.setSchemaDataToGlobal(),Zhe(r),e.toString()===r.toString())return;let n=new ZY(r,e);if(Vhe.hasUpgradesRequired(n))return n;af.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await QO(n.upgrade_version),KT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw KT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),KT.fatal(e),e}}o(Xhe,"getVersionUpdateInfo");function Zhe(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 $he.databases.system))throw console.log(t),new Error(t);if(!af.isEmpty(e)&&e<jhe)throw console.log(t),new Error(t)}o(Zhe,"checkIfInstallIsSupported");nW.exports={insertHdbInstallInfo:Qhe,insertHdbUpgradeInfo:QO,getVersionUpdateInfo:Xhe}});var aW=v((PBe,oW)=>{"use strict";var WT=require("joi"),{boolean:eEe,string:ZO,number:tEe}=WT.types(),sW=require("fs-extra"),xh=(H(),M(W)),iW=require("path"),rEe=dt();oW.exports=nEe;function nEe(e){let t=ZO.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=WT.object({[xh.INSTALL_PROMPTS.ROOTPATH]:WT.custom(sEe),[xh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:WT.alternatives([tEe.min(0),ZO]).allow("null",null),[xh.INSTALL_PROMPTS.TC_AGREEMENT]:ZO.valid("yes","YES","Yes"),[xh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[xh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:eEe});return rEe.validateBySchema(e,r)}o(nEe,"installValidator");function sEe(e,t){if(sW.existsSync(iW.join(e,"system/hdb_user/data.mdb"))||sW.existsSync(iW.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(sEe,"validateRootAvailable")});var lW=v((DBe,cW)=>{"use strict";var{mkdirpSync:iEe,copySync:oEe}=require("fs-extra"),hc=require("path"),Bh=(H(),M(W)),{PACKAGE_ROOT:aEe}=bt(),tP=z(),cEe=ss(),eP=Hi(),lEe=gt(),{NON_REPLICATING_SYSTEM_TABLES:uEe}=(Ne(),M(ft));cW.exports=dEe;async function dEe(e){tP.trace("Mounting HarperDB"),Ql(e),Ql(hc.join(e,"backup")),Ql(hc.join(e,"keys")),Ql(hc.join(e,"keys",Bh.LICENSE_FILE_NAME)),Ql(hc.join(e,"log")),Ql(hc.join(e,"database")),Ql(hc.join(e,"components")),oEe(hc.resolve(aEe,"./utility/install/README.md"),hc.join(e,"README.md")),await fEe()}o(dEe,"mountHdb");async function fEe(){let e=rp(),t=Object.keys(eP);for(let r of t){let n=eP[r].hash_attribute;try{lEe.initSystemSchemaPaths(Bh.SYSTEM_SCHEMA_NAME,r);let s=new e(Bh.SYSTEM_SCHEMA_NAME,r,n);s.attributes=eP[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,uEe.includes(r)||(s.audit=!0),await cEe.createTable(r,s)}catch(s){throw tP.error(`issue creating environment for ${Bh.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(fEe,"createLMDBTables");function Ql(e){iEe(e,{mode:Bh.HDB_FILE_PERMISSIONS}),tP.info(`Directory ${e} created`)}o(Ql,"makeDirectory")});var bW=v((xBe,RW)=>{"use strict";var sP=require("os"),pW=require("inquirer"),qs=require("fs-extra"),mEe=require("properties-reader"),Xl=require("chalk"),so=require("path"),pEe=require("human-readable-ids").hri,rP,hEe=require("yaml"),Er=z(),Ec=fe(),Fh=ce(),jT=Hc(),hW=YT(),{packageJson:EW}=bt(),pe=(H(),M(W)),{CONFIG_PARAM_MAP:vBe,CONFIG_PARAMS:xt}=pe,EEe=aW(),_Ee=lW(),iP=pt(),gEe=Fn(),SEe=xp(),TEe=FO(),yEe=li(),REe=require("util").promisify,bEe=REe(yEe.setSchemaDataToGlobal),uW=us(),Jl=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tn=o(e=>Xl.magenta.bold(e),"HDB_PROMPT_MSG"),AEe="https://harperdb.io/legal/end-user-license-agreement",_c=sP.EOL,sa="",IEe="yes",dW="Starting HarperDB install...",fW="HarperDB installation was successful.",mW="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",wEe="An out of date version of HarperDB is already installed.",nP="It appears that HarperDB is already installed. Exiting install...",NEe="Aborting install",UBe=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])$/),CEe=new RegExp(/^[^\s.,*>]+$/),OEe=sP.homedir(),PEe=so.join(OEe,pe.HDB_ROOT_DIR_NAME),LEe="HDB_ADMIN",DEe="CLUSTER_USER",MEe="dev",vEe="localhost",zT={[xt.HTTP_CORS]:!0,[xt.HTTP_CORSACCESSLIST]:["*"],[xt.HTTP_PORT]:9926,[xt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[xt.THREADS_COUNT]:1,[xt.THREADS_DEBUG]:!0,[xt.LOGGING_STDSTREAMS]:!0,[xt.LOGGING_LEVEL]:"info",[xt.OPERATIONSAPI_NETWORK_PORT]:9925,[xt.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:"},gc=jT([pe.INSTALL_PROMPTS.HDB_CONFIG]),no,_W=!1,oP=!1,gW=!1;RW.exports={install:SW,updateConfigEnv:KEe,setIgnoreExisting:YEe};SW.createSuperUser=yW;async function SW(){console.log(tn(_c+dW+_c)),Er.notify(dW);let e;gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=UEe());let t=BEe();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(gW=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=EEe(t);if(r)throw r.message;await FEe(),await kEe(t);let n=await xEe(t);no=n[pe.INSTALL_PROMPTS.ROOTPATH],gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&so.dirname(gc[pe.INSTALL_PROMPTS.HDB_CONFIG])===no&&(_W=!0),!oP&&!gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await qs.pathExists(so.join(no,pe.HDB_CONFIG_FILE))&&(console.error(nP),process.exit()),rP||(rP=(await import("ora")).default);let s=rP({prefixText:tn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Fh.isEmpty(no))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ec.setHdbBasePath(no),await _Ee(no),await HEe(),await GEe(n),Er.initLogSettings(!0),await yW(n),await $Ee(n),await uW.updateConfigCert(),await uW.generateCertsKeys(),await VEe(),TEe(),s.stop(),console.log(tn(_c+fW+_c)),Er.notify(fW)}o(SW,"install");function UEe(){let e=hEe.parseDocument(qs.readFileSync(gc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=iP.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(UEe,"getConfigFromFile");async function xEe(e){Er.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.ROOTPATH],en.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:sa,default:PEe,validate:o(async s=>Gs(s)?Gs(s):await qs.pathExists(so.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:Jl,when:ia(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],en.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:sa,default:LEe,validate:o(s=>Gs(s)?Gs(s):(t=s,!0),"validate"),message:tn(en.HDB_USERNAME)},{type:"password",when:ia(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],en.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:sa,validate:o(s=>Gs(s)?Gs(s):!0,"validate"),message:tn(en.HDB_PASS)},{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],en.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:sa,default:MEe,validate:o(s=>Gs(s)?Gs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:tn(en.DEFAULTS_MODE)}];if(gW||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],en.REPLICATION_HOSTNAME),prefix:sa,default:vEe,message:tn(en.REPLICATION_HOSTNAME)}),Fh.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],en.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:sa,default:pEe.random(),validate:o(i=>CEe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:tn(en.NODE_NAME)},{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],en.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:sa,default:DEe,validate:o(i=>Gs(i)?Gs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:tn(en.CLUSTER_USERNAME)},{type:"password",when:ia(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],en.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:sa,validate:o(i=>Gs(i)?Gs(i):!0,"validate"),message:tn(en.CLUSTER_PASS)}];r.push(...s)}let n=await pW.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(xEe,"installPrompts");function ia(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tn(t)} ${Xl.gray("[hidden]")}`),Er.trace(`${tn(t)} [hidden]`)):(console.log(`${tn(t)} ${e}`),Er.trace(`${tn(t)} ${e}`)),!1):!0}o(ia,"displayCmdEnvVar");function Gs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gs,"checkForEmptyValue");function BEe(){let e=Object.keys(pe.INSTALL_PROMPTS),t=jT(e),r=jT(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.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(BEe,"checkForPromptOverride");async function FEe(){Er.trace("Checking for existing install.");let e=Fh.getPropsFilePath(),t=await qs.pathExists(e),r;if(t){Er.trace(`Install found an existing boot prop file at:${e}`);let n=mEe(e),s=iP.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await qs.pathExists(s)}if(!t&&Fh.noBootFile()&&(r=!0),r&&!oP){if(Er.trace(`Install found existing HDB config at:${e}`),await hW.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${EW.version}. Exiting install...`;console.log(_c+Xl.magenta.bold(wEe)),console.log(Xl.magenta.bold(s)),Er.error(s)}else console.log(_c+Xl.magenta.bold(nP)),Er.error(nP);process.exit(0)}}o(FEe,"checkForExistingInstall");async function kEe(e){Er.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${AEe}${_c}and can be viewed by typing or copying and pasting the URL into your web browser.${_c}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:sa,transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:tn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Xl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await pW.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==IEe&&(console.log(Xl.yellow(mW)),Er.error(mW),process.exit(0))}o(kEe,"termsAgreement");async function HEe(){let e=so.join(no,pe.HDB_CONFIG_FILE),t;try{t=sP.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}
94
- install_user = ${t}`,n=Fh.getHomeDir(),s=so.join(n,pe.HDB_HOME_DIR_NAME),i=so.join(s,pe.LICENSE_KEY_DIR_NAME);try{qs.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),qs.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=so.join(s,pe.BOOT_PROPS_FILE_NAME);try{await qs.writeFile(a,r)}catch(c){throw Er.error(`There was an error creating the boot file at path: ${a}`),c}Ec.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ec.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ec.setProperty(Ec.BOOT_PROPS_FILE_PATH,a)}}o(HEe,"createBootPropertiesFile");async function GEe(e){Er.trace("Creating HarperDB config file");let t=jT(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in zT){if(r===xt.HTTP_PORT&&t[xt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zT[r],t[xt.HTTP_SECUREPORT]=null;continue}else if(r===xt.HTTP_PORT)continue;if(r===xt.OPERATIONSAPI_NETWORK_PORT&&t[xt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zT[r],t[xt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===xt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=zT[r])}}else t[xt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[xt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[xt.HTTP_PORT.toLowerCase()]&&(t[xt.HTTP_SECUREPORT]=null);try{gc[pe.INSTALL_PROMPTS.HDB_CONFIG]||iP.createConfigFile(t),Ec.initSync()}catch(r){qEe(r)}}o(GEe,"createConfigFile");function qEe(e){Er.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(NEe);let t=so.resolve(Ec.get(Ec.BOOT_PROPS_FILE_PATH),"../");t&&qs.removeSync(t),no&&(_W?qs.readdirSync(no,{withFileTypes:!0}).forEach(n=>{let s=so.join(n.path,n.name);s!==gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&qs.removeSync(s)}):qs.removeSync(no)),process.exit(1)}o(qEe,"rollbackInstall");async function TW(e,t){Er.trace("Creating admin user"),await bEe();let r;try{r=await SEe.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 gEe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(TW,"createAdminUser");async function yW(e){Er.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await TW(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(yW,"createSuperUser");async function $Ee(e){Er.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await TW({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o($Ee,"createClusterUser");async function VEe(){let e=EW.version;if(e)await hW.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(VEe,"insertHdbVersionInfo");function KEe(e){gc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}o(KEe,"updateConfigEnv");function YEe(e){oP=e}o(YEe,"setIgnoreExisting")});var cP={};be(cP,{isHdbInstalled:()=>WEe});function WEe(e,t){try{aP.default.statSync((0,QT.getPropsFilePath)()),aP.default.statSync(e.get(Jf.SETTINGS_PATH_KEY))}catch(r){if((0,QT.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var aP,QT,lP=oe(()=>{H();aP=w(require("node:fs")),QT=w(ce());o(WEe,"isHdbInstalled")});var wW=v((kBe,IW)=>{"use strict";var uP=ce(),hs=z(),AW=zO();IW.exports={processDirectives:zEe};async function zEe(e){console.log("Starting upgrade process...");let t=AW.getVersionsForUpgrade(e),r=JEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;hs.notify(c),console.log(c);let l=[],u=[];try{l=jEe(a.sync_functions)}catch(d){throw hs.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await QEe(a.async_functions)}catch(d){throw hs.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(zEe,"processDirectives");function jEe(e){if(uP.isEmptyOrZeroLength(e))return hs.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return hs.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(hs.info(`Running function ${r.name}`),!(r instanceof Function)){hs.info("Variable being processed is not a function");continue}let n=r();hs.info(n),t.push(n)}return t}o(jEe,"runSyncFunctions");async function QEe(e){if(uP.isEmptyOrZeroLength(e))return hs.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return hs.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(hs.info(`Running function ${s.name}`),!(s instanceof Function)){hs.info("Variable being processed is not a function");continue}let i=await s();hs.info(i),t.push(i)}return t}o(QEe,"runAsyncFunctions");function JEe(e){if(uP.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=AW.getDirectiveByVersion(r);n&&t.push(n)}return t}o(JEe,"getUpgradeDirectivesToInstall")});var dP=v((GBe,NW)=>{"use strict";var XEe=require("util"),ZEe=require("path"),e_e=require("child_process"),t_e=XEe.promisify(e_e.execFile),r_e=1e3*1e3*10;NW.exports={findPs:n_e};async function n_e(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await t_e("ps",["wwxo",`pid,${r}`],{maxBuffer:r_e});for(let s of n.trim().split(`
95
- `).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:ZEe.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(n_e,"findPs")});var MW=v((KBe,DW)=>{"use strict";var PW=fe();PW.initSync();var s_e=require("chalk"),oa=z(),cf=(H(),M(W)),i_e=wW(),$Be=ce(),o_e=(lP(),M(cP)),LW=YT(),a_e=BT(),VBe=dP(),c_e=li(),{packageJson:CW}=bt(),l_e=require("util").promisify,u_e=l_e(c_e.setSchemaDataToGlobal),OW,{UPGRADE_VERSION:fP}=cf.UPGRADE_JSON_FIELD_NAMES_ENUM;DW.exports={upgrade:d_e};async function d_e(e){await u_e(),OW===void 0&&(OW=tf()),o_e.isHdbInstalled(PW,oa)||(JT("Harper is not installed. Harper must be installed before running an upgrade.",cf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await LW.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),JT(`This version of HarperDB is ${CW.version}`,cf.LOG_LEVELS.INFO);let n=r[fP]??CW.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${cf.HDB_SUPPORT_ADDRESS}`),oa.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await a_e.forceUpdatePrompt(r)}catch(a){oa.error("There was an error when prompting user about upgrade."),oa.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),oa.info(`Starting upgrade to version ${n}`),await f_e(r),JT(`HarperDB was successfully upgraded to version ${r[fP]}`,cf.LOG_LEVELS.INFO)}o(d_e,"upgrade");async function f_e(e){try{await i_e.processDirectives(e)}catch(t){throw JT("There was an error during the data upgrade. Please check the logs.",cf.LOG_LEVELS.ERROR),t}try{await LW.insertHdbUpgradeInfo(e[fP])}catch(t){oa.error("Error updating the 'hdb_info' system table."),oa.error(t)}}o(f_e,"runUpgrade");function JT(e,t=void 0){t||(t=oa.info),oa[t](e),console.log(s_e.magenta(e))}o(JT,"printToLogAndConsole")});var vW={};be(vW,{SERVERS:()=>lf,portServer:()=>mP,setPortServerMap:()=>XT});function XT(e,t){let r=mP.get(e)??[];mP.set(e,[...r,t])}var lf,mP,pP=oe(()=>{lf={},mP=new Map;o(XT,"setPortServerMap")});function p_e(e){if(typeof e!="string")throw new ZT(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new ZT(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new uf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=m_e.getKey();if(!(0,ty.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new EP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function h_e(e){if(e?.typ!=="Harper-License")throw new kh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new kh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function E_e(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function __e(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!E_e(t[r],e[r]))throw new ey(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function xW(e){let{header:t,payload:r}=p_e(e),n;try{n=JSON.parse(t)}catch(i){let a=new kh;throw a.cause=i,a}h_e(n);let s;try{s=JSON.parse(r)}catch(i){let a=new ey;throw a.cause=i,a}return __e(s),s}var ty,UW,hP,ZT,uf,EP,kh,ey,m_e,BW=oe(()=>{ty=require("node:crypto"),UW=w(fe());H();hP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
92
+ Reindexing upgrade started for transaction logs`),ra.notify("Reindexing upgrade started for transaction logs"),await UY(KO,!0,e)),ra.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Dh?", but errors occurred":"")}o(she,"reindexUpgrade");async function UY(e,t,r){let n=await ro.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=na.join(e,a.toString());if(a===".DS_Store")continue;let l=await ro.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&ro.statSync(na.join(c,f)).isDirectory())try{await ihe(a,f,t),Sn.info(`Reindexing started for ${a}.${f}`),ra.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await ahe(a,f,c,t,r),Sn.info(`Reindexing completed for ${a}.${f}`),ra.notify(`Reindexing completed for ${a}.${f}`)}catch(m){Dh=!0,m.schema_path=c,m.table_name=f,ra.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ra.error(m),Sn.error(m),console.error(m)}}}if(!Dh)try{await ro.rm(HT,{recursive:!0})}catch{}}o(UY,"processTables");async function ihe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=na.join(HT,s);await ro.ensureDir(HT),await ro.writeFile(i,""),Sn=rhe({level:"debug",formatters:{bindings(){}}},i)}o(ihe,"initPinoLogger");var ohe=20;async function ahe(e,t,r,n,s){let i;try{i=await ms.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ra.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`),Sn.error(S);return}throw S}let a=uhe(i.dbis),c=ms.openDBI(i,a),l=Object.keys(i.dbis),u=ms.statDBI(i,a);Sn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new the.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 ms.createEnvironment(r,t,!1);ms.createDBI(f,a,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>ohe&&await p();await p()}catch(S){throw Dh=!0,Sn.error(S),S}async function p(){let S,R=m.map(({value:O})=>O);n?S=await Promise.all(R.map(O=>che(f,O))):S=await Jpe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,x=m.length;O<x;O++){let{key:j,value:k}=m[O];Sn.info(`Record hash value: ${j} hash: ${a}`);let F;n?F=S[O]:F=S.written_hashes.indexOf(j)>-1,Lh(F,!0),lhe(f,a,k[a],n),Sn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ra.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Sn.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=ms.statDBI(i,a),E=ms.statDBI(f,a);if(Sn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),Lh.deepStrictEqual(h.entryCount,E.entryCount),await ms.closeEnvironment(i),await ms.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=na.join(r,t),R=na.join(S,"data.mdb"),L=na.join(S,"lock.mdb");await ro.unlink(R),await ro.unlink(L),await ro.rmdir(S),Sn.info(`Deleted old environment files from schema folder: ${R}, ${L}`)}let g=await ms.openEnvironment(r,t),b=ms.statDBI(g,a);Sn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(b)}`),Lh.deepStrictEqual(b.entryCount,E.entryCount),await ms.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(ahe,"processTable");async function che(e,t){ms.initializeDBIs(e,fc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,fc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),ehe.isEmpty(t.user_name)||e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[fc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(che,"insertTransaction");function lhe(e,t,r,n){let i=e.dbis[t].get(r);Lh.deepStrictEqual(typeof i,"object");let a;if(n){let c={[fc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[fc.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&&!Zpe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];xY(e,c,f,r)}else xY(e,c,l,r)}o(lhe,"validateIndices");function xY(e,t,r,n){try{let s=!1,i=Xpe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Sn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),Lh.deepStrictEqual(s,!0)}catch(s){Dh=!0,Sn.error(s),console.error(s)}}o(xY,"validateIndex");function uhe(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(uhe,"getHashDBI")});var $Y=v((SBe,qY)=>{"use strict";var GT=require("path"),mc=require("fs-extra"),dhe=BT(),zl=z(),kY=pt(),YO=fe(),Ti=(H(),M(W)),qT=ce(),fhe=require("properties-reader"),mhe=ai(),phe=fS(),hhe=mn(),gBe=require("util"),Ehe=hhe.searchByValue,_he=xn(),ghe=wT(),She=At(),The=FY(),HY=us(),yhe=xT(),Uh=new dhe("4.0.0"),GY=[],Mh,vh;async function Rhe(){try{if(await yhe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Mh){let t=qT.changeExtension(Mh,".bak");await mc.move(Mh,t)}if(vh){let t=qT.changeExtension(vh,".bak");await mc.move(vh,t)}await HY.generateKeys()}else console.log("Using existing certificates."),HY.updateConfigCert(Mh,vh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(Rhe,"generateNewKeys");async function bhe(){console.log("Updating HarperDB nodes."),zl.info("Updating HarperDB nodes.");let e=[];try{let t=new mhe(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Ehe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!She.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ti.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(qT.isEmptyOrZeroLength(n))return;let s=new phe(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await _he.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{ghe.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(bhe,"updateNodes");async function Ahe(){let e=YO.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(GT.join("config","settings.js"))){zl.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),zl.info(t);let r=GT.dirname(e),n=YO.get(Ti.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=GT.join(n,"backup","4_0_0_upgrade_settings.bak"),i=GT.join(n,Ti.HDB_CONFIG_FILE);try{zl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),mc.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{zl.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),zl.info("Updating env variables with new settings values");let f=kY.initOldConfig(e);Mh=f[Ti.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],vh=f[Ti.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],kY.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=qT.getPropsFilePath();mc.accessSync(a,mc.constants.F_OK|mc.constants.R_OK);let l=fhe(a).get(Ti.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
93
+ install_user = ${l}`;try{mc.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{YO.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{mc.removeSync(r),console.log(d),zl.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(Ahe,"updateSettingsFile400");Uh.async_functions.push(Ahe);Uh.async_functions.push(Rhe);Uh.async_functions.push(The);Uh.async_functions.push(bhe);GY.push(Uh);qY.exports=GY});var WY=v((yBe,YY)=>{var Ihe=BT(),{databases:whe,table:Nhe}=(Ne(),M(ft)),Che=Hi(),WO=z(),VY=new Ihe("4.7.0"),KY=[];async function Ohe(){let e=whe.system?.hdb_license;if(!e){WO.debug?.("system.hdb_license table not found; no migration necessary");return}return WO.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),WO.debug?.("Creating new usage block system.hdb_license table"),Nhe(Che.hdb_license)}o(Ohe,"convertToUsageBlockLicenses");VY.async_functions.push(Ohe);KY.push(VY);YY.exports=KY});var zO=v((bBe,XY)=>{"use strict";var jl=ce(),Phe=(H(),M(W)),zY=z(),{DATA_VERSION:Lhe,UPGRADE_VERSION:Dhe}=Phe.UPGRADE_JSON_FIELD_NAMES_ENUM,jY=MY(),$T=$Y(),QY=WY(),pc=new Map;jY&&jY.forEach(e=>{pc.set(e.version,e)});$T&&$T.forEach(e=>{pc.set(e.version,e)});$T&&$T.forEach(e=>{pc.set(e.version,e)});QY&&QY.forEach(e=>{pc.set(e.version,e)});function Mhe(){return[...pc.keys()].sort(jl.compareVersions)}o(Mhe,"getSortedVersions");function JY(e){let t=e[Lhe],r=e[Dhe];return jl.isEmptyOrZeroLength(t)||jl.isEmptyOrZeroLength(r)?(zY.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),zY.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."),[]):[...pc.keys()].sort(jl.compareVersions).filter(function(n){return jl.compareVersions(n,t)>0&&jl.compareVersions(n,r)<=0})}o(JY,"getVersionsForUpgrade");function vhe(e){return JY(e).length>0}o(vhe,"hasUpgradesRequired");function Uhe(e){return jl.isEmptyOrZeroLength(e)?null:pc.has(e)?pc.get(e):null}o(Uhe,"getDirectiveByVersion");XY.exports={getSortedVersions:Mhe,getDirectiveByVersion:Uhe,getVersionsForUpgrade:JY,hasUpgradesRequired:vhe}});var KT=v((IBe,nW)=>{"use strict";var xhe=require("util"),jO=require("chalk"),Bhe=require("os"),eW=xn(),Fhe=mn(),ps=(H(),M(W)),tW=yY(),JO=lw(),{UpgradeObject:ZY}=AY(),{forceDowngradePrompt:khe}=xT(),{packageJson:Hhe}=Rt(),VT=z(),af=ce(),XO=li(),Ghe=(Ne(),M(ft)),qhe=zO(),$he=xhe.promisify(XO.setSchemaDataToGlobal),Vhe=Fhe.searchByValue,Khe="info_id",Yhe="2.9.9",Whe="3.0.0";async function zhe(e){let t=new tW.HdbInfoInsertObject(1,e,e),r=new JO.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return XO.setSchemaDataToGlobal(),eW.insert(r)}o(zhe,"insertHdbInstallInfo");async function QO(e){let t,r=await rW(),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 tW.HdbInfoInsertObject(i,e,e);let a=new JO.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await $he(),eW.insert(a)}o(QO,"insertHdbUpgradeInfo");async function rW(){let e=new JO.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Khe,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Vhe(e))}catch(r){console.error(r)}return t}o(rW,"getAllHdbInfoRecords");async function jhe(){let e=await rW();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(jhe,"getLatestHdbInfoRecord");async function Qhe(){VT.info("Checking if HDB software has been updated");try{let e=Hhe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await jhe(),r;if(af.isEmpty(t))r=Yhe;else if(r=t.data_version_num,af.compareVersions(r.toString(),e.toString())>0){if(!af.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jO.yellow(`This instance's data was last run on version ${r}`)),console.error(jO.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.${Bhe.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(jO.yellow(`This instance's data was last run on version ${r}`)),await khe(new ZY(r,e))?await QO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(XO.setSchemaDataToGlobal(),Jhe(r),e.toString()===r.toString())return;let n=new ZY(r,e);if(qhe.hasUpgradesRequired(n))return n;af.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await QO(n.upgrade_version),VT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw VT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),VT.fatal(e),e}}o(Qhe,"getVersionUpdateInfo");function Jhe(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 Ghe.databases.system))throw console.log(t),new Error(t);if(!af.isEmpty(e)&&e<Whe)throw console.log(t),new Error(t)}o(Jhe,"checkIfInstallIsSupported");nW.exports={insertHdbInstallInfo:zhe,insertHdbUpgradeInfo:QO,getVersionUpdateInfo:Qhe}});var aW=v((NBe,oW)=>{"use strict";var YT=require("joi"),{boolean:Xhe,string:ZO,number:Zhe}=YT.types(),sW=require("fs-extra"),xh=(H(),M(W)),iW=require("path"),eEe=dt();oW.exports=tEe;function tEe(e){let t=ZO.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=YT.object({[xh.INSTALL_PROMPTS.ROOTPATH]:YT.custom(rEe),[xh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:YT.alternatives([Zhe.min(0),ZO]).allow("null",null),[xh.INSTALL_PROMPTS.TC_AGREEMENT]:ZO.valid("yes","YES","Yes"),[xh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[xh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Xhe});return eEe.validateBySchema(e,r)}o(tEe,"installValidator");function rEe(e,t){if(sW.existsSync(iW.join(e,"system/hdb_user/data.mdb"))||sW.existsSync(iW.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(rEe,"validateRootAvailable")});var lW=v((OBe,cW)=>{"use strict";var{mkdirpSync:nEe,copySync:sEe}=require("fs-extra"),hc=require("path"),Bh=(H(),M(W)),{PACKAGE_ROOT:iEe}=Rt(),tP=z(),oEe=ss(),eP=Hi(),aEe=gt(),{NON_REPLICATING_SYSTEM_TABLES:cEe}=(Ne(),M(ft));cW.exports=lEe;async function lEe(e){tP.trace("Mounting HarperDB"),Ql(e),Ql(hc.join(e,"backup")),Ql(hc.join(e,"keys")),Ql(hc.join(e,"keys",Bh.LICENSE_FILE_NAME)),Ql(hc.join(e,"log")),Ql(hc.join(e,"database")),Ql(hc.join(e,"components")),sEe(hc.resolve(iEe,"./utility/install/README.md"),hc.join(e,"README.md")),await uEe()}o(lEe,"mountHdb");async function uEe(){let e=rp(),t=Object.keys(eP);for(let r of t){let n=eP[r].hash_attribute;try{aEe.initSystemSchemaPaths(Bh.SYSTEM_SCHEMA_NAME,r);let s=new e(Bh.SYSTEM_SCHEMA_NAME,r,n);s.attributes=eP[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,cEe.includes(r)||(s.audit=!0),await oEe.createTable(r,s)}catch(s){throw tP.error(`issue creating environment for ${Bh.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(uEe,"createLMDBTables");function Ql(e){nEe(e,{mode:Bh.HDB_FILE_PERMISSIONS}),tP.info(`Directory ${e} created`)}o(Ql,"makeDirectory")});var bW=v((MBe,RW)=>{"use strict";var sP=require("os"),pW=require("inquirer"),qs=require("fs-extra"),dEe=require("properties-reader"),Xl=require("chalk"),so=require("path"),fEe=require("human-readable-ids").hri,rP,mEe=require("yaml"),Er=z(),Ec=fe(),Fh=ce(),zT=Hc(),hW=KT(),{packageJson:EW}=Rt(),pe=(H(),M(W)),{CONFIG_PARAM_MAP:LBe,CONFIG_PARAMS:xt}=pe,pEe=aW(),hEe=lW(),iP=pt(),EEe=Fn(),_Ee=xp(),gEe=FO(),SEe=li(),TEe=require("util").promisify,yEe=TEe(SEe.setSchemaDataToGlobal),uW=us(),Jl=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tn=o(e=>Xl.magenta.bold(e),"HDB_PROMPT_MSG"),REe="https://harperdb.io/legal/end-user-license-agreement",_c=sP.EOL,sa="",bEe="yes",dW="Starting HarperDB install...",fW="HarperDB installation was successful.",mW="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",AEe="An out of date version of HarperDB is already installed.",nP="It appears that HarperDB is already installed. Exiting install...",IEe="Aborting install",DBe=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])$/),wEe=new RegExp(/^[^\s.,*>]+$/),NEe=sP.homedir(),CEe=so.join(NEe,pe.HDB_ROOT_DIR_NAME),OEe="HDB_ADMIN",PEe="CLUSTER_USER",LEe="dev",DEe="localhost",WT={[xt.HTTP_CORS]:!0,[xt.HTTP_CORSACCESSLIST]:["*"],[xt.HTTP_PORT]:9926,[xt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[xt.THREADS_COUNT]:1,[xt.THREADS_DEBUG]:!0,[xt.LOGGING_STDSTREAMS]:!0,[xt.LOGGING_LEVEL]:"info",[xt.OPERATIONSAPI_NETWORK_PORT]:9925,[xt.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:"},gc=zT([pe.INSTALL_PROMPTS.HDB_CONFIG]),no,_W=!1,oP=!1,gW=!1;RW.exports={install:SW,updateConfigEnv:$Ee,setIgnoreExisting:VEe};SW.createSuperUser=yW;async function SW(){console.log(tn(_c+dW+_c)),Er.notify(dW);let e;gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=MEe());let t=UEe();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(gW=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=pEe(t);if(r)throw r.message;await xEe(),await BEe(t);let n=await vEe(t);no=n[pe.INSTALL_PROMPTS.ROOTPATH],gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&so.dirname(gc[pe.INSTALL_PROMPTS.HDB_CONFIG])===no&&(_W=!0),!oP&&!gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await qs.pathExists(so.join(no,pe.HDB_CONFIG_FILE))&&(console.error(nP),process.exit()),rP||(rP=(await import("ora")).default);let s=rP({prefixText:tn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Fh.isEmpty(no))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ec.setHdbBasePath(no),await hEe(no),await FEe(),await kEe(n),Er.initLogSettings(!0),await yW(n),await GEe(n),await uW.updateConfigCert(),await uW.generateCertsKeys(),await qEe(),gEe(),s.stop(),console.log(tn(_c+fW+_c)),Er.notify(fW)}o(SW,"install");function MEe(){let e=mEe.parseDocument(qs.readFileSync(gc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=iP.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(MEe,"getConfigFromFile");async function vEe(e){Er.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.ROOTPATH],en.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:sa,default:CEe,validate:o(async s=>Gs(s)?Gs(s):await qs.pathExists(so.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:Jl,when:ia(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],en.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:sa,default:OEe,validate:o(s=>Gs(s)?Gs(s):(t=s,!0),"validate"),message:tn(en.HDB_USERNAME)},{type:"password",when:ia(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],en.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:sa,validate:o(s=>Gs(s)?Gs(s):!0,"validate"),message:tn(en.HDB_PASS)},{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],en.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:sa,default:LEe,validate:o(s=>Gs(s)?Gs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:tn(en.DEFAULTS_MODE)}];if(gW||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],en.REPLICATION_HOSTNAME),prefix:sa,default:DEe,message:tn(en.REPLICATION_HOSTNAME)}),Fh.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],en.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:sa,default:fEe.random(),validate:o(i=>wEe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:tn(en.NODE_NAME)},{type:"input",transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],en.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:sa,default:PEe,validate:o(i=>Gs(i)?Gs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:tn(en.CLUSTER_USERNAME)},{type:"password",when:ia(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],en.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:sa,validate:o(i=>Gs(i)?Gs(i):!0,"validate"),message:tn(en.CLUSTER_PASS)}];r.push(...s)}let n=await pW.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(vEe,"installPrompts");function ia(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tn(t)} ${Xl.gray("[hidden]")}`),Er.trace(`${tn(t)} [hidden]`)):(console.log(`${tn(t)} ${e}`),Er.trace(`${tn(t)} ${e}`)),!1):!0}o(ia,"displayCmdEnvVar");function Gs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gs,"checkForEmptyValue");function UEe(){let e=Object.keys(pe.INSTALL_PROMPTS),t=zT(e),r=zT(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.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(UEe,"checkForPromptOverride");async function xEe(){Er.trace("Checking for existing install.");let e=Fh.getPropsFilePath(),t=await qs.pathExists(e),r;if(t){Er.trace(`Install found an existing boot prop file at:${e}`);let n=dEe(e),s=iP.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await qs.pathExists(s)}if(!t&&Fh.noBootFile()&&(r=!0),r&&!oP){if(Er.trace(`Install found existing HDB config at:${e}`),await hW.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${EW.version}. Exiting install...`;console.log(_c+Xl.magenta.bold(AEe)),console.log(Xl.magenta.bold(s)),Er.error(s)}else console.log(_c+Xl.magenta.bold(nP)),Er.error(nP);process.exit(0)}}o(xEe,"checkForExistingInstall");async function BEe(e){Er.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${REe}${_c}and can be viewed by typing or copying and pasting the URL into your web browser.${_c}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:sa,transformer:Jl,when:ia(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:tn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Xl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await pW.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==bEe&&(console.log(Xl.yellow(mW)),Er.error(mW),process.exit(0))}o(BEe,"termsAgreement");async function FEe(){let e=so.join(no,pe.HDB_CONFIG_FILE),t;try{t=sP.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}
94
+ install_user = ${t}`,n=Fh.getHomeDir(),s=so.join(n,pe.HDB_HOME_DIR_NAME),i=so.join(s,pe.LICENSE_KEY_DIR_NAME);try{qs.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),qs.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=so.join(s,pe.BOOT_PROPS_FILE_NAME);try{await qs.writeFile(a,r)}catch(c){throw Er.error(`There was an error creating the boot file at path: ${a}`),c}Ec.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ec.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ec.setProperty(Ec.BOOT_PROPS_FILE_PATH,a)}}o(FEe,"createBootPropertiesFile");async function kEe(e){Er.trace("Creating HarperDB config file");let t=zT(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in WT){if(r===xt.HTTP_PORT&&t[xt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??WT[r],t[xt.HTTP_SECUREPORT]=null;continue}else if(r===xt.HTTP_PORT)continue;if(r===xt.OPERATIONSAPI_NETWORK_PORT&&t[xt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??WT[r],t[xt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===xt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=WT[r])}}else t[xt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[xt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[xt.HTTP_PORT.toLowerCase()]&&(t[xt.HTTP_SECUREPORT]=null);try{gc[pe.INSTALL_PROMPTS.HDB_CONFIG]||iP.createConfigFile(t),Ec.initSync()}catch(r){HEe(r)}}o(kEe,"createConfigFile");function HEe(e){Er.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(IEe);let t=so.resolve(Ec.get(Ec.BOOT_PROPS_FILE_PATH),"../");t&&qs.removeSync(t),no&&(_W?qs.readdirSync(no,{withFileTypes:!0}).forEach(n=>{let s=so.join(n.path,n.name);s!==gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&qs.removeSync(s)}):qs.removeSync(no)),process.exit(1)}o(HEe,"rollbackInstall");async function TW(e,t){Er.trace("Creating admin user"),await yEe();let r;try{r=await _Ee.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 EEe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(TW,"createAdminUser");async function yW(e){Er.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await TW(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(yW,"createSuperUser");async function GEe(e){Er.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await TW({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(GEe,"createClusterUser");async function qEe(){let e=EW.version;if(e)await hW.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(qEe,"insertHdbVersionInfo");function $Ee(e){gc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}o($Ee,"updateConfigEnv");function VEe(e){oP=e}o(VEe,"setIgnoreExisting")});var cP={};be(cP,{isHdbInstalled:()=>KEe});function KEe(e,t){try{aP.default.statSync((0,jT.getPropsFilePath)()),aP.default.statSync(e.get(Jf.SETTINGS_PATH_KEY))}catch(r){if((0,jT.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var aP,jT,lP=oe(()=>{H();aP=w(require("node:fs")),jT=w(ce());o(KEe,"isHdbInstalled")});var wW=v((xBe,IW)=>{"use strict";var uP=ce(),hs=z(),AW=zO();IW.exports={processDirectives:YEe};async function YEe(e){console.log("Starting upgrade process...");let t=AW.getVersionsForUpgrade(e),r=jEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;hs.notify(c),console.log(c);let l=[],u=[];try{l=WEe(a.sync_functions)}catch(d){throw hs.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await zEe(a.async_functions)}catch(d){throw hs.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(YEe,"processDirectives");function WEe(e){if(uP.isEmptyOrZeroLength(e))return hs.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return hs.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(hs.info(`Running function ${r.name}`),!(r instanceof Function)){hs.info("Variable being processed is not a function");continue}let n=r();hs.info(n),t.push(n)}return t}o(WEe,"runSyncFunctions");async function zEe(e){if(uP.isEmptyOrZeroLength(e))return hs.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return hs.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(hs.info(`Running function ${s.name}`),!(s instanceof Function)){hs.info("Variable being processed is not a function");continue}let i=await s();hs.info(i),t.push(i)}return t}o(zEe,"runAsyncFunctions");function jEe(e){if(uP.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=AW.getDirectiveByVersion(r);n&&t.push(n)}return t}o(jEe,"getUpgradeDirectivesToInstall")});var dP=v((FBe,NW)=>{"use strict";var QEe=require("util"),JEe=require("path"),XEe=require("child_process"),ZEe=QEe.promisify(XEe.execFile),e_e=1e3*1e3*10;NW.exports={findPs:t_e};async function t_e(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await ZEe("ps",["wwxo",`pid,${r}`],{maxBuffer:e_e});for(let s of n.trim().split(`
95
+ `).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:JEe.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(t_e,"findPs")});var MW=v((qBe,DW)=>{"use strict";var PW=fe();PW.initSync();var r_e=require("chalk"),oa=z(),cf=(H(),M(W)),n_e=wW(),HBe=ce(),s_e=(lP(),M(cP)),LW=KT(),i_e=xT(),GBe=dP(),o_e=li(),{packageJson:CW}=Rt(),a_e=require("util").promisify,c_e=a_e(o_e.setSchemaDataToGlobal),OW,{UPGRADE_VERSION:fP}=cf.UPGRADE_JSON_FIELD_NAMES_ENUM;DW.exports={upgrade:l_e};async function l_e(e){await c_e(),OW===void 0&&(OW=tf()),s_e.isHdbInstalled(PW,oa)||(QT("Harper is not installed. Harper must be installed before running an upgrade.",cf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await LW.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),QT(`This version of HarperDB is ${CW.version}`,cf.LOG_LEVELS.INFO);let n=r[fP]??CW.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${cf.HDB_SUPPORT_ADDRESS}`),oa.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await i_e.forceUpdatePrompt(r)}catch(a){oa.error("There was an error when prompting user about upgrade."),oa.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),oa.info(`Starting upgrade to version ${n}`),await u_e(r),QT(`HarperDB was successfully upgraded to version ${r[fP]}`,cf.LOG_LEVELS.INFO)}o(l_e,"upgrade");async function u_e(e){try{await n_e.processDirectives(e)}catch(t){throw QT("There was an error during the data upgrade. Please check the logs.",cf.LOG_LEVELS.ERROR),t}try{await LW.insertHdbUpgradeInfo(e[fP])}catch(t){oa.error("Error updating the 'hdb_info' system table."),oa.error(t)}}o(u_e,"runUpgrade");function QT(e,t=void 0){t||(t=oa.info),oa[t](e),console.log(r_e.magenta(e))}o(QT,"printToLogAndConsole")});var vW={};be(vW,{SERVERS:()=>lf,portServer:()=>mP,setPortServerMap:()=>JT});function JT(e,t){let r=mP.get(e)??[];mP.set(e,[...r,t])}var lf,mP,pP=oe(()=>{lf={},mP=new Map;o(JT,"setPortServerMap")});function f_e(e){if(typeof e!="string")throw new XT(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new XT(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new uf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=d_e.getKey();if(!(0,ey.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new EP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function m_e(e){if(e?.typ!=="Harper-License")throw new kh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new kh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function p_e(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function h_e(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!p_e(t[r],e[r]))throw new ZT(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function xW(e){let{header:t,payload:r}=f_e(e),n;try{n=JSON.parse(t)}catch(i){let a=new kh;throw a.cause=i,a}m_e(n);let s;try{s=JSON.parse(r)}catch(i){let a=new ZT;throw a.cause=i,a}return h_e(s),s}var ey,UW,hP,XT,uf,EP,kh,ZT,d_e,BW=oe(()=>{ey=require("node:crypto"),UW=w(fe());H();hP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
96
96
  MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
97
97
  -----END PUBLIC KEY-----
98
98
  `:this.pem=`-----BEGIN PUBLIC KEY-----
99
99
  MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
100
100
  -----END PUBLIC KEY-----
101
- `}getKey(){return(0,ty.createPublicKey)(this.pem)}toString(){return this.pem}},ZT=class extends TypeError{static{o(this,"LicenseEncodingError")}},uf=class extends TypeError{static{o(this,"InvalidLicenseError")}},EP=class extends uf{static{o(this,"InvalidLicenseSignatureError")}},kh=class extends uf{static{o(this,"InvalidHeaderError")}},ey=class extends uf{static{o(this,"InvalidPayloadError")}},m_e=new hP(UW.get(U.LICENSE_MODE));o(p_e,"validateLicenseSignature");o(h_e,"validateLicenseHeader");o(E_e,"valid");o(__e,"validateLicensePayload");o(xW,"validateLicense")});var ry={};be(ry,{getActiveLicense:()=>yP,getUsageLicenses:()=>WW,getUsageLicensesOp:()=>bP,installUsageLicense:()=>TP,installUsageLicenseOp:()=>SP,isActiveLicense:()=>KW,isLicensed:()=>RP,loadAndWatchLicensesDir:()=>T_e,recordUsage:()=>YW});async function SP(e){let t=e.license;try{await TP(t)}catch(r){let n=new HW.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function TP(e){let t=xW(e),{id:r}=t;if(await De.system.hdb_license.get(r))throw new gP(`A usage license with ${r} already exists`);return io.info?.("Installing usage license:",t),De.system.hdb_license.put(r,t)}function KW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function yP(){let e=GW.get(U.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=De.system.hdb_license?.search(t);for await(let n of r??[])if(KW(n))return n}async function RP(){return await yP()!==void 0}async function YW(e){aa=io.forComponent("license"),aa.trace?.("Recording usage into license from analytics");let t,r=(await yP())?.id;if(r){aa.trace?.("Found license to record usage into:",r);let n={};St(n,()=>{t=De.system.hdb_license.update(r,n);for(let s of e)switch(aa.trace?.("Processing analytics record:",s),s.metric){case"db-read":aa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":aa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":aa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(aa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:aa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";FW||(console.error(n),FW=!0),kW===void 0&&(kW=setInterval(()=>{io.notify(n)},g_e).unref())}}function bP(e){let t={};return e.region&&(t.region=e.region),WW(t)}function WW(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),De.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function S_e(e){io.trace?.("Loading usage license from file:",e);let t=await $W.readFile(e,{encoding:"utf-8"});try{await TP(t)}catch(r){io.error?.("Failed to install usage license from file:",e,r)}}function T_e(){let e=_P.default.join(_P.default.dirname(qW.getConfigFilePath()),"licenses");(0,VW.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",S_e)}var HW,io,GW,_P,qW,$W,VW,gP,FW,kW,g_e,aa,Hh=oe(()=>{BW();HW=w(Ee()),io=w(z());Jn();Na();GW=w(fe());H();Ne();_P=w(require("node:path")),qW=w(pt()),$W=w(require("node:fs/promises")),VW=require("chokidar"),gP=class extends Error{static{o(this,"ExistingLicenseError")}};o(SP,"installUsageLicenseOp");o(TP,"installUsageLicense");FW=!1,g_e=6e5;o(KW,"isActiveLicense");o(yP,"getActiveLicense");o(RP,"isLicensed");o(YW,"recordUsage");AA(YW);o(bP,"getUsageLicensesOp");o(WW,"getUsageLicenses");o(S_e,"loadLicenseFile");o(T_e,"loadAndWatchLicensesDir")});var cy={};be(cy,{deliverSocket:()=>iz,getHttpOptions:()=>A_e,getRequestId:()=>lz,handleApplication:()=>b_e,httpServer:()=>LP,logRequest:()=>$h,proxyRequest:()=>I_e,registerServer:()=>OP,suppressHandleApplicationWarning:()=>R_e});function b_e(e){Vh=e.options.getAll(),e.options.on("change",t=>{Vh=e.options.getAll()})}function A_e(){return Vh}function iz(e,t,r){let n=e?.read?e:new XW.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=lf[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=lf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ca.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function I_e(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=zW.get(s),r){case"connection":i=iz(void 0,t),zW.set(s,i),i.write=(c,l,u)=>(sy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(sy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),sy.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 OP(e,t,r=!0){t||(t=Cr.default.get(U.HTTP_PORT));let n=lf[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",JW),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else lf[t]=e;e.on("unhandled",JW)}function PP(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,ZW.resolvePath)(Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function LP(e,t){let r=[];for(let{port:n,secure:s}of PP(t))r.push(oz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?NP[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,OP(e,n,!1)),iy[n]=oy(NP,n);return r}function oz(e,t,r,n){if(XT(e,{protocol_name:t?"HTTPS":"HTTP",name:ly()}),!ny[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 E=Cr.default.get("tls");f=Cr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,ez.getTicketKeys)(),SNICallback:(0,tz.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let b=performance.now(),S=0;try{let L=new Wa(E,g);r&&(L.isOperationsServer=!0),Vh.logging?.id&&(L.requestId=S=lz());let O=await iy[e](L);if(!O){if(L._nodeResponse.statusCode){$h(E,L._nodeResponse.statusCode,S,performance.now()-b);return}O=az(L)}if(O.headers?.set||(O.headers=new Ds(O.headers)),await RP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let ee of O.headers||[])g.setHeader(ee[0],ee[1]);return E.baseRequest=L,g.baseResponse=O,ny[e].emit("unhandled",E,g)}let x=O.status||200;g.statusCode=x;let j=performance.now(),k=j-b,F=O.body,Q,Y=!1;if(!O.handlesHeaders){let ee=O.headers||new Ds;F?F.length>=0?(typeof F=="string"?ee.set("Content-Length",Buffer.byteLength(F)):ee.set("Content-Length",F.length),Q=!0):F instanceof As&&(F.size?ee.set("Content-Length",F.size):F.on&&(Y=!0,F.on("size",Ie=>{g.headersSent||g.setHeader("Content-Length",Ie)})),F=F.stream()):(ee.set("Content-Length","0"),Q=!0);let Re=`hdb;dur=${k.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),bp(ee,"Server-Timing",Re,!0),!g.headersSent)if(Y){if(ee)if(ee[Symbol.iterator])for(let[Ie,$e]of ee)g.setHeader(Ie,$e);else for(let Ie in ee)g.setHeader(Ie,ee[Ie])}else g.writeHead(x,ee&&(ee[Symbol.iterator]?Array.from(ee):ee));Q&&g.end(F)}let de=L.handlerPath,le=L.method;if(Ge(k,"duration",de,le,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(x<400,"success",de,le),zr(1,"response_"+x,de,le),$h(E,x,S,k),!Q)if(F instanceof ReadableStream&&(F=wP.Readable.fromWeb(F)),(F[Symbol.iterator]||F[Symbol.asyncIterator])&&(F=wP.Readable.from(F)),F?.pipe){F.pipe(g),F.destroy&&g.on("close",()=>{F.destroy()});let ee=0;F.on("data",Re=>{ee+=Re.length}),F.on("end",()=>{Ge(performance.now()-j,"transfer",de,le),Ge(ee,"bytes-sent",de,le)})}else F?.then?F.then(ee=>{g.end(ee)},R):g.end(F)}catch(L){R(L)}function R(L){let O=L.headers,x=L.statusCode||500;g.writeHead(x,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(y_e(L)),$h(E,x,S,performance.now()-b),L.statusCode?L.statusCode===500?ca.default.warn(L):ca.default.info(L):ca.default.error(L)}o(R,"onError")},"requestHandler"),p=Gg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Ge(!0,"service-unavailable",e)},Cr.default.get(s+"_requestQueueLimit")),h=ny[e]=(t?f?rz.createSecureServer:nz.createServer:ay.createServer)(l,(E,g)=>{let b=E.method;b==="GET"||b==="OPTIONS"||b==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ge(performance.now()-E._parent.startTime,"tls-handshake",e),Ge(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),OP(h,e)}return ny[e]}function oy(e,t){let r=az;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 az(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Ds}}function w_e(e,t){LP(e,{requestOnly:!0,...t})}function cz(e,t){for(let{port:r}of PP(t))jW[t?.runFirst?"unshift":"push"]({listener:e,port:r}),CP[r]=oy(jW,r)}function N_e(e,t){let r=[];for(let{port:n,secure:s}of PP(t)){XT(n,{protocol_name:s?"WSS":"WS",name:ly()});let i=oz(n,s,t?.isOperationsServer,t?.mtls);Gh[n]||(Gh[n]=new sz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Gh[n].on("connection",(a,c)=>{try{let l=new Wa(c);l.isWebSocket=!0;let u=iy[n](l);ca.default.debug("Received WS connection, calling listeners",AP),QW[n](a,l,u)}catch(l){ca.default.warn("Error in handling WS connection",l)}}),cz((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):Gh[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),Gh[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{CP[n]&&CP[n](a,c,l)})),r.push(i),AP[t?.runFirst?"unshift":"push"]({listener:e,port:n}),QW[n]=oy(AP,n),iy[n]=oy(NP,n)}return r}function JW(e,t){t.writeHead(404),t.end(`Not found
102
- `),$h(e,404,0,e.requestId)}function $h(e,t,r,n){let s=Vh.logging;if(s){IP||(IP=ca.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";IP[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+C_e(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function C_e(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function lz(){return qh||(qh=new BigInt64Array([1n]),qh=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",qh.buffer))),Number(Atomics.add(qh,0,1n))}var XW,ca,sy,Cr,ZW,ez,tz,rz,nz,ay,wP,sz,y_e,Gh,ny,iy,NP,Vh,R_e,zW,jW,CP,AP,QW,IP,qh,DP=oe(()=>{XW=require("node:net"),ca=w(z()),sy=require("node:worker_threads"),Cr=w(fe());H();ZW=w(pt()),ez=w(rt()),tz=w(us()),rz=require("node:http2"),nz=require("node:https"),ay=require("node:http");Fp();Ap();Is();Jn();wP=require("node:stream");xr();pP();Kh();Qw();sz=require("ws");Hh();({errorToString:y_e}=ca.default);Me.http=LP;Me.request=w_e;Me.ws=N_e;Me.upgrade=cz;Gh={},ny={},iy={},NP=[],Vh={},R_e=!0;o(b_e,"handleApplication");o(A_e,"getHttpOptions");o(iz,"deliverSocket");zW=new Map;o(I_e,"proxyRequest");o(OP,"registerServer");o(PP,"getPorts");o(LP,"httpServer");o(oz,"getHTTPServer");o(oy,"makeCallbackChain");o(az,"unhandled");o(w_e,"onRequest");Object.defineProperty(ay.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){}});jW=[],CP={};o(cz,"onUpgrade");AP=[],QW={};o(N_e,"onWebSocket");o(JW,"defaultNotFound");o($h,"logRequest");o(C_e,"headersToString");o(lz,"getRequestId")});var vP=v(Wh=>{"use strict";KE();var{isMainThread:MP,parentPort:uz,threadId:uy,workerData:O_e}=require("node:worker_threads"),{createServer:P_e}=require("node:net"),{unlinkSync:fz,existsSync:L_e}=require("fs"),mz;Wh.whenComponentsLoaded=new Promise(e=>{mz=e});var yi=z(),$s=fe(),Es=(H(),M(W)),{server:D_e}=(xr(),M(em)),{createServer:M_e}=require("node:tls"),{restartNumber:v_e,getWorkerIndex:df}=rt(),{createReuseportFd:Yh}=(Fp(),M(fq)),{createTLSSelector:U_e}=us(),{resolvePath:x_e}=pt(),{startupLog:B_e}=dy(),{SERVERS:ff,setPortServerMap:dz,portServer:F_e}=(pP(),M(vW)),k_e=(DP(),M(cy)),H_e=ti(),pz=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG),G_e=$s.get(Es.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);D_e.socket=q_e;if(pz){let e;if(MP)e=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){yi.info("Could not close debugger",t)}});else{let t=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&df()>=0&&(e=t+df())}if(e){let t=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){yi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&MP)try{require("inspector").open(9229)}catch(e){v_e<=1&&yi.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"&&yi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:dFe,CONFIG_PARAMS:fFe}=Es;$s.initSync();Wh.globals=H_e;Wh.listenOnPorts=Ez;Wh.startServers=hz;function hz(){let e=$s.get(Es.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=my().loadRootComponents(!0).then(()=>{uz?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)k_e.proxyRequest(n);else if(n.type===Es.ITC_EVENT_TYPES.SHUTDOWN){yi.trace("received shutdown request",uy);for(let c in ff){let l=ff[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?yi.info(`Closing ${E.length} idle connections`):h&&yi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,b=E.length;g<b;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
101
+ `}getKey(){return(0,ey.createPublicKey)(this.pem)}toString(){return this.pem}},XT=class extends TypeError{static{o(this,"LicenseEncodingError")}},uf=class extends TypeError{static{o(this,"InvalidLicenseError")}},EP=class extends uf{static{o(this,"InvalidLicenseSignatureError")}},kh=class extends uf{static{o(this,"InvalidHeaderError")}},ZT=class extends uf{static{o(this,"InvalidPayloadError")}},d_e=new hP(UW.get(U.LICENSE_MODE));o(f_e,"validateLicenseSignature");o(m_e,"validateLicenseHeader");o(p_e,"valid");o(h_e,"validateLicensePayload");o(xW,"validateLicense")});var ty={};be(ty,{getActiveLicense:()=>yP,getUsageLicenses:()=>WW,getUsageLicensesOp:()=>bP,installUsageLicense:()=>TP,installUsageLicenseOp:()=>SP,isActiveLicense:()=>KW,isLicensed:()=>RP,loadAndWatchLicensesDir:()=>g_e,recordUsage:()=>YW});async function SP(e){let t=e.license;try{await TP(t)}catch(r){let n=new HW.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function TP(e){let t=xW(e),{id:r}=t;if(await De.system.hdb_license.get(r))throw new gP(`A usage license with ${r} already exists`);return io.info?.("Installing usage license:",t),De.system.hdb_license.put(r,t)}function KW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function yP(){let e=GW.get(U.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=De.system.hdb_license?.search(t);for await(let n of r??[])if(KW(n))return n}async function RP(){return await yP()!==void 0}async function YW(e){aa=io.forComponent("license"),aa.trace?.("Recording usage into license from analytics");let t,r=(await yP())?.id;if(r){aa.trace?.("Found license to record usage into:",r);let n={};St(n,()=>{t=De.system.hdb_license.update(r,n);for(let s of e)switch(aa.trace?.("Processing analytics record:",s),s.metric){case"db-read":aa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":aa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":aa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(aa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:aa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";FW||(console.error(n),FW=!0),kW===void 0&&(kW=setInterval(()=>{io.notify(n)},E_e).unref())}}function bP(e){let t={};return e.region&&(t.region=e.region),WW(t)}function WW(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),De.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function __e(e){io.trace?.("Loading usage license from file:",e);let t=await $W.readFile(e,{encoding:"utf-8"});try{await TP(t)}catch(r){io.error?.("Failed to install usage license from file:",e,r)}}function g_e(){let e=_P.default.join(_P.default.dirname(qW.getConfigFilePath()),"licenses");(0,VW.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",__e)}var HW,io,GW,_P,qW,$W,VW,gP,FW,kW,E_e,aa,Hh=oe(()=>{BW();HW=w(Ee()),io=w(z());Jn();Na();GW=w(fe());H();Ne();_P=w(require("node:path")),qW=w(pt()),$W=w(require("node:fs/promises")),VW=require("chokidar"),gP=class extends Error{static{o(this,"ExistingLicenseError")}};o(SP,"installUsageLicenseOp");o(TP,"installUsageLicense");FW=!1,E_e=6e5;o(KW,"isActiveLicense");o(yP,"getActiveLicense");o(RP,"isLicensed");o(YW,"recordUsage");AA(YW);o(bP,"getUsageLicensesOp");o(WW,"getUsageLicenses");o(__e,"loadLicenseFile");o(g_e,"loadAndWatchLicensesDir")});var ay={};be(ay,{deliverSocket:()=>iz,getHttpOptions:()=>R_e,getRequestId:()=>lz,handleApplication:()=>y_e,httpServer:()=>LP,logRequest:()=>$h,proxyRequest:()=>b_e,registerServer:()=>OP,suppressHandleApplicationWarning:()=>T_e});function y_e(e){Vh=e.options.getAll(),e.options.on("change",t=>{Vh=e.options.getAll()})}function R_e(){return Vh}function iz(e,t,r){let n=e?.read?e:new XW.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=lf[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=lf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ca.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function b_e(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=zW.get(s),r){case"connection":i=iz(void 0,t),zW.set(s,i),i.write=(c,l,u)=>(ny.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(ny.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),ny.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 OP(e,t,r=!0){t||(t=Cr.default.get(U.HTTP_PORT));let n=lf[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",JW),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else lf[t]=e;e.on("unhandled",JW)}function PP(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,ZW.resolvePath)(Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function LP(e,t){let r=[];for(let{port:n,secure:s}of PP(t))r.push(oz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?NP[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,OP(e,n,!1)),sy[n]=iy(NP,n);return r}function oz(e,t,r,n){if(JT(e,{protocol_name:t?"HTTPS":"HTTP",name:cy()}),!ry[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 E=Cr.default.get("tls");f=Cr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,ez.getTicketKeys)(),SNICallback:(0,tz.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let b=performance.now(),S=0;try{let L=new Wa(E,g);r&&(L.isOperationsServer=!0),Vh.logging?.id&&(L.requestId=S=lz());let O=await sy[e](L);if(!O){if(L._nodeResponse.statusCode){$h(E,L._nodeResponse.statusCode,S,performance.now()-b);return}O=az(L)}if(O.headers?.set||(O.headers=new Ds(O.headers)),await RP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let ee of O.headers||[])g.setHeader(ee[0],ee[1]);return E.baseRequest=L,g.baseResponse=O,ry[e].emit("unhandled",E,g)}let x=O.status||200;g.statusCode=x;let j=performance.now(),k=j-b,F=O.body,Q,Y=!1;if(!O.handlesHeaders){let ee=O.headers||new Ds;F?F.length>=0?(typeof F=="string"?ee.set("Content-Length",Buffer.byteLength(F)):ee.set("Content-Length",F.length),Q=!0):F instanceof As&&(F.size?ee.set("Content-Length",F.size):F.on&&(Y=!0,F.on("size",Ie=>{g.headersSent||g.setHeader("Content-Length",Ie)})),F=F.stream()):(ee.set("Content-Length","0"),Q=!0);let Re=`hdb;dur=${k.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),bp(ee,"Server-Timing",Re,!0),!g.headersSent)if(Y){if(ee)if(ee[Symbol.iterator])for(let[Ie,$e]of ee)g.setHeader(Ie,$e);else for(let Ie in ee)g.setHeader(Ie,ee[Ie])}else g.writeHead(x,ee&&(ee[Symbol.iterator]?Array.from(ee):ee));Q&&g.end(F)}let de=L.handlerPath,le=L.method;if(Ge(k,"duration",de,le,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(x<400,"success",de,le),zr(1,"response_"+x,de,le),$h(E,x,S,k),!Q)if(F instanceof ReadableStream&&(F=wP.Readable.fromWeb(F)),(F[Symbol.iterator]||F[Symbol.asyncIterator])&&(F=wP.Readable.from(F)),F?.pipe){F.pipe(g),F.destroy&&g.on("close",()=>{F.destroy()});let ee=0;F.on("data",Re=>{ee+=Re.length}),F.on("end",()=>{Ge(performance.now()-j,"transfer",de,le),Ge(ee,"bytes-sent",de,le)})}else F?.then?F.then(ee=>{g.end(ee)},R):g.end(F)}catch(L){R(L)}function R(L){let O=L.headers,x=L.statusCode||500;g.writeHead(x,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(S_e(L)),$h(E,x,S,performance.now()-b),L.statusCode?L.statusCode===500?ca.default.warn(L):ca.default.info(L):ca.default.error(L)}o(R,"onError")},"requestHandler"),p=Hg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Ge(!0,"service-unavailable",e)},Cr.default.get(s+"_requestQueueLimit")),h=ry[e]=(t?f?rz.createSecureServer:nz.createServer:oy.createServer)(l,(E,g)=>{let b=E.method;b==="GET"||b==="OPTIONS"||b==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ge(performance.now()-E._parent.startTime,"tls-handshake",e),Ge(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),OP(h,e)}return ry[e]}function iy(e,t){let r=az;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 az(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Ds}}function A_e(e,t){LP(e,{requestOnly:!0,...t})}function cz(e,t){for(let{port:r}of PP(t))jW[t?.runFirst?"unshift":"push"]({listener:e,port:r}),CP[r]=iy(jW,r)}function I_e(e,t){let r=[];for(let{port:n,secure:s}of PP(t)){JT(n,{protocol_name:s?"WSS":"WS",name:cy()});let i=oz(n,s,t?.isOperationsServer,t?.mtls);Gh[n]||(Gh[n]=new sz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Gh[n].on("connection",(a,c)=>{try{let l=new Wa(c);l.isWebSocket=!0;let u=sy[n](l);ca.default.debug("Received WS connection, calling listeners",AP),QW[n](a,l,u)}catch(l){ca.default.warn("Error in handling WS connection",l)}}),cz((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):Gh[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),Gh[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{CP[n]&&CP[n](a,c,l)})),r.push(i),AP[t?.runFirst?"unshift":"push"]({listener:e,port:n}),QW[n]=iy(AP,n),sy[n]=iy(NP,n)}return r}function JW(e,t){t.writeHead(404),t.end(`Not found
102
+ `),$h(e,404,0,e.requestId)}function $h(e,t,r,n){let s=Vh.logging;if(s){IP||(IP=ca.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";IP[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+w_e(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function w_e(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function lz(){return qh||(qh=new BigInt64Array([1n]),qh=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",qh.buffer))),Number(Atomics.add(qh,0,1n))}var XW,ca,ny,Cr,ZW,ez,tz,rz,nz,oy,wP,sz,S_e,Gh,ry,sy,NP,Vh,T_e,zW,jW,CP,AP,QW,IP,qh,DP=oe(()=>{XW=require("node:net"),ca=w(z()),ny=require("node:worker_threads"),Cr=w(fe());H();ZW=w(pt()),ez=w(rt()),tz=w(us()),rz=require("node:http2"),nz=require("node:https"),oy=require("node:http");Fp();Ap();Is();Jn();wP=require("node:stream");xr();pP();Kh();Qw();sz=require("ws");Hh();({errorToString:S_e}=ca.default);Me.http=LP;Me.request=A_e;Me.ws=I_e;Me.upgrade=cz;Gh={},ry={},sy={},NP=[],Vh={},T_e=!0;o(y_e,"handleApplication");o(R_e,"getHttpOptions");o(iz,"deliverSocket");zW=new Map;o(b_e,"proxyRequest");o(OP,"registerServer");o(PP,"getPorts");o(LP,"httpServer");o(oz,"getHTTPServer");o(iy,"makeCallbackChain");o(az,"unhandled");o(A_e,"onRequest");Object.defineProperty(oy.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){}});jW=[],CP={};o(cz,"onUpgrade");AP=[],QW={};o(I_e,"onWebSocket");o(JW,"defaultNotFound");o($h,"logRequest");o(w_e,"headersToString");o(lz,"getRequestId")});var vP=v(Wh=>{"use strict";VE();var{isMainThread:MP,parentPort:uz,threadId:ly,workerData:N_e}=require("node:worker_threads"),{createServer:C_e}=require("node:net"),{unlinkSync:fz,existsSync:O_e}=require("fs"),mz;Wh.whenComponentsLoaded=new Promise(e=>{mz=e});var yi=z(),$s=fe(),Es=(H(),M(W)),{server:P_e}=(xr(),M(em)),{createServer:L_e}=require("node:tls"),{restartNumber:D_e,getWorkerIndex:df}=rt(),{createReuseportFd:Yh}=(Fp(),M(dq)),{createTLSSelector:M_e}=us(),{resolvePath:v_e}=pt(),{startupLog:U_e}=uy(),{SERVERS:ff,setPortServerMap:dz,portServer:x_e}=(pP(),M(vW)),B_e=(DP(),M(ay)),F_e=ti(),pz=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG),k_e=$s.get(Es.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);P_e.socket=H_e;if(pz){let e;if(MP)e=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){yi.info("Could not close debugger",t)}});else{let t=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&df()>=0&&(e=t+df())}if(e){let t=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=$s.get(Es.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){yi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&MP)try{require("inspector").open(9229)}catch(e){D_e<=1&&yi.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"&&yi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:cFe,CONFIG_PARAMS:lFe}=Es;$s.initSync();Wh.globals=F_e;Wh.listenOnPorts=Ez;Wh.startServers=hz;function hz(){let e=$s.get(Es.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=fy().loadRootComponents(!0).then(()=>{uz?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)B_e.proxyRequest(n);else if(n.type===Es.ITC_EVENT_TYPES.SHUTDOWN){yi.trace("received shutdown request",ly);for(let c in ff){let l=ff[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?yi.info(`Closing ${E.length} idle connections`):h&&yi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,b=E.length;g<b;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
103
103
  Connection: close\r
104
104
  \r
105
- `))}},25).unref()}l.close?.(()=>{if($s.get(Es.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&df()==0)try{fz(x_e($s.get(Es.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,uy),l.cantCleanupProperly||yi.warn("Had to forcefully exit the thread",uy),process.exit(0)},5e3).unref()})}if(pz||process.env.DEV_MODE)try{require("inspector").close()}catch(c){yi.info("Could not close debugger",c)}}}).ref();let r;Yh&&!G_e&&(r=Ez()),Promise.resolve(r).then(()=>{if(df()===0)try{B_e(F_e)}catch(n){console.error("Error displaying start-up log",n)}uz?.postMessage({type:Es.ITC_EVENT_TYPES.CHILD_STARTED})})});return mz(t),t}o(hz,"startServers");function Ez(){let e=[];for(let t in ff){let r=ff[t];if(t.includes?.("/")&&df()==0){L_e(t)&&fz(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),yi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=$s.get(Es.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=df();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?Yh?n={fd:Yh(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:Yh?n={fd:Yh(+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}),yi.trace("Listening on port "+t,uy)}).on("error",c)}))}return Promise.all(e)}o(Ez,"listenOnPorts");!MP&&!O_e?.noServerStart&&hz();function q_e(e,t){let r=(Kh(),M(fy)).getComponentName,n;if(t.securePort){dz(t.securePort,{protocol_name:"TLS",name:r()});let s=U_e("server",t.mtls),i=$s.get("tls");n=M_e({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),ff[t.securePort]=n}return t.port&&(dz(t.port,{protocol_name:"TCP",name:r()}),n=P_e(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),ff[t.port]=n),n}o(q_e,"onSocket")});var Az={};be(Az,{startHTTPThreads:()=>$_e,startSocketServer:()=>FP,updateWorkerIdleness:()=>bz});async function $_e(e=2,t){RA().catch(r=>_f.error?.("Error recording hostname for analytics:",r));try{if(t)xP(0,1,!0);else{let{loadRootComponents:r}=my();if(e===0)return(0,oo.setMainIsWorker)(!0),await vP().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)xP(r,e);return Promise.all(Rz)}finally{(0,oo.threadsHaveStarted)()}}function xP(e,t=1,r){if(UP++,(0,oo.startWorker)("server/threads/threadServer.js",{name:Sb.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===Eb.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});Rz.push(s),await s,mf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=hy.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=mf.indexOf(n);a>-1&&mf.splice(a,1)}if(o(i,"removeWorker"),pf){let a=pf;pf=[];for(let c of a)yz[c.localPort](null,c)}}}),r){let n=setInterval(()=>{BP?BP=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,oo.shutdownWorkers)(),UP=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function FP(e=0,t){if(typeof e=="string")try{(0,Ey.existsSync)(e)&&(0,Ey.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=V_e:r=K_e(t):r=kP;let n=(0,hf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=yz[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),BP=!0,r(i,(a,c)=>{if(!a){if(_z){let u=i._socket||new hf.Socket({handle:i,writable:!0,readable:!0});_z.deliverSocket(u,e,c),u.resume()}else UP>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"),xP(0));Ge(!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 hf.Socket({handle:i,writable:!0,readable:!0});z_e(u,a,e)}Ge(!0,"socket-routed")})},_f.info(`HarperDB ${Tz.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 kP(e,t){let r,n=0;for(let s of mf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=py)return py=i,t(r);n=i}py=0,t(r)}function V_e(e,t){let r={};e.getpeername(r);let n=r.address,s=Ef.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);kP(e,a=>{Ef.set(n,{worker:a,lastUsed:i}),t(a)})}function K_e(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new hf.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=Ef.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);kP(n,f=>{Ef.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function bz(){py=0;for(let e of mf)e.expectedIdle=e.recentELU.idle+Y_e,e.requests=1;mf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function z_e(e,t,r){let n=W_e++;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(),hy.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")),hy.delete(n)),s.event=="destroy"&&(e.destroy(),hy.delete(n))})}var oo,hf,_f,Ey,Sz,Tz,mf,pf,yz,_z,UP,Rz,BP,py,gz,Ef,Y_e,hy,W_e,HP=oe(()=>{oo=w(rt()),hf=require("net");H();_f=w(z()),Ey=require("fs");Jn();Sz=require("worker_threads"),Tz=w(bt()),mf=[],pf=[],yz=[],UP=0,Rz=[];Sz.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){_f.disableStdio();return}console.error("uncaughtException",e)}});o($_e,"startHTTPThreads");o(xP,"startHTTPWorker");o(FP,"startSocketServer");py=0;o(kP,"findMostIdleWorker");gz=36e5,Ef=new Map;o(V_e,"findByRemoteAddressAffinity");o(K_e,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ef)r.lastUsed+gz<e&&Ef.delete(t)},gz).unref();Y_e=1e3;o(bz,"updateWorkerIdleness");(0,oo.setMonitorListener)(bz);hy=new Map,W_e=1;o(z_e,"proxySocket")});var dy=v(gy=>{"use strict";var ye=fe();ye.initSync();yf();var rn=(H(),M(W)),{CONFIG_PARAMS:Ue}=rn,sr=z(),Sf=require("fs-extra"),Sc=require("path"),j_e=FO(),{install:Q_e}=bW(),GP=require("chalk"),{packageJson:J_e,PACKAGE_ROOT:X_e}=bt(),Tf=ce(),Z_e=(lP(),M(cP)),qP=pt(),wz=Hc(),Iz=LT(),ege=MW(),{compactOnStart:tge}=(xO(),M(UO)),rge=require("minimist"),nge=us(),{startHTTPThreads:sge}=(HP(),M(Az)),ige=YT(),{isMainThread:oge}=require("worker_threads"),_Fe=Hi(),gFe=Cl(),SFe=xI(),TFe=rp(),_y=(H(),M(W)),{getHdbPid:age}=tf(),Tc,gf,Nz=!1,cge="Upgrade complete. Starting HarperDB.",lge="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",uge="HarperDB not found, starting install process.",dge="There was an error during install, check install_log.log for more details. Exiting.",fge="HarperDB successfully started.";function mge(){process.on("unhandledRejection",(e,t)=>{sr.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(mge,"addUnhandleRejectionListener");function pge(){if(!Nz){let e=o(()=>{Sf.removeSync(Sc.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(pge,"addExitListeners");async function Cz(e=!1,t=!1){if(console.log(GP.magenta("Starting HarperDB...")),mge(),sr.suppressLogging?.(()=>{console.log(GP.magenta(""+Sf.readFileSync(Sc.join(X_e,"utility/install/ascii_logo.txt"))))}),sr.debug("Checking to make sure hdb is installed"),Z_e.isHdbInstalled(ye,sr)===!1){console.log(uge);try{await Q_e()}catch(a){console.error(dge,a),sr.error(a),process.exit(1)}}if(!e){let a=wz(Object.keys(rn.CONFIG_PARAM_MAP),!0);!Tf.isEmpty(a)&&!Tf.isEmptyOrZeroLength(Object.keys(a))&&qP.updateConfigValue(void 0,void 0,a,!0,!0)}let r=gf?.service==="clustering";gf?.service&&!r&&(console.error("Unrecognized service argument"),sr.debug("Unrecognized service argument"),process.exit(1));let n=age();n&&(r||(sr.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),Tc===void 0&&(Tc=tf()),sr.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await Iz.generateNatsConfig(),await Tc.startClusteringProcesses(!0),process.exit()),pge(),t&&await Sf.writeFile(Sc.join(ye.get(_y.CONFIG_PARAMS.ROOTPATH),_y.HDB_PID_FILE),`${process.pid}`),sr.info("HarperDB PID",process.pid);let s;try{let a=await ige.getVersionUpdateInfo();a!==void 0&&(s=a[rn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await ege.upgrade(a),console.log(cge))}catch(a){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,a),sr.error(a)):(console.error(lge,a),sr.error(a)),process.exit(1)}j_e(),_ge(),await nge.reviewSelfSignedCert(),Tf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&oge&&await Iz.generateNatsConfig(t)}o(Cz,"initialize");async function hge(e=!1){try{gf=rge(process.argv),gf.ROOTPATH&&qP.updateConfigObject("settings_path",Sc.join(gf.ROOTPATH,rn.HDB_CONFIG_FILE)),await Cz(e,!0),ye.get(rn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await tge();let t=process.env.IS_SCRIPTED_SERVICE&&!gf.service;Tf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await Tc.startClusteringProcesses(),await Tc.startClusteringThreads()),await sge(process.env.DEV_MODE?1:ye.get(_y.CONFIG_PARAMS.THREADS_COUNT)??ye.get(_y.CONFIG_PARAMS.THREADS)),t||Oz()}catch(t){console.error(t),sr.error(t),process.exit(1)}}o(hge,"main");function Oz(){sr.suppressLogging(()=>{console.log(GP.magenta(`HarperDB ${J_e.version} successfully started`))}),sr.notify(fge)}o(Oz,"started");async function Ege(e=!0){Nz=!e;try{Tc===void 0&&(Tc=tf()),sr.debug("initializing processManagement..."),await Cz(),sr.debug("Starting new main process"),await Tc.startService(rn.PROCESS_DESCRIPTORS.HDB,!0),Oz(),e&&process.exit(0)}catch(t){console.error(t),sr.error(t),process.exit(1)}}o(Ege,"launch");function _ge(){let e=Sc.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.LICENSE_KEY_DIR_NAME,rn.LICENSE_FILE_NAME),t=Sc.join(e,rn.LICENSE_FILE_NAME),r=Sc.join(e,rn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=wz(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Tf.isEmpty(n)||Tf.isEmpty(s))return;Sf.mkdirpSync(e),Sf.writeFileSync(r,n),Sf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),sr.error(s)}}o(_ge,"writeLicenseFromVars");gy.launch=Ege;gy.main=hge;gy.startupLog=gge;function gge(e){let r=o(p=>p.padEnd(20),"pad"),n=`
106
- `;ye.get(Ue.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ye.get(Ue.REPLICATION_HOSTNAME)}
107
- `),ye.get(Ue.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ye.get(Ue.REPLICATION_URL)}
108
- `),n+=`${r("Worker Threads:")}${ye.get(Ue.THREADS_COUNT)}
109
- `,n+=`${r("Root Path:")}${ye.get(Ue.ROOTPATH)}
110
- `,ye.get(Ue.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=ye.get(Ue.THREADS_DEBUG_PORT)?`, TCP: ${ye.get(Ue.THREADS_DEBUG_PORT)}
105
+ `))}},25).unref()}l.close?.(()=>{if($s.get(Es.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&df()==0)try{fz(v_e($s.get(Es.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,ly),l.cantCleanupProperly||yi.warn("Had to forcefully exit the thread",ly),process.exit(0)},5e3).unref()})}if(pz||process.env.DEV_MODE)try{require("inspector").close()}catch(c){yi.info("Could not close debugger",c)}}}).ref();let r;Yh&&!k_e&&(r=Ez()),Promise.resolve(r).then(()=>{if(df()===0)try{U_e(x_e)}catch(n){console.error("Error displaying start-up log",n)}uz?.postMessage({type:Es.ITC_EVENT_TYPES.CHILD_STARTED})})});return mz(t),t}o(hz,"startServers");function Ez(){let e=[];for(let t in ff){let r=ff[t];if(t.includes?.("/")&&df()==0){O_e(t)&&fz(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),yi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=$s.get(Es.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=df();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?Yh?n={fd:Yh(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:Yh?n={fd:Yh(+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}),yi.trace("Listening on port "+t,ly)}).on("error",c)}))}return Promise.all(e)}o(Ez,"listenOnPorts");!MP&&!N_e?.noServerStart&&hz();function H_e(e,t){let r=(Kh(),M(dy)).getComponentName,n;if(t.securePort){dz(t.securePort,{protocol_name:"TLS",name:r()});let s=M_e("server",t.mtls),i=$s.get("tls");n=L_e({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),ff[t.securePort]=n}return t.port&&(dz(t.port,{protocol_name:"TCP",name:r()}),n=C_e(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),ff[t.port]=n),n}o(H_e,"onSocket")});var Az={};be(Az,{startHTTPThreads:()=>G_e,startSocketServer:()=>FP,updateWorkerIdleness:()=>bz});async function G_e(e=2,t){RA().catch(r=>_f.error?.("Error recording hostname for analytics:",r));try{if(t)xP(0,1,!0);else{let{loadRootComponents:r}=fy();if(e===0)return(0,oo.setMainIsWorker)(!0),await vP().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)xP(r,e);return Promise.all(Rz)}finally{(0,oo.threadsHaveStarted)()}}function xP(e,t=1,r){if(UP++,(0,oo.startWorker)("server/threads/threadServer.js",{name:Sb.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===Eb.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});Rz.push(s),await s,mf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=py.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=mf.indexOf(n);a>-1&&mf.splice(a,1)}if(o(i,"removeWorker"),pf){let a=pf;pf=[];for(let c of a)yz[c.localPort](null,c)}}}),r){let n=setInterval(()=>{BP?BP=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,oo.shutdownWorkers)(),UP=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function FP(e=0,t){if(typeof e=="string")try{(0,hy.existsSync)(e)&&(0,hy.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=q_e:r=$_e(t):r=kP;let n=(0,hf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=yz[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),BP=!0,r(i,(a,c)=>{if(!a){if(_z){let u=i._socket||new hf.Socket({handle:i,writable:!0,readable:!0});_z.deliverSocket(u,e,c),u.resume()}else UP>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"),xP(0));Ge(!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 hf.Socket({handle:i,writable:!0,readable:!0});Y_e(u,a,e)}Ge(!0,"socket-routed")})},_f.info(`HarperDB ${Tz.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 kP(e,t){let r,n=0;for(let s of mf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=my)return my=i,t(r);n=i}my=0,t(r)}function q_e(e,t){let r={};e.getpeername(r);let n=r.address,s=Ef.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);kP(e,a=>{Ef.set(n,{worker:a,lastUsed:i}),t(a)})}function $_e(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new hf.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=Ef.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);kP(n,f=>{Ef.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function bz(){my=0;for(let e of mf)e.expectedIdle=e.recentELU.idle+V_e,e.requests=1;mf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Y_e(e,t,r){let n=K_e++;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(),py.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")),py.delete(n)),s.event=="destroy"&&(e.destroy(),py.delete(n))})}var oo,hf,_f,hy,Sz,Tz,mf,pf,yz,_z,UP,Rz,BP,my,gz,Ef,V_e,py,K_e,HP=oe(()=>{oo=w(rt()),hf=require("net");H();_f=w(z()),hy=require("fs");Jn();Sz=require("worker_threads"),Tz=w(Rt()),mf=[],pf=[],yz=[],UP=0,Rz=[];Sz.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){_f.disableStdio();return}console.error("uncaughtException",e)}});o(G_e,"startHTTPThreads");o(xP,"startHTTPWorker");o(FP,"startSocketServer");my=0;o(kP,"findMostIdleWorker");gz=36e5,Ef=new Map;o(q_e,"findByRemoteAddressAffinity");o($_e,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ef)r.lastUsed+gz<e&&Ef.delete(t)},gz).unref();V_e=1e3;o(bz,"updateWorkerIdleness");(0,oo.setMonitorListener)(bz);py=new Map,K_e=1;o(Y_e,"proxySocket")});var uy=v(_y=>{"use strict";var ye=fe();ye.initSync();yf();var rn=(H(),M(W)),{CONFIG_PARAMS:ve}=rn,sr=z(),Sf=require("fs-extra"),Sc=require("path"),W_e=FO(),{install:z_e}=bW(),GP=require("chalk"),{packageJson:j_e,PACKAGE_ROOT:Q_e}=Rt(),Tf=ce(),J_e=(lP(),M(cP)),qP=pt(),wz=Hc(),Iz=PT(),X_e=MW(),{compactOnStart:Z_e}=(xO(),M(UO)),ege=require("minimist"),tge=us(),{startHTTPThreads:rge}=(HP(),M(Az)),nge=KT(),{isMainThread:sge}=require("worker_threads"),pFe=Hi(),hFe=Cl(),EFe=xI(),_Fe=rp(),Ey=(H(),M(W)),{getHdbPid:ige}=tf(),Tc,gf,Nz=!1,oge="Upgrade complete. Starting HarperDB.",age="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",cge="HarperDB not found, starting install process.",lge="There was an error during install, check install_log.log for more details. Exiting.",uge="HarperDB successfully started.";function dge(){process.on("unhandledRejection",(e,t)=>{sr.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(dge,"addUnhandleRejectionListener");function fge(){if(!Nz){let e=o(()=>{Sf.removeSync(Sc.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(fge,"addExitListeners");async function Cz(e=!1,t=!1){if(console.log(GP.magenta("Starting HarperDB...")),dge(),sr.suppressLogging?.(()=>{console.log(GP.magenta(""+Sf.readFileSync(Sc.join(Q_e,"utility/install/ascii_logo.txt"))))}),sr.debug("Checking to make sure hdb is installed"),J_e.isHdbInstalled(ye,sr)===!1){console.log(cge);try{await z_e()}catch(a){console.error(lge,a),sr.error(a),process.exit(1)}}if(!e){let a=wz(Object.keys(rn.CONFIG_PARAM_MAP),!0);!Tf.isEmpty(a)&&!Tf.isEmptyOrZeroLength(Object.keys(a))&&qP.updateConfigValue(void 0,void 0,a,!0,!0)}let r=gf?.service==="clustering";gf?.service&&!r&&(console.error("Unrecognized service argument"),sr.debug("Unrecognized service argument"),process.exit(1));let n=ige();n&&(r||(sr.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),Tc===void 0&&(Tc=tf()),sr.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await Iz.generateNatsConfig(),await Tc.startClusteringProcesses(!0),process.exit()),fge(),t&&await Sf.writeFile(Sc.join(ye.get(Ey.CONFIG_PARAMS.ROOTPATH),Ey.HDB_PID_FILE),`${process.pid}`),sr.info("HarperDB PID",process.pid);let s;try{let a=await nge.getVersionUpdateInfo();a!==void 0&&(s=a[rn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await X_e.upgrade(a),console.log(oge))}catch(a){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,a),sr.error(a)):(console.error(age,a),sr.error(a)),process.exit(1)}W_e(),hge(),await tge.reviewSelfSignedCert(),Tf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&sge&&await Iz.generateNatsConfig(t)}o(Cz,"initialize");async function mge(e=!1){try{gf=ege(process.argv),gf.ROOTPATH&&qP.updateConfigObject("settings_path",Sc.join(gf.ROOTPATH,rn.HDB_CONFIG_FILE)),await Cz(e,!0),ye.get(rn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Z_e();let t=process.env.IS_SCRIPTED_SERVICE&&!gf.service;Tf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await Tc.startClusteringProcesses(),await Tc.startClusteringThreads()),await rge(process.env.DEV_MODE?1:ye.get(Ey.CONFIG_PARAMS.THREADS_COUNT)??ye.get(Ey.CONFIG_PARAMS.THREADS)),t||Oz()}catch(t){console.error(t),sr.error(t),process.exit(1)}}o(mge,"main");function Oz(){sr.suppressLogging(()=>{console.log(GP.magenta(`HarperDB ${j_e.version} successfully started`))}),sr.notify(uge)}o(Oz,"started");async function pge(e=!0){Nz=!e;try{Tc===void 0&&(Tc=tf()),sr.debug("initializing processManagement..."),await Cz(),sr.debug("Starting new main process"),await Tc.startService(rn.PROCESS_DESCRIPTORS.HDB,!0),Oz(),e&&process.exit(0)}catch(t){console.error(t),sr.error(t),process.exit(1)}}o(pge,"launch");function hge(){let e=Sc.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.LICENSE_KEY_DIR_NAME,rn.LICENSE_FILE_NAME),t=Sc.join(e,rn.LICENSE_FILE_NAME),r=Sc.join(e,rn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=wz(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Tf.isEmpty(n)||Tf.isEmpty(s))return;Sf.mkdirpSync(e),Sf.writeFileSync(r,n),Sf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),sr.error(s)}}o(hge,"writeLicenseFromVars");_y.launch=pge;_y.main=mge;_y.startupLog=Ege;function Ege(e){let r=o(p=>p.padEnd(20),"pad"),n=`
106
+ `;ye.get(ve.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ye.get(ve.REPLICATION_HOSTNAME)}
107
+ `),ye.get(ve.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ye.get(ve.REPLICATION_URL)}
108
+ `),n+=`${r("Worker Threads:")}${ye.get(ve.THREADS_COUNT)}
109
+ `,n+=`${r("Root Path:")}${ye.get(ve.ROOTPATH)}
110
+ `,ye.get(ve.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=ye.get(ve.THREADS_DEBUG_PORT)?`, TCP: ${ye.get(ve.THREADS_DEBUG_PORT)}
111
111
  `:`
112
- `);let s=Sc.join(ye.get(Ue.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${ye.get(Ue.LOGGING_LEVEL)}, location: ${s+(ye.get(Ue.LOGGING_STDSTREAMS)?", stdout/err":"")}
113
- `,n+=r("Default:"),n+=ye.get(Ue.HTTP_PORT)?`HTTP (and WS): ${ye.get(Ue.HTTP_PORT)}, `:"",n+=ye.get(Ue.HTTP_SECUREPORT)?`HTTPS (and WS): ${ye.get(Ue.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${ye.get(Ue.HTTP_CORS)?`enabled for ${ye.get(Ue.HTTP_CORSACCESSLIST)}`:"disabled"}
114
- `,n+=r("Operations API:"),n+=ye.get(Ue.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${ye.get(Ue.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=ye.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${ye.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${ye.get(Ue.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${ye.get(Ue.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${ye.get(Ue.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
115
- `,n+=r("MQTT:"),n+=ye.get(Ue.MQTT_NETWORK_PORT)?`TCP: ${ye.get(Ue.MQTT_NETWORK_PORT)}, `:"",n+=ye.get(Ue.MQTT_NETWORK_SECUREPORT)?`TLS: ${ye.get(Ue.MQTT_NETWORK_SECUREPORT)}`:"",n+=ye.get(Ue.MQTT_WEBSOCKET)&&ye.get(Ue.HTTP_PORT)?`, WS: ${ye.get(Ue.HTTP_PORT)}`:"",n+=ye.get(Ue.MQTT_WEBSOCKET)&&ye.get(Ue.HTTP_SECUREPORT)?`, WSS: ${ye.get(Ue.HTTP_SECUREPORT)}
112
+ `);let s=Sc.join(ye.get(ve.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${ye.get(ve.LOGGING_LEVEL)}, location: ${s+(ye.get(ve.LOGGING_STDSTREAMS)?", stdout/err":"")}
113
+ `,n+=r("Default:"),n+=ye.get(ve.HTTP_PORT)?`HTTP (and WS): ${ye.get(ve.HTTP_PORT)}, `:"",n+=ye.get(ve.HTTP_SECUREPORT)?`HTTPS (and WS): ${ye.get(ve.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${ye.get(ve.HTTP_CORS)?`enabled for ${ye.get(ve.HTTP_CORSACCESSLIST)}`:"disabled"}
114
+ `,n+=r("Operations API:"),n+=ye.get(ve.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${ye.get(ve.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=ye.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${ye.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${ye.get(ve.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${ye.get(ve.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${ye.get(ve.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
115
+ `,n+=r("MQTT:"),n+=ye.get(ve.MQTT_NETWORK_PORT)?`TCP: ${ye.get(ve.MQTT_NETWORK_PORT)}, `:"",n+=ye.get(ve.MQTT_NETWORK_SECUREPORT)?`TLS: ${ye.get(ve.MQTT_NETWORK_SECUREPORT)}`:"",n+=ye.get(ve.MQTT_WEBSOCKET)&&ye.get(ve.HTTP_PORT)?`, WS: ${ye.get(ve.HTTP_PORT)}`:"",n+=ye.get(ve.MQTT_WEBSOCKET)&&ye.get(ve.HTTP_SECUREPORT)?`, WSS: ${ye.get(ve.HTTP_SECUREPORT)}
116
116
  `:`
117
- `;let i=ye.get(Ue.REPLICATION_PORT)??ye.get(Ue.OPERATIONSAPI_NETWORK_PORT),a=ye.get(Ue.REPLICATION_SECUREPORT)??ye.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
117
+ `;let i=ye.get(ve.REPLICATION_PORT)??ye.get(ve.OPERATIONSAPI_NETWORK_PORT),a=ye.get(ve.REPLICATION_SECUREPORT)??ye.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
118
118
  `;let l=[],u=qP.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let g=E.name;g==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(g)&&(d[g]?d[g]+=`${E.protocol_name}: ${p}, `:d[g]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
119
- `);let m=ye.get(Ue.HTTP_PORT)?`HTTP: ${ye.get(Ue.HTTP_PORT)}, `:"";m+=ye.get(Ue.HTTP_SECUREPORT)?`HTTPS: ${ye.get(Ue.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
119
+ `);let m=ye.get(ve.HTTP_PORT)?`HTTP: ${ye.get(ve.HTTP_PORT)}, `:"";m+=ye.get(ve.HTTP_SECUREPORT)?`HTTPS: ${ye.get(ve.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
120
120
  `:n+=`${r(p+": ")}${m}
121
- `;console.log(n),ye.get(Ue.LOGGING_STDSTREAMS)&&sr.logsAtLevel("info")&&sr.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(gge,"startupLog")});var yf=v((wFe,Uz)=>{"use strict";var Sge=require("minimist"),{isMainThread:YP,parentPort:zh,threadId:bFe}=require("worker_threads"),Bt=(H(),M(W)),Ri=z(),Tge=ce(),Sy=LT(),$P=rr(),AFe=It(),yge=pt(),Zl=tf(),Pz=hh(),{compactOnStart:Rge}=(xO(),M(UO)),IFe=Hc(),{restartWorkers:KP,onMessageByType:bge,shutdownWorkersNow:Age}=rt(),{handleHDBError:Ige,hdbErrors:wge}=Ee(),{HTTP_STATUS_CODES:Nge}=wge,jh=fe(),{sendOperationToNode:Lz,getThisNodeName:Cge,monitorNodeCAs:Oge}=(cs(),M(Yo)),Pge=require("node:path"),{unlinkSync:Lge}=require("node:fs");jh.initSync();var VP=`Restarting HarperDB. This may take up to ${Bt.RESTART_TIMEOUT_MS/1e3} seconds.`,Dz="Clustering is not enabled so cannot be restarted",Dge="Invalid service",la;Uz.exports={restart:vz,restartService:WP};YP&&bge(Bt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await WP({service:e.workerType}):vz({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function vz(e){la=Object.keys(e).length===0;let t=Sge(process.argv);if(t.service){await WP(t);return}if(la){let r=Zl.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),dy().launch(!0),VP}return YP?(Ri.notify(VP),jh.get(Bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Rge(),process.env.HARPER_EXIT_ON_RESTART&&(Ri.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Ri.debug("Shutdown workers"),await Age(),await Zl.cleanupChildrenProcesses(!1),await Lge(Pge.join(jh.get(Bt.CONFIG_PARAMS.ROOTPATH),Bt.HDB_PID_FILE),`${process.pid}`),Ri.debug("Starting new process..."),dy().launch(!0)},50)):zh.postMessage({type:Bt.ITC_EVENT_TYPES.RESTART}),VP}o(vz,"restart");async function WP(e){let{service:t}=e;if(Bt.HDB_PROCESS_SERVICES[t]===void 0)throw Ige(new Error,Dge,Nge.BAD_REQUEST,void 0,void 0,!0);if(Zl.expectedRestartOfChildren(),!YP){e.replicated&&Oge(),zh.postMessage({type:Bt.ITC_EVENT_TYPES.RESTART,workerType:t}),zh.ref(),await new Promise(s=>{zh.on("message",i=>{i.type==="restart-complete"&&(s(),zh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Cge())continue;let i;try{({job_id:i}=await Lz(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await Lz(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case Bt.HDB_PROCESS_SERVICES.clustering:if(!jh.get(Bt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Dz;break}la&&console.log("Restarting clustering"),Ri.notify("Restarting clustering"),await Mge();break;case Bt.HDB_PROCESS_SERVICES.clustering_config:case Bt.HDB_PROCESS_SERVICES["clustering config"]:if(!jh.get(Bt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Dz;break}la&&console.log("Restarting clusteringConfig"),Ri.notify("Restarting clustering_config"),await Zl.reloadClustering();break;case"custom_functions":case"custom functions":case Bt.HDB_PROCESS_SERVICES.harperdb:case Bt.HDB_PROCESS_SERVICES.http_workers:case Bt.HDB_PROCESS_SERVICES.http:la&&console.log("Restarting httpWorkers"),Ri.notify("Restarting http_workers"),la?await Zl.restart(Bt.PROCESS_DESCRIPTORS.HDB):await KP("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ri.error(r),la&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(WP,"restartService");async function Mge(){if(!yge.getConfigFromFile(Bt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await Pz.getHDBProcessInfo()).clustering.length===0)Ri.trace("Clustering not running, restart will start clustering services"),await Sy.generateNatsConfig(!0),await Zl.startClusteringProcesses(),await Zl.startClusteringThreads(),await Mz(),la&&await $P.closeConnection();else{await Sy.generateNatsConfig(!0),(await Pz.getHDBProcessInfo()).clustering.forEach(s=>{Ri.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await Tge.asyncSetTimeout(3e3),await Mz(),await $P.updateLocalStreams(),la&&await $P.closeConnection(),Ri.trace("Restart clustering restarting ingest and reply service threads");let r=KP(Bt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=KP(Bt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}o(Mge,"restartClustering");async function Mz(){await Sy.removeNatsConfig(Bt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Sy.removeNatsConfig(Bt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(Mz,"removeNatsConfig")});var Yz=v((OFe,Kz)=>{"use strict";var CFe=require("lodash"),Gn=(H(),M(W)),{handleHDBError:xz,hdbErrors:vge}=Ee(),{HDB_ERROR_MSGS:Uge,HTTP_STATUS_CODES:xge}=vge,zP=z();Kz.exports={getRolePermissions:Fge};var eu=Object.create(null),Bge=o(e=>({key:e,perms:{}}),"permsTemplateObj"),Hz=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),Gz=o((e=!1,t=!1,r=!1,n=!1)=>({[Gn.PERMS_CRUD_ENUM.READ]:e,[Gn.PERMS_CRUD_ENUM.INSERT]:t,[Gn.PERMS_CRUD_ENUM.UPDATE]:r,[Gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),jP=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Gz(t,r,n,s)}),"tablePermsTemplate"),Bz=o((e,t=Gz())=>({attribute_name:e,describe:Vz(t),[Qh]:t[Qh],[QP]:t[QP],[JP]:t[JP]}),"attrPermsTemplate"),Fz=o((e,t=!1)=>({attribute_name:e,describe:t,[Qh]:t}),"timestampAttrPermsTemplate"),{READ:Qh,INSERT:QP,UPDATE:JP}=Gn.PERMS_CRUD_ENUM,qz=Object.values(Gn.PERMS_CRUD_ENUM),$z=[Qh,QP,JP];function Fge(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(eu[t]&&eu[t].key===n)return eu[t].perms;let s=kge(e,r);return eu[t]?eu[t].key=n:eu[t]=Bge(n),eu[t].perms=s,s}catch(r){if(!e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Gn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw zP.error(n),zP.debug(r),xz(new Error,Uge.OUTDATED_PERMS_TRANSLATION_ERROR,xge.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
122
- ${r.stack}`;throw zP.error(n),xz(new Error)}}}o(Fge,"getRolePermissions");function kge(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gn.SYSTEM_SCHEMA_NAME]=n[Gn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Hge(t[i]);return}r[i]=Hz(),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=Gge(c,l);r[i].describe||qz.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=jP()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=jP()})}),r}o(kge,"translateRolePermissions");function Hge(e){let t=Hz(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jP(!0,!0,!0,!0,!0)}),t}o(Hge,"createStructureUserPermissions");function Gge(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return Gn.TIME_STAMP_NAMES.includes(f)&&(m=Fz(f,d[Qh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=Bz(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=Vz(d),s.attribute_permissions.push(d),c||qge(d,l)}else if(u!==a){let d;Gn.TIME_STAMP_NAMES.includes(u)?d=Fz(u):d=Bz(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=kz(s),s}else return e.describe=kz(e),e}o(Gge,"getTableAttrPerms");function kz(e){return qz.filter(t=>e[t]).length>0}o(kz,"getSchemaTableDescribePerm");function Vz(e){return $z.filter(t=>e[t]).length>0}o(Vz,"getAttributeDescribePerm");function qge(e,t){$z.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(qge,"checkForHashPerms")});var Jh={};be(Jh,{authentication:()=>tj,bypassAuth:()=>eSe,login:()=>ZP,logout:()=>eL,start:()=>tSe});function eSe(){ej=!0}async function tj(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?Qge?jge:[]:zge?Wge:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Tn.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Ds([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return yy&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),yy&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(yy){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await Wz.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new Vge(p,h,ba.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ei.SUCCESS?Ty.info?.(g):Ty.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&Ty.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Fd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return Ty.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Io({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Me.getUser(h,null,e),d(h,ei.SUCCESS,"mTLS")):Yge("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=tu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,b;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),b=S.slice(R+1),f=g||b?await Me.getUser(g,b,e):null;break;case"Bearer":try{f=await DN(E)}catch(L){if(L.message==="invalid token")try{return await SS(E),c({status:-1})}catch{throw L}}break}}catch(S){return Xge&&(tu.get(E)||(tu.set(E,E),d(g,ei.FAILURE,h))),c({status:401,body:Io({error:S.message},e)})}tu.set(n,f),Jge&&d(f.username,ei.SUCCESS,h)}e.user=f}else u?.user?e.user=await Me.getUser(u.user,null,e):(ej&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,jz.getSuperUser)());yy&&(e.session.update=function(p){let h=Tn.get(U.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,Qz.v4)();let g=Tn.get(U.AUTHENTICATION_COOKIE_DOMAINS),b=h?new Date(Date.now()+(0,XP.convertToMS)(h)).toUTCString():Zge,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let x=r.host.indexOf(":");return(x!==-1?r.host.slice(0,x):r.host).endsWith(O)}),L=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${b}; HttpOnly`;S&&(L+=`; Domain=${S}`),E&&(L+="; SameSite=None; Secure"),a?a.push("Set-Cookie",L):m?.headers?.set&&m.headers.set("Set-Cookie",L)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,Wz.put(p,{expiresAt:h?Date.now()+(0,XP.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Me.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Os.loginPath?(m.status=302,m.headers.set("Location",Os.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 Ds);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function tSe({server:e,port:t,securePort:r}){e.http(tj,t||r?{port:t,securePort:r}:{port:"all"}),zz||(zz=!0,setInterval(()=>{tu=new Map},Tn.get(U.AUTHENTICATION_CACHETTL)).unref(),Kge.addListener(()=>{tu=new Map}))}async function ZP(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 eL(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var jz,Qz,Tn,Jz,Xz,XP,$ge,Vge,Kge,Zz,Yge,Ty,Wge,zge,jge,Qge,Wz,yy,ej,Jge,Xge,Zge,tu,zz,Ry=oe(()=>{jz=w(Fn());xr();Ua();yd();Ne();Qz=require("uuid"),Tn=w(fe());H();Jz=w(z()),Xz=w(yp());Ap();XP=w(ce());ZS();No();({forComponent:$ge,AuthAuditLog:Vge}=Jz.default),{user:Kge}=Xz.default,Zz=$ge("authentication"),{debug:Yge}=Zz,Ty=Zz.withTag("auth-event");Tn.initSync();Wge=Tn.get(U.HTTP_CORSACCESSLIST),zge=Tn.get(U.HTTP_CORS),jge=Tn.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Qge=Tn.get(U.OPERATIONSAPI_NETWORK_CORS),Wz=Je({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yy=Tn.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,ej=process.env.AUTHENTICATION_AUTHORIZELOCAL??Tn.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Jge=Tn.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Xge=Tn.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Zge="Tue, 01 Oct 8307 19:33:20 GMT",tu=new Map;Me.onInvalidatedUser(()=>{tu=new Map});o(eSe,"bypassAuth");o(tj,"authentication");o(tSe,"start");o(ZP,"login");o(eL,"logout")});var cj=v((HFe,aj)=>{"use strict";var Ce=require("joi"),rj=require("fs-extra"),nj=require("path"),_s=dt(),sj=fe(),ij=(H(),M(W)),oj=z(),{hdbErrors:rSe}=Ee(),{HDB_ERROR_MSGS:yn}=rSe,ua=/^[a-zA-Z0-9-_]+$/,nSe=/^[a-zA-Z0-9-_]+$/;aj.exports={getDropCustomFunctionValidator:iSe,setCustomFunctionValidator:oSe,addComponentValidator:uSe,dropCustomFunctionProjectValidator:dSe,packageComponentValidator:fSe,deployComponentValidator:mSe,setComponentFileValidator:aSe,getComponentFileValidator:lSe,dropComponentFileValidator:cSe,addSSHKeyValidator:pSe,updateSSHKeyValidator:hSe,deleteSSHKeyValidator:ESe,setSSHKnownHostsValidator:_Se};function by(e,t,r){try{let n=sj.get(ij.CONFIG_PARAMS.COMPONENTSROOT),s=nj.join(n,t);return rj.existsSync(s)?e?t:r.message(yn.PROJECT_EXISTS):e?r.message(yn.NO_PROJECT):t}catch(n){return oj.error(n),r.message(yn.VALIDATION_ERR)}}o(by,"checkProjectExists");function Xh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Xh,"checkFilePath");function sSe(e,t,r,n){try{let s=sj.get(ij.CONFIG_PARAMS.COMPONENTSROOT),i=nj.join(s,e,t,r+".js");return rj.existsSync(i)?r:n.message(yn.NO_FILE)}catch(s){return oj.error(s),n.message(yn.VALIDATION_ERR)}}o(sSe,"checkFileExists");function iSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(by.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(ua).custom(sSe.bind(null,e.project,e.type)).custom(Xh).required().messages({"string.pattern.base":yn.BAD_FILE_NAME})});return _s.validateBySchema(e,t)}o(iSe,"getDropCustomFunctionValidator");function oSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(by.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Xh).required(),function_content:Ce.string().required()});return _s.validateBySchema(e,t)}o(oSe,"setCustomFunctionValidator");function aSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Xh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _s.validateBySchema(e,t)}o(aSe,"setComponentFileValidator");function cSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Xh).optional()});return _s.validateBySchema(e,t)}o(cSe,"dropComponentFileValidator");function lSe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Xh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _s.validateBySchema(e,t)}o(lSe,"getComponentFileValidator");function uSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(by.bind(null,!1)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return _s.validateBySchema(e,t)}o(uSe,"addComponentValidator");function dSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(by.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return _s.validateBySchema(e,t)}o(dSe,"dropCustomFunctionProjectValidator");function fSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return _s.validateBySchema(e,t)}o(fSe,"packageComponentValidator");function mSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return _s.validateBySchema(e,t)}o(mSe,"deployComponentValidator");function pSe(e){let t=Ce.object({name:Ce.string().pattern(nSe).required().messages({"string.pattern.base":yn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return _s.validateBySchema(e,t)}o(pSe,"addSSHKeyValidator");function hSe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return _s.validateBySchema(e,t)}o(hSe,"updateSSHKeyValidator");function ESe(e){let t=Ce.object({name:Ce.string().required()});return _s.validateBySchema(e,t)}o(ESe,"deleteSSHKeyValidator");function _Se(e){let t=Ce.object({known_hosts:Ce.string().required()});return _s.validateBySchema(e,t)}o(_Se,"setSSHKnownHostsValidator")});var fj={};be(fj,{packageDirectory:()=>gSe});function gSe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];uj.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,lj.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,dj.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var lj,uj,dj,mj=oe(()=>{lj=require("path"),uj=w(require("tar-fs")),dj=require("node:zlib");o(gSe,"packageDirectory")});var Iy={};be(Iy,{Application:()=>Ay,assertApplicationConfig:()=>Sj,extractApplication:()=>Tj,installApplication:()=>yj,installApplications:()=>TSe,nonInteractiveSpawn:()=>Zh,prepareApplication:()=>Rj});function Sj(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function Tj(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=hj.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,bi.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let a=await(0,ut.stat)(i);if(a.isDirectory()){await(0,ut.symlink)(i,e.dirPath,"dir");return}if(!a.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,eE.createReadStream)(t)}catch(a){throw a.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):a}}else{let{stdout:i}=await Zh(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,bi.join)(s,i.trim()),r=(0,eE.createReadStream)(t)}}try{await(0,ut.access)(e.dirPath,ut.constants.F_OK),await(0,ut.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ut.mkdir)(e.dirPath,{recursive:!0}),await(0,Ej.pipeline)(r,(0,gj.default)(),(0,_j.extract)(e.dirPath));let n=await(0,ut.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,bi.join)(e.dirPath,n[0].name),i=await(0,ut.mkdtemp)(e.dirPath);await(0,ut.cp)(s,i,{recursive:!0}),await(0,ut.rm)(s,{recursive:!0,force:!0}),await(0,ut.cp)(i,e.dirPath,{recursive:!0}),await(0,ut.rm)(i,{recursive:!0,force:!0})}t&&await(0,ut.rm)(t,{force:!0})}async function yj(e){try{await(0,ut.access)((0,bi.join)(e.dirPath,"package.json"),ut.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ut.access)((0,bi.join)(e.dirPath,"node_modules"),ut.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...a]=e.install.command.split(" "),{stderr:c,code:l}=await Zh(e.name,i,a,e.dirPath,e.install?.timeout);if(l===0)return;throw Rf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,ut.readFile)((0,bi.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,a=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!a.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${a.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await Zh(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw Rf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(Rf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await Zh(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw Rf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function SSe(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,bi.extname)(e)||(0,eE.existsSync)(e)?`file:${e}`:`github:${e}`}function Rj(e){return Tj(e).then(()=>yj(e))}async function TSe(){let e=(0,tE.getConfigObj)(),t=(0,tE.getConfigValue)(U.COMPONENTSROOT);await(0,ut.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;Sj(s,i);let a=new Ay({name:s,packageIdentifier:i.package,install:i.install});r.push(Rj(a))}let n=await Promise.allSettled(r);yc.default.debug(n),yc.default.info("All root applications loaded")}function Zh(e,t,r,n,s=300*1e3){return new Promise((i,a)=>{yc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c=(0,pj.spawn)(t,r,{shell:!0,cwd:n,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{c.kill(),a(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),u="";c.stdout.on("data",f=>{u+=f.toString(),yc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(f.toString())});let d="";c.stderr.on("data",f=>{d+=f.toString()}),c.on("error",f=>{clearTimeout(l),d&&Rf(e,t,d),a(f)}),c.on("close",f=>{clearTimeout(l),d&&Rf(e,t,d),yc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${f}`),i({stdout:u,stderr:d,code:f})})})}function Rf(e,t,r,n="debug"){let s=yc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
123
- `))s[n](i)}var tE,yc,bi,ut,pj,eE,hj,Ej,_j,gj,Ay,wy=oe(()=>{tE=w(pt());H();yc=w(z()),bi=require("node:path"),ut=require("node:fs/promises"),pj=require("node:child_process"),eE=require("node:fs"),hj=require("node:stream"),Ej=require("node:stream/promises"),_j=require("tar-fs"),gj=w(require("gunzip-maybe"));o(Sj,"assertApplicationConfig");o(Tj,"extractApplication");o(yj,"installApplication");Ay=class{static{o(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&SSe(n),this.install=s,this.dirPath=(0,bi.join)((0,tE.getConfigValue)(U.COMPONENTSROOT),t),this.logger=yc.default.loggerWithTag(t)}};o(SSe,"derivePackageIdentifier");o(Rj,"prepareApplication");o(TSe,"installApplications");o(Zh,"nonInteractiveSpawn");o(Rf,"printStderr")});var nL=v(or=>{"use strict";var Fe=require("node:path"),{isMainThread:ySe}=require("node:worker_threads"),Pe=require("fs-extra"),tL=require("fast-glob"),rL=require("normalize-path"),qn=cj(),ir=z(),yt=(H(),M(W)),_r=fe(),rE=pt(),RSe=ce(),{PACKAGE_ROOT:bSe}=bt(),{handleHDBError:Wt,hdbErrors:ASe}=Ee(),ISe=fe(),{HDB_ERROR_MSGS:ru,HTTP_STATUS_CODES:zt}=ASe,bj=rt(),{replicateOperation:Ai}=(cs(),M(Yo)),{packageDirectory:wSe}=(mj(),M(fj)),NSe=Fe.join(bSe,"application-template"),CSe=_r.get(yt.CONFIG_PARAMS.ROOTPATH),Rc=Fe.join(CSe,"ssh"),da=Fe.join(Rc,"known_hosts"),{Resources:OSe}=(Ua(),M(kA)),{Application:PSe,prepareApplication:LSe}=(wy(),M(Iy));function DSe(){ir.trace("getting custom api status");let e={};try{e={port:_r.get(yt.CONFIG_PARAMS.HTTP_PORT),directory:_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Wt(new Error,ru.FUNCTION_STATUS,zt.INTERNAL_SERVER_ERROR,ir.ERR,t)}return e}o(DSe,"customFunctionsStatus");function MSe(){ir.trace("getting custom api endpoints");let e={},t=_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT);try{tL.sync(rL(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:tL.sync(rL(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:tL.sync(rL(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Wt(new Error,ru.GET_FUNCTIONS,zt.INTERNAL_SERVER_ERROR,ir.ERR,r)}return e}o(MSe,"getCustomFunctions");function vSe(e){e.project&&(e.project=Fe.parse(e.project).name),e.file&&(e.file=Fe.parse(e.file).name);let t=qn.getDropCustomFunctionValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("getting custom api endpoint file content");let r=_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Fe.join(r,n,s,i+".js");try{return Pe.readFileSync(a,{encoding:"utf8"})}catch(c){throw Wt(new Error,ru.GET_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(vSe,"getCustomFunction");async function USe(e){e.project&&(e.project=Fe.parse(e.project).name),e.file&&(e.file=Fe.parse(e.file).name);let t=qn.setCustomFunctionValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("setting custom function file content");let r=_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Pe.outputFileSync(Fe.join(r,n,s,i+".js"),a);let c=await Ai(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Wt(new Error,ru.SET_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(USe,"setCustomFunction");async function xSe(e){e.project&&(e.project=Fe.parse(e.project).name),e.file&&(e.file=Fe.parse(e.file).name);let t=qn.getDropCustomFunctionValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("dropping custom function file");let r=_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Pe.unlinkSync(Fe.join(r,n,s,i+".js"));let a=await Ai(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Wt(new Error,ru.DROP_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,a)}}o(xSe,"dropCustomFunction");async function BSe(e){e.project&&(e.project=Fe.parse(e.project).name);let t=qn.addComponentValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("adding component");let r=_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Fe.join(r,n);Pe.mkdirSync(s,{recursive:!0}),Pe.copySync(NSe,s);let i=await Ai(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Wt(new Error,ru.ADD_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,s)}}o(BSe,"addComponent");async function FSe(e){e.project&&(e.project=Fe.parse(e.project).name);let t=qn.dropCustomFunctionProjectValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("dropping custom function project");let r=_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=_r.get(yt.CONFIG_PARAMS.APPS);if(!RSe.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 rE.updateConfigValue(yt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Fe.join(r,n);Pe.rmSync(i,{recursive:!0});let a=await Ai(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Wt(new Error,ru.DROP_FUNCTION_PROJECT,zt.INTERNAL_SERVER_ERROR,ir.ERR,i)}}o(FSe,"dropCustomFunctionProject");async function kSe(e){e.project&&(e.project=Fe.parse(e.project).name);let t=qn.packageComponentValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let r=_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;ir.trace("packaging component",n);let s;try{s=await Pe.realpath(Fe.join(r,n))}catch(a){if(a.code!==yt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Pe.realpath(Fe.join(_r.get(yt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===yt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await wSe(s,e)).toString("base64");return{project:n,payload:i}}o(kSe,"packageComponent");async function HSe(e){e.project?e.project=Fe.parse(e.project).name:e.package&&(e.project=GSe(e.package));let t=qn.deployComponentValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await rE.addConfig(e.project,l)}let r=new PSe({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await LSe(r),ySe)return;let n=new OSe;n.isWorker=!0;let s=(Kh(),M(fy)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let a=e.restart==="rolling";e.restart=a?!1:e.restart;let c=await Ai(e);if(e.restart===!0)bj.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(a){let u=await(Cy(),M(Ny)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}o(HSe,"deployComponent");function GSe(e){if(e.startsWith("git+ssh://"))return Fe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Fe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Pe.readFileSync(Fe.join(e,"package.json"),"utf8"));return Fe.basename(t)}catch{}return Fe.basename(e)}o(GSe,"getProjectNameFromPackage");async function qSe(){let e=rE.getConfiguration(),t=o(async(i,a)=>{try{let c=await Pe.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Fe.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};a.entries.push(f),await t(d,f)}else{let f=await Pe.stat(d),m={name:Fe.basename(u),mtime:f.mtime,size:f.size};a.entries.push(m)}}return a}catch(c){return ir.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),{name:_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT).split(Fe.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let a=e[i.name]?.package;a&&(i.package=a)}let{internal:n}=(Sp(),M(Kw)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){ir.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries){let a=s?.get(i.name);a?i.status=structuredClone(a):i.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return r}o(qSe,"getComponents");async function $Se(e){let t=qn.getComponentFileValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let n=rE.getConfigObj()[e.project]||e.project==="harperdb"?Fe.join(ISe.get(yt.CONFIG_PARAMS.ROOTPATH),"node_modules"):_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Pe.stat(Fe.join(n,e.project,e.file));return{message:await Pe.readFile(Fe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===yt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Fe.join(e.project,e.file)}'`):i}}o($Se,"getComponentFile");async function VSe(e){let t=qn.setComponentFileValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Fe.join(_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Pe.ensureFile(n),await Pe.outputFile(n,e.payload,r)):await Pe.ensureDir(n);let s=await Ai(e);return s.message="Successfully set component: "+e.file,s}o(VSe,"setComponentFile");async function KSe(e){let t=qn.dropComponentFileValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Fe.join(r,n):r,i=Fe.join(_r.get(yt.CONFIG_PARAMS.COMPONENTSROOT),s),a=Fe.join(_r.get(yt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Pe.pathExists(a)&&await Pe.unlink(a),await Pe.pathExists(i)&&await Pe.remove(i);let c=Fe.join(_r.get(yt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Pe.pathExists(c)){let u=JSON.parse(await Pe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Pe.writeFile(c,JSON.stringify(u,null,2),"utf8")}rE.deleteConfigFromFile([r]);let l=await Ai(e);return e.restart===!0?(bj.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(KSe,"dropComponent");async function YSe(e){let t=qn.addSSHKeyValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;ir.trace("adding ssh key",r);let c=Fe.join(Rc,r+".key"),l=Fe.join(Rc,"config");if(await Pe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Pe.outputFile(c,n),await Pe.chmod(c,"0600");let u=`#${r}
121
+ `;console.log(n),ye.get(ve.LOGGING_STDSTREAMS)&&sr.logsAtLevel("info")&&sr.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(Ege,"startupLog")});var yf=v((bFe,Uz)=>{"use strict";var _ge=require("minimist"),{isMainThread:YP,parentPort:zh,threadId:TFe}=require("worker_threads"),Bt=(H(),M(W)),Ri=z(),gge=ce(),gy=PT(),$P=rr(),yFe=At(),Sge=pt(),Zl=tf(),Pz=hh(),{compactOnStart:Tge}=(xO(),M(UO)),RFe=Hc(),{restartWorkers:KP,onMessageByType:yge,shutdownWorkersNow:Rge}=rt(),{handleHDBError:bge,hdbErrors:Age}=Ee(),{HTTP_STATUS_CODES:Ige}=Age,jh=fe(),{sendOperationToNode:Lz,getThisNodeName:wge,monitorNodeCAs:Nge}=(cs(),M(Yo)),Cge=require("node:path"),{unlinkSync:Oge}=require("node:fs");jh.initSync();var VP=`Restarting HarperDB. This may take up to ${Bt.RESTART_TIMEOUT_MS/1e3} seconds.`,Dz="Clustering is not enabled so cannot be restarted",Pge="Invalid service",la;Uz.exports={restart:vz,restartService:WP};YP&&yge(Bt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await WP({service:e.workerType}):vz({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function vz(e){la=Object.keys(e).length===0;let t=_ge(process.argv);if(t.service){await WP(t);return}if(la){let r=Zl.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),uy().launch(!0),VP}return YP?(Ri.notify(VP),jh.get(Bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Tge(),process.env.HARPER_EXIT_ON_RESTART&&(Ri.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Ri.debug("Shutdown workers"),await Rge(),await Zl.cleanupChildrenProcesses(!1),await Oge(Cge.join(jh.get(Bt.CONFIG_PARAMS.ROOTPATH),Bt.HDB_PID_FILE),`${process.pid}`),Ri.debug("Starting new process..."),uy().launch(!0)},50)):zh.postMessage({type:Bt.ITC_EVENT_TYPES.RESTART}),VP}o(vz,"restart");async function WP(e){let{service:t}=e;if(Bt.HDB_PROCESS_SERVICES[t]===void 0)throw bge(new Error,Pge,Ige.BAD_REQUEST,void 0,void 0,!0);if(Zl.expectedRestartOfChildren(),!YP){e.replicated&&Nge(),zh.postMessage({type:Bt.ITC_EVENT_TYPES.RESTART,workerType:t}),zh.ref(),await new Promise(s=>{zh.on("message",i=>{i.type==="restart-complete"&&(s(),zh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===wge())continue;let i;try{({job_id:i}=await Lz(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await Lz(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case Bt.HDB_PROCESS_SERVICES.clustering:if(!jh.get(Bt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Dz;break}la&&console.log("Restarting clustering"),Ri.notify("Restarting clustering"),await Lge();break;case Bt.HDB_PROCESS_SERVICES.clustering_config:case Bt.HDB_PROCESS_SERVICES["clustering config"]:if(!jh.get(Bt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Dz;break}la&&console.log("Restarting clusteringConfig"),Ri.notify("Restarting clustering_config"),await Zl.reloadClustering();break;case"custom_functions":case"custom functions":case Bt.HDB_PROCESS_SERVICES.harperdb:case Bt.HDB_PROCESS_SERVICES.http_workers:case Bt.HDB_PROCESS_SERVICES.http:la&&console.log("Restarting httpWorkers"),Ri.notify("Restarting http_workers"),la?await Zl.restart(Bt.PROCESS_DESCRIPTORS.HDB):await KP("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ri.error(r),la&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(WP,"restartService");async function Lge(){if(!Sge.getConfigFromFile(Bt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await Pz.getHDBProcessInfo()).clustering.length===0)Ri.trace("Clustering not running, restart will start clustering services"),await gy.generateNatsConfig(!0),await Zl.startClusteringProcesses(),await Zl.startClusteringThreads(),await Mz(),la&&await $P.closeConnection();else{await gy.generateNatsConfig(!0),(await Pz.getHDBProcessInfo()).clustering.forEach(s=>{Ri.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await gge.asyncSetTimeout(3e3),await Mz(),await $P.updateLocalStreams(),la&&await $P.closeConnection(),Ri.trace("Restart clustering restarting ingest and reply service threads");let r=KP(Bt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=KP(Bt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}o(Lge,"restartClustering");async function Mz(){await gy.removeNatsConfig(Bt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await gy.removeNatsConfig(Bt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(Mz,"removeNatsConfig")});var Yz=v((wFe,Kz)=>{"use strict";var IFe=require("lodash"),Gn=(H(),M(W)),{handleHDBError:xz,hdbErrors:Dge}=Ee(),{HDB_ERROR_MSGS:Mge,HTTP_STATUS_CODES:vge}=Dge,zP=z();Kz.exports={getRolePermissions:xge};var eu=Object.create(null),Uge=o(e=>({key:e,perms:{}}),"permsTemplateObj"),Hz=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),Gz=o((e=!1,t=!1,r=!1,n=!1)=>({[Gn.PERMS_CRUD_ENUM.READ]:e,[Gn.PERMS_CRUD_ENUM.INSERT]:t,[Gn.PERMS_CRUD_ENUM.UPDATE]:r,[Gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),jP=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Gz(t,r,n,s)}),"tablePermsTemplate"),Bz=o((e,t=Gz())=>({attribute_name:e,describe:Vz(t),[Qh]:t[Qh],[QP]:t[QP],[JP]:t[JP]}),"attrPermsTemplate"),Fz=o((e,t=!1)=>({attribute_name:e,describe:t,[Qh]:t}),"timestampAttrPermsTemplate"),{READ:Qh,INSERT:QP,UPDATE:JP}=Gn.PERMS_CRUD_ENUM,qz=Object.values(Gn.PERMS_CRUD_ENUM),$z=[Qh,QP,JP];function xge(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(eu[t]&&eu[t].key===n)return eu[t].perms;let s=Bge(e,r);return eu[t]?eu[t].key=n:eu[t]=Uge(n),eu[t].perms=s,s}catch(r){if(!e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Gn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw zP.error(n),zP.debug(r),xz(new Error,Mge.OUTDATED_PERMS_TRANSLATION_ERROR,vge.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
122
+ ${r.stack}`;throw zP.error(n),xz(new Error)}}}o(xge,"getRolePermissions");function Bge(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gn.SYSTEM_SCHEMA_NAME]=n[Gn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Fge(t[i]);return}r[i]=Hz(),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=kge(c,l);r[i].describe||qz.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=jP()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=jP()})}),r}o(Bge,"translateRolePermissions");function Fge(e){let t=Hz(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jP(!0,!0,!0,!0,!0)}),t}o(Fge,"createStructureUserPermissions");function kge(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return Gn.TIME_STAMP_NAMES.includes(f)&&(m=Fz(f,d[Qh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=Bz(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=Vz(d),s.attribute_permissions.push(d),c||Hge(d,l)}else if(u!==a){let d;Gn.TIME_STAMP_NAMES.includes(u)?d=Fz(u):d=Bz(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=kz(s),s}else return e.describe=kz(e),e}o(kge,"getTableAttrPerms");function kz(e){return qz.filter(t=>e[t]).length>0}o(kz,"getSchemaTableDescribePerm");function Vz(e){return $z.filter(t=>e[t]).length>0}o(Vz,"getAttributeDescribePerm");function Hge(e,t){$z.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(Hge,"checkForHashPerms")});var Jh={};be(Jh,{authentication:()=>tj,bypassAuth:()=>Xge,login:()=>ZP,logout:()=>eL,start:()=>Zge});function Xge(){ej=!0}async function tj(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?zge?Wge:[]:Yge?Kge:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Tn.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Ds([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return Ty&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),Ty&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Ty){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await Wz.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new qge(p,h,ba.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ei.SUCCESS?Sy.info?.(g):Sy.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&Sy.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Fd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return Sy.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Io({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Me.getUser(h,null,e),d(h,ei.SUCCESS,"mTLS")):Vge("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=tu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,b;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),b=S.slice(R+1),f=g||b?await Me.getUser(g,b,e):null;break;case"Bearer":try{f=await DN(E)}catch(L){if(L.message==="invalid token")try{return await gS(E),c({status:-1})}catch{throw L}}break}}catch(S){return Qge&&(tu.get(E)||(tu.set(E,E),d(g,ei.FAILURE,h))),c({status:401,body:Io({error:S.message},e)})}tu.set(n,f),jge&&d(f.username,ei.SUCCESS,h)}e.user=f}else u?.user?e.user=await Me.getUser(u.user,null,e):(ej&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,jz.getSuperUser)());Ty&&(e.session.update=function(p){let h=Tn.get(U.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,Qz.v4)();let g=Tn.get(U.AUTHENTICATION_COOKIE_DOMAINS),b=h?new Date(Date.now()+(0,XP.convertToMS)(h)).toUTCString():Jge,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let x=r.host.indexOf(":");return(x!==-1?r.host.slice(0,x):r.host).endsWith(O)}),L=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${b}; HttpOnly`;S&&(L+=`; Domain=${S}`),E&&(L+="; SameSite=None; Secure"),a?a.push("Set-Cookie",L):m?.headers?.set&&m.headers.set("Set-Cookie",L)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,Wz.put(p,{expiresAt:h?Date.now()+(0,XP.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Me.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Os.loginPath?(m.status=302,m.headers.set("Location",Os.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 Ds);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function Zge({server:e,port:t,securePort:r}){e.http(tj,t||r?{port:t,securePort:r}:{port:"all"}),zz||(zz=!0,setInterval(()=>{tu=new Map},Tn.get(U.AUTHENTICATION_CACHETTL)).unref(),$ge.addListener(()=>{tu=new Map}))}async function ZP(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 eL(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var jz,Qz,Tn,Jz,Xz,XP,Gge,qge,$ge,Zz,Vge,Sy,Kge,Yge,Wge,zge,Wz,Ty,ej,jge,Qge,Jge,tu,zz,yy=oe(()=>{jz=w(Fn());xr();Ua();yd();Ne();Qz=require("uuid"),Tn=w(fe());H();Jz=w(z()),Xz=w(yp());Ap();XP=w(ce());XS();No();({forComponent:Gge,AuthAuditLog:qge}=Jz.default),{user:$ge}=Xz.default,Zz=Gge("authentication"),{debug:Vge}=Zz,Sy=Zz.withTag("auth-event");Tn.initSync();Kge=Tn.get(U.HTTP_CORSACCESSLIST),Yge=Tn.get(U.HTTP_CORS),Wge=Tn.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),zge=Tn.get(U.OPERATIONSAPI_NETWORK_CORS),Wz=Je({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ty=Tn.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,ej=process.env.AUTHENTICATION_AUTHORIZELOCAL??Tn.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,jge=Tn.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Qge=Tn.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Jge="Tue, 01 Oct 8307 19:33:20 GMT",tu=new Map;Me.onInvalidatedUser(()=>{tu=new Map});o(Xge,"bypassAuth");o(tj,"authentication");o(Zge,"start");o(ZP,"login");o(eL,"logout")});var cj=v((BFe,aj)=>{"use strict";var Ce=require("joi"),rj=require("fs-extra"),nj=require("path"),_s=dt(),sj=fe(),ij=(H(),M(W)),oj=z(),{hdbErrors:eSe}=Ee(),{HDB_ERROR_MSGS:yn}=eSe,ua=/^[a-zA-Z0-9-_]+$/,tSe=/^[a-zA-Z0-9-_]+$/;aj.exports={getDropCustomFunctionValidator:nSe,setCustomFunctionValidator:sSe,addComponentValidator:cSe,dropCustomFunctionProjectValidator:lSe,packageComponentValidator:uSe,deployComponentValidator:dSe,setComponentFileValidator:iSe,getComponentFileValidator:aSe,dropComponentFileValidator:oSe,addSSHKeyValidator:fSe,updateSSHKeyValidator:mSe,deleteSSHKeyValidator:pSe,setSSHKnownHostsValidator:hSe};function Ry(e,t,r){try{let n=sj.get(ij.CONFIG_PARAMS.COMPONENTSROOT),s=nj.join(n,t);return rj.existsSync(s)?e?t:r.message(yn.PROJECT_EXISTS):e?r.message(yn.NO_PROJECT):t}catch(n){return oj.error(n),r.message(yn.VALIDATION_ERR)}}o(Ry,"checkProjectExists");function Xh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Xh,"checkFilePath");function rSe(e,t,r,n){try{let s=sj.get(ij.CONFIG_PARAMS.COMPONENTSROOT),i=nj.join(s,e,t,r+".js");return rj.existsSync(i)?r:n.message(yn.NO_FILE)}catch(s){return oj.error(s),n.message(yn.VALIDATION_ERR)}}o(rSe,"checkFileExists");function nSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(Ry.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(ua).custom(rSe.bind(null,e.project,e.type)).custom(Xh).required().messages({"string.pattern.base":yn.BAD_FILE_NAME})});return _s.validateBySchema(e,t)}o(nSe,"getDropCustomFunctionValidator");function sSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(Ry.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Xh).required(),function_content:Ce.string().required()});return _s.validateBySchema(e,t)}o(sSe,"setCustomFunctionValidator");function iSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Xh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _s.validateBySchema(e,t)}o(iSe,"setComponentFileValidator");function oSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Xh).optional()});return _s.validateBySchema(e,t)}o(oSe,"dropComponentFileValidator");function aSe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Xh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _s.validateBySchema(e,t)}o(aSe,"getComponentFileValidator");function cSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(Ry.bind(null,!1)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return _s.validateBySchema(e,t)}o(cSe,"addComponentValidator");function lSe(e){let t=Ce.object({project:Ce.string().pattern(ua).custom(Ry.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return _s.validateBySchema(e,t)}o(lSe,"dropCustomFunctionProjectValidator");function uSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return _s.validateBySchema(e,t)}o(uSe,"packageComponentValidator");function dSe(e){let t=Ce.object({project:Ce.string().pattern(ua).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return _s.validateBySchema(e,t)}o(dSe,"deployComponentValidator");function fSe(e){let t=Ce.object({name:Ce.string().pattern(tSe).required().messages({"string.pattern.base":yn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return _s.validateBySchema(e,t)}o(fSe,"addSSHKeyValidator");function mSe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return _s.validateBySchema(e,t)}o(mSe,"updateSSHKeyValidator");function pSe(e){let t=Ce.object({name:Ce.string().required()});return _s.validateBySchema(e,t)}o(pSe,"deleteSSHKeyValidator");function hSe(e){let t=Ce.object({known_hosts:Ce.string().required()});return _s.validateBySchema(e,t)}o(hSe,"setSSHKnownHostsValidator")});var fj={};be(fj,{packageDirectory:()=>ESe});function ESe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];uj.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,lj.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,dj.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var lj,uj,dj,mj=oe(()=>{lj=require("path"),uj=w(require("tar-fs")),dj=require("node:zlib");o(ESe,"packageDirectory")});var Ay={};be(Ay,{Application:()=>by,assertApplicationConfig:()=>Sj,extractApplication:()=>Tj,installApplication:()=>yj,installApplications:()=>gSe,nonInteractiveSpawn:()=>Zh,prepareApplication:()=>Rj});function Sj(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function Tj(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=hj.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,bi.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let a=await(0,ut.stat)(i);if(a.isDirectory()){await(0,ut.symlink)(i,e.dirPath,"dir");return}if(!a.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,eE.createReadStream)(t)}catch(a){throw a.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):a}}else{let{stdout:i}=await Zh(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,bi.join)(s,i.trim()),r=(0,eE.createReadStream)(t)}}try{await(0,ut.access)(e.dirPath,ut.constants.F_OK),await(0,ut.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ut.mkdir)(e.dirPath,{recursive:!0}),await(0,Ej.pipeline)(r,(0,gj.default)(),(0,_j.extract)(e.dirPath));let n=await(0,ut.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,bi.join)(e.dirPath,n[0].name),i=await(0,ut.mkdtemp)(e.dirPath);await(0,ut.cp)(s,i,{recursive:!0}),await(0,ut.rm)(s,{recursive:!0,force:!0}),await(0,ut.cp)(i,e.dirPath,{recursive:!0}),await(0,ut.rm)(i,{recursive:!0,force:!0})}t&&await(0,ut.rm)(t,{force:!0})}async function yj(e){try{await(0,ut.access)((0,bi.join)(e.dirPath,"package.json"),ut.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ut.access)((0,bi.join)(e.dirPath,"node_modules"),ut.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...a]=e.install.command.split(" "),{stderr:c,code:l}=await Zh(e.name,i,a,e.dirPath,e.install?.timeout);if(l===0)return;throw Rf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,ut.readFile)((0,bi.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,a=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!a.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${a.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await Zh(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw Rf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(Rf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await Zh(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw Rf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function _Se(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,bi.extname)(e)||(0,eE.existsSync)(e)?`file:${e}`:`github:${e}`}function Rj(e){return Tj(e).then(()=>yj(e))}async function gSe(){let e=(0,tE.getConfigObj)(),t=(0,tE.getConfigValue)(U.COMPONENTSROOT);await(0,ut.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;Sj(s,i);let a=new by({name:s,packageIdentifier:i.package,install:i.install});r.push(Rj(a))}let n=await Promise.allSettled(r);yc.default.debug(n),yc.default.info("All root applications loaded")}function Zh(e,t,r,n,s=300*1e3){return new Promise((i,a)=>{yc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c=(0,pj.spawn)(t,r,{shell:!0,cwd:n,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{c.kill(),a(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),u="";c.stdout.on("data",f=>{u+=f.toString(),yc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(f.toString())});let d="";c.stderr.on("data",f=>{d+=f.toString()}),c.on("error",f=>{clearTimeout(l),d&&Rf(e,t,d),a(f)}),c.on("close",f=>{clearTimeout(l),d&&Rf(e,t,d),yc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${f}`),i({stdout:u,stderr:d,code:f})})})}function Rf(e,t,r,n="debug"){let s=yc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
123
+ `))s[n](i)}var tE,yc,bi,ut,pj,eE,hj,Ej,_j,gj,by,Iy=oe(()=>{tE=w(pt());H();yc=w(z()),bi=require("node:path"),ut=require("node:fs/promises"),pj=require("node:child_process"),eE=require("node:fs"),hj=require("node:stream"),Ej=require("node:stream/promises"),_j=require("tar-fs"),gj=w(require("gunzip-maybe"));o(Sj,"assertApplicationConfig");o(Tj,"extractApplication");o(yj,"installApplication");by=class{static{o(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&_Se(n),this.install=s,this.dirPath=(0,bi.join)((0,tE.getConfigValue)(U.COMPONENTSROOT),t),this.logger=yc.default.loggerWithTag(t)}};o(_Se,"derivePackageIdentifier");o(Rj,"prepareApplication");o(gSe,"installApplications");o(Zh,"nonInteractiveSpawn");o(Rf,"printStderr")});var nL=v(or=>{"use strict";var ke=require("node:path"),{isMainThread:SSe}=require("node:worker_threads"),Pe=require("fs-extra"),tL=require("fast-glob"),rL=require("normalize-path"),qn=cj(),ir=z(),wt=(H(),M(W)),_r=fe(),wy=pt(),TSe=ce(),{PACKAGE_ROOT:ySe}=Rt(),{handleHDBError:Wt,hdbErrors:RSe}=Ee(),qFe=fe(),{HDB_ERROR_MSGS:ru,HTTP_STATUS_CODES:zt}=RSe,bj=rt(),{replicateOperation:Ai}=(cs(),M(Yo)),{packageDirectory:bSe}=(mj(),M(fj)),ASe=ke.join(ySe,"application-template"),ISe=_r.get(wt.CONFIG_PARAMS.ROOTPATH),Rc=ke.join(ISe,"ssh"),da=ke.join(Rc,"known_hosts"),{Resources:wSe}=(Ua(),M(kA)),{Application:NSe,prepareApplication:CSe}=(Iy(),M(Ay));function OSe(){ir.trace("getting custom api status");let e={};try{e={port:_r.get(wt.CONFIG_PARAMS.HTTP_PORT),directory:_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Wt(new Error,ru.FUNCTION_STATUS,zt.INTERNAL_SERVER_ERROR,ir.ERR,t)}return e}o(OSe,"customFunctionsStatus");function PSe(){ir.trace("getting custom api endpoints");let e={},t=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT);try{tL.sync(rL(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:tL.sync(rL(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:tL.sync(rL(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Wt(new Error,ru.GET_FUNCTIONS,zt.INTERNAL_SERVER_ERROR,ir.ERR,r)}return e}o(PSe,"getCustomFunctions");function LSe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=qn.getDropCustomFunctionValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("getting custom api endpoint file content");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=ke.join(r,n,s,i+".js");try{return Pe.readFileSync(a,{encoding:"utf8"})}catch(c){throw Wt(new Error,ru.GET_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(LSe,"getCustomFunction");async function DSe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=qn.setCustomFunctionValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("setting custom function file content");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Pe.outputFileSync(ke.join(r,n,s,i+".js"),a);let c=await Ai(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Wt(new Error,ru.SET_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(DSe,"setCustomFunction");async function MSe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=qn.getDropCustomFunctionValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("dropping custom function file");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Pe.unlinkSync(ke.join(r,n,s,i+".js"));let a=await Ai(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Wt(new Error,ru.DROP_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,a)}}o(MSe,"dropCustomFunction");async function vSe(e){e.project&&(e.project=ke.parse(e.project).name);let t=qn.addComponentValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("adding component");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ke.join(r,n);Pe.mkdirSync(s,{recursive:!0}),Pe.copySync(ASe,s);let i=await Ai(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Wt(new Error,ru.ADD_FUNCTION,zt.INTERNAL_SERVER_ERROR,ir.ERR,s)}}o(vSe,"addComponent");async function USe(e){e.project&&(e.project=ke.parse(e.project).name);let t=qn.dropCustomFunctionProjectValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);ir.trace("dropping custom function project");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=_r.get(wt.CONFIG_PARAMS.APPS);if(!TSe.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 wy.updateConfigValue(wt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Pe.rmSync(i,{recursive:!0});let a=await Ai(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Wt(new Error,ru.DROP_FUNCTION_PROJECT,zt.INTERNAL_SERVER_ERROR,ir.ERR,i)}}o(USe,"dropCustomFunctionProject");async function xSe(e){e.project&&(e.project=ke.parse(e.project).name);let t=qn.packageComponentValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;ir.trace("packaging component",n);let s;try{s=await Pe.realpath(ke.join(r,n))}catch(a){if(a.code!==wt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Pe.realpath(ke.join(_r.get(wt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===wt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await bSe(s,e)).toString("base64");return{project:n,payload:i}}o(xSe,"packageComponent");async function BSe(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=FSe(e.package));let t=qn.deployComponentValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await wy.addConfig(e.project,l)}let r=new NSe({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await CSe(r),SSe)return;let n=new wSe;n.isWorker=!0;let s=(Kh(),M(dy)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let a=e.restart==="rolling";e.restart=a?!1:e.restart;let c=await Ai(e);if(e.restart===!0)bj.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(a){let u=await(Cy(),M(Ny)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}o(BSe,"deployComponent");function FSe(e){if(e.startsWith("git+ssh://"))return ke.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return ke.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Pe.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}o(FSe,"getProjectNameFromPackage");async function kSe(){let e=wy.getConfiguration(),t=o(async(i,a)=>{try{let c=await Pe.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ke.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};a.entries.push(f),await t(d,f)}else{let f=await Pe.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};a.entries.push(m)}}return a}catch(c){return ir.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{name:_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let a=e[i.name]?.package;a&&(i.package=a)}let{internal:n}=(Sp(),M(Kw)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){ir.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries){let a=s?.get(i.name);a?i.status=structuredClone(a):i.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return r}o(kSe,"getComponents");async function HSe(e){let t=qn.getComponentFileValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Pe.stat(ke.join(r,e.project,e.file));return{message:await Pe.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===wt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}o(HSe,"getComponentFile");async function GSe(e){let t=qn.setComponentFileValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Pe.ensureFile(n),await Pe.outputFile(n,e.payload,r)):await Pe.ensureDir(n);let s=await Ai(e);return s.message="Successfully set component: "+e.file,s}o(GSe,"setComponentFile");async function qSe(e){let t=qn.dropComponentFileValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),s),a=ke.join(_r.get(wt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Pe.pathExists(a)&&await Pe.unlink(a),await Pe.pathExists(i)&&await Pe.remove(i);let c=ke.join(_r.get(wt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Pe.pathExists(c)){let u=JSON.parse(await Pe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Pe.writeFile(c,JSON.stringify(u,null,2),"utf8")}wy.deleteConfigFromFile([r]);let l=await Ai(e);return e.restart===!0?(bj.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(qSe,"dropComponent");async function $Se(e){let t=qn.addSSHKeyValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;ir.trace("adding ssh key",r);let c=ke.join(Rc,r+".key"),l=ke.join(Rc,"config");if(await Pe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Pe.outputFile(c,n),await Pe.chmod(c,"0600");let u=`#${r}
124
124
  Host ${s}
125
125
  HostName ${i}
126
126
  User git
127
127
  IdentityFile ${c}
128
128
  IdentitiesOnly yes`;await Pe.pathExists(l)?await Pe.appendFile(l,`
129
129
  `+u):await Pe.outputFile(l,u);let d="";if(await Pe.pathExists(da)||(await Pe.writeFile(da,""),await Pe.chmod(da,"0600")),i=="github.com"&&!(await Pe.readFile(da,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of E)Pe.appendFile(da,"github.com "+g+`
130
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Pe.appendFile(da,a);let f=await Ai(e);return f.message=`Added ssh key: ${r}${d}`,f}o(YSe,"addSSHKey");async function WSe(e){let t=qn.updateSSHKeyValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{name:r,key:n}=e;ir.trace("updating ssh key",r);let s=Fe.join(Rc,r+".key");if(!await Pe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Pe.outputFile(s,n);let i=await Ai(e);return i.message=`Updated ssh key: ${r}`,i}o(WSe,"updateSSHKey");async function zSe(e){let t=qn.deleteSSHKeyValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{name:r}=e;ir.trace("deleting ssh key",r);let n=Fe.join(Rc,r+".key"),s=Fe.join(Rc,"config");if(!await Pe.pathExists(n))throw new Error("Key does not exist");let i=await Pe.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Pe.outputFile(s,i),Pe.removeSync(n);let c=await Ai(e);return c.message=`Deleted ssh key: ${r}`,c}o(zSe,"deleteSSHKey");async function jSe(e){let t=[];return await Pe.pathExists(Rc)&&(await Pe.readdir(Rc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(jSe,"listSSHKeys");async function QSe(e){let t=qn.setSSHKnownHostsValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{known_hosts:r}=e;await Pe.outputFile(da,r);let n=await Ai(e);return n.message="Known hosts successfully set",n}o(QSe,"setSSHKnownHosts");async function JSe(e){return await Pe.pathExists(da)?{known_hosts:await Pe.readFile(da,"utf8")}:{known_hosts:null}}o(JSe,"getSSHKnownHosts");or.customFunctionsStatus=DSe;or.getCustomFunctions=MSe;or.getCustomFunction=vSe;or.setCustomFunction=USe;or.dropCustomFunction=xSe;or.addComponent=BSe;or.dropCustomFunctionProject=FSe;or.packageComponent=kSe;or.deployComponent=HSe;or.getComponents=qSe;or.getComponentFile=$Se;or.setComponentFile=VSe;or.dropComponent=KSe;or.addSSHKey=YSe;or.updateSSHKey=WSe;or.deleteSSHKey=zSe;or.listSSHKeys=jSe;or.setSSHKnownHosts=QSe;or.getSSHKnownHosts=JSe});var sL=v((WFe,Ij)=>{"use strict";var Vs=require("joi"),Aj=dt();Ij.exports={readTransactionLogValidator:XSe,deleteTransactionLogsBeforeValidator:ZSe};function XSe(e){let t=Vs.object({schema:Vs.string(),database:Vs.string(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return Aj.validateBySchema(e,t)}o(XSe,"readTransactionLogValidator");function ZSe(e){let t=Vs.object({schema:Vs.string(),database:Vs.string(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return Aj.validateBySchema(e,t)}o(ZSe,"deleteTransactionLogsBeforeValidator")});var Ly=v((jFe,Lj)=>{"use strict";var iL=(H(),M(W)),nE=rr(),wj=ce(),Nj=fe(),Cj=Vi(),Oj=z(),{handleHDBError:Oy,hdbErrors:eTe}=Ee(),{HTTP_STATUS_CODES:Py}=eTe,{readTransactionLogValidator:tTe,deleteTransactionLogsBeforeValidator:rTe}=sL(),Pj=ss(),nTe="Logs successfully deleted from transaction log.",sTe="All logs successfully deleted from transaction log.";Lj.exports={readTransactionLog:iTe,deleteTransactionLogsBefore:aTe};async function iTe(e){let t=tTe(e);if(t)throw Oy(t,t.message,Py.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=wj.checkSchemaTableExist(e.database,e.table);if(r)throw Oy(new Error,r,Py.NOT_FOUND,void 0,void 0,!0);return Nj.get(iL.CONFIG_PARAMS.CLUSTERING_ENABLED)?await oTe(e):(Oj.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)),Pj.readAuditLog(e))}o(iTe,"readTransactionLog");async function*oTe(e){let t=Cj.createNatsTableStreamName(e.database,e.table),r=await nE.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===iL.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(oTe,"readTransactionLogNats");async function aTe(e){let t=rTe(e);if(t)throw Oy(t,t.message,Py.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!Nj.get(iL.CONFIG_PARAMS.CLUSTERING_ENABLED))return Oj.info("Delete transaction logs called for Plexus"),Pj.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=wj.checkSchemaTableExist(r,n);if(i)throw Oy(new Error,i,Py.NOT_FOUND,void 0,void 0,!0);let a=Cj.createNatsTableStreamName(r,n),{jsm:c}=await nE.getNATSReferences(),l=await nE.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=nTe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=sTe):f=(await nE.viewStream(a,parseInt(s),1))[0].nats_sequence,await nE.purgeTableStream(r,n,{seq:f}),d}o(aTe,"deleteTransactionLogsBefore")});var oL=v((JFe,Mj)=>{"use strict";var Dy=require("joi"),cTe=require("path"),{handleHDBError:lTe,hdbErrors:uTe}=Ee(),{HTTP_STATUS_CODES:dTe}=uTe,fTe=dt(),Dj=z();Mj.exports={installModules:ETe};var{CONFIG_PARAMS:mTe}=(H(),M(W)),{getConfigValue:pTe}=pt(),{nonInteractiveSpawn:hTe}=(wy(),M(Iy));async function ETe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Dj.warn(t,e.projects);let r=gTe(e);if(r)throw lTe(r,r.message,dTe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=pTe(mTe.COMPONENTSROOT),a={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){a[l]={npm_output:null,npm_error:null};let u=cTe.join(i,l);try{let{stdout:d,stderr:f}=hTe(l,"npm",c,u);d=d?d.replace(`
130
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Pe.appendFile(da,a);let f=await Ai(e);return f.message=`Added ssh key: ${r}${d}`,f}o($Se,"addSSHKey");async function VSe(e){let t=qn.updateSSHKeyValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{name:r,key:n}=e;ir.trace("updating ssh key",r);let s=ke.join(Rc,r+".key");if(!await Pe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Pe.outputFile(s,n);let i=await Ai(e);return i.message=`Updated ssh key: ${r}`,i}o(VSe,"updateSSHKey");async function KSe(e){let t=qn.deleteSSHKeyValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{name:r}=e;ir.trace("deleting ssh key",r);let n=ke.join(Rc,r+".key"),s=ke.join(Rc,"config");if(!await Pe.pathExists(n))throw new Error("Key does not exist");let i=await Pe.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Pe.outputFile(s,i),Pe.removeSync(n);let c=await Ai(e);return c.message=`Deleted ssh key: ${r}`,c}o(KSe,"deleteSSHKey");async function YSe(e){let t=[];return await Pe.pathExists(Rc)&&(await Pe.readdir(Rc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(YSe,"listSSHKeys");async function WSe(e){let t=qn.setSSHKnownHostsValidator(e);if(t)throw Wt(t,t.message,zt.BAD_REQUEST);let{known_hosts:r}=e;await Pe.outputFile(da,r);let n=await Ai(e);return n.message="Known hosts successfully set",n}o(WSe,"setSSHKnownHosts");async function zSe(e){return await Pe.pathExists(da)?{known_hosts:await Pe.readFile(da,"utf8")}:{known_hosts:null}}o(zSe,"getSSHKnownHosts");or.customFunctionsStatus=OSe;or.getCustomFunctions=PSe;or.getCustomFunction=LSe;or.setCustomFunction=DSe;or.dropCustomFunction=MSe;or.addComponent=vSe;or.dropCustomFunctionProject=USe;or.packageComponent=xSe;or.deployComponent=BSe;or.getComponents=kSe;or.getComponentFile=HSe;or.setComponentFile=GSe;or.dropComponent=qSe;or.addSSHKey=$Se;or.updateSSHKey=VSe;or.deleteSSHKey=KSe;or.listSSHKeys=YSe;or.setSSHKnownHosts=WSe;or.getSSHKnownHosts=zSe});var sL=v((KFe,Ij)=>{"use strict";var Vs=require("joi"),Aj=dt();Ij.exports={readTransactionLogValidator:jSe,deleteTransactionLogsBeforeValidator:QSe};function jSe(e){let t=Vs.object({schema:Vs.string(),database:Vs.string(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return Aj.validateBySchema(e,t)}o(jSe,"readTransactionLogValidator");function QSe(e){let t=Vs.object({schema:Vs.string(),database:Vs.string(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return Aj.validateBySchema(e,t)}o(QSe,"deleteTransactionLogsBeforeValidator")});var Ly=v((WFe,Lj)=>{"use strict";var iL=(H(),M(W)),rE=rr(),wj=ce(),Nj=fe(),Cj=Vi(),Oj=z(),{handleHDBError:Oy,hdbErrors:JSe}=Ee(),{HTTP_STATUS_CODES:Py}=JSe,{readTransactionLogValidator:XSe,deleteTransactionLogsBeforeValidator:ZSe}=sL(),Pj=ss(),eTe="Logs successfully deleted from transaction log.",tTe="All logs successfully deleted from transaction log.";Lj.exports={readTransactionLog:rTe,deleteTransactionLogsBefore:sTe};async function rTe(e){let t=XSe(e);if(t)throw Oy(t,t.message,Py.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=wj.checkSchemaTableExist(e.database,e.table);if(r)throw Oy(new Error,r,Py.NOT_FOUND,void 0,void 0,!0);return Nj.get(iL.CONFIG_PARAMS.CLUSTERING_ENABLED)?await nTe(e):(Oj.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)),Pj.readAuditLog(e))}o(rTe,"readTransactionLog");async function*nTe(e){let t=Cj.createNatsTableStreamName(e.database,e.table),r=await rE.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===iL.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(nTe,"readTransactionLogNats");async function sTe(e){let t=ZSe(e);if(t)throw Oy(t,t.message,Py.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!Nj.get(iL.CONFIG_PARAMS.CLUSTERING_ENABLED))return Oj.info("Delete transaction logs called for Plexus"),Pj.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=wj.checkSchemaTableExist(r,n);if(i)throw Oy(new Error,i,Py.NOT_FOUND,void 0,void 0,!0);let a=Cj.createNatsTableStreamName(r,n),{jsm:c}=await rE.getNATSReferences(),l=await rE.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=eTe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=tTe):f=(await rE.viewStream(a,parseInt(s),1))[0].nats_sequence,await rE.purgeTableStream(r,n,{seq:f}),d}o(sTe,"deleteTransactionLogsBefore")});var oL=v((jFe,Mj)=>{"use strict";var Dy=require("joi"),iTe=require("path"),{handleHDBError:oTe,hdbErrors:aTe}=Ee(),{HTTP_STATUS_CODES:cTe}=aTe,lTe=dt(),Dj=z();Mj.exports={installModules:mTe};var{CONFIG_PARAMS:uTe}=(H(),M(W)),{getConfigValue:dTe}=pt(),{nonInteractiveSpawn:fTe}=(Iy(),M(Ay));async function mTe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Dj.warn(t,e.projects);let r=hTe(e);if(r)throw oTe(r,r.message,cTe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=dTe(uTe.COMPONENTSROOT),a={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){a[l]={npm_output:null,npm_error:null};let u=iTe.join(i,l);try{let{stdout:d,stderr:f}=fTe(l,"npm",c,u);d=d?d.replace(`
131
131
  `,""):null,f=f?f.replace(`
132
- `,""):null;try{a[l].npm_output=JSON.parse(d)}catch{a[l].npm_output=d}try{a[l].npm_error=JSON.parse(f)}catch{a[l].npm_error=f}}catch(d){d.stderr?a[l].npm_error=_Te(d.stderr):a[l].npm_error=d.message;continue}}return Dj.info(`finished installModules with response ${a}`),a.warning=t,a}o(ETe,"installModules");function _Te(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
133
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(_Te,"parseNPMStdErr");function gTe(e){let t=Dy.object({projects:Dy.array().min(1).items(Dy.string()).required(),dry_run:Dy.boolean().default(!1)});return fTe.validateBySchema(e,t)}o(gTe,"modulesValidator")});var uL={};be(uL,{describeMetric:()=>kj,describeMetricOp:()=>lL,get:()=>Bj,getOp:()=>aL,listMetrics:()=>Fj,listMetricsOp:()=>cL});async function TTe(e){return(await F_().get(e)).hostname}function vj(e,t){return e.length===0||e.includes(t)}function aL(e){return sE.trace?.("get_analytics request:",e),Bj(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function xj(e){return"conditions"in e?{...e,conditions:e.conditions.map(xj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function Bj(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(xj));let a=t??[];vj(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),sE.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],vj(a,"node")&&(sE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await TTe(d)),sE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function cL(e){return Fj(e.metric_types)}async function Fj(e=["builtin"]){let t=[],r=Object.values(Lo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function lL(e){return kj(e.metric)}async function kj(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 sE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var Uj,STe,sE,dL=oe(()=>{Uj=w(z());hA();EA();({forComponent:STe}=Uj.default),sE=STe("analytics").conditional;o(TTe,"lookupHostname");o(vj,"isSelected");o(aL,"getOp");o(xj,"conformCondition");o(Bj,"get");o(cL,"listMetricsOp");o(Fj,"listMetrics");o(lL,"describeMetricOp");o(kj,"describeMetric")});var My,vy,iE,Uy=oe(()=>{My={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},vy=Object.keys(My),iE="primary"});function Gj(e){return Hj.validateBySchema(e,ATe)}var oE,Hj,yTe,RTe,bTe,ATe,qj=oe(()=>{oE=w(require("joi")),Hj=w(dt());Uy();yTe=vy,RTe=Object.entries(My).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),bTe=o(()=>{let e=oE.default.string().min(1).max(512);return Object.entries(My).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:oE.default.string().valid(...r.allowedValues).messages({"any.only":RTe[t]})}))}),e.required()},"createStatusValidationSchema"),ATe=oE.default.object({id:oE.default.string().valid(...yTe).required(),status:bTe()});o(Gj,"validateStatus")});function $j(){fL||(fL=fa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),mL=new Uint8Array(fL))}function Vj(){$j(),mL[0]=1}function Kj(){return $j(),mL[0]===1}var fL,mL,pL=oe(()=>{aE();o($j,"ensureInitialized");o(Vj,"requestRestart");o(Kj,"restartNeeded")});var SL={};be(SL,{DEFAULT_STATUS_ID:()=>iE,STATUS_IDS:()=>vy,Status:()=>fa,clear:()=>EL,get:()=>_L,set:()=>gL});function lE(){return hL||(hL=Je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),hL}function EL({id:e}){return cE.debug?.("clearStatus",e),lE().delete(e)}async function wTe(){cE.debug?.("getAllStatus");let e=lE().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=Kj();return{systemStatus:e,componentStatus:r,restartRequired:n}}function _L({id:e}){return e?(cE.debug?.("getStatus",e),lE().get(e)):(cE.debug?.("getStatus","all"),wTe())}function gL({status:e,id:t=iE}){let r=Gj({status:e,id:t});if(r)throw(0,xy.handleHDBError)(r,r.message,ITe.BAD_REQUEST);return cE.debug?.("setStatus",t,e),lE().put(t,{status:e})}var xy,Yj,ITe,hL,fa,cE,aE=oe(()=>{Ne();xy=w(Ee()),Yj=w(Qn());qj();Uy();Sp();pL();Uy();({HTTP_STATUS_CODES:ITe}=xy.hdbErrors);o(lE,"getStatusTable");fa={get primaryStore(){return lE().primaryStore}},cE=(0,Yj.loggerWithTag)("status");o(EL,"clearStatus");o(wTe,"getAllStatus");o(_L,"getStatus");o(gL,"setStatus")});var bL={};be(bL,{getFingerprint:()=>yL,getRegistrationInfo:()=>TL,setLicense:()=>RL});function TL(){return{version:Wj.packageJson.version,deprecated:!0}}function yL(){return{message:"this-is-deprecated",deprecated:!0}}function RL(){return{deprecated:!0}}var Wj,AL=oe(()=>{Wj=w(bt());o(TL,"getRegistrationInfo");o(yL,"getFingerprint");o(RL,"setLicense")});var jj=v((_ke,zj)=>{"use strict";var IL=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}};zj.exports=IL});var Jj=v((Ske,Qj)=>{"use strict";var wL=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Qj.exports=wL});var CL=v((yke,Zj)=>{"use strict";var Xj=jj(),NTe=Jj(),{HDB_ERROR_MSGS:CTe}=Kr(),NL=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=CTe.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 Xj(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new NTe(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 Xj(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}};Zj.exports=NL});var Hy=v((bke,E4)=>{"use strict";var OL=xn(),By=mn(),Ks=cT(),fE=Cl(),PL=gl(),OTe=MC(),PTe=l1(),mE=Fn(),Fy=xp(),Or=z(),LTe=FC(),DTe=TT(),MTe=dO(),vTe=RT(),UTe=pO(),xTe=hO(),BTe=gO(),FTe=TO(),LL=NT(),ma=ce(),kTe=GK(),r4=yf(),Rn=(H(),M(W)),n4=Yz(),HTe=hh(),s4=(yd(),M(qp)),i4=(Ry(),M(Jh)),o4=pt(),gr=nL(),GTe=require("alasql"),a4=Ly(),qTe=oL(),bf=us(),c4=(Wd(),M(Yd)),DL=(dL(),M(uL)),ML=(aE(),M(SL)),l4=(Hh(),M(ry)),vL=(AL(),M(bL)),u4=CL(),{handleHDBError:$n,hdbErrors:d4}=Ee(),{HDB_ERROR_MSGS:nn,HTTP_STATUS_CODES:uE}=d4,Z=new Map,f4="delete",bc="insert",Ys="read",nu="update",dE="describe",e4=fE.describeSchema.name,t4=fE.describeTable.name,m4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},$Te={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},VTe="catchup",KTe="handleGetJob",YTe="handleGetJobsByStartDate",ky={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},WTe=[Ks.createTable.name,Ks.createAttribute.name,Ks.dropTable.name,Ks.dropAttribute.name],p4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(OL.insert.name,new se(!1,[bc]));Z.set(OL.update.name,new se(!1,[nu]));Z.set(OL.upsert.name,new se(!1,[bc,nu]));Z.set(By.searchByConditions.name,new se(!1,[Ys]));Z.set(By.searchByHash.name,new se(!1,[Ys]));Z.set(By.searchByValue.name,new se(!1,[Ys]));Z.set(By.search.name,new se(!1,[Ys]));Z.set(Ks.createSchema.name,new se(!0,[]));Z.set(Ks.createTable.name,new se(!0,[]));Z.set(Ks.createAttribute.name,new se(!1,[bc]));Z.set(Ks.dropSchema.name,new se(!0,[]));Z.set(Ks.dropTable.name,new se(!0,[]));Z.set(Ks.dropAttribute.name,new se(!0,[]));Z.set(fE.describeSchema.name,new se(!1,[Ys]));Z.set(fE.describeTable.name,new se(!1,[Ys]));Z.set(PL.deleteRecord.name,new se(!1,[f4]));Z.set(mE.addUser.name,new se(!0,[]));Z.set(mE.alterUser.name,new se(!0,[]));Z.set(mE.dropUser.name,new se(!0,[]));Z.set(mE.listUsersExternal.name,new se(!0,[]));Z.set(Fy.listRoles.name,new se(!0,[]));Z.set(Fy.addRole.name,new se(!0,[]));Z.set(Fy.alterRole.name,new se(!0,[]));Z.set(Fy.dropRole.name,new se(!0,[]));Z.set(LTe.name,new se(!0,[]));Z.set(DTe.name,new se(!0,[]));Z.set(MTe.name,new se(!0,[]));Z.set(vTe.name,new se(!0,[]));Z.set(UTe.name,new se(!0,[]));Z.set(xTe.name,new se(!0,[]));Z.set(LL.setRoutes.name,new se(!0,[]));Z.set(LL.getRoutes.name,new se(!0,[]));Z.set(LL.deleteRoutes.name,new se(!0,[]));Z.set(o4.setConfiguration.name,new se(!0,[]));Z.set(BTe.clusterStatus.name,new se(!0,[]));Z.set(FTe.name,new se(!0,[]));Z.set(PL.deleteFilesBefore.name,new se(!0,[]));Z.set(PL.deleteAuditLogsBefore.name,new se(!0,[]));Z.set(r4.restart.name,new se(!0,[]));Z.set(r4.restartService.name,new se(!0,[]));Z.set(OTe.name,new se(!0,[]));Z.set(PTe.name,new se(!0,[Ys]));Z.set(HTe.systemInformation.name,new se(!0,[]));Z.set(o4.getConfiguration.name,new se(!0,[]));Z.set(a4.readTransactionLog.name,new se(!0,[]));Z.set(a4.deleteTransactionLogsBefore.name,new se(!0,[]));Z.set(qTe.installModules.name,new se(!0,[]));Z.set(bf.createCsr.name,new se(!0,[]));Z.set(bf.signCertificate.name,new se(!0,[]));Z.set(bf.listCertificates.name,new se(!0,[]));Z.set(bf.addCertificate.name,new se(!0,[]));Z.set(bf.removeCertificate.name,new se(!0,[]));Z.set(bf.getKey.name,new se(!0,[]));Z.set(c4.addNodeBack.name,new se(!0,[]));Z.set(c4.removeNodeBack.name,new se(!0,[]));Z.set(DL.getOp.name,new se(!1,[Ys]));Z.set(DL.listMetricsOp.name,new se(!1,[Ys]));Z.set(DL.describeMetricOp.name,new se(!1,[Ys]));Z.set(ML.clear.name,new se(!0,[]));Z.set(ML.get.name,new se(!0,[]));Z.set(ML.set.name,new se(!0,[]));Z.set(l4.installUsageLicenseOp.name,new se(!0,[]));Z.set(l4.getUsageLicensesOp.name,new se(!0,[]));Z.set(vL.getFingerprint.name,new se(!0,[]));Z.set(vL.setLicense.name,new se(!0,[]));Z.set(s4.createTokens.name,new se(!1,[]));Z.set(s4.refreshOperationToken.name,new se(!1,[]));Z.set(i4.login.name,new se(!1,[]));Z.set(i4.logout.name,new se(!1,[]));Z.set(gr.customFunctionsStatus.name,new se(!0,[]));Z.set(gr.getCustomFunctions.name,new se(!0,[]));Z.set(gr.getComponents.name,new se(!0,[]));Z.set(gr.getComponentFile.name,new se(!0,[]));Z.set(gr.setComponentFile.name,new se(!0,[]));Z.set(gr.dropComponent.name,new se(!0,[]));Z.set(gr.getCustomFunction.name,new se(!0,[]));Z.set(gr.setCustomFunction.name,new se(!0,[]));Z.set(gr.dropCustomFunction.name,new se(!0,[]));Z.set(gr.addComponent.name,new se(!0,[]));Z.set(gr.dropCustomFunctionProject.name,new se(!0,[]));Z.set(gr.packageComponent.name,new se(!0,[]));Z.set(gr.deployComponent.name,new se(!0,[]));Z.set(gr.addSSHKey.name,new se(!0,[]));Z.set(gr.updateSSHKey.name,new se(!0,[]));Z.set(gr.deleteSSHKey.name,new se(!0,[]));Z.set(gr.listSSHKeys.name,new se(!0,[]));Z.set(gr.setSSHKnownHosts.name,new se(!0,[]));Z.set(gr.getSSHKnownHosts.name,new se(!0,[]));Z.set(vL.getRegistrationInfo.name,new se(!1,[]));Z.set(mE.userInfo.name,new se(!1,[]));Z.set(fE.describeAll.name,new se(!1,[]));Z.set(KTe,new se(!1,[]));Z.set(YTe,new se(!0,[]));Z.set(VTe,new se(!0,[]));Z.set(ky.CSV_DATA_LOAD,new se(!1,[bc,nu]));Z.set(ky.CSV_URL_LOAD,new se(!1,[bc,nu]));Z.set(ky.CSV_FILE_LOAD,new se(!1,[bc,nu]));Z.set(ky.IMPORT_FROM_S3,new se(!1,[bc,nu]));Z.set(p4.EXPORT_TO_S3,new se(!0,[]));Z.set(p4.EXPORT_LOCAL,new se(!0,[]));Z.set(Rn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[f4]));Z.set(Rn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ys]));Z.set(Rn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[bc]));Z.set(Rn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[nu]));E4.exports={verifyPerms:jTe,verifyPermsAst:zTe,verifyBulkLoadAttributePerms:JTe};function zTe(e,t,r){if(ma.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(ma.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(ma.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),$n(new Error);try{let n=new u4,s=new kTe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Or.info("No schemas defined in verifyPermsAst(), will not continue."),$n(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&m4[r])throw $n(new Error,nn.DROP_SYSTEM,uE.FORBIDDEN);if(c&&!l)return null;let u=n4.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof GTe.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=h4(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=xL(t.role.permission,m,f[p]);UL(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw $n(n)}}o(zTe,"verifyPermsAst");function jTe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Or.info("null required parameter in verifyPerms"),$n(new Error,nn.DEFAULT_INVALID_REQUEST,uE.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 u4;if(ma.isEmptyOrZeroLength(e.hdb_user?.role)||ma.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Or.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(nn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(Rn.SYSTEM_SCHEMA_NAME)||s===Rn.SYSTEM_SCHEMA_NAME;if(l&&d&&$Te[e.operation]&&(i===Rn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Rn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&m4[r])throw $n(new Error,nn.DROP_SYSTEM,uE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ks.createSchema.name||r===Ks.dropSchema.name))return null;if(WTe.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=n4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===e4||r===t4)&&!f.super_user){if(s===Rn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(nn.SCHEMA_PERM_ERROR(s));if(r===e4&&(!f[s]||!f[s][dE]))return c.handleInvalidItem(nn.SCHEMA_NOT_FOUND(s));if(r===t4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][dE]))return c.handleInvalidItem(nn.TABLE_NOT_FOUND(s,i))}let m=h4(e.hdb_user,r,a,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Rn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Rn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Rn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(b=>b.attribute),e.get_attributes=E)}let p=QTe(e),h=xL(e.hdb_user?.role?.permission,s,i);return UL(p,h,r,i,s,c,n),c.getPermsResponse()}o(jTe,"verifyPerms");function h4(e,t,r,n,s){if(ma.arrayHasEmptyValues([e,t,r]))throw Or.info("hasPermissions has an invalid parameter"),$n(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Or.info(`operation ${t} not found.`),$n(new Error,nn.OP_NOT_FOUND(t),uE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Or.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(nn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][dE]===!1){n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[dE]===!1)n.addInvalidItem(nn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!ma.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Or.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=nn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Or.error(p),Or.error(m),$n(d4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(h4,"hasPermissions");function UL(e,t,r,n,s,i,a){if(!e||!t)throw Or.info("no attributes specified in checkAttributePerms."),$n(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Or.info(`no permissions found for ${r} in checkAttributePerms().`),$n(new Error);if(ma.isEmptyOrZeroLength(t))return Or.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[dE]===!1){i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Rn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ys)throw $n(new Error,nn.SYSTEM_TIMESTAMP_PERMS_ERR,uE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(UL,"checkAttributePerms");function QTe(e){let t=new Set;try{if(e.action)return t;if(e.operation===Rn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Or.info(r)}return t}o(QTe,"getRecordAttributes");function xL(e,t,r){let n=new Map;if(ma.isEmpty(e))return Or.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Or.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(xL,"getAttributePermissions");function JTe(e,t,r,n,s,i,a){let c=new Set(i),l=xL(e,n,s);UL(c,l,t,s,n,a,r)}o(JTe,"verifyBulkLoadAttributePerms")});var qy=v((Ike,y4)=>{"use strict";y4.exports={evaluateSQL:uye,processAST:T4,convertSQLToAST:S4,checkASTPermissions:g4};var XTe=xn(),_4=require("util"),ZTe=_4.callbackify(XTe.insert),eye=mn().search,tye=xq().update,rye=_4.callbackify(tye),nye=Fq().convertDelete,Ac=require("alasql"),sye=Hy(),Gy=z(),iye=Lg(),oye=ce(),pE=(H(),M(W)),{hdbErrors:aye,handleHDBError:BL}=Ee(),{HTTP_STATUS_CODES:FL}=aye;iye(Ac);var cye=403,lye="There was a problem performing this insert. Please check the logs and try again.",kL=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function uye(e,t){let r=e.parsed_sql_object;if(!r){r=S4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ac.yy.Insert?n=s.into.databaseid:s instanceof Ac.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ac.yy.Update||s instanceof Ac.yy.Delete?n=s.table.databaseid:Gy.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ac.yy.Select)&&oye.isEmptyOrZeroLength(n))return t("No schema specified",null)}T4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(uye,"evaluateSQL");function g4(e,t){let r;try{r=sye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(g4,"checkASTPermissions");function S4(e){let t=new kL;if(!e)throw BL(new Error,"The 'sql' parameter is missing from the request body",FL.BAD_REQUEST);try{let r=e.trim(),n=Ac.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
134
- `);throw n[1]?BL(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,FL.BAD_REQUEST):BL(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",FL.BAD_REQUEST)}return t}o(S4,"convertSQLToAST");function T4(e,t,r){try{let n=dye;if(!e.bypass_auth&&!t.permissions_checked){let i=g4(e,t);if(i&&i.length>0)return r(cye,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case pE.VALID_SQL_OPS_ENUM.SELECT:n=eye,s=t.ast.statements[0];break;case pE.VALID_SQL_OPS_ENUM.INSERT:n=fye;break;case pE.VALID_SQL_OPS_ENUM.UPDATE:n=rye;break;case pE.VALID_SQL_OPS_ENUM.DELETE:n=nye;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(T4,"processAST");function dye(e,t){Gy.info(e),t("unknown sql statement")}o(dye,"nullFunction");function fye({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=mye(i,e.values)}catch(a){return r(a)}ZTe(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){Gy.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(fye,"convertInsert");function mye(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]]=Ac.compile(`SELECT ${s.toString()} AS [${pE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Gy.error(r),new Error(lye)}}o(mye,"createDataObjects")});var KL=v((Oke,I4)=>{var Yy=require("clone"),Wy=dt(),pye=ce(),Vy=(H(),M(W)),Nke=z(),HL=require("fs"),qL=require("joi"),{string:Ky}=qL.types(),{hdbErrors:hye,handleHDBError:$y}=Ee(),{HDB_ERROR_MSGS:Cke,HTTP_STATUS_CODES:GL}=hye,{commonValidators:Af}=Fi(),R4=" is required",Eye=["insert","update","upsert"],$L={database:{presence:!1,format:Af.schema_format,length:Af.schema_length},schema:{presence:!1,format:Af.schema_format,length:Af.schema_length},table:{presence:!0,format:Af.schema_format,length:Af.schema_length},action:{inclusion:{within:Eye,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},_ye={schema:Ky.required(),table:Ky.required(),action:Ky.valid("insert","update","upsert")},{AWS_ACCESS_KEY:gye,AWS_SECRET:Sye,AWS_BUCKET:Tye,AWS_FILE_KEY:yye,REGION:Rye}=Vy.S3_BUCKET_AUTH_KEYS,bye={s3:{presence:!0},[`s3.${gye}`]:{presence:!0,type:"String"},[`s3.${Sye}`]:{presence:!0,type:"String"},[`s3.${Tye}`]:{presence:!0,type:"String"},[`s3.${yye}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Rye}`]:{presence:!0,type:"String"}},b4=Yy($L);b4.data.presence={message:R4};var A4=Yy($L);A4.file_path.presence={message:R4};var Aye=Object.assign(Yy($L),bye),VL=Yy(_ye);VL.csv_url=Ky.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();VL.passthrough_headers=qL.object();function Iye(e){let t=Wy.validateObject(e,b4);return zy(e,t)}o(Iye,"dataObject");function wye(e){let t=Wy.validateBySchema(e,qL.object(VL));return zy(e,t)}o(wye,"urlObject");function Nye(e){let t=Wy.validateObject(e,A4);return zy(e,t)}o(Nye,"fileObject");function Cye(e){let t=Wy.validateObject(e,Aye);return zy(e,t)}o(Cye,"s3FileObject");function zy(e,t){if(!t){let r=pye.checkGlobalSchemaTable(e.schema,e.table);if(r)return $y(new Error,r,GL.BAD_REQUEST);if(e.operation===Vy.OPERATIONS_ENUM.CSV_FILE_LOAD)try{HL.accessSync(e.file_path,HL.constants.R_OK|HL.constants.F_OK)}catch(n){return n.code===Vy.NODE_ERROR_CODES.ENOENT?$y(n,`No such file or directory ${n.path}`,GL.BAD_REQUEST):n.code===Vy.NODE_ERROR_CODES.EACCES?$y(n,`Permission denied ${n.path}`,GL.BAD_REQUEST):$y(n)}}return t}o(zy,"postValidateChecks");I4.exports={dataObject:Iye,urlObject:wye,fileObject:Nye,s3FileObject:Cye}});var YL=v((Lke,w4)=>{"use strict";var hE=z(),jy=(H(),M(W));async function Oye(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===jy.OPERATIONS_ENUM.INSERT||t.operation===jy.OPERATIONS_ENUM.UPDATE||t.operation===jy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===jy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(hE.info(i.message),i):i.http_resp_msg?(hE.error(`Error calling operation: ${e.name}`),hE.error(i.http_resp_msg),i):(hE.error(`Error calling operation: ${e.name}`),hE.error(i),i)}}o(Oye,"callOperationFunctionAsAwait");w4.exports={callOperationFunctionAsAwait:Oye}});var WL=v((Mke,C4)=>{"use strict";var{S3:Pye,GetObjectCommand:Lye}=require("@aws-sdk/client-s3");C4.exports={getFileStreamFromS3:Dye,getS3AuthObj:N4};async function Dye(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await N4(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Lye(r))).Body}o(Dye,"getFileStreamFromS3");function N4(e,t,r){return new Pye({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(N4,"getS3AuthObj")});var P4=v((Uke,O4)=>{"use strict";var zL=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}},jL=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};O4.exports={BulkLoadFileObject:zL,BulkLoadDataObject:jL}});var JL=v((Bke,L4)=>{"use strict";var QL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};L4.exports=QL});var nD=v(($ke,z4)=>{"use strict";var Qy=xn(),Xy=KL(),Mye=require("needle"),Ii=(H(),M(W)),kke=It(),If=ce(),{handleHDBError:jt,hdbErrors:H4}=Ee(),{HTTP_STATUS_CODES:sn,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:iu}=H4,wf=z(),XL=require("papaparse");If.promisifyPapaParse();var wi=require("fs-extra"),vye=require("path"),{chain:D4}=require("stream-chain"),M4=require("stream-json/streamers/StreamArray"),v4=require("stream-json/utils/Batch"),U4=require("stream-chain/utils/comp"),{finished:x4}=require("stream"),Uye=fe(),G4=YL(),xye=WL(),{BulkLoadFileObject:eD,BulkLoadDataObject:Bye}=P4(),tD=CL(),{verifyBulkLoadAttributePerms:q4}=Hy(),Hke=JL(),Gke=rr(),qke=Vi(),{databases:Fye}=(Ne(),M(ft)),{coerceType:kye}=(Z_(),M(uG)),B4="No records parsed from csv file.",su=`${Uye.get("HDB_ROOT")}/tmp`,{schemaRegex:Hye}=Fi(),F4=1024*1024*2,k4=5e3,Gye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};z4.exports={csvDataLoad:qye,csvURLLoad:$ye,csvFileLoad:Vye,importFromS3:Kye};async function qye(e,t){let r=Xy.dataObject(e);if(r)throw jt(r,r.message,sn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=K4(e.schema,e.table),i=XL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:ZL.bind(null,s),dynamicTyping:!1}),a=new tD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&q4(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 jt(new Error,c,sn.BAD_REQUEST,void 0,void 0,!0);let l=new Bye(e.action,e.schema,e.table,i.data);return n=await G4.callOperationFunctionAsAwait(Y4,l,null),n.message===B4?B4:W4(n.records,n.number_written)}catch(s){throw ou(s)}}o(qye,"csvDataLoad");async function $ye(e){let t=Xy.urlObject(e);if(t)throw jt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${su}/${r}`;try{await Yye(e,r)}catch(s){throw wf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),jt(s,iu(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new eD(this.job_operation_function.name,e.action,e.schema,e.table,n,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await rD(s);return await Jy(n),i}catch(s){throw await Jy(n),ou(s)}}o($ye,"csvURLLoad");async function Vye(e){let t=Xy.fileObject(e);if(t)throw jt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=new eD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await rD(r)}catch(n){throw ou(n)}}o(Vye,"csvFileLoad");async function Kye(e){let t=Xy.s3FileObject(e);if(t)throw jt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=vye.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${su}/${s}`;let i=new eD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Wye(s,e);let a=await rD(i);return await Jy(r),a}catch(n){throw await Jy(r),ou(n)}}o(Kye,"importFromS3");async function Yye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Mye("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 jt(n,s,n.statusCode,Ii.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}jye(r,e.csv_url),await zye(t,r.raw)}o(Yye,"downloadCSVFile");async function Wye(e,t){try{let r=`${su}/${e}`;await wi.mkdirp(su),await wi.writeFile(`${su}/${e}`,"",{flag:"a+"});let n=await wi.createWriteStream(r),s=await xye.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(){wf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw wf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),jt(r,iu(Pr.S3_DOWNLOAD_ERR))}}o(Wye,"downloadFileFromS3");async function zye(e,t){try{await wi.mkdirp(su),await wi.writeFile(`${su}/${e}`,t)}catch(r){throw wf.error(Pr.WRITE_TEMP_FILE_ERR),jt(r,iu(Pr.DEFAULT_BULK_LOAD_ERR))}}o(zye,"writeFileToTempFolder");async function Jy(e){if(e)try{await wi.access(e),await wi.unlink(e)}catch{wf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Jy,"deleteTempFile");function jye(e,t){if(e.statusCode!==H4.HTTP_STATUS_CODES.OK)throw jt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,sn.BAD_REQUEST);if(!Gye[e.headers["content-type"]])throw jt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,sn.BAD_REQUEST);if(!e.raw)throw jt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,sn.BAD_REQUEST)}o(jye,"validateURLResponse");async function rD(e){try{let t;switch(e.file_type){case Ii.VALID_S3_FILE_TYPES.CSV:t=await Qye(e);break;case Ii.VALID_S3_FILE_TYPES.JSON:t=await Jye(e);break;default:throw jt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,sn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return W4(t.records,t.number_written)}catch(t){throw ou(t)}}o(rD,"fileLoad");async function $4(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 Qy.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&q4(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=jt(c);r(l)}}o($4,"validateChunk");async function V4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;If.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!If.isEmpty(c)&&!If.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 G4.callOperationFunctionAsAwait(Y4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=jt(c,iu(Pr.INSERT_CSV_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(V4,"insertChunk");async function Qye(e){let t={records:0,number_written:0},r=K4(e.schema,e.table);try{let n=new tD,s=wi.createReadStream(e.file_path,{highWaterMark:F4});s.setEncoding("utf8"),await XL.parsePromise(s,$4.bind(null,e,n),ZL.bind(null,r));let i=n.getPermsResponse();if(i)throw jt(new Error,i,sn.BAD_REQUEST);return s=wi.createReadStream(e.file_path,{highWaterMark:F4}),s.setEncoding("utf8"),await XL.parsePromise(s,V4.bind(null,e,t),ZL.bind(null,r)),s.destroy(),t}catch(n){throw jt(n,iu(Pr.PAPA_PARSE_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(Qye,"callPapaParse");function K4(e,t){let r=Fye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>kye(i,s));return n}o(K4,"createTransformMap");function ZL(e,t,r){let n=e.get(r);return n?n(t):If.autoCast(t)}o(ZL,"typeFunction");async function Jye(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new tD,s=D4([wi.createReadStream(e.file_path,{encoding:"utf-8"}),M4.withParser(),c=>c.value,new v4({batchSize:k4}),U4(async c=>{await $4(e,n,r,c)})]);await new Promise((c,l)=>{x4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw jt(new Error,i,sn.BAD_REQUEST);let a=D4([wi.createReadStream(e.file_path,{encoding:"utf-8"}),M4.withParser(),c=>c.value,new v4({batchSize:k4}),U4(async c=>{await V4(e,t,r,c)})]);return await new Promise((c,l)=>{x4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw jt(n,iu(Pr.INSERT_JSON_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(Jye,"insertJson");async function Y4(e){let t={};try{e.data&&e.data.length>0&&Xye(e.data[0])?t=await Zye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",wf.info(t.message))}catch(r){throw ou(r)}return t}o(Y4,"callBulkFileLoad");function Xye(e){let t=Object.keys(e);for(let r of t)if(!Hye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Xye,"validateColumnNames");async function Zye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Qy.insert;break;case"update":i=Qy.update;break;case"upsert":i=Qy.upsert;break;default:throw jt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),sn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Pr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=If.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ou(a)}}o(Zye,"bulkFileLoad");function W4(e,t){return`successfully loaded ${t} of ${e} records`}o(W4,"buildResponseMsg");function ou(e){return jt(e,iu(Pr.DEFAULT_BULK_LOAD_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ou,"buildTopLevelErrMsg")});var oD=v((Kke,r2)=>{"use strict";var iD=mn(),eRe=WL(),{AsyncParser:tRe}=require("json2csv"),Zy=require("stream"),gs=ce(),sD=require("fs-extra"),rRe=require("path"),Ws=z(),{promisify:J4}=require("util"),EE=ce(),{handleHDBError:Sr,hdbErrors:nRe}=Ee(),{HDB_ERROR_MSGS:Vn,HTTP_STATUS_CODES:Tr}=nRe,{streamAsJSON:sRe}=(qb(),M(TU)),{Upload:iRe}=require("@aws-sdk/lib-storage"),{toCsvStream:oRe}=(No(),M(PU)),j4=["search_by_value","search_by_hash","sql","search_by_conditions"],Q4=["json","csv"],X4="json",Z4="csv",aRe="Successfully exported JSON locally.",cRe="Successfully exported CSV locally.",lRe=1e3,uRe=iD.searchByHash,dRe=iD.searchByValue,fRe=J4(Zy.finished);r2.exports={export_to_s3:ERe,export_local:mRe};async function mRe(e){Ws.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=e2(e);if(!gs.isEmpty(t))throw Ws.error(t),Sr(new Error,t,Tr.BAD_REQUEST,void 0,void 0,!0);if(gs.isEmpty(e.path))throw Ws.error(Vn.MISSING_VALUE("path")),Sr(new Error,Vn.MISSING_VALUE("path"),Tr.BAD_REQUEST,void 0,void 0,!0);let r=(gs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(rRe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=gs.buildFolderPath(e.path,r);await pRe(e.path);let s=await t2(e);return await hRe(n,e.format,s)}o(mRe,"export_local");async function pRe(e){if(Ws.trace("in confirmPath"),gs.isEmptyOrZeroLength(e))throw Sr(new Error,`Invalid path: ${e}`,Tr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await sD.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Ws.error(n),Sr(new Error,n,Tr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Ws.error(r),Sr(new Error,r,Tr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(pRe,"confirmPath");async function hRe(e,t,r){if(Ws.trace("in saveToLocal"),EE.isEmptyOrZeroLength(e))throw Sr(new Error,Vn.INVALID_VALUE("file_path"),Tr.BAD_REQUEST,void 0,void 0,!0);if(EE.isEmptyOrZeroLength(t))throw Sr(new Error,Vn.INVALID_VALUE("Source format"),Tr.BAD_REQUEST,void 0,void 0,!0);if(EE.isEmpty(r))throw Sr(new Error,Vn.NOT_FOUND("Data"),Tr.BAD_REQUEST,void 0,void 0,!0);if(t===X4){let n=sD.createWriteStream(e);return sRe(r).pipe(n),await fRe(n),{message:aRe,path:e}}else if(t===Z4){let n=sD.createWriteStream(e),s=Zy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new tRe(i,c).fromInput(s).toOutput(n).promise(!1),{message:cRe,path:e}}throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST)}o(hRe,"saveToLocal");async function ERe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Sr(new Error,Vn.MISSING_VALUE("S3 object"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Sr(new Error,Vn.MISSING_VALUE("aws_access_key_id"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Sr(new Error,Vn.MISSING_VALUE("aws_secret_access_key"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.bucket))throw Sr(new Error,Vn.MISSING_VALUE("bucket"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.key))throw Sr(new Error,Vn.MISSING_VALUE("key"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.region))throw Sr(new Error,Vn.MISSING_VALUE("region"),Tr.BAD_REQUEST);let t=e2(e);if(!gs.isEmpty(t))throw Sr(new Error,t,Tr.BAD_REQUEST);Ws.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await t2(e)}catch(l){throw Ws.error(l),l}let n,s=await eRe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Zy.PassThrough;if(e.format===Z4){i=e.s3.key+".csv";let l=oRe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===X4){i=e.s3.key+".json";let l=new Zy.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%lRe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST);return new iRe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(ERe,"export_to_s3");function e2(e){if(Ws.trace("in exportCoreValidation"),gs.isEmpty(e.format))return"format missing";if(Q4.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Q4.join(", ")}`;let t=e.search_operation.operation;if(gs.isEmpty(t))return"search_operation.operation missing";if(j4.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${j4.join(", ")}`}o(e2,"exportCoreValidation");async function t2(e){Ws.trace("in getRecords");let t,r;if(EE.isEmpty(e.search_operation)||EE.isEmptyOrZeroLength(e.search_operation.operation))throw Sr(new Error,Vn.INVALID_VALUE("Search operation"),Tr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=dRe;break;case"search_by_hash":t=uRe;break;case"search_by_conditions":t=iD.searchByConditions;break;case"sql":{let n=qy();t=J4(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ws.error(r),Sr(new Error,r,Tr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(t2,"getRecords")});var s2=v((Wke,n2)=>{"use strict";var aD=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};n2.exports=aD});var a2=v((jke,o2)=>{"use strict";var _Re=(H(),M(W)),i2=require("moment"),gRe=require("uuid").v4,cD=class{static{o(this,"JobObject")}constructor(){this.id=gRe(),this.type=void 0,this.start_datetime=i2().valueOf(),this.created_datetime=i2().valueOf(),this.end_datetime=void 0,this.status=_Re.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};o2.exports=cD});var tR=v((Jke,h2)=>{"use strict";var SRe=require("uuid").v4,f2=xn(),m2=mn(),TRe=ai(),yRe=Yu(),RRe=s2(),Nt=(H(),M(W)),bRe=a2(),ARe=mS(),Ni=z(),IRe=um(),Nf=ce(),{promisify:wRe}=require("util"),au=require("moment"),NRe=qy(),eR=KL(),c2=sw(),{deleteTransactionLogsBeforeValidator:CRe}=sL(),{handleHDBError:l2,hdbErrors:ORe,ClientError:PRe}=Ee(),{HTTP_STATUS_CODES:u2}=ORe,d2=m2.searchByValue,LRe=m2.searchByHash,DRe=f2.insert,MRe=wRe(NRe.evaluateSQL),vRe=f2.update;h2.exports={addJob:BRe,updateJob:kRe,handleGetJob:URe,handleGetJobsByStartDate:xRe,getJobById:p2};async function URe(e){if(e.id===void 0)throw new PRe("'id' is required");let t=await p2(e.id);return Nf.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(URe,"handleGetJob");async function xRe(e){try{let t=await FRe(e);if(Ni.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=au(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=au(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 Ni.error(r),new Error(r)}}o(xRe,"handleGetJobsByStartDate");async function BRe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Nf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ni.info(d),t.error=d,t}if(!Nt.JOB_TYPE_ENUM[e.operation])return Ni.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Nt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=eR.fileObject(e);break;case Nt.OPERATIONS_ENUM.CSV_URL_LOAD:n=eR.urlObject(e);break;case Nt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=eR.dataObject(e);break;case Nt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=eR.s3FileObject(e);break;case Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=c2(e,"date");break;case Nt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=c2(e,"timestamp");break;case Nt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=CRe(e);break;case Nt.OPERATIONS_ENUM.RESTART_SERVICE:if(Nt.HDB_PROCESS_SERVICES[e.service]===void 0)throw l2(new Error,"Invalid service",u2.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw l2(n,n.message,u2.BAD_REQUEST,void 0,void 0,!0);let s=new bRe;s.type=e.operation===Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new TRe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await d2(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=SRe();try{a=await d2(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ni.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new IRe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await DRe(l)}catch(d){return Ni.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,Ni.trace(d)}return t}o(BRe,"addJob");async function FRe(e){let t=au(e.from_date,au.ISO_8601),r=au(e.to_date,au.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 RRe(n,e.hdb_user);try{return await MRe(s)}catch(i){throw Ni.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(FRe,"getJobsInDateRange");async function p2(e){if(Nf.isEmptyOrZeroLength(e))return Nf.errorizeMessage("Invalid job ID specified.");let t=new yRe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await LRe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ni.error(n),Nf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(p2,"getJobById");async function kRe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Nf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Nt.JOB_STATUS_ENUM.COMPLETE||e.status===Nt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=au().valueOf());let t=new ARe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await vRe(t),r}o(kRe,"updateJob")});var b2=v((Zke,R2)=>{"use strict";var E2=ce(),Lr=(H(),M(W)),HRe=require("moment"),rR=nD(),_E=z(),_2=tR(),g2=oD(),S2=gl(),T2=rt(),GRe=Ly(),qRe=yf(),{parentPort:$Re,isMainThread:y2}=require("worker_threads"),{onMessageByType:VRe}=rt(),lD=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function KRe(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(E2.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(E2.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Lr.JOB_TYPE_ENUM.csv_file_load:await ao(e,rR.csvFileLoad);break;case Lr.JOB_TYPE_ENUM.csv_url_load:await ao(e,rR.csvURLLoad);break;case Lr.JOB_TYPE_ENUM.csv_data_load:await ao(e,rR.csvDataLoad);break;case Lr.JOB_TYPE_ENUM.import_from_s3:await ao(e,rR.importFromS3);break;case Lr.JOB_TYPE_ENUM.empty_trash:break;case Lr.JOB_TYPE_ENUM.export_local:await ao(e,g2.export_local);break;case Lr.JOB_TYPE_ENUM.export_to_s3:await ao(e,g2.export_to_s3);break;case Lr.JOB_TYPE_ENUM.delete_files_before:case Lr.JOB_TYPE_ENUM.delete_records_before:await ao(e,S2.deleteFilesBefore);break;case Lr.JOB_TYPE_ENUM.delete_audit_logs_before:await ao(e,S2.deleteAuditLogsBefore);break;case Lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await ao(e,GRe.deleteTransactionLogsBefore);break;case Lr.JOB_TYPE_ENUM.restart_service:return await ao(e,qRe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(KRe,"parseMessage");async function ao(e,t){try{e.job.status=Lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=HRe().valueOf(),await _2.updateJob(e.job),await YRe(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):_E.error(`There was an error running ${t.name} job with id ${e.job.id}`),_E.error(n),e.job.message=n,e.job.status=Lr.JOB_STATUS_ENUM.ERROR;try{await _2.updateJob(e.job)}catch(s){throw _E.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(ao,"runJob");async function YRe(e){_E.trace("launching job thread:",e),y2?T2.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):$Re.postMessage({type:Lr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(YRe,"launchJobThread");y2&&VRe(Lr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{T2.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){_E.error(r)}});R2.exports={parseMessage:KRe,RunnerMessage:lD}});var I2=v((tHe,A2)=>{"use strict";var WRe=ce(),uD=fe(),Ic=(H(),M(W)),zRe=It(),jRe=rr(),co=z(),QRe=JL(),JRe=Vi();uD.initSync();A2.exports={postOperationHandler:ZRe,sendOperationTransaction:gE};async function gE(e,t,r,n){if(e.schema===Ic.SYSTEM_SCHEMA_NAME)return;let s=XRe(e,t,r);s&&(co.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await jRe.publishToStream(`${zRe.SUBJECT_PREFIXES.TXN}.${e.schema}`,JRe.createNatsTableStreamName(e.schema,e.table),n,s))}o(gE,"sendOperationTransaction");function XRe(e,t,r){if(WRe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Ic.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(XRe,"convertCRUDOperationToTransaction");async function ZRe(e,t,r){if(!uD.get(Ic.CONFIG_PARAMS.CLUSTERING_ENABLED))return;co.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=uD.get(Ic.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new QRe(t.txn_time,n,s);switch(e.operation){case Ic.OPERATIONS_ENUM.INSERT:try{await gE(e,t.inserted_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for insert."),co.error(a)}break;case Ic.OPERATIONS_ENUM.DELETE:try{await gE(e,t.deleted_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for delete."),co.error(a)}break;case Ic.OPERATIONS_ENUM.UPDATE:try{await gE(e,t.update_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for update."),co.error(a)}break;case Ic.OPERATIONS_ENUM.UPSERT:try{await gE(e,t.upserted_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for upsert."),co.error(a)}break;default:break}return t}o(ZRe,"postOperationHandler")});var J,w2=oe(()=>{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 Ny={};be(Ny,{chooseOperation:()=>Y2,executeJob:()=>zs,getOperationFunction:()=>W2,operation:()=>gD,processLocalTransaction:()=>K2});async function K2(e,t){try{if(e.body.operation!=="read_log"&&(RE.default.log_level===jf.INFO||RE.default.log_level===jf.DEBUG||RE.default.log_level===jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;bn.info(c)}}catch(n){bn.error(n)}let r=await $2.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return nbe[e.body.operation]&&F2.default.setSchemaDataToGlobal(n=>{n&&bn.error(n)}),r}function Y2(e){let t;try{t=W2(e)}catch(s){throw bn.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=sR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=sR.default.checkASTPermissions(e,i);if(a)throw bn.error(`${N2.FORBIDDEN} from operation ${e.operation}`),bn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,js.handleHDBError)(new Error,a,js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=B2.default.verifyPerms(i,s);if(a)throw bn.error(`${N2.FORBIDDEN} from operation ${e.operation}`),bn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,js.handleHDBError)(new Error,a,js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,js.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function W2(e){if(bn.trace(`getOperationFunction with operation: ${e.operation}`),C2.has(e.operation))return C2.get(e.operation);throw(0,js.handleHDBError)(new Error,js.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),js.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function gD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Y2(e);return K2({body:e},n)}async function sbe(e){bn.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[_b]=!0;let a;switch(i.operation){case V.INSERT:a=await lu.default.insert(i);break;case V.UPDATE:a=await lu.default.update(i);break;case V.UPSERT:a=await lu.default.upsert(i);break;case V.DELETE:a=await Pf.default.deleteRecord(i);break;default:bn.warn("invalid operation in catchup");break}await ebe.postOperationHandler(i,a,e)}catch(a){bn.info("Invalid operation in transaction"),bn.error(a)}}async function zs(e){(0,q2.transformReq)(e);let t,r;try{if(r=await iR.default.addJob(e),r){t=r.createdJob,bn.info("addJob result",r);let n=new pD.default.RunnerMessage(t,e);return{message:await pD.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 bn.error(i),(0,js.handleHDBError)(n,i)}}function ibe(){let e=new Map;return e.set(V.INSERT,new J(lu.default.insert)),e.set(V.UPDATE,new J(lu.default.update)),e.set(V.UPSERT,new J(lu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new J(Of.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new J(Of.default.searchByHash)),e.set(V.SEARCH_BY_ID,new J(Of.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new J(Of.default.searchByValue)),e.set(V.SEARCH,new J(tbe)),e.set(V.SQL,new J(rbe)),e.set(V.CSV_DATA_LOAD,new J(zs,SE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new J(zs,SE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new J(zs,SE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new J(zs,SE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new J(lo.default.createSchema)),e.set(V.CREATE_DATABASE,new J(lo.default.createSchema)),e.set(V.CREATE_TABLE,new J(lo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new J(lo.default.createAttribute)),e.set(V.DROP_SCHEMA,new J(lo.default.dropSchema)),e.set(V.DROP_DATABASE,new J(lo.default.dropSchema)),e.set(V.DROP_TABLE,new J(lo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new J(lo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new J(TE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new J(TE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new J(TE.default.describeTable)),e.set(V.DESCRIBE_ALL,new J(TE.default.describeAll)),e.set(V.DELETE,new J(Pf.default.deleteRecord)),e.set(V.ADD_USER,new J(Cf.default.addUser)),e.set(V.ALTER_USER,new J(Cf.default.alterUser)),e.set(V.DROP_USER,new J(Cf.default.dropUser)),e.set(V.LIST_USERS,new J(Cf.default.listUsersExternal)),e.set(V.LIST_ROLES,new J(yE.default.listRoles)),e.set(V.ADD_ROLE,new J(yE.default.addRole)),e.set(V.ALTER_ROLE,new J(yE.default.alterRole)),e.set(V.DROP_ROLE,new J(yE.default.dropRole)),e.set(V.USER_INFO,new J(Cf.default.userInfo)),e.set(V.READ_LOG,new J(P2.default)),e.set(V.ADD_NODE,new J(L2.default)),e.set(V.UPDATE_NODE,new J(dD.default)),e.set(V.SET_NODE_REPLICATION,new J(dD.default)),e.set(V.REMOVE_NODE,new J(D2.default)),e.set(V.CONFIGURE_CLUSTER,new J(M2.default)),e.set(V.PURGE_STREAM,new J(v2.default)),e.set(V.SET_CONFIGURATION,new J(hD.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new J(U2.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new J(x2.default)),e.set(V.CLUSTER_SET_ROUTES,new J(nR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new J(nR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new J(nR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new J(zs,fD.default.export_to_s3)),e.set(V.CREATE_CSR,new J(cu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new J(cu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new J(cu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new J(cu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new J(cu.default.removeCertificate)),e.set(V.GET_KEY,new J(cu.default.getKey)),e.set(V.ADD_NODE_BACK,new J(iO)),e.set(V.REMOVE_NODE_BACK,new J(oO)),e.set(V.DELETE_FILES_BEFORE,new J(zs,Pf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new J(zs,Pf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new J(zs,fD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new J(iR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new J(iR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new J(TL)),e.set(V.GET_FINGERPRINT,new J(yL)),e.set(V.SET_LICENSE,new J(RL)),e.set(V.RESTART,new J(mD.default.restart)),e.set(V.RESTART_SERVICE,new J(zs,mD.default.restartService)),e.set(V.CATCHUP,new J(sbe)),e.set(V.SYSTEM_INFORMATION,new J(k2.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new J(zs,Pf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new J(O2.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new J(PN)),e.set(V.REFRESH_OPERATION_TOKEN,new J(LN)),e.set(V.LOGIN,new J(ZP)),e.set(V.LOGOUT,new J(eL)),e.set(V.GET_CONFIGURATION,new J(hD.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new J(Ct.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new J(Ct.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new J(Ct.default.getComponentFile)),e.set(V.GET_COMPONENTS,new J(Ct.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new J(Ct.default.setComponentFile)),e.set(V.DROP_COMPONENT,new J(Ct.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new J(Ct.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new J(Ct.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new J(Ct.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.addComponent)),e.set(V.ADD_COMPONENT,new J(Ct.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new J(Ct.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new J(Ct.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new J(ED.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new J(zs,ED.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new J(H2.default.installModules)),e.set(V.GET_BACKUP,new J(lo.default.getBackup)),e.set(V.ADD_SSH_KEY,new J(Ct.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new J(Ct.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new J(Ct.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new J(Ct.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new J(Ct.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new J(Ct.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new J(aL)),e.set(V.LIST_METRICS,new J(cL)),e.set(V.DESCRIBE_METRIC,new J(lL)),e.set(V.GET_STATUS,new J(_L)),e.set(V.SET_STATUS,new J(gL)),e.set(V.CLEAR_STATUS,new J(EL)),e.set(V.INSTALL_USAGE_LICENSE,new J(SP)),e.set(V.GET_USAGE_LICENSES,new J(bP)),e}var Of,sR,SE,lo,TE,Pf,O2,Cf,yE,Ct,RE,P2,L2,dD,D2,M2,v2,U2,x2,nR,fD,B2,iR,js,mD,_D,lu,F2,k2,pD,hD,ED,H2,G2,q2,cu,$2,V2,N2,bn,ebe,tbe,rbe,nbe,C2,Cy=oe(()=>{Of=w(mn()),sR=w(qy()),SE=w(nD()),lo=w(cT()),TE=w(Cl()),Pf=w(gl()),O2=w(MC()),Cf=w(Fn()),yE=w(xp()),Ct=w(nL()),RE=w(z()),P2=w(FC()),L2=w(TT()),dD=w(dO()),D2=w(RT()),M2=w(pO()),v2=w(hO()),U2=w(gO()),x2=w(TO()),nR=w(NT()),fD=w(oD()),B2=w(Hy()),iR=w(tR());H();js=w(Ee()),mD=w(yf()),_D=w(require("util")),lu=w(xn()),F2=w(li()),k2=w(hh()),pD=w(b2());yd();Ry();hD=w(pt()),ED=w(Ly()),H2=w(oL()),G2=w(ti()),q2=w(ce());xr();cu=w(us());Wd();dL();$2=w(YL()),V2=w(I2());aE();Hh();AL();w2();({HTTP_STATUS_CODES:N2}=js.hdbErrors),bn=RE.default.loggerWithTag("operation"),{transactToClusteringUtils:ebe}=V2.default,tbe=_D.promisify(Of.default.search),rbe=_D.promisify(sR.default.evaluateSQL),nbe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(K2,"processLocalTransaction");C2=ibe();Me.operation=gD;o(Y2,"chooseOperation");o(W2,"getOperationFunction");(0,G2._assignPackageExport)("operation",gD);o(gD,"operation");o(sbe,"catchup");o(zs,"executeJob");o(ibe,"initializeOperationFunctionMap")});var cR=v((cHe,Q2)=>{"use strict";var oR=(H(),M(W)),obe=ce(),bE=z(),{handleHDBError:SD,hdbErrors:aR}=Ee(),{isMainThread:abe}=require("worker_threads"),{Readable:cbe}=require("stream"),z2=require("os"),lbe=require("util"),ube=MN(),dbe=lbe.promisify(ube.authorize),j2=(Cy(),M(Ny)),{createGzip:fbe,constants:mbe}=require("zlib"),pbe=[oR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,oR.OPERATIONS_ENUM.LOGIN,oR.OPERATIONS_ENUM.LOGOUT];function hbe(e){let t=`Found an uncaught exception with message: ${e.message}. ${z2.EOL}Stack: ${e.stack} ${z2.EOL}Terminating ${abe?"HDB":"thread"}.`;console.error(t),bE.fatal(t),process.exit(1)}o(hbe,"handleServerUncaughtException");function Ebe(e,t,r){if(bE[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:aR.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(Ebe,"serverErrorHandler");function _be(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=SD(new Error,"Invalid JSON.",aR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(obe.isEmpty(e.body.operation)){let n=SD(new Error,"Request body must include an 'operation' property.",aR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(_be,"reqBodyValidationHandler");function gbe(e,t,r){let n;!pbe.includes(e.body.operation)||e.body.operation===oR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?dbe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{bE.warn(i),bE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(SD(i,a,aR.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(gbe,"authHandler");async function Sbe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=j2.chooseOperation(e.body);let s=await j2.processLocalTransaction(e,n);if(s instanceof cbe&&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(fbe({level:mbe.Z_BEST_SPEED})))}return s}catch(s){throw bE.error(s),s}}o(Sbe,"handlePostRequest");Q2.exports={authHandler:gbe,handlePostRequest:Sbe,handleServerUncaughtException:hbe,serverErrorHandler:Ebe,reqBodyValidationHandler:_be}});var eQ=v((uHe,Z2)=>{"use strict";var Tbe=require("fastify-plugin"),{handlePostRequest:J2,authHandler:ybe,reqBodyValidationHandler:Rbe}=cR();async function bbe(e){e.decorate("hdbCore",{preValidation:[Rbe,ybe],request:o(t=>X2(J2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>X2(J2(t,r,!0)),"requestWithoutAuthentication")})}o(bbe,"hdbCore");async function X2(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(X2,"convertAsyncIterators");Z2.exports=Tbe(bbe)});var rQ=v((mHe,tQ)=>{"use strict";var fHe=require("fs"),lR=fe();lR.initSync();var{CONFIG_PARAMS:TD}=(H(),M(W)),Abe=1024*1024*1024;function Ibe(e){let t=lR.get(TD.HTTP_TIMEOUT),r=lR.get(TD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Abe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:lR.get(TD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(Ibe,"getServerOptions");tQ.exports=Ibe});var iQ=v((hHe,sQ)=>{"use strict";var yD=fe();yD.initSync();var{CONFIG_PARAMS:nQ}=(H(),M(W));function wbe(){let e=yD.get(nQ.HTTP_CORSACCESSLIST),t=yD.get(nQ.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(wbe,"getCORSOptions");sQ.exports=wbe});var cQ=v((_He,aQ)=>{"use strict";var oQ=fe();oQ.initSync();var Nbe=(H(),M(W));function Cbe(){return oQ.get(Nbe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(Cbe,"getHeaderTimeoutConfig");aQ.exports=Cbe});var bD={};be(bD,{customFunctionsServer:()=>Lbe,ready:()=>RQ,start:()=>Pbe});function Pbe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){pa||(pa=yQ(t),Me.http((await pa).server));let a=await pa,c=(0,RD.dirname)(s),l=(0,RD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!lQ.has(c)){lQ.add(c);try{a.register(Mbe(c,l))}catch(u){if(u.message==="Root plugin has already booted")_t.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:RQ}}async function Lbe(){try{_t.info("In Custom Functions Fastify server"+process.cwd()),_t.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),_t.debug(`Custom Functions server process ${process.pid} starting up.`),await Dbe();let e=hQ.get(U.HTTP_SECUREPORT)>0,t;try{t=pa=await yQ(e)}catch(r){throw _t.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw _t.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){_t.error(`Custom Functions ${process.pid} Error: ${e}`),_t.error(e),process.exit(1)}}async function Dbe(){try{_t.info("Custom Functions starting configuration."),await EQ.setUsersWithRolesCache(),_t.info("Custom Functions completed configuration.")}catch(e){_t.error(e)}}function Mbe(e,t){return async function(r){try{_t.info("Custom Functions starting buildRoutes"),_t.trace("Loading fastify routes folder "+e),(0,uQ.existsSync)(e)&&r.register(pQ.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:_t.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?_t.error(s.message):s&&_t.error(s),a()})}catch(n){_t.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function yQ(e){_t.info("Custom Functions starting buildServer.");let t=(0,_Q.default)(e),r=(0,dQ.default)(t);r.server.headersTimeout=(0,SQ.default)(),r.setErrorHandler(TQ.serverErrorHandler);let n=(0,gQ.default)();return n&&r.register(fQ.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(mQ.default),await r.register(Obe),await r.after(),gm(r),_t.info("Custom Functions completed buildServer."),r}function RQ(){if(pa)return pa.then?pa.then(e=>e.ready()):pa.ready()}var RD,uQ,dQ,fQ,mQ,pQ,hQ,_t,Obe,EQ,_Q,gQ,SQ,TQ,pa,lQ,bQ=oe(()=>{RD=require("path"),uQ=require("fs"),dQ=w(require("fastify")),fQ=w(require("@fastify/cors")),mQ=w(wN()),pQ=w(require("@fastify/autoload")),hQ=w(fe());H();_t=w(z()),Obe=w(eQ()),EQ=w(Fn()),_Q=w(rQ()),gQ=w(iQ()),SQ=w(cQ()),TQ=w(cR());No();xr();lQ=new Set;o(Pbe,"start");o(Lbe,"customFunctionsServer");o(Dbe,"setUp");o(Mbe,"buildRouteFolder");o(yQ,"buildServer");o(RQ,"ready")});var ID={};be(ID,{handleApplication:()=>vbe,suppressHandleApplicationWarning:()=>Ube});function vbe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,Df.join)(n.absolutePath,"index.html");(0,Lf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,Df.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Df.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,AD.default)(n,(0,Lf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(xbe(c),!c)return{status:404,body:"File not found"};let l=(0,Df.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Lf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,AD.default)(n,(0,Lf.realpathSync)(l))}},{runFirst:!0})}function xbe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Lf,Df,AD,Ube,AQ=oe(()=>{Lf=require("node:fs"),Df=require("node:path"),AD=w(require("send"));o(vbe,"handleApplication");Ube=!0;o(xbe,"validateNotFoundOption")});var wD={};be(wD,{start:()=>Bbe});function Bbe({override:e}){return{handleFile:o((t,r,n)=>{uR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,IQ.parse)(t))){if(process.env[s]!==void 0)if(uR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)uR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var IQ,uR,wQ=oe(()=>{IQ=require("dotenv"),uR=w(z());o(Bbe,"start")});var ND={};be(ND,{DataLoaderError:()=>Ss,DataLoaderResult:()=>Mf,EmptyFileError:()=>mR,FileParseError:()=>fR,InvalidPropertyTypeError:()=>pR,MissingRequiredPropertyError:()=>AE,RecordProcessingError:()=>IE,SystemDatabaseError:()=>hR,UnsupportedFileExtensionError:()=>dR,handleApplication:()=>kbe,loadDataFile:()=>LQ,suppressHandleApplicationWarning:()=>Fbe});function kbe(e){if((0,CQ.getWorkerIndex)()!==0){uo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||LQ(t,hn,De).then(r=>{uo.debug?.("Data loader processed file: %s: %s",(0,ha.basename)(t.absolutePath),r.message)})})}async function LQ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ha.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,NQ.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new dR(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof Ss?f:new fR(t,f)}if(!a)throw new mR(t);let{database:c,table:l,records:u}=a;if(!l)throw new AE(t,"table");if(!u)throw new AE(t,"records");if(!Array.isArray(u))throw new pR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new hR(c,l);try{let f;if(c&&s[c]&&s[c][l])uo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])uo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{uo.debug?.(`Table ${d} not found, creating new table`);let b=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let L={name:R,type:typeof S[R]};return R==="id"&&(L.isPrimaryKey=!0),L}).forEach(R=>{b.push(R)})}f=await Je({database:c,table:l,attributes:b})}let m=u.length,p=0,h=0,E=0,g=100;for(let b=0;b<u.length;b+=g){let S=u.slice(b,b+g),R=[];for(let L of S)R.push(async()=>{try{let O=null,x=L.id;if(x!==void 0&&(O=await f.get(x)),!O)return p++,f.put(L);let j=O.getUpdatedTime();return a.mtime>j?(h++,f.put(L)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof Ss)uo.error?.(`Record processing error: ${O.message}`);else{let x=new IE(d,O);uo.error?.(`Record processing error: ${x.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(L=>L()))}if(p>0||h>0){let b=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(b+=` (${E} records skipped)`),uo.info?.(b),new Mf(t,c,l,"success",p+h,b)}else if(E>0){let b=`All ${E} records in ${d} already up-to-date`;return uo.info?.(b),new Mf(t,c,l,"skipped",m,b)}else{let b=`No records to process in ${d}`;return uo.info?.(b),new Mf(t,c,l,"success",0,b)}}catch(f){throw f instanceof Ss?f:new IE(d,f)}}var ha,NQ,CQ,Ea,OQ,PQ,uo,Fbe,Ss,dR,fR,mR,AE,pR,hR,IE,Mf,DQ=oe(()=>{ha=require("node:path"),NQ=require("yaml");Ne();CQ=w(rt()),Ea=w(Kr()),OQ=w(Ee()),PQ=w(z()),uo=PQ.default.forComponent("dataLoader"),Fbe=!0;o(kbe,"handleApplication");o(LQ,"loadDataFile");Ss=class extends OQ.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=Ea.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},dR=class extends Ss{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ha.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},fR=class extends Ss{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ha.basename)(t)}: ${r.message}`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},mR=class extends Ss{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ha.basename)(t)} is empty or invalid`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},AE=class extends Ss{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ha.basename)(t)} is missing required "${r}" property`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},pR=class extends Ss{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ha.basename)(t)} has invalid "${r}" property, expected ${n}`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},hR=class extends Ss{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ea.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},IE=class extends Ss{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ea.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Mf=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 CD={};be(CD,{hdbServer:()=>$be,start:()=>$be});async function $be(e){try{fo.default.debug("In Fastify server"+process.cwd()),fo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),fo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=MQ.default.isMaster,await Vbe();let t=e.securePort>0;vf=Kbe(t),await vf.ready(),e||(e={}),e.isOperationsServer=!0;try{Me.http(vf.server,e),vf.server.closeIdleConnections||await vf.listen({port:0,host:"::"})}catch(r){throw vf.close(),fo.default.error(r),fo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),fo.default.fatal(t),process.exit(1)}}async function Vbe(){return fo.default.trace("Configuring HarperDB process."),GQ.default.setSchemaDataToGlobal(),$Q.default.setUsersWithRolesCache()}function Kbe(e){fo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ybe(e),r=(0,vQ.default)(t);r.server.headersTimeout=zbe(),r.setErrorHandler(Nc.serverErrorHandler);let n=Wbe();n&&r.register(UQ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(FQ.default),r.register(xQ.default),r.register(BQ.default,{root:kQ.default.join(HQ.PACKAGE_ROOT,"studio/web")}),gm(r);let s=wc.default.get(Jf.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!qQ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Nc.reqBodyValidationHandler,Nc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Nc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),fo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function Ybe(e){let t=wc.default.get(wE.OPERATIONSAPI_NETWORK_TIMEOUT),r=wc.default.get(wE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Gbe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function Wbe(){let e=wc.default.get(wE.OPERATIONSAPI_NETWORK_CORS),t=wc.default.get(wE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===qbe)&&(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 zbe(){return wc.default.get(wE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Hbe}var MQ,wc,fo,vQ,UQ,xQ,BQ,FQ,kQ,HQ,GQ,qQ,$Q,Nc,Hbe,Gbe,qbe,wE,vf,VQ=oe(()=>{MQ=w(require("cluster")),wc=w(fe());H();fo=w(z()),vQ=w(require("fastify")),UQ=w(require("@fastify/cors")),xQ=w(require("@fastify/compress")),BQ=w(require("@fastify/static")),FQ=w(wN()),kQ=w(require("path")),HQ=w(bt()),GQ=w(li()),qQ=w(ce()),$Q=w(Fn());xr();Nc=w(cR());No();wc.default.initSync();Hbe=6e4,Gbe=1024*1024*1024,qbe="TRUE",{CONFIG_PARAMS:wE}=W;o($be,"operationsServer");o(Vbe,"setUp");o(Kbe,"buildServer");o(Ybe,"getServerOptions");o(Wbe,"getCORSOpts");o(zbe,"getHeaderTimeoutConfig")});var SR={};be(SR,{disableNATS:()=>Qbe,publishToStream:()=>gR,setNATSReplicator:()=>OD,setPublishToStream:()=>Jbe,setSubscription:()=>MD,start:()=>jbe});function jbe(){NE.default.get(U.CLUSTERING_ENABLED)&&Zbe()}function Qbe(e=!0){jQ=e}function Jbe(e,t){gR=e,MD=t}function Zbe(){if(jQ||process.env._DISABLE_NATS)return;let e=ot(),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];OD(s,r,i)}}wl((r,n)=>{OD(r.tableName,r.databaseName,r),n&&JQ(r)}),!KQ&&(KQ=!0)}function OD(e,t,r){if(t==="system"&&eAe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Fr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){JQ(i)}static subscribe(){let i=new jn;return MD(t,e,i),i}static subscribeOnThisThread(i){return i<(NE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Xbe)}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 ER(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=QQ;return i}o(n,"getNATSTransaction")}function JQ(e){let t=NE.default.get(U.CLUSTERING_NODENAME);gR(`${LD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,DD.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 YQ,LD,DD,WQ,zQ,NE,_R,jQ,gR,MD,Xbe,QQ,KQ,eAe,ER,PD,vD=oe(()=>{Ne();va();YQ=w(rr()),LD=w(It()),DD=w(Vi());yu();WQ=w(VN()),zQ=w(Cn()),NE=w(fe());H();_R=w(z());o(jbe,"start");o(Qbe,"disableNATS");gR=YQ.publishToStream,MD=WQ.setSubscription;o(Jbe,"setPublishToStream");Xbe=2;o(Zbe,"assignReplicationSource");eAe=["hdb_job","hdb_raw_analytics","hdb_info"];o(OD,"setNATSReplicator");o(JQ,"publishSchema");ER=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=NE.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||(_R.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(gR(`${LD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,DD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw _R.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},PD=class extends ER{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,zQ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};QQ=new PD});async function rJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await UD.get(e,{returnNonexistent:!0});i=new FD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await UD.get(e);a&&a.delete()}i=new yR(e,t)}return n&&(n.id=e,n.user={username:t?.username},CE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function xD(){return TR++,TR>65500&&(TR=1),TR}function BD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Os.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 si(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return St(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var ZQ,Cc,eJ,tJ,XQ,UD,CE,TR,yR,FD,nJ=oe(()=>{Ne();Ua();ZQ=w(Cn()),Cc=w(z());Na();eJ=w(rt()),tJ=w(vP());xr();eg();XQ=100,UD=Je({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),CE=Je({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,eJ.getWorkerIndex)()===0&&(async()=>{await tJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of CE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Me.getUser(r.user.username));try{await BD(r,t,r)}catch{(0,Cc.warn)("Failed to publish will",t)}CE.delete(e.id)}})();o(rJ,"getSession");TR=1;o(xD,"getNextMessageId");yR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Cc.trace)("Resuming subscription from",s,"from",a);let p=Os.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let R=S.split("/"),L;for(let j=0;j<R.length;j++)if(R[j].indexOf("+")>-1)if(R[j]==="+")L=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&L)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),L&&(n=o(j=>{let k=j.id;if(!Array.isArray(k))if(k?.indexOf?.("/")>-1)k=k.split("/");else return!1;if(O&&k.length!==R.length)return!1;for(let F=0;F<R.length;F++)if(R[F]!=="+"&&R[F]!==k[F])return!1;return!0},"filter"));let x=R.indexOf("+");m.url="/"+(x>-1?R.slice(0,x):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,b=await St(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let L=(async()=>{for await(let O of R)try{let x;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,x=this.needsAcknowledge(O)):(O.acknowledge?.(),x=xD());let j=O.id;if(Array.isArray(j)&&(j=ku(j)),j==null&&(j=""),await this.listener(E+"/"+j,O.value,x,t)===!1)break;this.awaitingAcks?.size>XQ?await new Promise(F=>setTimeout(F,this.awaitingAcks.size-XQ)):await new Promise(setImmediate)}catch(x){(0,Cc.warn)(x)}})();return R});if(b)return b.topic=s,b.qos=t.qos,this.subscriptions.push(b),b}resume(){}needsAcknowledge(t){let r=xD();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 BD(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();St(r,async()=>{try{if(!t){let n=await CE.get(this.sessionId);n?.doesExist()&&await BD(n,n.data,r)}}finally{await CE.delete(this.sessionId)}}).catch(n=>{(0,Cc.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(BD,"publish");FD=class extends yR{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=xD(),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,Cc.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,ZQ.getNextMonotonicTime)()),(0,Cc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),UD.put(this.sessionRecord)}}});var kD={};be(kD,{bypassAuth:()=>tAe,start:()=>nAe});function tAe(){uJ=!0}function nAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new lJ.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),Qt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=iJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Qt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Qt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Fd(p,l);if(!E.valid)throw Qt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:d?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:h,status:ei.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Qt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Qt.error?.(p)}else if(l.required)return Qt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&rAe(u.remoteAddress)&&(d=await(0,oJ.getSuperUser)(),Qt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=iJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Qt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function iJ(e,t,r,n,s){sJ||(sJ=!0,Bm(f=>{RR>0&&f.push({metric:"mqtt-connections",connections:RR,byThread:!0})}));let i;RR++;let a,c={protocolVersion:4},l=(0,AR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){RR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Qt.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"),Qt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Qt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ge(f.length,"bytes-received",E,b(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Me.getUser(f.username,f.password.toString(),r),(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:n?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(Q){return(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:f.username,status:ei.FAILURE,type:ba.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=wo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?Q(f.will.payload):void 0,delete f.will.payload}a=rJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(Q){return Qt.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,Y,de,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",Q);let ee=Q.indexOf("/",1),Re=ee>0?Q.slice(0,ee):Q;g({cmd:"publish",topic:Q,payload:await S(Y),messageId:de||Math.floor(Math.random()*1e8),qos:le.qos},Re);let Ie=e._socket??e;return Ie.writableNeedDrain?new Promise($e=>Ie.once("drain",$e)):!Ie.closed}catch(ee){return Qt.error?.(ee),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let L=[];for(let Q of f.subscriptions){let Y;try{let de=await a.addSubscription(Q,Q.qos>=1);Y=de?de.qos||0:c.protocolVersion<5?128:143}catch(de){s.events.emit("error",de,e,Q,a),de.statusCode?de.statusCode===500?Qt.warn?.(de):Qt.info?.(de):Qt.error?.(de),Y=c.protocolVersion<5?128:de.statusCode===403?135:de.statusCode===404?143:128}L.push(Y)}await a.committed,g({cmd:"suback",granted:L,messageId:f.messageId});break;case"unsubscribe":{let Q=[];for(let Y of f.unsubscriptions)Q.push(a.removeSubscription(Y)?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",x=e.deserialize||(e.deserialize=wo(r?.headers.get?.("content-type"))),k=(f.payload?.length||0)>0?x(f.payload):void 0,F;try{F=await a.publish(f,k)}catch(Q){s.events.emit("error",Q,e,f,a),Qt.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:F===!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"),Qt.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),Qt.error?.(R),g({cmd:"disconnect"})}function g(R,L){let O=(0,AR.generate)(R,c);t(O),Ge(O.length,"bytes-sent",L,b(R),"mqtt")}o(g,"sendPacket");function b(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(b,"packetMethodName");function S(R){return Io(R,r)}o(S,"serialize")}),l.on("error",f=>{Qt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var AR,oJ,Uf,aJ,cJ,lJ,bR,Qt,uJ,rAe,sJ,RR,dJ=oe(()=>{AR=require("mqtt-packet");nJ();oJ=w(Fn());No();Jn();xr();Uf=w(fe());H();aJ=w(Qn()),cJ=w(z()),lJ=require("events");ZS();bR=(0,aJ.loggerWithTag)("auth-event"),Qt=(0,cJ.forComponent)("mqtt"),uJ=(0,Uf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(tAe,"bypassAuth");rAe=o(e=>uJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(nAe,"start");RR=0;o(iJ,"onSocket")});function IR(e,t){if(t?.includes(".."))throw new HD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var HD,GD=oe(()=>{HD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(IR,"resolveBaseURLPath")});function fJ(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 mJ=oe(()=>{o(fJ,"deriveCommonPatternBase")});function wR(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 qD=oe(()=>{o(wR,"deriveGlobOptions")});var pJ,$D,OE,hJ=oe(()=>{GD();mJ();qD();pJ=require("micromatch"),$D=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"}},OE=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=IR(this.name,this.config.urlPath),this.globOptions=wR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new $D(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,pJ.scan)(s).base),this.commonPatternBase=fJ(this.patternBases)}}});function EJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function uu(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(EJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(EJ(n,t)){t=t.slice(n.length+1);break}}}return(0,_J.join)(e.baseURLPath,t)}var _J,VD=oe(()=>{_J=require("node:path");o(EJ,"pathStartsWithBase");o(uu,"deriveURLPath")});function gJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var CR,SJ,TJ,KD,yJ,RJ,NR,bJ=oe(()=>{CR=require("node:events");hJ();SJ=w(z()),TJ=w(require("chokidar")),KD=require("node:path"),yJ=require("node:fs/promises");VD();RJ=require("micromatch"),NR=class extends CR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new OE(t,r,gJ(n)),this.#r=s||SJ.default.loggerWithTag(t),this.ready=(0,CR.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,RJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,KD.join)(this.directory,r);switch(t){case"add":case"change":{let i=uu(this.#e,r,"file");(0,yJ.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=uu(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=uu(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,KD.join)(this.#e.directory,r));return this.#t=TJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new OE(this.name,this.directory,gJ(t)),this.#a()}};o(gJ,"castConfig")});var OR,YD=oe(()=>{OR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var LR,AJ,IJ,wJ,NJ,CJ,WD,zD,jD,QD,JD,PR,OJ=oe(()=>{LR=require("events"),AJ=w(require("yaml")),IJ=w(require("chokidar")),wJ=require("node:fs/promises"),NJ=require("util"),CJ=w(z());YD();WD=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"}},zD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},jD=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"}},QD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},JD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},PR=class extends LR.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||CJ.default.loggerWithTag(t),this.ready=(0,LR.once)(this,"ready"),this.#t=IJ.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,wJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=AJ.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 WD(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=OR,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,NJ.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 zD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new jD(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 QD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new JD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var vR,PJ,DR,MR,LJ=oe(()=>{vR=require("node:events");bJ();OJ();PJ=w(z());pL();DR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},MR=class extends vR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,PJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,vR.once)(this,"ready"),this.options=new PR(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 NR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new DR);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 DR);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}`),Vj()}}});function du(e){return typeof e=="string"&&e.trim()!==""}function XD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>du(t))}function UJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function sAe(e){e.config.root&&PE.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 iM(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(UJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,LE.join)(e.directory,i);UR.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 xJ(e){let t=!1;if(t=await sAe(e),t)return t;let r=await(0,DJ.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,LE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=uu(e,n.path,"directory");UR.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=uu(e,n.path,"file"),a=await(0,MJ.readFile)(s);UR.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 PE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var UR,DJ,PE,LE,MJ,vJ,xR,Ci,ZD,eM,tM,rM,nM,sM,iM,oM,aM,BJ=oe(()=>{UR=require("node:worker_threads"),DJ=w(require("fast-glob")),PE=w(z());GD();qD();LE=require("node:path"),MJ=require("node:fs/promises");VD();vJ=require("micromatch"),xR=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,!du(this.config.files)&&!XD(this.config.files)&&!UJ(this.config.files))throw new ZD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!XD(this.config.files.source)&&!du(this.config.files.source))throw new eM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new tM(this);if(this.config.files.ignore!==void 0&&!XD(this.config.files.ignore)&&!du(this.config.files.ignore))throw new rM(this)}if(this.config.root!==void 0&&!du(this.config.root))throw new sM(this);if(this.config.path!==void 0&&!du(this.config.path))throw new oM(this);if(this.config.path&&(PE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!du(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new aM(this);this.globOptions=wR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new nM(this,r);return r.startsWith("/")&&(PE.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,vJ.scan)(r).base),this.baseURLPath=IR(this.name,this.config.urlPath)}},Ci=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,LE.basename)(r.directory)}) ${t}`)}},ZD=class extends Ci{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)}},eM=class extends Ci{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},tM=class extends Ci{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},rM=class extends Ci{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},nM=class extends Ci{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},sM=class extends Ci{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)}},iM=class extends Ci{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)}},oM=class extends Ci{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},aM=class extends Ci{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(du,"isNonEmptyString");o(XD,"isArrayOfNonEmptyStrings");o(UJ,"isObject");o(sAe,"handleRoots");o(xJ,"processResourceExtensionComponent")});var fy={};be(fy,{getComponentName:()=>ly,loadComponent:()=>HR,loadComponentDirectories:()=>GJ,setErrorReporter:()=>oAe});function GJ(e,t){t&&(lM=t),e&&(mM=e);let r=[];if((0,Ft.existsSync)(cM)){let s=(0,Ft.readdirSync)(cM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(cM,a);r.push(HR(c,lM,fb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(HR(n,lM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{HJ=!0})}function oAe(e){FR=e}function aAe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{fa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(fa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,on.join)(e,"node_modules");(0,Ft.existsSync)(s)||(0,Ft.mkdirSync)(s);let i=(0,on.join)(s,"harperdb");if((0,Ft.existsSync)(i)){if((0,Ft.realpathSync)(i)===(0,Ft.realpathSync)(fM.PACKAGE_ROOT))return t();(0,Ft.rmSync)(i,{recursive:!0,force:!0})}(0,Ft.symlinkSync)(fM.PACKAGE_ROOT,i,"dir"),t()}finally{fa.primaryStore.unlock(e,0)}})}function qJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return fa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(qJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{fa.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function HR(e,t,r,n,s,i){let a=(0,Ft.realpathSync)(e);if(BR.has(a))return BR.get(a);BR.set(a,!0),s&&(mM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");if((0,Ft.existsSync)(l)?c=n?(0,GR.getConfigObj)():(0,dM.parseDocument)((0,Ft.readFileSync)(l,"utf8")).toJSON():!n&&(0,Ft.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,dM.parseDocument)((0,Ft.readFileSync)(l,"utf8")).toJSON():c=OR,!n)try{await aAe(e)}catch(m){_a.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&_a.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=kR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;kR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O;if(n)O=(0,on.join)(e,"components",m);else{let x=e;for(;!(0,Ft.existsSync)(O=(0,on.join)(x,"node_modules",m));)if(x=(0,on.dirname)(x),x.length<(0,kJ.getHdbBasePath)().length){O=null;break}}if(O)E=await HR(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=iAe[m];if(!E)continue;Go.loading(p);let b=o(O=>(O.origin=r,Je(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,L=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Go.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&_a.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new MR(m,e,l,t,Me);await qJ(O,E),Go.loaded(p,`Component '${p}' loaded successfully`);continue}if(uM.isMainThread&&(E=await E.startOnMainThread?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E,n&&S))for(let O of[L,R])try{if(+O&&!FJ.includes(O)){let x=pM.get(U.HTTP_SESSIONAFFINITY);x&&_a.default.warn("Session affinity is not recommended and may cause memory leaks"),(x||!lS)&&(FJ.push(O),FP(O,x))}}catch(x){console.error("Error listening on socket",O,x,m)}if(t.isWorker&&(E=await E.start?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E),mM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new xR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await xJ(O)}Go.loaded(p,`Component '${p}' loaded successfully`)}catch(b){b.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${b.message}`,FR?.(b),((0,DE.getWorkerIndex)()===0?console:_a.default).error(b),t.set(h.path||"/",new sl(b),null,!0),Go.failed(p,b,`Could not load component '${p}'`)}}if(kR=u,uM.isMainThread&&!HJ&&i&&(0,DE.watchDir)(e,async()=>GJ()),c.extensionModule||c.pluginModule){let m=await oS((0,on.join)(e,c.extensionModule||c.pluginModule));return BR.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?`;FR?.(new Error(m)),((0,DE.getWorkerIndex)()===0?console:_a.default).error(m),Go.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||_a.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,FR?.(c),t.set("",new sl(c))}}var Ft,on,uM,dM,pM,fM,_a,DE,kJ,GR,cM,mM,HJ,lM,iAe,FJ,BR,FR,kR,ly,Kh=oe(()=>{Ft=require("node:fs"),on=require("node:path"),uM=require("node:worker_threads"),dM=require("yaml"),pM=w(fe()),fM=w(bt());H();IG();UG();jG();tq();rq();_q();bQ();AQ();wQ();_a=w(z());DQ();DE=w(rt());hN();xr();Ne();HP();kJ=w(fe());VQ();Ry();vD();cs();dJ();GR=w(pt());Fp();FA();LJ();BJ();DP();aE();Sp();YD();cM=(0,GR.resolvePath)(pM.get(U.COMPONENTSROOT)),mM=new Map;o(GJ,"loadComponentDirectories");iAe={REST:dS,rest:dS,graphql:aN,graphqlSchema:iN,roles:pN,jsResource:EN,fastifyRoutes:bD,login:gN,static:ID,operationsApi:CD,customFunctions:{},http:cy,clustering:SR,replication:Yo,authentication:Jh,mqtt:kD,loadEnv:wD,logging:_a.default,dataLoader:ND},FJ=[],BR=new Map;o(oAe,"setErrorReporter");ly=o(()=>kR,"getComponentName");o(aAe,"symlinkHarperModule");o(qJ,"sequentiallyHandleApplication");o(HR,"loadComponent")});var my=v((JGe,$J)=>{var{isMainThread:hM}=require("worker_threads"),{getTables:cAe}=(Ne(),M(ft)),{loadComponentDirectories:lAe,loadComponent:uAe}=(Kh(),M(fy)),{resetResources:dAe}=(Ua(),M(kA)),fAe=pt(),{dirname:mAe}=require("path"),{getConnection:pAe}=rr(),hAe=fe(),{CONFIG_PARAMS:EAe}=(H(),M(W)),{loadCertificates:_Ae}=us(),{installApplications:gAe}=(wy(),M(Iy)),{loadAndWatchLicensesDir:SAe}=(Hh(),M(ry)),EM=new Map;async function TAe(e=!1){!hM&&hAe.get(EAe.CLUSTERING_ENABLED)&&pAe();try{hM&&await gAe()}catch(n){console.error(n)}let t=dAe();cAe(),t.isWorker=e,hM&&SAe(),await _Ae(),await uAe(mAe(fAe.getConfigFilePath()),t,"hdb",!0,EM),await lAe(EM,t);let r=[];for(let[n]of EM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(TAe,"loadRootComponents");$J.exports.loadRootComponents=TAe});var rt=v((ZGe,Pi)=>{"use strict";KE();var{Worker:yAe,MessageChannel:RAe,parentPort:mo,isMainThread:yM,threadId:bAe,workerData:po}=require("worker_threads"),{PACKAGE_ROOT:AAe}=bt(),{join:WJ,isAbsolute:IAe,extname:wAe}=require("path"),{server:zJ}=(xr(),M(em)),{watch:NAe,readdir:CAe}=require("fs/promises"),{totalmem:VJ}=require("os"),xf=(H(),M(W)),jJ=fe(),Oi=z(),{randomBytes:OAe}=require("crypto"),{_assignPackageExport:PAe}=ti(),KJ=1024*1024,ga=[],Qs=[],LAe=50,RM=1e4,DAe="restart",QJ="request_thread_info",JJ="resource_report",XJ="thread_info",ZJ="added-port",MAe="ack",_M;PAe("threads",Qs);Pi.exports={startWorker:gM,restartWorkers:AM,shutdownWorkers:i3,shutdownWorkersNow:FAe,workers:ga,setMonitorListener:YAe,onMessageFromWorkers:kAe,onMessageByType:a3,broadcast:GAe,broadcastWithAcknowledgement:$Ae,setChildListenerByType:BAe,getWorkerIndex:e3,getWorkerCount:t3,getTicketKeys:n3,setMainIsWorker:UAe,setTerminateTimeout:vAe,restartNumber:po?.restartNumber||1};Qs.onMessageByType=a3;Qs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Qs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Pi.exports.whenThreadsStarted=new Promise(e=>{Pi.exports.threadsHaveStarted=e});var bM;function vAe(e){RM=e}o(vAe,"setTerminateTimeout");function e3(){return po?po.workerIndex:bM?0:void 0}o(e3,"getWorkerIndex");function t3(){return po?po.workerCount:bM?1:void 0}o(t3,"getWorkerCount");function UAe(e){bM=e,Pi.exports.threadsHaveStarted()}o(UAe,"setMainIsWorker");var r3=1,qR;function n3(){return qR||(qR=yM?OAe(48):po.ticketKeys,qR)}o(n3,"getTicketKeys");Object.defineProperty(zJ,"workerIndex",{get(){return e3()}});Object.defineProperty(zJ,"workerCount",{get(){return t3()}});var s3={[QJ](e,t){VAe(t)},[JJ](e,t){KAe(t,e)}};function gM(e,t={}){let r=process.constrainedMemory?.()||VJ();r=Math.min(r,VJ(),2e4*KJ);let n=jJ.get(xf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/KJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Qs){let u=new RAe;u.existingPort=l,i.push(u),a.push(u.port2)}wAe(e)||(e+=".js");let c=new yAe(IAe(e)?e:WJ(AAe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:r3=t.threadCount,name:t.name,restartNumber:Pi.exports.restartNumber,ticketKeys:n3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:ZJ,port:l,threadId:c.threadId},[l]);return VR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>gM(e,t),c.on("error",l=>{Oi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{ga.splice(ga.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<LAe?(t.unexpectedRestarts=c.unexpectedRestarts+1,gM(e,t)):Oi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{s3[l.type]?.(l,c)}),ga.push(c),zAe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(gM,"startWorker");var xAe=[xf.THREAD_TYPES.HTTP];async function AM(e=null,t=Math.max(r3>3,1),r=!0){if(yM){try{process.chdir(process.cwd())}catch(a){Oi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=my();await a()}Pi.exports.restartNumber++,t<1&&(t=t*ga.length);let n=[],s=[];for(let a of ga.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Oi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Pi.exports.restartNumber,type:xf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=xAe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Oi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},RM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===xf.ITC_EVENT_TYPES.CHILD_STARTED&&(Oi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Oi.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}=yf();r&&(e==="http"||!e)&&jJ.get(xf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:DAe,workerType:e})}o(AM,"restartWorkers");function BAe(e,t){s3[e]=t}o(BAe,"setChildListenerByType");function i3(e){return AM(e,1/0,!1)}o(i3,"shutdownWorkers");function FAe(e){return i3(e),Promise.all(ga.map(t=>t.terminate()))}o(FAe,"shutdownWorkersNow");var o3=[];function kAe(e){o3.push(e)}o(kAe,"onMessageFromWorkers");var SM=new Map;function a3(e,t){let r=SM.get(e);r||SM.set(e,r=[]),r.push(t)}o(a3,"onMessageByType");var HAe=10;async function GAe(e,t){let r=0;for(let n of Qs)try{n.postMessage(e),r++>HAe&&(r=0,await new Promise(setImmediate))}catch(s){Oi.error("Unable to send message to worker",s)}t&&l3(e,null)}o(GAe,"broadcast");var $R=new Map,qAe=1;function $Ae(e){return new Promise(t=>{let r=0;for(let n of Qs)try{let s=qAe++,i=o(()=>{$R.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,$R.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of $R)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Oi.error("Unable to send message to worker",s)}r===0&&t()})}o($Ae,"broadcastWithAcknowledgement");function VAe(e){e.postMessage({type:XJ,workers:c3()})}o(VAe,"sendThreadInfo");function c3(){let e=Date.now();return ga.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(c3,"getChildWorkerInfo");function KAe(e,t){e.resources=t,e.resources.updated=Date.now()}o(KAe,"recordResourceReport");var TM;function YAe(e){TM=e}o(YAe,"setMonitorListener");var WAe=1e3,YJ=!1;function zAe(){YJ||(YJ=!0,setInterval(()=>{for(let e of ga){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}TM&&TM()},WAe).unref())}o(zAe,"startMonitoring");var jAe=1e3;if(mo&&po?.addPorts){VR(mo);for(let e=0,t=po.addPorts.length;e<t;e++){let r=po.addPorts[e];r.threadId=po.addThreadIds[e],VR(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:JJ,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},jAe).unref(),_M=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:QJ});function r(n){n.type===XJ&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else _M=c3;Pi.exports.getThreadInfo=_M;function VR(e,t){Qs.push(e),e.on("message",r=>{if(r.type===ZJ)r.port.threadId=r.threadId,VR(r.port);else if(r.type===MAe){let n=$R.get(r.id);n&&n()}else l3(r,e)}).on("close",()=>{Qs.splice(Qs.indexOf(e),1)}).on("exit",()=>{Qs.splice(Qs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(VR,"addPort");function l3(e,t){for(let n of o3)n(e,t);let r=SM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Oi.error(s)}}o(l3,"notifyMessageListeners");if(yM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await CAe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(WJ(s,a.name));try{for await(let{filename:a}of NAe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await AM(),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===xf.ITC_EVENT_TYPES.SHUTDOWN&&(Pi.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Oi.warn("Thread did not voluntarily terminate",bAe),process.exit(0)},RM).unref())})});var h3=v((nqe,p3)=>{"use strict";var{promises:Bf,createReadStream:QAe,createWriteStream:JAe}=require("fs"),{createGzip:XAe}=require("zlib"),{promisify:ZAe}=require("util"),{pipeline:eIe}=require("stream"),tIe=ZAe(eIe),wM=require("path"),m3=fe();m3.initSync();var KR=z(),{CONFIG_PARAMS:rIe,ITC_EVENT_TYPES:tqe}=(H(),M(W)),{onMessageFromWorkers:rqe}=rt(),{convertToMS:u3}=ce(),{onStorageReclamation:nIe}=(L_(),M(KU)),sIe=6e4,iIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",oIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",IM,d3;p3.exports=aIe;function aIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(nIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(iIe);if(!i)throw new Error(oIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=u3(r));let d;return IM=Date.now(),KR.trace("Log rotate enabled, maxSize:",t,"interval:",r),d3=setInterval(async()=>{if(l){let f;f=await Bf.stat(e.path),f.size>=l&&(d=await f3(e.path,i))}if(u&&Date.now()-IM>=u&&(d=await f3(e.path,i),IM=Date.now()),n||c){let f=u3(n??"1M")/(1+c);c=0;let m=await Bf.readdir(i);for(let p of m)try{let h=await Bf.stat(wM.join(i,p));Date.now()-h.mtimeMs>f&&await Bf.unlink(wM.join(i,p))}catch(h){KR.error("Error trying to remove log",p,h)}}},a??sIe).unref(),{end(){clearInterval(d3)},getLastRotatedLogPath(){return d}}}o(aIe,"logRotator");async function f3(e,t){let r=m3.get(rIe.LOGGING_ROTATION_COMPRESS),n=wM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Bf.rename(e,n),r&&(e=n,n+=".gz",await tIe(QAe(e),XAe(),JAe(n)),await Bf.unlink(e)),KR.closeLogFile(),KR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(f3,"moveLogFile")});var T3={};be(T3,{RootConfigWatcher:()=>NM});var E3,_3,g3,YR,S3,NM,y3=oe(()=>{E3=w(require("chokidar")),_3=require("node:fs/promises"),g3=w(pt()),YR=require("node:stream"),S3=require("yaml"),NM=class extends YR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,g3.getConfigFilePath)(),this.ready=(0,YR.once)(this,"ready"),this.#t=E3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,_3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,S3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var z=v((cqe,eb)=>{"use strict";var Sa=require("fs-extra"),{workerData:cIe,threadId:lIe,isMainThread:N3}=require("worker_threads"),UE=require("path"),C3=require("yaml"),O3=require("properties-reader"),$r=(H(),M(W)),R3=Hc(),uIe=require("os"),{PACKAGE_ROOT:UM}=bt(),{_assignPackageExport:dIe}=ti(),{Console:fIe}=require("console"),OM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),b3=new Map,{join:Ta}=UE,A3=1e4,ar={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},mIe={STDOUT:"stdOut",STDERR:"stdErr"},aqe=Ta(UM,"logs"),pIe=Ta(UM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),hIe=1e4,xE,BE,WR,ho,PM,CM,jR,Ot,Ts,QR,JR,Ff,vE,ME;function zR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=UE.dirname(n)):t.root?n=Ta(t.root,PM):(n=Ot.path,t.root||(t.root=UE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=ar[t.level]??Ot?.level??ar.info,P3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ot.path===e.path&&r)}o(zR,"updateLogger");function P3(e){let t=e.conditional??(e.conditional={});t.notify=ar.notify>=e.level?e.notify.bind(e):void 0,t.fatal=ar.fatal>=e.level?e.fatal.bind(e):void 0,t.error=ar.error>=e.level?e.error.bind(e):void 0,t.warn=ar.warn>=e.level?e.warn.bind(e):void 0,t.info=ar.info>=e.level?e.info.bind(e):void 0,t.debug=ar.debug>=e.level?e.debug.bind(e):void 0,t.trace=ar.trace>=e.level?e.trace.bind(e):void 0}o(P3,"updateConditional");async function LM(){ME||(ME=new UIe,await ME.ready,ME.on("change",LM));let e=ME.config,t=e.logging??{};zR(Ot,t),jR=Ot.path,xE=t.console??!1,t.external&&zR(Ts,t.external);for(let r in e){let n=e[r];n.logging?zR(Ot.forComponent(r),n.logging,r):Ot.hasComponent(r)&&zR(Ot.forComponent(r),t,r)}}o(LM,"updateLogSettings");var DM=class extends fIe{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){An="trace",this.level<=ar.trace&&super.info(...t),An="info"}debug(...t){An="debug",this.level<=ar.debug&&super.info(...t),An="info"}info(...t){An="info",this.level<=ar.info&&super.info(...t),An="info"}warn(...t){An="warn",this.level<=ar.warn&&super.warn(...t),An="info"}error(...t){An="error",this.level<=ar.error&&super.error(...t),An="info"}fatal(...t){Ff=!0;try{An="fatal",this.level<=ar.fatal&&super.error(...t),An="info"}finally{Ff=!1}}notify(...t){Ff=!0;try{An="notify",this.level<=ar.notify&&super.info(...t),An="info"}finally{Ff=!1}}withTag(t){return D3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};vE===void 0&&L3();eb.exports={notify:AIe,fatal:IIe,error:vM,warn:wIe,info:yIe,debug:bIe,trace:RIe,logLevel:ho,loggerWithTag:D3,suppressLogging:SIe,initLogSettings:L3,logCustomLevel:NIe,closeLogFile:M3,createLogger:ZR,logsAtLevel:_Ie,getLogFilePath:o(()=>jR,"getLogFilePath"),forComponent:o(e=>Ot.forComponent(e),"forComponent"),setMainLogger:MIe,setLogLevel:OIe,OUTPUTS:mIe,AuthAuditLog:vIe,start:LM,startOnMainThread:LM,errorToString:DIe,disableStdio:EIe};function EIe(){OM=o(function(){},"nativeStdWrite")}o(EIe,"disableStdio");eb.exports.externalLogger={notify(...e){Ts.notify(...e)},fatal(...e){Ts.fatal(...e)},error(...e){Ts.error(...e)},warn(...e){Ts.warn(...e)},info(...e){Ts.info(...e)},debug(...e){Ts.debug(...e)},trace(...e){Ts.trace(...e)},withTag(e){return Ts.withTag(e)}};dIe("logger",eb.exports.externalLogger);function _Ie(e){return ar[ho]<=ar[e]}o(_Ie,"logsAtLevel");function L3(e=!1){try{if(vE===void 0||e){M3();let t=CIe(),r=R3(["ROOTPATH"]);try{vE=O3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Sa.pathExistsSync(Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:ho,configLogPath:CM,toFile:BE,logConsole:xE,rotation:n,toStream:WR}=PIe(r.ROOTPATH?Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE):vE.get("settings_path")),PM=$r.LOG_NAMES.HDB,jR=Ta(CM,PM),Ot=ZR({path:jR,level:ho,stdStreams:WR,rotation:n}),Ts=Ot.forComponent("external"),Ts.tag=null,N3)try{require("segfault-handler").registerHandler(Ta(CM,"crash.log"))}catch{}}}catch(t){if(vE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=R3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){ho=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(xE=i)}let{defaultLevel:n}=LIe();BE=!1,WR=!0,ho=ho===void 0?n:ho,Ot=ZR({level:ho}),Ts=Ot.forComponent("external"),Ts.tag=null;return}throw vM("Error initializing log settings"),vM(t),t}process.env.DEV_MODE&&(WR=!0),gIe()}o(L3,"initLogSettings");var Oc=!0;function gIe(){BE&&(process.stdout.write=function(e){return typeof e=="string"&&Oc&&xE&&(e=e.toString(),e[e.length-1]===`
135
- `&&(e=e.slice(0,-1)),JR(e)),OM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Oc&&xE&&(e[e.length-1]===`
136
- `&&(e=e.slice(0,-1)),JR(e)),OM.apply(process.stderr,arguments)})}o(gIe,"stdioLogging");function D3(e,t,r=Ot){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<=ar[i]?function(...a){XR=e;try{return s.call(r,...a)}finally{XR=void 0}}:null}o(n,"logWithTag")}o(D3,"loggerWithTag");function SIe(e){try{Oc=!1,e()}finally{Oc=!0}}o(SIe,"suppressLogging");var TIe=cIe?.name?.replace(/ /g,"-")||"main",An="info",MM,XR;function ZR({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=ar[t],l;function u(p){if(BE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Oc=!1;try{process.stdout.write(p)}finally{Oc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(BE){if(f(p),r){Oc=!1;try{process.stderr.write(p)}finally{Oc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&w3(e,n,s);function m(p){return{write(h){let E=[An];E.unshift(MM||TIe+"/"+lIe),XR&&E.push(XR),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(JR=f),l=new DM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),P3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=w3(e,l.rotation,s),s&&(JR=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=ZR({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(ZR,"createLogger");var I3=100;function w3(e,t,r){let n=b3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,b3.set(e,n)),N3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=h3();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
132
+ `,""):null;try{a[l].npm_output=JSON.parse(d)}catch{a[l].npm_output=d}try{a[l].npm_error=JSON.parse(f)}catch{a[l].npm_error=f}}catch(d){d.stderr?a[l].npm_error=pTe(d.stderr):a[l].npm_error=d.message;continue}}return Dj.info(`finished installModules with response ${a}`),a.warning=t,a}o(mTe,"installModules");function pTe(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
133
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(pTe,"parseNPMStdErr");function hTe(e){let t=Dy.object({projects:Dy.array().min(1).items(Dy.string()).required(),dry_run:Dy.boolean().default(!1)});return lTe.validateBySchema(e,t)}o(hTe,"modulesValidator")});var uL={};be(uL,{describeMetric:()=>kj,describeMetricOp:()=>lL,get:()=>Bj,getOp:()=>aL,listMetrics:()=>Fj,listMetricsOp:()=>cL});async function _Te(e){return(await B_().get(e)).hostname}function vj(e,t){return e.length===0||e.includes(t)}function aL(e){return nE.trace?.("get_analytics request:",e),Bj(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function xj(e){return"conditions"in e?{...e,conditions:e.conditions.map(xj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function Bj(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(xj));let a=t??[];vj(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),nE.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],vj(a,"node")&&(nE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await _Te(d)),nE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function cL(e){return Fj(e.metric_types)}async function Fj(e=["builtin"]){let t=[],r=Object.values(Lo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function lL(e){return kj(e.metric)}async function kj(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 nE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var Uj,ETe,nE,dL=oe(()=>{Uj=w(z());hA();EA();({forComponent:ETe}=Uj.default),nE=ETe("analytics").conditional;o(_Te,"lookupHostname");o(vj,"isSelected");o(aL,"getOp");o(xj,"conformCondition");o(Bj,"get");o(cL,"listMetricsOp");o(Fj,"listMetrics");o(lL,"describeMetricOp");o(kj,"describeMetric")});var My,vy,sE,Uy=oe(()=>{My={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},vy=Object.keys(My),sE="primary"});function Gj(e){return Hj.validateBySchema(e,yTe)}var iE,Hj,gTe,STe,TTe,yTe,qj=oe(()=>{iE=w(require("joi")),Hj=w(dt());Uy();gTe=vy,STe=Object.entries(My).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),TTe=o(()=>{let e=iE.default.string().min(1).max(512);return Object.entries(My).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:iE.default.string().valid(...r.allowedValues).messages({"any.only":STe[t]})}))}),e.required()},"createStatusValidationSchema"),yTe=iE.default.object({id:iE.default.string().valid(...gTe).required(),status:TTe()});o(Gj,"validateStatus")});function $j(){fL||(fL=fa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),mL=new Uint8Array(fL))}function Vj(){$j(),mL[0]=1}function Kj(){return $j(),mL[0]===1}var fL,mL,pL=oe(()=>{oE();o($j,"ensureInitialized");o(Vj,"requestRestart");o(Kj,"restartNeeded")});var SL={};be(SL,{DEFAULT_STATUS_ID:()=>sE,STATUS_IDS:()=>vy,Status:()=>fa,clear:()=>EL,get:()=>_L,set:()=>gL});function cE(){return hL||(hL=Je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),hL}function EL({id:e}){return aE.debug?.("clearStatus",e),cE().delete(e)}async function bTe(){aE.debug?.("getAllStatus");let e=cE().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=Kj();return{systemStatus:e,componentStatus:r,restartRequired:n}}function _L({id:e}){return e?(aE.debug?.("getStatus",e),cE().get(e)):(aE.debug?.("getStatus","all"),bTe())}function gL({status:e,id:t=sE}){let r=Gj({status:e,id:t});if(r)throw(0,xy.handleHDBError)(r,r.message,RTe.BAD_REQUEST);return aE.debug?.("setStatus",t,e),cE().put(t,{status:e})}var xy,Yj,RTe,hL,fa,aE,oE=oe(()=>{Ne();xy=w(Ee()),Yj=w(Qn());qj();Uy();Sp();pL();Uy();({HTTP_STATUS_CODES:RTe}=xy.hdbErrors);o(cE,"getStatusTable");fa={get primaryStore(){return cE().primaryStore}},aE=(0,Yj.loggerWithTag)("status");o(EL,"clearStatus");o(bTe,"getAllStatus");o(_L,"getStatus");o(gL,"setStatus")});var bL={};be(bL,{getFingerprint:()=>yL,getRegistrationInfo:()=>TL,setLicense:()=>RL});function TL(){return{version:Wj.packageJson.version,deprecated:!0}}function yL(){return{message:"this-is-deprecated",deprecated:!0}}function RL(){return{deprecated:!0}}var Wj,AL=oe(()=>{Wj=w(Rt());o(TL,"getRegistrationInfo");o(yL,"getFingerprint");o(RL,"setLicense")});var jj=v((hke,zj)=>{"use strict";var IL=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}};zj.exports=IL});var Jj=v((_ke,Qj)=>{"use strict";var wL=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Qj.exports=wL});var CL=v((Ske,Zj)=>{"use strict";var Xj=jj(),ATe=Jj(),{HDB_ERROR_MSGS:ITe}=Kr(),NL=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=ITe.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 Xj(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new ATe(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 Xj(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}};Zj.exports=NL});var Hy=v((yke,E4)=>{"use strict";var OL=xn(),By=mn(),Ks=aT(),dE=Cl(),PL=gl(),wTe=MC(),NTe=c1(),fE=Fn(),Fy=xp(),Or=z(),CTe=FC(),OTe=ST(),PTe=dO(),LTe=yT(),DTe=pO(),MTe=hO(),vTe=gO(),UTe=TO(),LL=wT(),ma=ce(),xTe=GK(),r4=yf(),Rn=(H(),M(W)),n4=Yz(),BTe=hh(),s4=(yd(),M(qp)),i4=(yy(),M(Jh)),o4=pt(),gr=nL(),FTe=require("alasql"),a4=Ly(),kTe=oL(),bf=us(),c4=(Wd(),M(Yd)),DL=(dL(),M(uL)),ML=(oE(),M(SL)),l4=(Hh(),M(ty)),vL=(AL(),M(bL)),u4=CL(),{handleHDBError:$n,hdbErrors:d4}=Ee(),{HDB_ERROR_MSGS:nn,HTTP_STATUS_CODES:lE}=d4,Z=new Map,f4="delete",bc="insert",Ys="read",nu="update",uE="describe",e4=dE.describeSchema.name,t4=dE.describeTable.name,m4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},HTe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},GTe="catchup",qTe="handleGetJob",$Te="handleGetJobsByStartDate",ky={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},VTe=[Ks.createTable.name,Ks.createAttribute.name,Ks.dropTable.name,Ks.dropAttribute.name],p4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(OL.insert.name,new se(!1,[bc]));Z.set(OL.update.name,new se(!1,[nu]));Z.set(OL.upsert.name,new se(!1,[bc,nu]));Z.set(By.searchByConditions.name,new se(!1,[Ys]));Z.set(By.searchByHash.name,new se(!1,[Ys]));Z.set(By.searchByValue.name,new se(!1,[Ys]));Z.set(By.search.name,new se(!1,[Ys]));Z.set(Ks.createSchema.name,new se(!0,[]));Z.set(Ks.createTable.name,new se(!0,[]));Z.set(Ks.createAttribute.name,new se(!1,[bc]));Z.set(Ks.dropSchema.name,new se(!0,[]));Z.set(Ks.dropTable.name,new se(!0,[]));Z.set(Ks.dropAttribute.name,new se(!0,[]));Z.set(dE.describeSchema.name,new se(!1,[Ys]));Z.set(dE.describeTable.name,new se(!1,[Ys]));Z.set(PL.deleteRecord.name,new se(!1,[f4]));Z.set(fE.addUser.name,new se(!0,[]));Z.set(fE.alterUser.name,new se(!0,[]));Z.set(fE.dropUser.name,new se(!0,[]));Z.set(fE.listUsersExternal.name,new se(!0,[]));Z.set(Fy.listRoles.name,new se(!0,[]));Z.set(Fy.addRole.name,new se(!0,[]));Z.set(Fy.alterRole.name,new se(!0,[]));Z.set(Fy.dropRole.name,new se(!0,[]));Z.set(CTe.name,new se(!0,[]));Z.set(OTe.name,new se(!0,[]));Z.set(PTe.name,new se(!0,[]));Z.set(LTe.name,new se(!0,[]));Z.set(DTe.name,new se(!0,[]));Z.set(MTe.name,new se(!0,[]));Z.set(LL.setRoutes.name,new se(!0,[]));Z.set(LL.getRoutes.name,new se(!0,[]));Z.set(LL.deleteRoutes.name,new se(!0,[]));Z.set(o4.setConfiguration.name,new se(!0,[]));Z.set(vTe.clusterStatus.name,new se(!0,[]));Z.set(UTe.name,new se(!0,[]));Z.set(PL.deleteFilesBefore.name,new se(!0,[]));Z.set(PL.deleteAuditLogsBefore.name,new se(!0,[]));Z.set(r4.restart.name,new se(!0,[]));Z.set(r4.restartService.name,new se(!0,[]));Z.set(wTe.name,new se(!0,[]));Z.set(NTe.name,new se(!0,[Ys]));Z.set(BTe.systemInformation.name,new se(!0,[]));Z.set(o4.getConfiguration.name,new se(!0,[]));Z.set(a4.readTransactionLog.name,new se(!0,[]));Z.set(a4.deleteTransactionLogsBefore.name,new se(!0,[]));Z.set(kTe.installModules.name,new se(!0,[]));Z.set(bf.createCsr.name,new se(!0,[]));Z.set(bf.signCertificate.name,new se(!0,[]));Z.set(bf.listCertificates.name,new se(!0,[]));Z.set(bf.addCertificate.name,new se(!0,[]));Z.set(bf.removeCertificate.name,new se(!0,[]));Z.set(bf.getKey.name,new se(!0,[]));Z.set(c4.addNodeBack.name,new se(!0,[]));Z.set(c4.removeNodeBack.name,new se(!0,[]));Z.set(DL.getOp.name,new se(!1,[Ys]));Z.set(DL.listMetricsOp.name,new se(!1,[Ys]));Z.set(DL.describeMetricOp.name,new se(!1,[Ys]));Z.set(ML.clear.name,new se(!0,[]));Z.set(ML.get.name,new se(!0,[]));Z.set(ML.set.name,new se(!0,[]));Z.set(l4.installUsageLicenseOp.name,new se(!0,[]));Z.set(l4.getUsageLicensesOp.name,new se(!0,[]));Z.set(vL.getFingerprint.name,new se(!0,[]));Z.set(vL.setLicense.name,new se(!0,[]));Z.set(s4.createTokens.name,new se(!1,[]));Z.set(s4.refreshOperationToken.name,new se(!1,[]));Z.set(i4.login.name,new se(!1,[]));Z.set(i4.logout.name,new se(!1,[]));Z.set(gr.customFunctionsStatus.name,new se(!0,[]));Z.set(gr.getCustomFunctions.name,new se(!0,[]));Z.set(gr.getComponents.name,new se(!0,[]));Z.set(gr.getComponentFile.name,new se(!0,[]));Z.set(gr.setComponentFile.name,new se(!0,[]));Z.set(gr.dropComponent.name,new se(!0,[]));Z.set(gr.getCustomFunction.name,new se(!0,[]));Z.set(gr.setCustomFunction.name,new se(!0,[]));Z.set(gr.dropCustomFunction.name,new se(!0,[]));Z.set(gr.addComponent.name,new se(!0,[]));Z.set(gr.dropCustomFunctionProject.name,new se(!0,[]));Z.set(gr.packageComponent.name,new se(!0,[]));Z.set(gr.deployComponent.name,new se(!0,[]));Z.set(gr.addSSHKey.name,new se(!0,[]));Z.set(gr.updateSSHKey.name,new se(!0,[]));Z.set(gr.deleteSSHKey.name,new se(!0,[]));Z.set(gr.listSSHKeys.name,new se(!0,[]));Z.set(gr.setSSHKnownHosts.name,new se(!0,[]));Z.set(gr.getSSHKnownHosts.name,new se(!0,[]));Z.set(vL.getRegistrationInfo.name,new se(!1,[]));Z.set(fE.userInfo.name,new se(!1,[]));Z.set(dE.describeAll.name,new se(!1,[]));Z.set(qTe,new se(!1,[]));Z.set($Te,new se(!0,[]));Z.set(GTe,new se(!0,[]));Z.set(ky.CSV_DATA_LOAD,new se(!1,[bc,nu]));Z.set(ky.CSV_URL_LOAD,new se(!1,[bc,nu]));Z.set(ky.CSV_FILE_LOAD,new se(!1,[bc,nu]));Z.set(ky.IMPORT_FROM_S3,new se(!1,[bc,nu]));Z.set(p4.EXPORT_TO_S3,new se(!0,[]));Z.set(p4.EXPORT_LOCAL,new se(!0,[]));Z.set(Rn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[f4]));Z.set(Rn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ys]));Z.set(Rn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[bc]));Z.set(Rn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[nu]));E4.exports={verifyPerms:YTe,verifyPermsAst:KTe,verifyBulkLoadAttributePerms:zTe};function KTe(e,t,r){if(ma.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(ma.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(ma.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),$n(new Error);try{let n=new u4,s=new xTe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Or.info("No schemas defined in verifyPermsAst(), will not continue."),$n(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&m4[r])throw $n(new Error,nn.DROP_SYSTEM,lE.FORBIDDEN);if(c&&!l)return null;let u=n4.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof FTe.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=h4(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=xL(t.role.permission,m,f[p]);UL(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw $n(n)}}o(KTe,"verifyPermsAst");function YTe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Or.info("null required parameter in verifyPerms"),$n(new Error,nn.DEFAULT_INVALID_REQUEST,lE.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 u4;if(ma.isEmptyOrZeroLength(e.hdb_user?.role)||ma.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Or.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(nn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(Rn.SYSTEM_SCHEMA_NAME)||s===Rn.SYSTEM_SCHEMA_NAME;if(l&&d&&HTe[e.operation]&&(i===Rn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Rn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&m4[r])throw $n(new Error,nn.DROP_SYSTEM,lE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ks.createSchema.name||r===Ks.dropSchema.name))return null;if(VTe.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=n4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===e4||r===t4)&&!f.super_user){if(s===Rn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(nn.SCHEMA_PERM_ERROR(s));if(r===e4&&(!f[s]||!f[s][uE]))return c.handleInvalidItem(nn.SCHEMA_NOT_FOUND(s));if(r===t4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][uE]))return c.handleInvalidItem(nn.TABLE_NOT_FOUND(s,i))}let m=h4(e.hdb_user,r,a,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Rn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Rn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Rn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(b=>b.attribute),e.get_attributes=E)}let p=WTe(e),h=xL(e.hdb_user?.role?.permission,s,i);return UL(p,h,r,i,s,c,n),c.getPermsResponse()}o(YTe,"verifyPerms");function h4(e,t,r,n,s){if(ma.arrayHasEmptyValues([e,t,r]))throw Or.info("hasPermissions has an invalid parameter"),$n(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Or.info(`operation ${t} not found.`),$n(new Error,nn.OP_NOT_FOUND(t),lE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Or.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(nn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][uE]===!1){n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[uE]===!1)n.addInvalidItem(nn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!ma.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Or.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=nn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Or.error(p),Or.error(m),$n(d4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(h4,"hasPermissions");function UL(e,t,r,n,s,i,a){if(!e||!t)throw Or.info("no attributes specified in checkAttributePerms."),$n(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Or.info(`no permissions found for ${r} in checkAttributePerms().`),$n(new Error);if(ma.isEmptyOrZeroLength(t))return Or.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[uE]===!1){i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Rn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ys)throw $n(new Error,nn.SYSTEM_TIMESTAMP_PERMS_ERR,lE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(UL,"checkAttributePerms");function WTe(e){let t=new Set;try{if(e.action)return t;if(e.operation===Rn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Or.info(r)}return t}o(WTe,"getRecordAttributes");function xL(e,t,r){let n=new Map;if(ma.isEmpty(e))return Or.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Or.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(xL,"getAttributePermissions");function zTe(e,t,r,n,s,i,a){let c=new Set(i),l=xL(e,n,s);UL(c,l,t,s,n,a,r)}o(zTe,"verifyBulkLoadAttributePerms")});var qy=v((bke,y4)=>{"use strict";y4.exports={evaluateSQL:aye,processAST:T4,convertSQLToAST:S4,checkASTPermissions:g4};var jTe=xn(),_4=require("util"),QTe=_4.callbackify(jTe.insert),JTe=mn().search,XTe=Uq().update,ZTe=_4.callbackify(XTe),eye=Bq().convertDelete,Ac=require("alasql"),tye=Hy(),Gy=z(),rye=Pg(),nye=ce(),mE=(H(),M(W)),{hdbErrors:sye,handleHDBError:BL}=Ee(),{HTTP_STATUS_CODES:FL}=sye;rye(Ac);var iye=403,oye="There was a problem performing this insert. Please check the logs and try again.",kL=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function aye(e,t){let r=e.parsed_sql_object;if(!r){r=S4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ac.yy.Insert?n=s.into.databaseid:s instanceof Ac.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ac.yy.Update||s instanceof Ac.yy.Delete?n=s.table.databaseid:Gy.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ac.yy.Select)&&nye.isEmptyOrZeroLength(n))return t("No schema specified",null)}T4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(aye,"evaluateSQL");function g4(e,t){let r;try{r=tye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(g4,"checkASTPermissions");function S4(e){let t=new kL;if(!e)throw BL(new Error,"The 'sql' parameter is missing from the request body",FL.BAD_REQUEST);try{let r=e.trim(),n=Ac.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
134
+ `);throw n[1]?BL(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,FL.BAD_REQUEST):BL(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",FL.BAD_REQUEST)}return t}o(S4,"convertSQLToAST");function T4(e,t,r){try{let n=cye;if(!e.bypass_auth&&!t.permissions_checked){let i=g4(e,t);if(i&&i.length>0)return r(iye,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case mE.VALID_SQL_OPS_ENUM.SELECT:n=JTe,s=t.ast.statements[0];break;case mE.VALID_SQL_OPS_ENUM.INSERT:n=lye;break;case mE.VALID_SQL_OPS_ENUM.UPDATE:n=ZTe;break;case mE.VALID_SQL_OPS_ENUM.DELETE:n=eye;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(T4,"processAST");function cye(e,t){Gy.info(e),t("unknown sql statement")}o(cye,"nullFunction");function lye({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=uye(i,e.values)}catch(a){return r(a)}QTe(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){Gy.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(lye,"convertInsert");function uye(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]]=Ac.compile(`SELECT ${s.toString()} AS [${mE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Gy.error(r),new Error(oye)}}o(uye,"createDataObjects")});var KL=v((Nke,I4)=>{var Yy=require("clone"),Wy=dt(),dye=ce(),Vy=(H(),M(W)),Ike=z(),HL=require("fs"),qL=require("joi"),{string:Ky}=qL.types(),{hdbErrors:fye,handleHDBError:$y}=Ee(),{HDB_ERROR_MSGS:wke,HTTP_STATUS_CODES:GL}=fye,{commonValidators:Af}=Fi(),R4=" is required",mye=["insert","update","upsert"],$L={database:{presence:!1,format:Af.schema_format,length:Af.schema_length},schema:{presence:!1,format:Af.schema_format,length:Af.schema_length},table:{presence:!0,format:Af.schema_format,length:Af.schema_length},action:{inclusion:{within:mye,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},pye={schema:Ky.required(),table:Ky.required(),action:Ky.valid("insert","update","upsert")},{AWS_ACCESS_KEY:hye,AWS_SECRET:Eye,AWS_BUCKET:_ye,AWS_FILE_KEY:gye,REGION:Sye}=Vy.S3_BUCKET_AUTH_KEYS,Tye={s3:{presence:!0},[`s3.${hye}`]:{presence:!0,type:"String"},[`s3.${Eye}`]:{presence:!0,type:"String"},[`s3.${_ye}`]:{presence:!0,type:"String"},[`s3.${gye}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Sye}`]:{presence:!0,type:"String"}},b4=Yy($L);b4.data.presence={message:R4};var A4=Yy($L);A4.file_path.presence={message:R4};var yye=Object.assign(Yy($L),Tye),VL=Yy(pye);VL.csv_url=Ky.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();VL.passthrough_headers=qL.object();function Rye(e){let t=Wy.validateObject(e,b4);return zy(e,t)}o(Rye,"dataObject");function bye(e){let t=Wy.validateBySchema(e,qL.object(VL));return zy(e,t)}o(bye,"urlObject");function Aye(e){let t=Wy.validateObject(e,A4);return zy(e,t)}o(Aye,"fileObject");function Iye(e){let t=Wy.validateObject(e,yye);return zy(e,t)}o(Iye,"s3FileObject");function zy(e,t){if(!t){let r=dye.checkGlobalSchemaTable(e.schema,e.table);if(r)return $y(new Error,r,GL.BAD_REQUEST);if(e.operation===Vy.OPERATIONS_ENUM.CSV_FILE_LOAD)try{HL.accessSync(e.file_path,HL.constants.R_OK|HL.constants.F_OK)}catch(n){return n.code===Vy.NODE_ERROR_CODES.ENOENT?$y(n,`No such file or directory ${n.path}`,GL.BAD_REQUEST):n.code===Vy.NODE_ERROR_CODES.EACCES?$y(n,`Permission denied ${n.path}`,GL.BAD_REQUEST):$y(n)}}return t}o(zy,"postValidateChecks");I4.exports={dataObject:Rye,urlObject:bye,fileObject:Aye,s3FileObject:Iye}});var YL=v((Oke,w4)=>{"use strict";var pE=z(),jy=(H(),M(W));async function wye(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===jy.OPERATIONS_ENUM.INSERT||t.operation===jy.OPERATIONS_ENUM.UPDATE||t.operation===jy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===jy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(pE.info(i.message),i):i.http_resp_msg?(pE.error(`Error calling operation: ${e.name}`),pE.error(i.http_resp_msg),i):(pE.error(`Error calling operation: ${e.name}`),pE.error(i),i)}}o(wye,"callOperationFunctionAsAwait");w4.exports={callOperationFunctionAsAwait:wye}});var WL=v((Lke,C4)=>{"use strict";var{S3:Nye,GetObjectCommand:Cye}=require("@aws-sdk/client-s3");C4.exports={getFileStreamFromS3:Oye,getS3AuthObj:N4};async function Oye(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await N4(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Cye(r))).Body}o(Oye,"getFileStreamFromS3");function N4(e,t,r){return new Nye({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(N4,"getS3AuthObj")});var P4=v((Mke,O4)=>{"use strict";var zL=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}},jL=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};O4.exports={BulkLoadFileObject:zL,BulkLoadDataObject:jL}});var JL=v((Uke,L4)=>{"use strict";var QL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};L4.exports=QL});var nD=v((Gke,z4)=>{"use strict";var Qy=xn(),Xy=KL(),Pye=require("needle"),Ii=(H(),M(W)),Bke=At(),If=ce(),{handleHDBError:jt,hdbErrors:H4}=Ee(),{HTTP_STATUS_CODES:sn,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:iu}=H4,wf=z(),XL=require("papaparse");If.promisifyPapaParse();var wi=require("fs-extra"),Lye=require("path"),{chain:D4}=require("stream-chain"),M4=require("stream-json/streamers/StreamArray"),v4=require("stream-json/utils/Batch"),U4=require("stream-chain/utils/comp"),{finished:x4}=require("stream"),Dye=fe(),G4=YL(),Mye=WL(),{BulkLoadFileObject:eD,BulkLoadDataObject:vye}=P4(),tD=CL(),{verifyBulkLoadAttributePerms:q4}=Hy(),Fke=JL(),kke=rr(),Hke=Vi(),{databases:Uye}=(Ne(),M(ft)),{coerceType:xye}=(X_(),M(lG)),B4="No records parsed from csv file.",su=`${Dye.get("HDB_ROOT")}/tmp`,{schemaRegex:Bye}=Fi(),F4=1024*1024*2,k4=5e3,Fye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};z4.exports={csvDataLoad:kye,csvURLLoad:Hye,csvFileLoad:Gye,importFromS3:qye};async function kye(e,t){let r=Xy.dataObject(e);if(r)throw jt(r,r.message,sn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=K4(e.schema,e.table),i=XL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:ZL.bind(null,s),dynamicTyping:!1}),a=new tD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&q4(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 jt(new Error,c,sn.BAD_REQUEST,void 0,void 0,!0);let l=new vye(e.action,e.schema,e.table,i.data);return n=await G4.callOperationFunctionAsAwait(Y4,l,null),n.message===B4?B4:W4(n.records,n.number_written)}catch(s){throw ou(s)}}o(kye,"csvDataLoad");async function Hye(e){let t=Xy.urlObject(e);if(t)throw jt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${su}/${r}`;try{await $ye(e,r)}catch(s){throw wf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),jt(s,iu(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new eD(this.job_operation_function.name,e.action,e.schema,e.table,n,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await rD(s);return await Jy(n),i}catch(s){throw await Jy(n),ou(s)}}o(Hye,"csvURLLoad");async function Gye(e){let t=Xy.fileObject(e);if(t)throw jt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=new eD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await rD(r)}catch(n){throw ou(n)}}o(Gye,"csvFileLoad");async function qye(e){let t=Xy.s3FileObject(e);if(t)throw jt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Lye.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${su}/${s}`;let i=new eD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Vye(s,e);let a=await rD(i);return await Jy(r),a}catch(n){throw await Jy(r),ou(n)}}o(qye,"importFromS3");async function $ye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Pye("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 jt(n,s,n.statusCode,Ii.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Yye(r,e.csv_url),await Kye(t,r.raw)}o($ye,"downloadCSVFile");async function Vye(e,t){try{let r=`${su}/${e}`;await wi.mkdirp(su),await wi.writeFile(`${su}/${e}`,"",{flag:"a+"});let n=await wi.createWriteStream(r),s=await Mye.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(){wf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw wf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),jt(r,iu(Pr.S3_DOWNLOAD_ERR))}}o(Vye,"downloadFileFromS3");async function Kye(e,t){try{await wi.mkdirp(su),await wi.writeFile(`${su}/${e}`,t)}catch(r){throw wf.error(Pr.WRITE_TEMP_FILE_ERR),jt(r,iu(Pr.DEFAULT_BULK_LOAD_ERR))}}o(Kye,"writeFileToTempFolder");async function Jy(e){if(e)try{await wi.access(e),await wi.unlink(e)}catch{wf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Jy,"deleteTempFile");function Yye(e,t){if(e.statusCode!==H4.HTTP_STATUS_CODES.OK)throw jt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,sn.BAD_REQUEST);if(!Fye[e.headers["content-type"]])throw jt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,sn.BAD_REQUEST);if(!e.raw)throw jt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,sn.BAD_REQUEST)}o(Yye,"validateURLResponse");async function rD(e){try{let t;switch(e.file_type){case Ii.VALID_S3_FILE_TYPES.CSV:t=await Wye(e);break;case Ii.VALID_S3_FILE_TYPES.JSON:t=await zye(e);break;default:throw jt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,sn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return W4(t.records,t.number_written)}catch(t){throw ou(t)}}o(rD,"fileLoad");async function $4(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 Qy.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&q4(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=jt(c);r(l)}}o($4,"validateChunk");async function V4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;If.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!If.isEmpty(c)&&!If.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 G4.callOperationFunctionAsAwait(Y4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=jt(c,iu(Pr.INSERT_CSV_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(V4,"insertChunk");async function Wye(e){let t={records:0,number_written:0},r=K4(e.schema,e.table);try{let n=new tD,s=wi.createReadStream(e.file_path,{highWaterMark:F4});s.setEncoding("utf8"),await XL.parsePromise(s,$4.bind(null,e,n),ZL.bind(null,r));let i=n.getPermsResponse();if(i)throw jt(new Error,i,sn.BAD_REQUEST);return s=wi.createReadStream(e.file_path,{highWaterMark:F4}),s.setEncoding("utf8"),await XL.parsePromise(s,V4.bind(null,e,t),ZL.bind(null,r)),s.destroy(),t}catch(n){throw jt(n,iu(Pr.PAPA_PARSE_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(Wye,"callPapaParse");function K4(e,t){let r=Uye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>xye(i,s));return n}o(K4,"createTransformMap");function ZL(e,t,r){let n=e.get(r);return n?n(t):If.autoCast(t)}o(ZL,"typeFunction");async function zye(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new tD,s=D4([wi.createReadStream(e.file_path,{encoding:"utf-8"}),M4.withParser(),c=>c.value,new v4({batchSize:k4}),U4(async c=>{await $4(e,n,r,c)})]);await new Promise((c,l)=>{x4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw jt(new Error,i,sn.BAD_REQUEST);let a=D4([wi.createReadStream(e.file_path,{encoding:"utf-8"}),M4.withParser(),c=>c.value,new v4({batchSize:k4}),U4(async c=>{await V4(e,t,r,c)})]);return await new Promise((c,l)=>{x4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw jt(n,iu(Pr.INSERT_JSON_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(zye,"insertJson");async function Y4(e){let t={};try{e.data&&e.data.length>0&&jye(e.data[0])?t=await Qye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",wf.info(t.message))}catch(r){throw ou(r)}return t}o(Y4,"callBulkFileLoad");function jye(e){let t=Object.keys(e);for(let r of t)if(!Bye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(jye,"validateColumnNames");async function Qye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Qy.insert;break;case"update":i=Qy.update;break;case"upsert":i=Qy.upsert;break;default:throw jt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),sn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Pr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=If.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ou(a)}}o(Qye,"bulkFileLoad");function W4(e,t){return`successfully loaded ${t} of ${e} records`}o(W4,"buildResponseMsg");function ou(e){return jt(e,iu(Pr.DEFAULT_BULK_LOAD_ERR),sn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ou,"buildTopLevelErrMsg")});var oD=v(($ke,rQ)=>{"use strict";var iD=mn(),Jye=WL(),{AsyncParser:Xye}=require("json2csv"),Zy=require("stream"),gs=ce(),sD=require("fs-extra"),Zye=require("path"),Ws=z(),{promisify:J4}=require("util"),hE=ce(),{handleHDBError:Sr,hdbErrors:eRe}=Ee(),{HDB_ERROR_MSGS:Vn,HTTP_STATUS_CODES:Tr}=eRe,{streamAsJSON:tRe}=(qb(),M(SU)),{Upload:rRe}=require("@aws-sdk/lib-storage"),{toCsvStream:nRe}=(No(),M(OU)),j4=["search_by_value","search_by_hash","sql","search_by_conditions"],Q4=["json","csv"],X4="json",Z4="csv",sRe="Successfully exported JSON locally.",iRe="Successfully exported CSV locally.",oRe=1e3,aRe=iD.searchByHash,cRe=iD.searchByValue,lRe=J4(Zy.finished);rQ.exports={export_to_s3:mRe,export_local:uRe};async function uRe(e){Ws.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=eQ(e);if(!gs.isEmpty(t))throw Ws.error(t),Sr(new Error,t,Tr.BAD_REQUEST,void 0,void 0,!0);if(gs.isEmpty(e.path))throw Ws.error(Vn.MISSING_VALUE("path")),Sr(new Error,Vn.MISSING_VALUE("path"),Tr.BAD_REQUEST,void 0,void 0,!0);let r=(gs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Zye.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=gs.buildFolderPath(e.path,r);await dRe(e.path);let s=await tQ(e);return await fRe(n,e.format,s)}o(uRe,"export_local");async function dRe(e){if(Ws.trace("in confirmPath"),gs.isEmptyOrZeroLength(e))throw Sr(new Error,`Invalid path: ${e}`,Tr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await sD.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Ws.error(n),Sr(new Error,n,Tr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Ws.error(r),Sr(new Error,r,Tr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(dRe,"confirmPath");async function fRe(e,t,r){if(Ws.trace("in saveToLocal"),hE.isEmptyOrZeroLength(e))throw Sr(new Error,Vn.INVALID_VALUE("file_path"),Tr.BAD_REQUEST,void 0,void 0,!0);if(hE.isEmptyOrZeroLength(t))throw Sr(new Error,Vn.INVALID_VALUE("Source format"),Tr.BAD_REQUEST,void 0,void 0,!0);if(hE.isEmpty(r))throw Sr(new Error,Vn.NOT_FOUND("Data"),Tr.BAD_REQUEST,void 0,void 0,!0);if(t===X4){let n=sD.createWriteStream(e);return tRe(r).pipe(n),await lRe(n),{message:sRe,path:e}}else if(t===Z4){let n=sD.createWriteStream(e),s=Zy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Xye(i,c).fromInput(s).toOutput(n).promise(!1),{message:iRe,path:e}}throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST)}o(fRe,"saveToLocal");async function mRe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Sr(new Error,Vn.MISSING_VALUE("S3 object"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Sr(new Error,Vn.MISSING_VALUE("aws_access_key_id"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Sr(new Error,Vn.MISSING_VALUE("aws_secret_access_key"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.bucket))throw Sr(new Error,Vn.MISSING_VALUE("bucket"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.key))throw Sr(new Error,Vn.MISSING_VALUE("key"),Tr.BAD_REQUEST);if(gs.isEmptyOrZeroLength(e.s3.region))throw Sr(new Error,Vn.MISSING_VALUE("region"),Tr.BAD_REQUEST);let t=eQ(e);if(!gs.isEmpty(t))throw Sr(new Error,t,Tr.BAD_REQUEST);Ws.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await tQ(e)}catch(l){throw Ws.error(l),l}let n,s=await Jye.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Zy.PassThrough;if(e.format===Z4){i=e.s3.key+".csv";let l=nRe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===X4){i=e.s3.key+".json";let l=new Zy.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%oRe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST);return new rRe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(mRe,"export_to_s3");function eQ(e){if(Ws.trace("in exportCoreValidation"),gs.isEmpty(e.format))return"format missing";if(Q4.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Q4.join(", ")}`;let t=e.search_operation.operation;if(gs.isEmpty(t))return"search_operation.operation missing";if(j4.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${j4.join(", ")}`}o(eQ,"exportCoreValidation");async function tQ(e){Ws.trace("in getRecords");let t,r;if(hE.isEmpty(e.search_operation)||hE.isEmptyOrZeroLength(e.search_operation.operation))throw Sr(new Error,Vn.INVALID_VALUE("Search operation"),Tr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=cRe;break;case"search_by_hash":t=aRe;break;case"search_by_conditions":t=iD.searchByConditions;break;case"sql":{let n=qy();t=J4(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ws.error(r),Sr(new Error,r,Tr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(tQ,"getRecords")});var sQ=v((Kke,nQ)=>{"use strict";var aD=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};nQ.exports=aD});var aQ=v((Wke,oQ)=>{"use strict";var pRe=(H(),M(W)),iQ=require("moment"),hRe=require("uuid").v4,cD=class{static{o(this,"JobObject")}constructor(){this.id=hRe(),this.type=void 0,this.start_datetime=iQ().valueOf(),this.created_datetime=iQ().valueOf(),this.end_datetime=void 0,this.status=pRe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};oQ.exports=cD});var tR=v((jke,hQ)=>{"use strict";var ERe=require("uuid").v4,fQ=xn(),mQ=mn(),_Re=ai(),gRe=Yu(),SRe=sQ(),Nt=(H(),M(W)),TRe=aQ(),yRe=fS(),Ni=z(),RRe=um(),Nf=ce(),{promisify:bRe}=require("util"),au=require("moment"),ARe=qy(),eR=KL(),cQ=sw(),{deleteTransactionLogsBeforeValidator:IRe}=sL(),{handleHDBError:lQ,hdbErrors:wRe,ClientError:NRe}=Ee(),{HTTP_STATUS_CODES:uQ}=wRe,dQ=mQ.searchByValue,CRe=mQ.searchByHash,ORe=fQ.insert,PRe=bRe(ARe.evaluateSQL),LRe=fQ.update;hQ.exports={addJob:vRe,updateJob:xRe,handleGetJob:DRe,handleGetJobsByStartDate:MRe,getJobById:pQ};async function DRe(e){if(e.id===void 0)throw new NRe("'id' is required");let t=await pQ(e.id);return Nf.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(DRe,"handleGetJob");async function MRe(e){try{let t=await URe(e);if(Ni.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=au(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=au(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 Ni.error(r),new Error(r)}}o(MRe,"handleGetJobsByStartDate");async function vRe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Nf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ni.info(d),t.error=d,t}if(!Nt.JOB_TYPE_ENUM[e.operation])return Ni.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Nt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=eR.fileObject(e);break;case Nt.OPERATIONS_ENUM.CSV_URL_LOAD:n=eR.urlObject(e);break;case Nt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=eR.dataObject(e);break;case Nt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=eR.s3FileObject(e);break;case Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=cQ(e,"date");break;case Nt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=cQ(e,"timestamp");break;case Nt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=IRe(e);break;case Nt.OPERATIONS_ENUM.RESTART_SERVICE:if(Nt.HDB_PROCESS_SERVICES[e.service]===void 0)throw lQ(new Error,"Invalid service",uQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw lQ(n,n.message,uQ.BAD_REQUEST,void 0,void 0,!0);let s=new TRe;s.type=e.operation===Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new _Re(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await dQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=ERe();try{a=await dQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ni.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new RRe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await ORe(l)}catch(d){return Ni.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,Ni.trace(d)}return t}o(vRe,"addJob");async function URe(e){let t=au(e.from_date,au.ISO_8601),r=au(e.to_date,au.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 SRe(n,e.hdb_user);try{return await PRe(s)}catch(i){throw Ni.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(URe,"getJobsInDateRange");async function pQ(e){if(Nf.isEmptyOrZeroLength(e))return Nf.errorizeMessage("Invalid job ID specified.");let t=new gRe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await CRe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ni.error(n),Nf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(pQ,"getJobById");async function xRe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Nf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Nt.JOB_STATUS_ENUM.COMPLETE||e.status===Nt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=au().valueOf());let t=new yRe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await LRe(t),r}o(xRe,"updateJob")});var bQ=v((Jke,RQ)=>{"use strict";var EQ=ce(),Lr=(H(),M(W)),BRe=require("moment"),rR=nD(),EE=z(),_Q=tR(),gQ=oD(),SQ=gl(),TQ=rt(),FRe=Ly(),kRe=yf(),{parentPort:HRe,isMainThread:yQ}=require("worker_threads"),{onMessageByType:GRe}=rt(),lD=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function qRe(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(EQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(EQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Lr.JOB_TYPE_ENUM.csv_file_load:await ao(e,rR.csvFileLoad);break;case Lr.JOB_TYPE_ENUM.csv_url_load:await ao(e,rR.csvURLLoad);break;case Lr.JOB_TYPE_ENUM.csv_data_load:await ao(e,rR.csvDataLoad);break;case Lr.JOB_TYPE_ENUM.import_from_s3:await ao(e,rR.importFromS3);break;case Lr.JOB_TYPE_ENUM.empty_trash:break;case Lr.JOB_TYPE_ENUM.export_local:await ao(e,gQ.export_local);break;case Lr.JOB_TYPE_ENUM.export_to_s3:await ao(e,gQ.export_to_s3);break;case Lr.JOB_TYPE_ENUM.delete_files_before:case Lr.JOB_TYPE_ENUM.delete_records_before:await ao(e,SQ.deleteFilesBefore);break;case Lr.JOB_TYPE_ENUM.delete_audit_logs_before:await ao(e,SQ.deleteAuditLogsBefore);break;case Lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await ao(e,FRe.deleteTransactionLogsBefore);break;case Lr.JOB_TYPE_ENUM.restart_service:return await ao(e,kRe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(qRe,"parseMessage");async function ao(e,t){try{e.job.status=Lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=BRe().valueOf(),await _Q.updateJob(e.job),await $Re(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):EE.error(`There was an error running ${t.name} job with id ${e.job.id}`),EE.error(n),e.job.message=n,e.job.status=Lr.JOB_STATUS_ENUM.ERROR;try{await _Q.updateJob(e.job)}catch(s){throw EE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(ao,"runJob");async function $Re(e){EE.trace("launching job thread:",e),yQ?TQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):HRe.postMessage({type:Lr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o($Re,"launchJobThread");yQ&&GRe(Lr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{TQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){EE.error(r)}});RQ.exports={parseMessage:qRe,RunnerMessage:lD}});var IQ=v((Zke,AQ)=>{"use strict";var VRe=ce(),uD=fe(),Ic=(H(),M(W)),KRe=At(),YRe=rr(),co=z(),WRe=JL(),zRe=Vi();uD.initSync();AQ.exports={postOperationHandler:QRe,sendOperationTransaction:_E};async function _E(e,t,r,n){if(e.schema===Ic.SYSTEM_SCHEMA_NAME)return;let s=jRe(e,t,r);s&&(co.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await YRe.publishToStream(`${KRe.SUBJECT_PREFIXES.TXN}.${e.schema}`,zRe.createNatsTableStreamName(e.schema,e.table),n,s))}o(_E,"sendOperationTransaction");function jRe(e,t,r){if(VRe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Ic.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(jRe,"convertCRUDOperationToTransaction");async function QRe(e,t,r){if(!uD.get(Ic.CONFIG_PARAMS.CLUSTERING_ENABLED))return;co.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=uD.get(Ic.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new WRe(t.txn_time,n,s);switch(e.operation){case Ic.OPERATIONS_ENUM.INSERT:try{await _E(e,t.inserted_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for insert."),co.error(a)}break;case Ic.OPERATIONS_ENUM.DELETE:try{await _E(e,t.deleted_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for delete."),co.error(a)}break;case Ic.OPERATIONS_ENUM.UPDATE:try{await _E(e,t.update_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for update."),co.error(a)}break;case Ic.OPERATIONS_ENUM.UPSERT:try{await _E(e,t.upserted_hashes,i,r)}catch(a){co.error("There was an error calling clustering postOperationHandler for upsert."),co.error(a)}break;default:break}return t}o(QRe,"postOperationHandler")});var J,wQ=oe(()=>{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 Ny={};be(Ny,{chooseOperation:()=>YQ,executeJob:()=>zs,getOperationFunction:()=>WQ,operation:()=>gD,processLocalTransaction:()=>KQ});async function KQ(e,t){try{if(e.body.operation!=="read_log"&&(yE.default.log_level===jf.INFO||yE.default.log_level===jf.DEBUG||yE.default.log_level===jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;bn.info(c)}}catch(n){bn.error(n)}let r=await $Q.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ebe[e.body.operation]&&FQ.default.setSchemaDataToGlobal(n=>{n&&bn.error(n)}),r}function YQ(e){let t;try{t=WQ(e)}catch(s){throw bn.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=sR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=sR.default.checkASTPermissions(e,i);if(a)throw bn.error(`${NQ.FORBIDDEN} from operation ${e.operation}`),bn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,js.handleHDBError)(new Error,a,js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=BQ.default.verifyPerms(i,s);if(a)throw bn.error(`${NQ.FORBIDDEN} from operation ${e.operation}`),bn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,js.handleHDBError)(new Error,a,js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,js.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function WQ(e){if(bn.trace(`getOperationFunction with operation: ${e.operation}`),CQ.has(e.operation))return CQ.get(e.operation);throw(0,js.handleHDBError)(new Error,js.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),js.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function gD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=YQ(e);return KQ({body:e},n)}async function tbe(e){bn.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[_b]=!0;let a;switch(i.operation){case V.INSERT:a=await lu.default.insert(i);break;case V.UPDATE:a=await lu.default.update(i);break;case V.UPSERT:a=await lu.default.upsert(i);break;case V.DELETE:a=await Pf.default.deleteRecord(i);break;default:bn.warn("invalid operation in catchup");break}await JRe.postOperationHandler(i,a,e)}catch(a){bn.info("Invalid operation in transaction"),bn.error(a)}}async function zs(e){(0,qQ.transformReq)(e);let t,r;try{if(r=await iR.default.addJob(e),r){t=r.createdJob,bn.info("addJob result",r);let n=new pD.default.RunnerMessage(t,e);return{message:await pD.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 bn.error(i),(0,js.handleHDBError)(n,i)}}function rbe(){let e=new Map;return e.set(V.INSERT,new J(lu.default.insert)),e.set(V.UPDATE,new J(lu.default.update)),e.set(V.UPSERT,new J(lu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new J(Of.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new J(Of.default.searchByHash)),e.set(V.SEARCH_BY_ID,new J(Of.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new J(Of.default.searchByValue)),e.set(V.SEARCH,new J(XRe)),e.set(V.SQL,new J(ZRe)),e.set(V.CSV_DATA_LOAD,new J(zs,gE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new J(zs,gE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new J(zs,gE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new J(zs,gE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new J(lo.default.createSchema)),e.set(V.CREATE_DATABASE,new J(lo.default.createSchema)),e.set(V.CREATE_TABLE,new J(lo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new J(lo.default.createAttribute)),e.set(V.DROP_SCHEMA,new J(lo.default.dropSchema)),e.set(V.DROP_DATABASE,new J(lo.default.dropSchema)),e.set(V.DROP_TABLE,new J(lo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new J(lo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new J(SE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new J(SE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new J(SE.default.describeTable)),e.set(V.DESCRIBE_ALL,new J(SE.default.describeAll)),e.set(V.DELETE,new J(Pf.default.deleteRecord)),e.set(V.ADD_USER,new J(Cf.default.addUser)),e.set(V.ALTER_USER,new J(Cf.default.alterUser)),e.set(V.DROP_USER,new J(Cf.default.dropUser)),e.set(V.LIST_USERS,new J(Cf.default.listUsersExternal)),e.set(V.LIST_ROLES,new J(TE.default.listRoles)),e.set(V.ADD_ROLE,new J(TE.default.addRole)),e.set(V.ALTER_ROLE,new J(TE.default.alterRole)),e.set(V.DROP_ROLE,new J(TE.default.dropRole)),e.set(V.USER_INFO,new J(Cf.default.userInfo)),e.set(V.READ_LOG,new J(PQ.default)),e.set(V.ADD_NODE,new J(LQ.default)),e.set(V.UPDATE_NODE,new J(dD.default)),e.set(V.SET_NODE_REPLICATION,new J(dD.default)),e.set(V.REMOVE_NODE,new J(DQ.default)),e.set(V.CONFIGURE_CLUSTER,new J(MQ.default)),e.set(V.PURGE_STREAM,new J(vQ.default)),e.set(V.SET_CONFIGURATION,new J(hD.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new J(UQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new J(xQ.default)),e.set(V.CLUSTER_SET_ROUTES,new J(nR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new J(nR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new J(nR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new J(zs,fD.default.export_to_s3)),e.set(V.CREATE_CSR,new J(cu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new J(cu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new J(cu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new J(cu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new J(cu.default.removeCertificate)),e.set(V.GET_KEY,new J(cu.default.getKey)),e.set(V.ADD_NODE_BACK,new J(iO)),e.set(V.REMOVE_NODE_BACK,new J(oO)),e.set(V.DELETE_FILES_BEFORE,new J(zs,Pf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new J(zs,Pf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new J(zs,fD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new J(iR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new J(iR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new J(TL)),e.set(V.GET_FINGERPRINT,new J(yL)),e.set(V.SET_LICENSE,new J(RL)),e.set(V.RESTART,new J(mD.default.restart)),e.set(V.RESTART_SERVICE,new J(zs,mD.default.restartService)),e.set(V.CATCHUP,new J(tbe)),e.set(V.SYSTEM_INFORMATION,new J(kQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new J(zs,Pf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new J(OQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new J(PN)),e.set(V.REFRESH_OPERATION_TOKEN,new J(LN)),e.set(V.LOGIN,new J(ZP)),e.set(V.LOGOUT,new J(eL)),e.set(V.GET_CONFIGURATION,new J(hD.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new J(Ct.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new J(Ct.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new J(Ct.default.getComponentFile)),e.set(V.GET_COMPONENTS,new J(Ct.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new J(Ct.default.setComponentFile)),e.set(V.DROP_COMPONENT,new J(Ct.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new J(Ct.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new J(Ct.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new J(Ct.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.addComponent)),e.set(V.ADD_COMPONENT,new J(Ct.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new J(Ct.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new J(Ct.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new J(ED.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new J(zs,ED.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new J(HQ.default.installModules)),e.set(V.GET_BACKUP,new J(lo.default.getBackup)),e.set(V.ADD_SSH_KEY,new J(Ct.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new J(Ct.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new J(Ct.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new J(Ct.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new J(Ct.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new J(Ct.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new J(aL)),e.set(V.LIST_METRICS,new J(cL)),e.set(V.DESCRIBE_METRIC,new J(lL)),e.set(V.GET_STATUS,new J(_L)),e.set(V.SET_STATUS,new J(gL)),e.set(V.CLEAR_STATUS,new J(EL)),e.set(V.INSTALL_USAGE_LICENSE,new J(SP)),e.set(V.GET_USAGE_LICENSES,new J(bP)),e}var Of,sR,gE,lo,SE,Pf,OQ,Cf,TE,Ct,yE,PQ,LQ,dD,DQ,MQ,vQ,UQ,xQ,nR,fD,BQ,iR,js,mD,_D,lu,FQ,kQ,pD,hD,ED,HQ,GQ,qQ,cu,$Q,VQ,NQ,bn,JRe,XRe,ZRe,ebe,CQ,Cy=oe(()=>{Of=w(mn()),sR=w(qy()),gE=w(nD()),lo=w(aT()),SE=w(Cl()),Pf=w(gl()),OQ=w(MC()),Cf=w(Fn()),TE=w(xp()),Ct=w(nL()),yE=w(z()),PQ=w(FC()),LQ=w(ST()),dD=w(dO()),DQ=w(yT()),MQ=w(pO()),vQ=w(hO()),UQ=w(gO()),xQ=w(TO()),nR=w(wT()),fD=w(oD()),BQ=w(Hy()),iR=w(tR());H();js=w(Ee()),mD=w(yf()),_D=w(require("util")),lu=w(xn()),FQ=w(li()),kQ=w(hh()),pD=w(bQ());yd();yy();hD=w(pt()),ED=w(Ly()),HQ=w(oL()),GQ=w(ti()),qQ=w(ce());xr();cu=w(us());Wd();dL();$Q=w(YL()),VQ=w(IQ());oE();Hh();AL();wQ();({HTTP_STATUS_CODES:NQ}=js.hdbErrors),bn=yE.default.loggerWithTag("operation"),{transactToClusteringUtils:JRe}=VQ.default,XRe=_D.promisify(Of.default.search),ZRe=_D.promisify(sR.default.evaluateSQL),ebe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(KQ,"processLocalTransaction");CQ=rbe();Me.operation=gD;o(YQ,"chooseOperation");o(WQ,"getOperationFunction");(0,GQ._assignPackageExport)("operation",gD);o(gD,"operation");o(tbe,"catchup");o(zs,"executeJob");o(rbe,"initializeOperationFunctionMap")});var cR=v((oHe,QQ)=>{"use strict";var oR=(H(),M(W)),nbe=ce(),RE=z(),{handleHDBError:SD,hdbErrors:aR}=Ee(),{isMainThread:sbe}=require("worker_threads"),{Readable:ibe}=require("stream"),zQ=require("os"),obe=require("util"),abe=MN(),cbe=obe.promisify(abe.authorize),jQ=(Cy(),M(Ny)),{createGzip:lbe,constants:ube}=require("zlib"),dbe=[oR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,oR.OPERATIONS_ENUM.LOGIN,oR.OPERATIONS_ENUM.LOGOUT];function fbe(e){let t=`Found an uncaught exception with message: ${e.message}. ${zQ.EOL}Stack: ${e.stack} ${zQ.EOL}Terminating ${sbe?"HDB":"thread"}.`;console.error(t),RE.fatal(t),process.exit(1)}o(fbe,"handleServerUncaughtException");function mbe(e,t,r){if(RE[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:aR.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(mbe,"serverErrorHandler");function pbe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=SD(new Error,"Invalid JSON.",aR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(nbe.isEmpty(e.body.operation)){let n=SD(new Error,"Request body must include an 'operation' property.",aR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(pbe,"reqBodyValidationHandler");function hbe(e,t,r){let n;!dbe.includes(e.body.operation)||e.body.operation===oR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?cbe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{RE.warn(i),RE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(SD(i,a,aR.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(hbe,"authHandler");async function Ebe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=jQ.chooseOperation(e.body);let s=await jQ.processLocalTransaction(e,n);if(s instanceof ibe&&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(lbe({level:ube.Z_BEST_SPEED})))}return s}catch(s){throw RE.error(s),s}}o(Ebe,"handlePostRequest");QQ.exports={authHandler:hbe,handlePostRequest:Ebe,handleServerUncaughtException:fbe,serverErrorHandler:mbe,reqBodyValidationHandler:pbe}});var e2=v((cHe,ZQ)=>{"use strict";var _be=require("fastify-plugin"),{handlePostRequest:JQ,authHandler:gbe,reqBodyValidationHandler:Sbe}=cR();async function Tbe(e){e.decorate("hdbCore",{preValidation:[Sbe,gbe],request:o(t=>XQ(JQ(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>XQ(JQ(t,r,!0)),"requestWithoutAuthentication")})}o(Tbe,"hdbCore");async function XQ(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(XQ,"convertAsyncIterators");ZQ.exports=_be(Tbe)});var r2=v((dHe,t2)=>{"use strict";var uHe=require("fs"),lR=fe();lR.initSync();var{CONFIG_PARAMS:TD}=(H(),M(W)),ybe=1024*1024*1024;function Rbe(e){let t=lR.get(TD.HTTP_TIMEOUT),r=lR.get(TD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:ybe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:lR.get(TD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(Rbe,"getServerOptions");t2.exports=Rbe});var i2=v((mHe,s2)=>{"use strict";var yD=fe();yD.initSync();var{CONFIG_PARAMS:n2}=(H(),M(W));function bbe(){let e=yD.get(n2.HTTP_CORSACCESSLIST),t=yD.get(n2.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(bbe,"getCORSOptions");s2.exports=bbe});var c2=v((hHe,a2)=>{"use strict";var o2=fe();o2.initSync();var Abe=(H(),M(W));function Ibe(){return o2.get(Abe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(Ibe,"getHeaderTimeoutConfig");a2.exports=Ibe});var bD={};be(bD,{customFunctionsServer:()=>Cbe,ready:()=>R2,start:()=>Nbe});function Nbe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){pa||(pa=y2(t),Me.http((await pa).server));let a=await pa,c=(0,RD.dirname)(s),l=(0,RD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!l2.has(c)){l2.add(c);try{a.register(Pbe(c,l))}catch(u){if(u.message==="Root plugin has already booted")_t.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:R2}}async function Cbe(){try{_t.info("In Custom Functions Fastify server"+process.cwd()),_t.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),_t.debug(`Custom Functions server process ${process.pid} starting up.`),await Obe();let e=h2.get(U.HTTP_SECUREPORT)>0,t;try{t=pa=await y2(e)}catch(r){throw _t.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw _t.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){_t.error(`Custom Functions ${process.pid} Error: ${e}`),_t.error(e),process.exit(1)}}async function Obe(){try{_t.info("Custom Functions starting configuration."),await E2.setUsersWithRolesCache(),_t.info("Custom Functions completed configuration.")}catch(e){_t.error(e)}}function Pbe(e,t){return async function(r){try{_t.info("Custom Functions starting buildRoutes"),_t.trace("Loading fastify routes folder "+e),(0,u2.existsSync)(e)&&r.register(p2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:_t.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?_t.error(s.message):s&&_t.error(s),a()})}catch(n){_t.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function y2(e){_t.info("Custom Functions starting buildServer.");let t=(0,_2.default)(e),r=(0,d2.default)(t);r.server.headersTimeout=(0,S2.default)(),r.setErrorHandler(T2.serverErrorHandler);let n=(0,g2.default)();return n&&r.register(f2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(m2.default),await r.register(wbe),await r.after(),gm(r),_t.info("Custom Functions completed buildServer."),r}function R2(){if(pa)return pa.then?pa.then(e=>e.ready()):pa.ready()}var RD,u2,d2,f2,m2,p2,h2,_t,wbe,E2,_2,g2,S2,T2,pa,l2,b2=oe(()=>{RD=require("path"),u2=require("fs"),d2=w(require("fastify")),f2=w(require("@fastify/cors")),m2=w(wN()),p2=w(require("@fastify/autoload")),h2=w(fe());H();_t=w(z()),wbe=w(e2()),E2=w(Fn()),_2=w(r2()),g2=w(i2()),S2=w(c2()),T2=w(cR());No();xr();l2=new Set;o(Nbe,"start");o(Cbe,"customFunctionsServer");o(Obe,"setUp");o(Pbe,"buildRouteFolder");o(y2,"buildServer");o(R2,"ready")});var ID={};be(ID,{handleApplication:()=>Lbe,suppressHandleApplicationWarning:()=>Dbe});function Lbe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,Df.join)(n.absolutePath,"index.html");(0,Lf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,Df.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Df.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,AD.default)(n,(0,Lf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(Mbe(c),!c)return{status:404,body:"File not found"};let l=(0,Df.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Lf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,AD.default)(n,(0,Lf.realpathSync)(l))}},{runFirst:!0})}function Mbe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Lf,Df,AD,Dbe,A2=oe(()=>{Lf=require("node:fs"),Df=require("node:path"),AD=w(require("send"));o(Lbe,"handleApplication");Dbe=!0;o(Mbe,"validateNotFoundOption")});var wD={};be(wD,{start:()=>vbe});function vbe({override:e}){return{handleFile:o((t,r,n)=>{uR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,I2.parse)(t))){if(process.env[s]!==void 0)if(uR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)uR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var I2,uR,w2=oe(()=>{I2=require("dotenv"),uR=w(z());o(vbe,"start")});var ND={};be(ND,{DataLoaderError:()=>Ss,DataLoaderResult:()=>Mf,EmptyFileError:()=>mR,FileParseError:()=>fR,InvalidPropertyTypeError:()=>pR,MissingRequiredPropertyError:()=>bE,RecordProcessingError:()=>AE,SystemDatabaseError:()=>hR,UnsupportedFileExtensionError:()=>dR,handleApplication:()=>xbe,loadDataFile:()=>L2,suppressHandleApplicationWarning:()=>Ube});function xbe(e){if((0,C2.getWorkerIndex)()!==0){uo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||L2(t,hn,De).then(r=>{uo.debug?.("Data loader processed file: %s: %s",(0,ha.basename)(t.absolutePath),r.message)})})}async function L2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ha.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,N2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new dR(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof Ss?f:new fR(t,f)}if(!a)throw new mR(t);let{database:c,table:l,records:u}=a;if(!l)throw new bE(t,"table");if(!u)throw new bE(t,"records");if(!Array.isArray(u))throw new pR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new hR(c,l);try{let f;if(c&&s[c]&&s[c][l])uo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])uo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{uo.debug?.(`Table ${d} not found, creating new table`);let b=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let L={name:R,type:typeof S[R]};return R==="id"&&(L.isPrimaryKey=!0),L}).forEach(R=>{b.push(R)})}f=await Je({database:c,table:l,attributes:b})}let m=u.length,p=0,h=0,E=0,g=100;for(let b=0;b<u.length;b+=g){let S=u.slice(b,b+g),R=[];for(let L of S)R.push(async()=>{try{let O=null,x=L.id;if(x!==void 0&&(O=await f.get(x)),!O)return p++,f.put(L);let j=O.getUpdatedTime();return a.mtime>j?(h++,f.put(L)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof Ss)uo.error?.(`Record processing error: ${O.message}`);else{let x=new AE(d,O);uo.error?.(`Record processing error: ${x.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(L=>L()))}if(p>0||h>0){let b=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(b+=` (${E} records skipped)`),uo.info?.(b),new Mf(t,c,l,"success",p+h,b)}else if(E>0){let b=`All ${E} records in ${d} already up-to-date`;return uo.info?.(b),new Mf(t,c,l,"skipped",m,b)}else{let b=`No records to process in ${d}`;return uo.info?.(b),new Mf(t,c,l,"success",0,b)}}catch(f){throw f instanceof Ss?f:new AE(d,f)}}var ha,N2,C2,Ea,O2,P2,uo,Ube,Ss,dR,fR,mR,bE,pR,hR,AE,Mf,D2=oe(()=>{ha=require("node:path"),N2=require("yaml");Ne();C2=w(rt()),Ea=w(Kr()),O2=w(Ee()),P2=w(z()),uo=P2.default.forComponent("dataLoader"),Ube=!0;o(xbe,"handleApplication");o(L2,"loadDataFile");Ss=class extends O2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=Ea.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},dR=class extends Ss{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ha.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},fR=class extends Ss{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ha.basename)(t)}: ${r.message}`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},mR=class extends Ss{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ha.basename)(t)} is empty or invalid`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},bE=class extends Ss{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ha.basename)(t)} is missing required "${r}" property`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},pR=class extends Ss{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ha.basename)(t)} has invalid "${r}" property, expected ${n}`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},hR=class extends Ss{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ea.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},AE=class extends Ss{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ea.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Mf=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 CD={};be(CD,{hdbServer:()=>Hbe,start:()=>Hbe});async function Hbe(e){try{fo.default.debug("In Fastify server"+process.cwd()),fo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),fo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=M2.default.isMaster,await Gbe();let t=e.securePort>0;vf=qbe(t),await vf.ready(),e||(e={}),e.isOperationsServer=!0;try{Me.http(vf.server,e),vf.server.closeIdleConnections||await vf.listen({port:0,host:"::"})}catch(r){throw vf.close(),fo.default.error(r),fo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),fo.default.fatal(t),process.exit(1)}}async function Gbe(){return fo.default.trace("Configuring HarperDB process."),G2.default.setSchemaDataToGlobal(),$2.default.setUsersWithRolesCache()}function qbe(e){fo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=$be(e),r=(0,v2.default)(t);r.server.headersTimeout=Kbe(),r.setErrorHandler(Nc.serverErrorHandler);let n=Vbe();n&&r.register(U2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(F2.default),r.register(x2.default),r.register(B2.default,{root:k2.default.join(H2.PACKAGE_ROOT,"studio/web")}),gm(r);let s=wc.default.get(Jf.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!q2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Nc.reqBodyValidationHandler,Nc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Nc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),fo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function $be(e){let t=wc.default.get(IE.OPERATIONSAPI_NETWORK_TIMEOUT),r=wc.default.get(IE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Fbe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function Vbe(){let e=wc.default.get(IE.OPERATIONSAPI_NETWORK_CORS),t=wc.default.get(IE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===kbe)&&(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 Kbe(){return wc.default.get(IE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Bbe}var M2,wc,fo,v2,U2,x2,B2,F2,k2,H2,G2,q2,$2,Nc,Bbe,Fbe,kbe,IE,vf,V2=oe(()=>{M2=w(require("cluster")),wc=w(fe());H();fo=w(z()),v2=w(require("fastify")),U2=w(require("@fastify/cors")),x2=w(require("@fastify/compress")),B2=w(require("@fastify/static")),F2=w(wN()),k2=w(require("path")),H2=w(Rt()),G2=w(li()),q2=w(ce()),$2=w(Fn());xr();Nc=w(cR());No();wc.default.initSync();Bbe=6e4,Fbe=1024*1024*1024,kbe="TRUE",{CONFIG_PARAMS:IE}=W;o(Hbe,"operationsServer");o(Gbe,"setUp");o(qbe,"buildServer");o($be,"getServerOptions");o(Vbe,"getCORSOpts");o(Kbe,"getHeaderTimeoutConfig")});var SR={};be(SR,{disableNATS:()=>Wbe,publishToStream:()=>gR,setNATSReplicator:()=>OD,setPublishToStream:()=>zbe,setSubscription:()=>MD,start:()=>Ybe});function Ybe(){wE.default.get(U.CLUSTERING_ENABLED)&&Qbe()}function Wbe(e=!0){j2=e}function zbe(e,t){gR=e,MD=t}function Qbe(){if(j2||process.env._DISABLE_NATS)return;let e=ot(),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];OD(s,r,i)}}wl((r,n)=>{OD(r.tableName,r.databaseName,r),n&&J2(r)}),!K2&&(K2=!0)}function OD(e,t,r){if(t==="system"&&Jbe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Fr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){J2(i)}static subscribe(){let i=new jn;return MD(t,e,i),i}static subscribeOnThisThread(i){return i<(wE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??jbe)}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 ER(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=Q2;return i}o(n,"getNATSTransaction")}function J2(e){let t=wE.default.get(U.CLUSTERING_NODENAME);gR(`${LD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,DD.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 Y2,LD,DD,W2,z2,wE,_R,j2,gR,MD,jbe,Q2,K2,Jbe,ER,PD,vD=oe(()=>{Ne();va();Y2=w(rr()),LD=w(At()),DD=w(Vi());yu();W2=w(VN()),z2=w(Cn()),wE=w(fe());H();_R=w(z());o(Ybe,"start");o(Wbe,"disableNATS");gR=Y2.publishToStream,MD=W2.setSubscription;o(zbe,"setPublishToStream");jbe=2;o(Qbe,"assignReplicationSource");Jbe=["hdb_job","hdb_raw_analytics","hdb_info"];o(OD,"setNATSReplicator");o(J2,"publishSchema");ER=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=wE.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||(_R.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(gR(`${LD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,DD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw _R.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},PD=class extends ER{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,z2.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Q2=new PD});async function rJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await UD.get(e,{returnNonexistent:!0});i=new FD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await UD.get(e);a&&a.delete()}i=new yR(e,t)}return n&&(n.id=e,n.user={username:t?.username},NE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function xD(){return TR++,TR>65500&&(TR=1),TR}function BD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Os.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 si(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return St(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var Z2,Cc,eJ,tJ,X2,UD,NE,TR,yR,FD,nJ=oe(()=>{Ne();Ua();Z2=w(Cn()),Cc=w(z());Na();eJ=w(rt()),tJ=w(vP());xr();Z_();X2=100,UD=Je({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),NE=Je({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,eJ.getWorkerIndex)()===0&&(async()=>{await tJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of NE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Me.getUser(r.user.username));try{await BD(r,t,r)}catch{(0,Cc.warn)("Failed to publish will",t)}NE.delete(e.id)}})();o(rJ,"getSession");TR=1;o(xD,"getNextMessageId");yR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Cc.trace)("Resuming subscription from",s,"from",a);let p=Os.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let R=S.split("/"),L;for(let j=0;j<R.length;j++)if(R[j].indexOf("+")>-1)if(R[j]==="+")L=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&L)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),L&&(n=o(j=>{let k=j.id;if(!Array.isArray(k))if(k?.indexOf?.("/")>-1)k=k.split("/");else return!1;if(O&&k.length!==R.length)return!1;for(let F=0;F<R.length;F++)if(R[F]!=="+"&&R[F]!==k[F])return!1;return!0},"filter"));let x=R.indexOf("+");m.url="/"+(x>-1?R.slice(0,x):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,b=await St(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let L=(async()=>{for await(let O of R)try{let x;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,x=this.needsAcknowledge(O)):(O.acknowledge?.(),x=xD());let j=O.id;if(Array.isArray(j)&&(j=ku(j)),j==null&&(j=""),await this.listener(E+"/"+j,O.value,x,t)===!1)break;this.awaitingAcks?.size>X2?await new Promise(F=>setTimeout(F,this.awaitingAcks.size-X2)):await new Promise(setImmediate)}catch(x){(0,Cc.warn)(x)}})();return R});if(b)return b.topic=s,b.qos=t.qos,this.subscriptions.push(b),b}resume(){}needsAcknowledge(t){let r=xD();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 BD(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();St(r,async()=>{try{if(!t){let n=await NE.get(this.sessionId);n?.doesExist()&&await BD(n,n.data,r)}}finally{await NE.delete(this.sessionId)}}).catch(n=>{(0,Cc.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(BD,"publish");FD=class extends yR{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=xD(),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,Cc.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,Z2.getNextMonotonicTime)()),(0,Cc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),UD.put(this.sessionRecord)}}});var kD={};be(kD,{bypassAuth:()=>Xbe,start:()=>eAe});function Xbe(){uJ=!0}function eAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new lJ.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),Qt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=iJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Qt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Qt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Fd(p,l);if(!E.valid)throw Qt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:d?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:h,status:ei.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Qt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Qt.error?.(p)}else if(l.required)return Qt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&Zbe(u.remoteAddress)&&(d=await(0,oJ.getSuperUser)(),Qt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=iJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Qt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function iJ(e,t,r,n,s){sJ||(sJ=!0,Bm(f=>{RR>0&&f.push({metric:"mqtt-connections",connections:RR,byThread:!0})}));let i;RR++;let a,c={protocolVersion:4},l=(0,AR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){RR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Qt.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"),Qt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Qt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ge(f.length,"bytes-received",E,b(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Me.getUser(f.username,f.password.toString(),r),(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:n?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(Q){return(0,Uf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:f.username,status:ei.FAILURE,type:ba.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=wo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?Q(f.will.payload):void 0,delete f.will.payload}a=rJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(Q){return Qt.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,Y,de,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",Q);let ee=Q.indexOf("/",1),Re=ee>0?Q.slice(0,ee):Q;g({cmd:"publish",topic:Q,payload:await S(Y),messageId:de||Math.floor(Math.random()*1e8),qos:le.qos},Re);let Ie=e._socket??e;return Ie.writableNeedDrain?new Promise($e=>Ie.once("drain",$e)):!Ie.closed}catch(ee){return Qt.error?.(ee),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let L=[];for(let Q of f.subscriptions){let Y;try{let de=await a.addSubscription(Q,Q.qos>=1);Y=de?de.qos||0:c.protocolVersion<5?128:143}catch(de){s.events.emit("error",de,e,Q,a),de.statusCode?de.statusCode===500?Qt.warn?.(de):Qt.info?.(de):Qt.error?.(de),Y=c.protocolVersion<5?128:de.statusCode===403?135:de.statusCode===404?143:128}L.push(Y)}await a.committed,g({cmd:"suback",granted:L,messageId:f.messageId});break;case"unsubscribe":{let Q=[];for(let Y of f.unsubscriptions)Q.push(a.removeSubscription(Y)?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",x=e.deserialize||(e.deserialize=wo(r?.headers.get?.("content-type"))),k=(f.payload?.length||0)>0?x(f.payload):void 0,F;try{F=await a.publish(f,k)}catch(Q){s.events.emit("error",Q,e,f,a),Qt.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:F===!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"),Qt.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),Qt.error?.(R),g({cmd:"disconnect"})}function g(R,L){let O=(0,AR.generate)(R,c);t(O),Ge(O.length,"bytes-sent",L,b(R),"mqtt")}o(g,"sendPacket");function b(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(b,"packetMethodName");function S(R){return Io(R,r)}o(S,"serialize")}),l.on("error",f=>{Qt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var AR,oJ,Uf,aJ,cJ,lJ,bR,Qt,uJ,Zbe,sJ,RR,dJ=oe(()=>{AR=require("mqtt-packet");nJ();oJ=w(Fn());No();Jn();xr();Uf=w(fe());H();aJ=w(Qn()),cJ=w(z()),lJ=require("events");XS();bR=(0,aJ.loggerWithTag)("auth-event"),Qt=(0,cJ.forComponent)("mqtt"),uJ=(0,Uf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Xbe,"bypassAuth");Zbe=o(e=>uJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(eAe,"start");RR=0;o(iJ,"onSocket")});function IR(e,t){if(t?.includes(".."))throw new HD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var HD,GD=oe(()=>{HD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(IR,"resolveBaseURLPath")});function fJ(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 mJ=oe(()=>{o(fJ,"deriveCommonPatternBase")});function wR(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 qD=oe(()=>{o(wR,"deriveGlobOptions")});var pJ,$D,CE,hJ=oe(()=>{GD();mJ();qD();pJ=require("micromatch"),$D=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"}},CE=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=IR(this.name,this.config.urlPath),this.globOptions=wR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new $D(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,pJ.scan)(s).base),this.commonPatternBase=fJ(this.patternBases)}}});function EJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function uu(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(EJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(EJ(n,t)){t=t.slice(n.length+1);break}}}return(0,_J.join)(e.baseURLPath,t)}var _J,VD=oe(()=>{_J=require("node:path");o(EJ,"pathStartsWithBase");o(uu,"deriveURLPath")});function gJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var CR,SJ,TJ,KD,yJ,RJ,NR,bJ=oe(()=>{CR=require("node:events");hJ();SJ=w(z()),TJ=w(require("chokidar")),KD=require("node:path"),yJ=require("node:fs/promises");VD();RJ=require("micromatch"),NR=class extends CR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new CE(t,r,gJ(n)),this.#r=s||SJ.default.loggerWithTag(t),this.ready=(0,CR.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,RJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,KD.join)(this.directory,r);switch(t){case"add":case"change":{let i=uu(this.#e,r,"file");(0,yJ.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=uu(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=uu(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,KD.join)(this.#e.directory,r));return this.#t=TJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new CE(this.name,this.directory,gJ(t)),this.#a()}};o(gJ,"castConfig")});var OR,YD=oe(()=>{OR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var LR,AJ,IJ,wJ,NJ,CJ,WD,zD,jD,QD,JD,PR,OJ=oe(()=>{LR=require("events"),AJ=w(require("yaml")),IJ=w(require("chokidar")),wJ=require("node:fs/promises"),NJ=require("util"),CJ=w(z());YD();WD=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"}},zD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},jD=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"}},QD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},JD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},PR=class extends LR.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||CJ.default.loggerWithTag(t),this.ready=(0,LR.once)(this,"ready"),this.#t=IJ.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,wJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=AJ.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 WD(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=OR,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,NJ.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 zD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new jD(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 QD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new JD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var vR,PJ,DR,MR,LJ=oe(()=>{vR=require("node:events");bJ();OJ();PJ=w(z());pL();DR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},MR=class extends vR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,PJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,vR.once)(this,"ready"),this.options=new PR(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 NR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new DR);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 DR);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}`),Vj()}}});function du(e){return typeof e=="string"&&e.trim()!==""}function XD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>du(t))}function UJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function tAe(e){e.config.root&&OE.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 iM(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(UJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,PE.join)(e.directory,i);UR.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 xJ(e){let t=!1;if(t=await tAe(e),t)return t;let r=await(0,DJ.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,PE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=uu(e,n.path,"directory");UR.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=uu(e,n.path,"file"),a=await(0,MJ.readFile)(s);UR.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 OE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var UR,DJ,OE,PE,MJ,vJ,xR,Ci,ZD,eM,tM,rM,nM,sM,iM,oM,aM,BJ=oe(()=>{UR=require("node:worker_threads"),DJ=w(require("fast-glob")),OE=w(z());GD();qD();PE=require("node:path"),MJ=require("node:fs/promises");VD();vJ=require("micromatch"),xR=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,!du(this.config.files)&&!XD(this.config.files)&&!UJ(this.config.files))throw new ZD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!XD(this.config.files.source)&&!du(this.config.files.source))throw new eM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new tM(this);if(this.config.files.ignore!==void 0&&!XD(this.config.files.ignore)&&!du(this.config.files.ignore))throw new rM(this)}if(this.config.root!==void 0&&!du(this.config.root))throw new sM(this);if(this.config.path!==void 0&&!du(this.config.path))throw new oM(this);if(this.config.path&&(OE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!du(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new aM(this);this.globOptions=wR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new nM(this,r);return r.startsWith("/")&&(OE.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,vJ.scan)(r).base),this.baseURLPath=IR(this.name,this.config.urlPath)}},Ci=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,PE.basename)(r.directory)}) ${t}`)}},ZD=class extends Ci{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)}},eM=class extends Ci{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},tM=class extends Ci{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},rM=class extends Ci{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},nM=class extends Ci{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},sM=class extends Ci{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)}},iM=class extends Ci{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)}},oM=class extends Ci{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},aM=class extends Ci{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(du,"isNonEmptyString");o(XD,"isArrayOfNonEmptyStrings");o(UJ,"isObject");o(tAe,"handleRoots");o(xJ,"processResourceExtensionComponent")});var dy={};be(dy,{getComponentName:()=>cy,loadComponent:()=>HR,loadComponentDirectories:()=>GJ,setErrorReporter:()=>nAe});function GJ(e,t){t&&(lM=t),e&&(mM=e);let r=[];if((0,Ft.existsSync)(cM)){let s=(0,Ft.readdirSync)(cM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(cM,a);r.push(HR(c,lM,fb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(HR(n,lM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{HJ=!0})}function nAe(e){FR=e}function sAe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{fa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(fa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,on.join)(e,"node_modules");(0,Ft.existsSync)(s)||(0,Ft.mkdirSync)(s);let i=(0,on.join)(s,"harperdb");if((0,Ft.existsSync)(i)){if((0,Ft.realpathSync)(i)===(0,Ft.realpathSync)(fM.PACKAGE_ROOT))return t();(0,Ft.rmSync)(i,{recursive:!0,force:!0})}(0,Ft.symlinkSync)(fM.PACKAGE_ROOT,i,"dir"),t()}finally{fa.primaryStore.unlock(e,0)}})}function qJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return fa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(qJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{fa.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function HR(e,t,r,n,s,i){let a=(0,Ft.realpathSync)(e);if(BR.has(a))return BR.get(a);BR.set(a,!0),s&&(mM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");if((0,Ft.existsSync)(l)?c=n?(0,GR.getConfigObj)():(0,dM.parseDocument)((0,Ft.readFileSync)(l,"utf8")).toJSON():!n&&(0,Ft.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,dM.parseDocument)((0,Ft.readFileSync)(l,"utf8")).toJSON():c=OR,!n)try{await sAe(e)}catch(m){_a.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&_a.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=kR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;kR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O;if(n)O=(0,on.join)(e,"components",m);else{let x=e;for(;!(0,Ft.existsSync)(O=(0,on.join)(x,"node_modules",m));)if(x=(0,on.dirname)(x),x.length<(0,kJ.getHdbBasePath)().length){O=null;break}}if(O)E=await HR(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=rAe[m];if(!E)continue;Go.loading(p);let b=o(O=>(O.origin=r,Je(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,L=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Go.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&_a.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new MR(m,e,l,t,Me);await qJ(O,E),Go.loaded(p,`Component '${p}' loaded successfully`);continue}if(uM.isMainThread&&(E=await E.startOnMainThread?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E,n&&S))for(let O of[L,R])try{if(+O&&!FJ.includes(O)){let x=pM.get(U.HTTP_SESSIONAFFINITY);x&&_a.default.warn("Session affinity is not recommended and may cause memory leaks"),(x||!cS)&&(FJ.push(O),FP(O,x))}}catch(x){console.error("Error listening on socket",O,x,m)}if(t.isWorker&&(E=await E.start?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E),mM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new xR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await xJ(O)}Go.loaded(p,`Component '${p}' loaded successfully`)}catch(b){b.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${b.message}`,FR?.(b),((0,LE.getWorkerIndex)()===0?console:_a.default).error(b),t.set(h.path||"/",new sl(b),null,!0),Go.failed(p,b,`Could not load component '${p}'`)}}if(kR=u,uM.isMainThread&&!HJ&&i&&(0,LE.watchDir)(e,async()=>GJ()),c.extensionModule||c.pluginModule){let m=await iS((0,on.join)(e,c.extensionModule||c.pluginModule));return BR.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?`;FR?.(new Error(m)),((0,LE.getWorkerIndex)()===0?console:_a.default).error(m),Go.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||_a.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,FR?.(c),t.set("",new sl(c))}}var Ft,on,uM,dM,pM,fM,_a,LE,kJ,GR,cM,mM,HJ,lM,rAe,FJ,BR,FR,kR,cy,Kh=oe(()=>{Ft=require("node:fs"),on=require("node:path"),uM=require("node:worker_threads"),dM=require("yaml"),pM=w(fe()),fM=w(Rt());H();AG();vG();zG();eq();tq();Eq();b2();A2();w2();_a=w(z());D2();LE=w(rt());hN();xr();Ne();HP();kJ=w(fe());V2();yy();vD();cs();dJ();GR=w(pt());Fp();FA();LJ();BJ();DP();oE();Sp();YD();cM=(0,GR.resolvePath)(pM.get(U.COMPONENTSROOT)),mM=new Map;o(GJ,"loadComponentDirectories");rAe={REST:uS,rest:uS,graphql:aN,graphqlSchema:iN,roles:pN,jsResource:EN,fastifyRoutes:bD,login:gN,static:ID,operationsApi:CD,customFunctions:{},http:ay,clustering:SR,replication:Yo,authentication:Jh,mqtt:kD,loadEnv:wD,logging:_a.default,dataLoader:ND},FJ=[],BR=new Map;o(nAe,"setErrorReporter");cy=o(()=>kR,"getComponentName");o(sAe,"symlinkHarperModule");o(qJ,"sequentiallyHandleApplication");o(HR,"loadComponent")});var fy=v((jGe,$J)=>{var{isMainThread:hM}=require("worker_threads"),{getTables:iAe}=(Ne(),M(ft)),{loadComponentDirectories:oAe,loadComponent:aAe}=(Kh(),M(dy)),{resetResources:cAe}=(Ua(),M(kA)),lAe=pt(),{dirname:uAe}=require("path"),{getConnection:dAe}=rr(),fAe=fe(),{CONFIG_PARAMS:mAe}=(H(),M(W)),{loadCertificates:pAe}=us(),{installApplications:hAe}=(Iy(),M(Ay)),{loadAndWatchLicensesDir:EAe}=(Hh(),M(ty)),EM=new Map;async function _Ae(e=!1){!hM&&fAe.get(mAe.CLUSTERING_ENABLED)&&dAe();try{hM&&await hAe()}catch(n){console.error(n)}let t=cAe();iAe(),t.isWorker=e,hM&&EAe(),await pAe(),await aAe(uAe(lAe.getConfigFilePath()),t,"hdb",!0,EM),await oAe(EM,t);let r=[];for(let[n]of EM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(_Ae,"loadRootComponents");$J.exports.loadRootComponents=_Ae});var rt=v((JGe,Pi)=>{"use strict";VE();var{Worker:gAe,MessageChannel:SAe,parentPort:mo,isMainThread:yM,threadId:TAe,workerData:po}=require("worker_threads"),{PACKAGE_ROOT:yAe}=Rt(),{join:WJ,isAbsolute:RAe,extname:bAe}=require("path"),{server:zJ}=(xr(),M(em)),{watch:AAe,readdir:IAe}=require("fs/promises"),{totalmem:VJ}=require("os"),xf=(H(),M(W)),jJ=fe(),Oi=z(),{randomBytes:wAe}=require("crypto"),{_assignPackageExport:NAe}=ti(),KJ=1024*1024,ga=[],Qs=[],CAe=50,RM=1e4,OAe="restart",QJ="request_thread_info",JJ="resource_report",XJ="thread_info",ZJ="added-port",PAe="ack",_M;NAe("threads",Qs);Pi.exports={startWorker:gM,restartWorkers:AM,shutdownWorkers:i3,shutdownWorkersNow:UAe,workers:ga,setMonitorListener:$Ae,onMessageFromWorkers:xAe,onMessageByType:a3,broadcast:FAe,broadcastWithAcknowledgement:HAe,setChildListenerByType:vAe,getWorkerIndex:e3,getWorkerCount:t3,getTicketKeys:n3,setMainIsWorker:DAe,setTerminateTimeout:LAe,restartNumber:po?.restartNumber||1};Qs.onMessageByType=a3;Qs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Qs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Pi.exports.whenThreadsStarted=new Promise(e=>{Pi.exports.threadsHaveStarted=e});var bM;function LAe(e){RM=e}o(LAe,"setTerminateTimeout");function e3(){return po?po.workerIndex:bM?0:void 0}o(e3,"getWorkerIndex");function t3(){return po?po.workerCount:bM?1:void 0}o(t3,"getWorkerCount");function DAe(e){bM=e,Pi.exports.threadsHaveStarted()}o(DAe,"setMainIsWorker");var r3=1,qR;function n3(){return qR||(qR=yM?wAe(48):po.ticketKeys,qR)}o(n3,"getTicketKeys");Object.defineProperty(zJ,"workerIndex",{get(){return e3()}});Object.defineProperty(zJ,"workerCount",{get(){return t3()}});var s3={[QJ](e,t){GAe(t)},[JJ](e,t){qAe(t,e)}};function gM(e,t={}){let r=process.constrainedMemory?.()||VJ();r=Math.min(r,VJ(),2e4*KJ);let n=jJ.get(xf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/KJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Qs){let u=new SAe;u.existingPort=l,i.push(u),a.push(u.port2)}bAe(e)||(e+=".js");let c=new gAe(RAe(e)?e:WJ(yAe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:r3=t.threadCount,name:t.name,restartNumber:Pi.exports.restartNumber,ticketKeys:n3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:ZJ,port:l,threadId:c.threadId},[l]);return VR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>gM(e,t),c.on("error",l=>{Oi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{ga.splice(ga.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<CAe?(t.unexpectedRestarts=c.unexpectedRestarts+1,gM(e,t)):Oi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{s3[l.type]?.(l,c)}),ga.push(c),KAe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(gM,"startWorker");var MAe=[xf.THREAD_TYPES.HTTP];async function AM(e=null,t=Math.max(r3>3,1),r=!0){if(yM){try{process.chdir(process.cwd())}catch(a){Oi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=fy();await a()}Pi.exports.restartNumber++,t<1&&(t=t*ga.length);let n=[],s=[];for(let a of ga.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Oi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Pi.exports.restartNumber,type:xf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=MAe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Oi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},RM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===xf.ITC_EVENT_TYPES.CHILD_STARTED&&(Oi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Oi.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}=yf();r&&(e==="http"||!e)&&jJ.get(xf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:OAe,workerType:e})}o(AM,"restartWorkers");function vAe(e,t){s3[e]=t}o(vAe,"setChildListenerByType");function i3(e){return AM(e,1/0,!1)}o(i3,"shutdownWorkers");function UAe(e){return i3(e),Promise.all(ga.map(t=>t.terminate()))}o(UAe,"shutdownWorkersNow");var o3=[];function xAe(e){o3.push(e)}o(xAe,"onMessageFromWorkers");var SM=new Map;function a3(e,t){let r=SM.get(e);r||SM.set(e,r=[]),r.push(t)}o(a3,"onMessageByType");var BAe=10;async function FAe(e,t){let r=0;for(let n of Qs)try{n.postMessage(e),r++>BAe&&(r=0,await new Promise(setImmediate))}catch(s){Oi.error("Unable to send message to worker",s)}t&&l3(e,null)}o(FAe,"broadcast");var $R=new Map,kAe=1;function HAe(e){return new Promise(t=>{let r=0;for(let n of Qs)try{let s=kAe++,i=o(()=>{$R.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,$R.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of $R)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Oi.error("Unable to send message to worker",s)}r===0&&t()})}o(HAe,"broadcastWithAcknowledgement");function GAe(e){e.postMessage({type:XJ,workers:c3()})}o(GAe,"sendThreadInfo");function c3(){let e=Date.now();return ga.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(c3,"getChildWorkerInfo");function qAe(e,t){e.resources=t,e.resources.updated=Date.now()}o(qAe,"recordResourceReport");var TM;function $Ae(e){TM=e}o($Ae,"setMonitorListener");var VAe=1e3,YJ=!1;function KAe(){YJ||(YJ=!0,setInterval(()=>{for(let e of ga){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}TM&&TM()},VAe).unref())}o(KAe,"startMonitoring");var YAe=1e3;if(mo&&po?.addPorts){VR(mo);for(let e=0,t=po.addPorts.length;e<t;e++){let r=po.addPorts[e];r.threadId=po.addThreadIds[e],VR(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:JJ,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},YAe).unref(),_M=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:QJ});function r(n){n.type===XJ&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else _M=c3;Pi.exports.getThreadInfo=_M;function VR(e,t){Qs.push(e),e.on("message",r=>{if(r.type===ZJ)r.port.threadId=r.threadId,VR(r.port);else if(r.type===PAe){let n=$R.get(r.id);n&&n()}else l3(r,e)}).on("close",()=>{Qs.splice(Qs.indexOf(e),1)}).on("exit",()=>{Qs.splice(Qs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(VR,"addPort");function l3(e,t){for(let n of o3)n(e,t);let r=SM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Oi.error(s)}}o(l3,"notifyMessageListeners");if(yM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await IAe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(WJ(s,a.name));try{for await(let{filename:a}of AAe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await AM(),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===xf.ITC_EVENT_TYPES.SHUTDOWN&&(Pi.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Oi.warn("Thread did not voluntarily terminate",TAe),process.exit(0)},RM).unref())})});var h3=v((tqe,p3)=>{"use strict";var{promises:Bf,createReadStream:WAe,createWriteStream:zAe}=require("fs"),{createGzip:jAe}=require("zlib"),{promisify:QAe}=require("util"),{pipeline:JAe}=require("stream"),XAe=QAe(JAe),wM=require("path"),m3=fe();m3.initSync();var KR=z(),{CONFIG_PARAMS:ZAe,ITC_EVENT_TYPES:ZGe}=(H(),M(W)),{onMessageFromWorkers:eqe}=rt(),{convertToMS:u3}=ce(),{onStorageReclamation:eIe}=(P_(),M(VU)),tIe=6e4,rIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",nIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",IM,d3;p3.exports=sIe;function sIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(eIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(rIe);if(!i)throw new Error(nIe);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=u3(r));let d;return IM=Date.now(),KR.trace("Log rotate enabled, maxSize:",t,"interval:",r),d3=setInterval(async()=>{if(l){let f;f=await Bf.stat(e.path),f.size>=l&&(d=await f3(e.path,i))}if(u&&Date.now()-IM>=u&&(d=await f3(e.path,i),IM=Date.now()),n||c){let f=u3(n??"1M")/(1+c);c=0;let m=await Bf.readdir(i);for(let p of m)try{let h=await Bf.stat(wM.join(i,p));Date.now()-h.mtimeMs>f&&await Bf.unlink(wM.join(i,p))}catch(h){KR.error("Error trying to remove log",p,h)}}},a??tIe).unref(),{end(){clearInterval(d3)},getLastRotatedLogPath(){return d}}}o(sIe,"logRotator");async function f3(e,t){let r=m3.get(ZAe.LOGGING_ROTATION_COMPRESS),n=wM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Bf.rename(e,n),r&&(e=n,n+=".gz",await XAe(WAe(e),jAe(),zAe(n)),await Bf.unlink(e)),KR.closeLogFile(),KR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(f3,"moveLogFile")});var T3={};be(T3,{RootConfigWatcher:()=>NM});var E3,_3,g3,YR,S3,NM,y3=oe(()=>{E3=w(require("chokidar")),_3=require("node:fs/promises"),g3=w(pt()),YR=require("node:stream"),S3=require("yaml"),NM=class extends YR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,g3.getConfigFilePath)(),this.ready=(0,YR.once)(this,"ready"),this.#t=E3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,_3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,S3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var z=v((oqe,eb)=>{"use strict";var Sa=require("fs-extra"),{workerData:iIe,threadId:oIe,isMainThread:N3}=require("worker_threads"),vE=require("path"),C3=require("yaml"),O3=require("properties-reader"),$r=(H(),M(W)),R3=Hc(),aIe=require("os"),{PACKAGE_ROOT:UM}=Rt(),{_assignPackageExport:cIe}=ti(),{Console:lIe}=require("console"),OM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),b3=new Map,{join:Ta}=vE,A3=1e4,ar={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},uIe={STDOUT:"stdOut",STDERR:"stdErr"},iqe=Ta(UM,"logs"),dIe=Ta(UM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),fIe=1e4,UE,xE,WR,ho,PM,CM,jR,Ot,Ts,QR,JR,Ff,ME,DE;function zR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=vE.dirname(n)):t.root?n=Ta(t.root,PM):(n=Ot.path,t.root||(t.root=vE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=ar[t.level]??Ot?.level??ar.info,P3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ot.path===e.path&&r)}o(zR,"updateLogger");function P3(e){let t=e.conditional??(e.conditional={});t.notify=ar.notify>=e.level?e.notify.bind(e):void 0,t.fatal=ar.fatal>=e.level?e.fatal.bind(e):void 0,t.error=ar.error>=e.level?e.error.bind(e):void 0,t.warn=ar.warn>=e.level?e.warn.bind(e):void 0,t.info=ar.info>=e.level?e.info.bind(e):void 0,t.debug=ar.debug>=e.level?e.debug.bind(e):void 0,t.trace=ar.trace>=e.level?e.trace.bind(e):void 0}o(P3,"updateConditional");async function LM(){DE||(DE=new DIe,await DE.ready,DE.on("change",LM));let e=DE.config,t=e.logging??{};zR(Ot,t),jR=Ot.path,UE=t.console??!1,t.external&&zR(Ts,t.external);for(let r in e){let n=e[r];n.logging?zR(Ot.forComponent(r),n.logging,r):Ot.hasComponent(r)&&zR(Ot.forComponent(r),t,r)}}o(LM,"updateLogSettings");var DM=class extends lIe{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){An="trace",this.level<=ar.trace&&super.info(...t),An="info"}debug(...t){An="debug",this.level<=ar.debug&&super.info(...t),An="info"}info(...t){An="info",this.level<=ar.info&&super.info(...t),An="info"}warn(...t){An="warn",this.level<=ar.warn&&super.warn(...t),An="info"}error(...t){An="error",this.level<=ar.error&&super.error(...t),An="info"}fatal(...t){Ff=!0;try{An="fatal",this.level<=ar.fatal&&super.error(...t),An="info"}finally{Ff=!1}}notify(...t){Ff=!0;try{An="notify",this.level<=ar.notify&&super.info(...t),An="info"}finally{Ff=!1}}withTag(t){return D3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};ME===void 0&&L3();eb.exports={notify:yIe,fatal:RIe,error:vM,warn:bIe,info:gIe,debug:TIe,trace:SIe,logLevel:ho,loggerWithTag:D3,suppressLogging:EIe,initLogSettings:L3,logCustomLevel:AIe,closeLogFile:M3,createLogger:ZR,logsAtLevel:pIe,getLogFilePath:o(()=>jR,"getLogFilePath"),forComponent:o(e=>Ot.forComponent(e),"forComponent"),setMainLogger:PIe,setLogLevel:wIe,OUTPUTS:uIe,AuthAuditLog:LIe,start:LM,startOnMainThread:LM,errorToString:OIe,disableStdio:mIe};function mIe(){OM=o(function(){},"nativeStdWrite")}o(mIe,"disableStdio");eb.exports.externalLogger={notify(...e){Ts.notify(...e)},fatal(...e){Ts.fatal(...e)},error(...e){Ts.error(...e)},warn(...e){Ts.warn(...e)},info(...e){Ts.info(...e)},debug(...e){Ts.debug(...e)},trace(...e){Ts.trace(...e)},withTag(e){return Ts.withTag(e)}};cIe("logger",eb.exports.externalLogger);function pIe(e){return ar[ho]<=ar[e]}o(pIe,"logsAtLevel");function L3(e=!1){try{if(ME===void 0||e){M3();let t=IIe(),r=R3(["ROOTPATH"]);try{ME=O3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Sa.pathExistsSync(Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:ho,configLogPath:CM,toFile:xE,logConsole:UE,rotation:n,toStream:WR}=NIe(r.ROOTPATH?Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE):ME.get("settings_path")),PM=$r.LOG_NAMES.HDB,jR=Ta(CM,PM),Ot=ZR({path:jR,level:ho,stdStreams:WR,rotation:n}),Ts=Ot.forComponent("external"),Ts.tag=null,N3)try{require("segfault-handler").registerHandler(Ta(CM,"crash.log"))}catch{}}}catch(t){if(ME=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=R3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){ho=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(UE=i)}let{defaultLevel:n}=CIe();xE=!1,WR=!0,ho=ho===void 0?n:ho,Ot=ZR({level:ho}),Ts=Ot.forComponent("external"),Ts.tag=null;return}throw vM("Error initializing log settings"),vM(t),t}process.env.DEV_MODE&&(WR=!0),hIe()}o(L3,"initLogSettings");var Oc=!0;function hIe(){xE&&(process.stdout.write=function(e){return typeof e=="string"&&Oc&&UE&&(e=e.toString(),e[e.length-1]===`
135
+ `&&(e=e.slice(0,-1)),JR(e)),OM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Oc&&UE&&(e[e.length-1]===`
136
+ `&&(e=e.slice(0,-1)),JR(e)),OM.apply(process.stderr,arguments)})}o(hIe,"stdioLogging");function D3(e,t,r=Ot){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<=ar[i]?function(...a){XR=e;try{return s.call(r,...a)}finally{XR=void 0}}:null}o(n,"logWithTag")}o(D3,"loggerWithTag");function EIe(e){try{Oc=!1,e()}finally{Oc=!0}}o(EIe,"suppressLogging");var _Ie=iIe?.name?.replace(/ /g,"-")||"main",An="info",MM,XR;function ZR({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=ar[t],l;function u(p){if(xE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Oc=!1;try{process.stdout.write(p)}finally{Oc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(xE){if(f(p),r){Oc=!1;try{process.stderr.write(p)}finally{Oc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&w3(e,n,s);function m(p){return{write(h){let E=[An];E.unshift(MM||_Ie+"/"+oIe),XR&&E.push(XR),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(JR=f),l=new DM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),P3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=w3(e,l.rotation,s),s&&(JR=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=ZR({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(ZR,"createLogger");var I3=100;function w3(e,t,r){let n=b3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,b3.set(e,n)),N3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=h3();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
137
137
  `)?"":`
138
138
  `}`;c?(c.length<A3?c.push(E):c.length===A3&&c.push(`Maximum log buffer rate reached, logs will be throttled
139
- `),Ff&&(clearTimeout(a),f())):Ff||l<performance.now()+I3?f(E):(l=Math.min(l,performance.now()+I3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Sa.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Sa.closeSync(s)}catch{}s=null,r&&(QR=null)}function p(h){if(!s){try{s=Sa.openSync(e,"a"),r&&(QR=s)}catch(E){if(E.code==="ENOENT"&&!h)return Sa.mkdirpSync(UE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},hIe).unref()}}}o(w3,"getFileLogger");function yIe(...e){Ot.info(...e)}o(yIe,"info");function RIe(...e){Ot.trace(...e)}o(RIe,"trace");function vM(...e){Ot.error(...e)}o(vM,"error");function bIe(...e){Ot.debug(...e)}o(bIe,"debug");function AIe(...e){Ot.notify(...e)}o(AIe,"notify");function IIe(...e){Ot.fatal(...e)}o(IIe,"fatal");function wIe(...e){Ot.warn(...e)}o(wIe,"warn");function NIe(e,t,r,...n){MM=r.service_name;try{Ot[e](...n)}finally{MM=void 0}}o(NIe,"logCustomLevel");function CIe(){let e;try{e=uIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ta(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Sa.existsSync(t)||(t=Ta(UM,"utility/hdb_boot_properties.file")),t}o(CIe,"getPropsFilePath");function OIe(e){ho=e}o(OIe,"setLogLevel");function PIe(e){try{if(e.includes("config/settings.js")){let l=O3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:UE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=C3.parseDocument(Sa.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(PIe,"getLogConfig");function LIe(){try{let e=C3.parseDocument(Sa.readFileSync(pIe,"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(LIe,"getDefaultConfig");function DIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(DIe,"errorToString");function MIe(e){Ot=e}o(MIe,"setMainLogger");function M3(){try{Sa.closeSync(QR)}catch{}QR=null}o(M3,"closeLogFile");function vIe(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(vIe,"AuthAuditLog");var{RootConfigWatcher:UIe}=(y3(),M(T3))});var ce=v(Ae=>{"use strict";var Pc=require("path"),F3=require("fs-extra"),Kn=z(),v3=require("fs-extra"),tb=require("os"),xIe=require("net"),BIe=require("recursive-iterator"),Dr=(H(),M(W)),{PACKAGE_ROOT:FIe}=bt(),kIe=dP(),U3=require("papaparse"),rb=require("moment"),{inspect:HIe}=require("util"),x3=require("is-number"),GIe=require("minimist"),qIe=require("https"),$Ie=require("http"),VIe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,k3=require("util").promisify(setTimeout),KIe=100,YIe=5,WIe="",zIe=4,B3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=ys;Ae.isEmptyOrZeroLength=Eo;Ae.arrayHasEmptyValues=JIe;Ae.arrayHasEmptyOrZeroLengthValues=XIe;Ae.buildFolderPath=ZIe;Ae.isBoolean=H3;Ae.errorizeMessage=jIe;Ae.stripFileExtension=twe;Ae.autoCast=rwe;Ae.autoCastJSON=G3;Ae.autoCastJSONDeep=BM;Ae.removeDir=nwe;Ae.compareVersions=swe;Ae.isCompatibleDataVersion=iwe;Ae.escapeRawValue=owe;Ae.unescapeValue=awe;Ae.stringifyProps=cwe;Ae.timeoutPromise=uwe;Ae.isClusterOperation=fwe;Ae.getClusterUser=pwe;Ae.checkGlobalSchemaTable=mwe;Ae.getHomeDir=$3;Ae.getPropsFilePath=lwe;Ae.promisifyPapaParse=hwe;Ae.removeBOM=V3;Ae.createEventPromise=Ewe;Ae.checkProcessRunning=_we;Ae.checkSchemaTableExist=gwe;Ae.checkSchemaExists=K3;Ae.checkTableExists=Y3;Ae.getStartOfTomorrowInSeconds=Swe;Ae.getLimitKey=Twe;Ae.isObject=ewe;Ae.isNotEmptyAndHasValue=QIe;Ae.autoCasterIsNumberCheck=q3;Ae.backtickASTSchemaItems=ywe;Ae.isPortTaken=dwe;Ae.createForkArgs=Rwe;Ae.autoCastBoolean=bwe;Ae.asyncSetTimeout=k3;Ae.getTableHashAttribute=Awe;Ae.doesSchemaExist=Iwe;Ae.doesTableExist=wwe;Ae.stringifyObj=Nwe;Ae.ms_to_time=Cwe;Ae.changeExtension=Owe;Ae.getEnvCliRootPath=FM;Ae.noBootFile=Pwe;Ae.httpRequest=Lwe;Ae.transformReq=Dwe;Ae.convertToMS=Mwe;Ae.PACKAGE_ROOT=FIe;function jIe(e){return e instanceof Error?e:new Error(e)}o(jIe,"errorizeMessage");function ys(e){return e==null}o(ys,"isEmpty");function QIe(e){return!ys(e)&&(e||e===0||e===""||H3(e))}o(QIe,"isNotEmptyAndHasValue");function Eo(e){return ys(e)||e.length===0||e.size===0}o(Eo,"isEmptyOrZeroLength");function JIe(e){if(ys(e))return!0;for(let t=0;t<e.length;t++)if(ys(e[t]))return!0;return!1}o(JIe,"arrayHasEmptyValues");function XIe(e){if(Eo(e))return!0;for(let t=0;t<e.length;t++)if(Eo(e[t]))return!0;return!1}o(XIe,"arrayHasEmptyOrZeroLengthValues");function ZIe(...e){try{return e.join(Pc.sep)}catch{console.error(e)}}o(ZIe,"buildFolderPath");function H3(e){return ys(e)?!1:e===!0||e===!1}o(H3,"isBoolean");function ewe(e){return ys(e)?!1:typeof e=="object"}o(ewe,"isObject");function twe(e){return Eo(e)?WIe:e.slice(0,-zIe)}o(twe,"stripFileExtension");function rwe(e){return ys(e)||e===""||typeof e!="string"?e:B3[e]!==void 0?B3[e]:q3(e)===!0?Number(e):VIe.test(e)?new Date(e):e}o(rwe,"autoCast");function G3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(G3,"autoCastJSON");function BM(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=BM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=BM(r);n!==r&&(e[t]=n)}return e}else return G3(e)}o(BM,"autoCastJSONDeep");function q3(e){if(e.startsWith("0.")&&x3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&x3(e))}o(q3,"autoCasterIsNumberCheck");async function nwe(e){if(Eo(e))throw new Error(`Directory path: ${e} does not exist`);try{await v3.emptyDir(e),await v3.remove(e)}catch(t){throw Kn.error(`Error removing files in ${e} -- ${t}`),t}}o(nwe,"removeDir");function swe(e,t){if(Eo(e)){Kn.info("Invalid current version sent as parameter.");return}if(Eo(t)){Kn.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(swe,"compareVersions");function iwe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(iwe,"isCompatibleDataVersion");function owe(e){if(ys(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(owe,"escapeRawValue");function awe(e){if(ys(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(awe,"unescapeValue");function cwe(e,t){if(ys(e))return Kn.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+tb.EOL}!Eo(n)&&n[0]===";"?r+=" "+n+s+tb.EOL:Eo(n)||(r+=n+"="+s+tb.EOL)}catch{Kn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(cwe,"stringifyProps");function $3(){let e;try{e=tb.homedir()}catch{e=process.env.HOME}return e}o($3,"getHomeDir");function lwe(){let e=Pc.join($3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return F3.existsSync(e)||(e=Pc.join(__dirname,"../","hdb_boot_properties.file")),e}o(lwe,"getPropsFilePath");function uwe(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(uwe,"timeoutPromise");async function dwe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=xIe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(dwe,"isPortTaken");function fwe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Kn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(fwe,"isClusterOperation");function mwe(e,t){let r=(Ne(),M(ft)).getDatabases();if(!r[e])return nb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return nb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(mwe,"checkGlobalSchemaTable");function pwe(e,t){if(ys(t)){Kn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ys(e)||Eo(e)){Kn.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){Kn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Kn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(pwe,"getClusterUser");function hwe(){U3.parsePromise=function(e,t,r){return new Promise(function(n,s){U3.parse(e,{header:!0,transformHeader:V3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(hwe,"promisifyPapaParse");function V3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(V3,"removeBOM");function Ewe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Kn.info(`Got cluster status event response: ${HIe(s)}`);try{i.cancel()}catch{Kn.error("Error trying to cancel timeout.")}n(s)})})}o(Ewe,"createEventPromise");async function _we(e){let t=!0,r=0;do await k3(KIe*r++),(await kIe.findPs(e)).length>0&&(t=!1);while(t&&r<YIe);if(t)throw new Error(`process ${e} was not started`)}o(_we,"checkProcessRunning");function gwe(e,t){let r=K3(e);if(r)return r;let n=Y3(e,t);if(n)return n}o(gwe,"checkSchemaTableExist");function K3(e){let{getDatabases:t}=(Ne(),M(ft));if(!t()[e])return nb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(K3,"checkSchemaExists");function Y3(e,t){let{getDatabases:r}=(Ne(),M(ft));if(!r()[e][t])return nb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Y3,"checkTableExists");function Swe(){let e=rb().utc().add(1,"d").startOf("d").unix(),t=rb().utc().unix();return e-t}o(Swe,"getStartOfTomorrowInSeconds");function Twe(){return rb().utc().format("DD-MM-YYYY")}o(Twe,"getLimitKey");function ywe(e){try{let t=new BIe(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){Kn.error("Got an error back ticking items."),Kn.error(t)}}o(ywe,"backtickASTSchemaItems");function Rwe(e){return[e]}o(Rwe,"createForkArgs");function bwe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(bwe,"autoCastBoolean");function Awe(e,t){let{getDatabases:r}=(Ne(),M(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(Awe,"getTableHashAttribute");function Iwe(e){let{getDatabases:t}=(Ne(),M(ft));return t()[e]!==void 0}o(Iwe,"doesSchemaExist");function wwe(e,t){let{getDatabases:r}=(Ne(),M(ft));return r()[e]?.[t]!==void 0}o(wwe,"doesTableExist");function Nwe(e){try{return JSON.stringify(e)}catch{return e}}o(Nwe,"stringifyObj");function Cwe(e){let t=rb.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(Cwe,"ms_to_time");function Owe(e,t){let r=Pc.basename(e,Pc.extname(e));return Pc.join(Pc.dirname(e),r+t)}o(Owe,"changeExtension");function FM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=GIe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(FM,"getEnvCliRootPath");var xM;function Pwe(){if(xM)return xM;let e=FM();if(FM()&&F3.pathExistsSync(Pc.join(e,Dr.HDB_CONFIG_FILE)))return xM=!0,!0}o(Pwe,"noBootFile");function Lwe(e,t){let r;return e.protocol==="http:"?r=$Ie:r=qIe,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(Lwe,"httpRequest");function Dwe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Dwe,"transformReq");function Mwe(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(Mwe,"convertToMS");var nb=Kr()});KE();var kM=(H(),M(W)),W3=ce(),FE=z(),vwe=li(),Uwe=Fn(),xwe=(Cy(),M(Ny)),{start:Bwe}=(vD(),M(SR)),{closeConnection:Fwe}=rr(),z3=require("moment"),j3=tR(),{cloneDeep:kwe}=require("lodash"),Hwe=process.env[kM.PROCESS_NAME_ENV_PROP],Lc=Hwe.substring(4);o((async function(){let t={id:Lc,request:void 0},r=0;try{FE.notify("Starting job:",Lc),Bwe(),vwe.setSchemaDataToGlobal(),await Uwe.setUsersWithRolesCache();let n=await j3.getJobById(Lc);if(W3.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdbJob for job: ${Lc}`);let{request:s}=n[0];if(W3.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=kwe(s);let i=xwe.getOperationFunction(s);FE.trace("Running operation:",s.operation,"for job",Lc);let a=await i.job_operation_function(s);FE.trace("Result from job:",Lc,a),t.status=kM.JOB_STATUS_ENUM.COMPLETE,typeof a=="string"?t.message=a:(t.result=a,t.message="Successfully completed job: "+Lc),t.end_datetime=z3().valueOf(),FE.notify("Successfully completed job:",Lc)}catch(n){r=1,FE.error(n),t.status=kM.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=z3().valueOf()}finally{await j3.updateJob(t),await Fwe(),setTimeout(()=>{process.exit(r)},3e3).unref()}}),"job")();
139
+ `),Ff&&(clearTimeout(a),f())):Ff||l<performance.now()+I3?f(E):(l=Math.min(l,performance.now()+I3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Sa.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Sa.closeSync(s)}catch{}s=null,r&&(QR=null)}function p(h){if(!s){try{s=Sa.openSync(e,"a"),r&&(QR=s)}catch(E){if(E.code==="ENOENT"&&!h)return Sa.mkdirpSync(vE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},fIe).unref()}}}o(w3,"getFileLogger");function gIe(...e){Ot.info(...e)}o(gIe,"info");function SIe(...e){Ot.trace(...e)}o(SIe,"trace");function vM(...e){Ot.error(...e)}o(vM,"error");function TIe(...e){Ot.debug(...e)}o(TIe,"debug");function yIe(...e){Ot.notify(...e)}o(yIe,"notify");function RIe(...e){Ot.fatal(...e)}o(RIe,"fatal");function bIe(...e){Ot.warn(...e)}o(bIe,"warn");function AIe(e,t,r,...n){MM=r.service_name;try{Ot[e](...n)}finally{MM=void 0}}o(AIe,"logCustomLevel");function IIe(){let e;try{e=aIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ta(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Sa.existsSync(t)||(t=Ta(UM,"utility/hdb_boot_properties.file")),t}o(IIe,"getPropsFilePath");function wIe(e){ho=e}o(wIe,"setLogLevel");function NIe(e){try{if(e.includes("config/settings.js")){let l=O3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:vE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=C3.parseDocument(Sa.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(NIe,"getLogConfig");function CIe(){try{let e=C3.parseDocument(Sa.readFileSync(dIe,"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(CIe,"getDefaultConfig");function OIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(OIe,"errorToString");function PIe(e){Ot=e}o(PIe,"setMainLogger");function M3(){try{Sa.closeSync(QR)}catch{}QR=null}o(M3,"closeLogFile");function LIe(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(LIe,"AuthAuditLog");var{RootConfigWatcher:DIe}=(y3(),M(T3))});var ce=v(Ae=>{"use strict";var Pc=require("path"),F3=require("fs-extra"),Kn=z(),v3=require("fs-extra"),tb=require("os"),MIe=require("net"),vIe=require("recursive-iterator"),Dr=(H(),M(W)),{PACKAGE_ROOT:UIe}=Rt(),xIe=dP(),U3=require("papaparse"),rb=require("moment"),{inspect:BIe}=require("util"),x3=require("is-number"),FIe=require("minimist"),kIe=require("https"),HIe=require("http"),GIe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,k3=require("util").promisify(setTimeout),qIe=100,$Ie=5,VIe="",KIe=4,B3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=ys;Ae.isEmptyOrZeroLength=Eo;Ae.arrayHasEmptyValues=zIe;Ae.arrayHasEmptyOrZeroLengthValues=jIe;Ae.buildFolderPath=QIe;Ae.isBoolean=H3;Ae.errorizeMessage=YIe;Ae.stripFileExtension=XIe;Ae.autoCast=ZIe;Ae.autoCastJSON=G3;Ae.autoCastJSONDeep=BM;Ae.removeDir=ewe;Ae.compareVersions=twe;Ae.isCompatibleDataVersion=rwe;Ae.escapeRawValue=nwe;Ae.unescapeValue=swe;Ae.stringifyProps=iwe;Ae.timeoutPromise=awe;Ae.isClusterOperation=lwe;Ae.getClusterUser=dwe;Ae.checkGlobalSchemaTable=uwe;Ae.getHomeDir=$3;Ae.getPropsFilePath=owe;Ae.promisifyPapaParse=fwe;Ae.removeBOM=V3;Ae.createEventPromise=mwe;Ae.checkProcessRunning=pwe;Ae.checkSchemaTableExist=hwe;Ae.checkSchemaExists=K3;Ae.checkTableExists=Y3;Ae.getStartOfTomorrowInSeconds=Ewe;Ae.getLimitKey=_we;Ae.isObject=JIe;Ae.isNotEmptyAndHasValue=WIe;Ae.autoCasterIsNumberCheck=q3;Ae.backtickASTSchemaItems=gwe;Ae.isPortTaken=cwe;Ae.createForkArgs=Swe;Ae.autoCastBoolean=Twe;Ae.asyncSetTimeout=k3;Ae.getTableHashAttribute=ywe;Ae.doesSchemaExist=Rwe;Ae.doesTableExist=bwe;Ae.stringifyObj=Awe;Ae.ms_to_time=Iwe;Ae.changeExtension=wwe;Ae.getEnvCliRootPath=FM;Ae.noBootFile=Nwe;Ae.httpRequest=Cwe;Ae.transformReq=Owe;Ae.convertToMS=Pwe;Ae.PACKAGE_ROOT=UIe;function YIe(e){return e instanceof Error?e:new Error(e)}o(YIe,"errorizeMessage");function ys(e){return e==null}o(ys,"isEmpty");function WIe(e){return!ys(e)&&(e||e===0||e===""||H3(e))}o(WIe,"isNotEmptyAndHasValue");function Eo(e){return ys(e)||e.length===0||e.size===0}o(Eo,"isEmptyOrZeroLength");function zIe(e){if(ys(e))return!0;for(let t=0;t<e.length;t++)if(ys(e[t]))return!0;return!1}o(zIe,"arrayHasEmptyValues");function jIe(e){if(Eo(e))return!0;for(let t=0;t<e.length;t++)if(Eo(e[t]))return!0;return!1}o(jIe,"arrayHasEmptyOrZeroLengthValues");function QIe(...e){try{return e.join(Pc.sep)}catch{console.error(e)}}o(QIe,"buildFolderPath");function H3(e){return ys(e)?!1:e===!0||e===!1}o(H3,"isBoolean");function JIe(e){return ys(e)?!1:typeof e=="object"}o(JIe,"isObject");function XIe(e){return Eo(e)?VIe:e.slice(0,-KIe)}o(XIe,"stripFileExtension");function ZIe(e){return ys(e)||e===""||typeof e!="string"?e:B3[e]!==void 0?B3[e]:q3(e)===!0?Number(e):GIe.test(e)?new Date(e):e}o(ZIe,"autoCast");function G3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(G3,"autoCastJSON");function BM(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=BM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=BM(r);n!==r&&(e[t]=n)}return e}else return G3(e)}o(BM,"autoCastJSONDeep");function q3(e){if(e.startsWith("0.")&&x3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&x3(e))}o(q3,"autoCasterIsNumberCheck");async function ewe(e){if(Eo(e))throw new Error(`Directory path: ${e} does not exist`);try{await v3.emptyDir(e),await v3.remove(e)}catch(t){throw Kn.error(`Error removing files in ${e} -- ${t}`),t}}o(ewe,"removeDir");function twe(e,t){if(Eo(e)){Kn.info("Invalid current version sent as parameter.");return}if(Eo(t)){Kn.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(twe,"compareVersions");function rwe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(rwe,"isCompatibleDataVersion");function nwe(e){if(ys(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(nwe,"escapeRawValue");function swe(e){if(ys(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(swe,"unescapeValue");function iwe(e,t){if(ys(e))return Kn.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+tb.EOL}!Eo(n)&&n[0]===";"?r+=" "+n+s+tb.EOL:Eo(n)||(r+=n+"="+s+tb.EOL)}catch{Kn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(iwe,"stringifyProps");function $3(){let e;try{e=tb.homedir()}catch{e=process.env.HOME}return e}o($3,"getHomeDir");function owe(){let e=Pc.join($3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return F3.existsSync(e)||(e=Pc.join(__dirname,"../","hdb_boot_properties.file")),e}o(owe,"getPropsFilePath");function awe(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(awe,"timeoutPromise");async function cwe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=MIe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(cwe,"isPortTaken");function lwe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Kn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(lwe,"isClusterOperation");function uwe(e,t){let r=(Ne(),M(ft)).getDatabases();if(!r[e])return nb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return nb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(uwe,"checkGlobalSchemaTable");function dwe(e,t){if(ys(t)){Kn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ys(e)||Eo(e)){Kn.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){Kn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Kn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(dwe,"getClusterUser");function fwe(){U3.parsePromise=function(e,t,r){return new Promise(function(n,s){U3.parse(e,{header:!0,transformHeader:V3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(fwe,"promisifyPapaParse");function V3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(V3,"removeBOM");function mwe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Kn.info(`Got cluster status event response: ${BIe(s)}`);try{i.cancel()}catch{Kn.error("Error trying to cancel timeout.")}n(s)})})}o(mwe,"createEventPromise");async function pwe(e){let t=!0,r=0;do await k3(qIe*r++),(await xIe.findPs(e)).length>0&&(t=!1);while(t&&r<$Ie);if(t)throw new Error(`process ${e} was not started`)}o(pwe,"checkProcessRunning");function hwe(e,t){let r=K3(e);if(r)return r;let n=Y3(e,t);if(n)return n}o(hwe,"checkSchemaTableExist");function K3(e){let{getDatabases:t}=(Ne(),M(ft));if(!t()[e])return nb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(K3,"checkSchemaExists");function Y3(e,t){let{getDatabases:r}=(Ne(),M(ft));if(!r()[e][t])return nb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Y3,"checkTableExists");function Ewe(){let e=rb().utc().add(1,"d").startOf("d").unix(),t=rb().utc().unix();return e-t}o(Ewe,"getStartOfTomorrowInSeconds");function _we(){return rb().utc().format("DD-MM-YYYY")}o(_we,"getLimitKey");function gwe(e){try{let t=new vIe(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){Kn.error("Got an error back ticking items."),Kn.error(t)}}o(gwe,"backtickASTSchemaItems");function Swe(e){return[e]}o(Swe,"createForkArgs");function Twe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Twe,"autoCastBoolean");function ywe(e,t){let{getDatabases:r}=(Ne(),M(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(ywe,"getTableHashAttribute");function Rwe(e){let{getDatabases:t}=(Ne(),M(ft));return t()[e]!==void 0}o(Rwe,"doesSchemaExist");function bwe(e,t){let{getDatabases:r}=(Ne(),M(ft));return r()[e]?.[t]!==void 0}o(bwe,"doesTableExist");function Awe(e){try{return JSON.stringify(e)}catch{return e}}o(Awe,"stringifyObj");function Iwe(e){let t=rb.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(Iwe,"ms_to_time");function wwe(e,t){let r=Pc.basename(e,Pc.extname(e));return Pc.join(Pc.dirname(e),r+t)}o(wwe,"changeExtension");function FM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=FIe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(FM,"getEnvCliRootPath");var xM;function Nwe(){if(xM)return xM;let e=FM();if(FM()&&F3.pathExistsSync(Pc.join(e,Dr.HDB_CONFIG_FILE)))return xM=!0,!0}o(Nwe,"noBootFile");function Cwe(e,t){let r;return e.protocol==="http:"?r=HIe:r=kIe,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(Cwe,"httpRequest");function Owe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Owe,"transformReq");function Pwe(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(Pwe,"convertToMS");var nb=Kr()});VE();var kM=(H(),M(W)),W3=ce(),BE=z(),Lwe=li(),Dwe=Fn(),Mwe=(Cy(),M(Ny)),{start:vwe}=(vD(),M(SR)),{closeConnection:Uwe}=rr(),z3=require("moment"),j3=tR(),{cloneDeep:xwe}=require("lodash"),Bwe=process.env[kM.PROCESS_NAME_ENV_PROP],Lc=Bwe.substring(4);o((async function(){let t={id:Lc,request:void 0},r=0;try{BE.notify("Starting job:",Lc),vwe(),Lwe.setSchemaDataToGlobal(),await Dwe.setUsersWithRolesCache();let n=await j3.getJobById(Lc);if(W3.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdbJob for job: ${Lc}`);let{request:s}=n[0];if(W3.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=xwe(s);let i=Mwe.getOperationFunction(s);BE.trace("Running operation:",s.operation,"for job",Lc);let a=await i.job_operation_function(s);BE.trace("Result from job:",Lc,a),t.status=kM.JOB_STATUS_ENUM.COMPLETE,typeof a=="string"?t.message=a:(t.result=a,t.message="Successfully completed job: "+Lc),t.end_datetime=z3().valueOf(),BE.notify("Successfully completed job:",Lc)}catch(n){r=1,BE.error(n),t.status=kM.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=z3().valueOf()}finally{await j3.updateJob(t),await Uwe(),setTimeout(()=>{process.exit(r)},3e3).unref()}}),"job")();