harperdb 4.5.0-beta.2 → 4.5.0-beta.3

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,10 +1,10 @@
1
- "use strict";var NQ=Object.create;var Vd=Object.defineProperty;var wQ=Object.getOwnPropertyDescriptor;var IQ=Object.getOwnPropertyNames;var CQ=Object.getPrototypeOf,PQ=Object.prototype.hasOwnProperty;var a=(e,t)=>Vd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ve=(e,t)=>{for(var r in t)Vd(e,r,{get:t[r],enumerable:!0})},WC=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of IQ(t))!PQ.call(e,s)&&s!==r&&Vd(e,s,{get:()=>t[s],enumerable:!(n=wQ(t,s))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?NQ(CQ(e)):{},WC(t||!e||!e.__esModule?Vd(r,"default",{value:e,enumerable:!0}):r,e)),P=e=>WC(Vd({},"__esModule",{value:!0}),e);var mt=I((UTe,jC)=>{var{join:DQ,dirname:zC}=require("node:path"),{existsSync:LQ,readFileSync:MQ}=require("node:fs");function vQ(){let t=__dirname,r,n=0;for(;!LQ(r=DQ(t,"package.json"));)if(t===(t=zC(t))||n++>10)throw new Error("Could not find package root");return r}a(vQ,"findPackageJson");var QC=vQ(),UQ=JSON.parse(MQ(QC,"utf8")),xQ=zC(QC);jC.exports={packageJson:UQ,PACKAGE_ROOT:xQ}});var KT=I((BTe,JC)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c}=require("node:fs"),{isMainThread:l}=require("node:worker_threads"),{spawnSync:u,spawn:f}=require("node:child_process"),{PACKAGE_ROOT:d}=mt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],_="ts-build";if(l){let g=!1,A=!1;if((A=s(n(d,_)))?g=e.sync(h.map(E=>`${E}/**/*.ts`),{cwd:d}).some(E=>{let R=0,N=0;try{R=i(n(d,E)).mtimeMs-5e3,N=i(n(d,_,E.replace(/.ts$/,".js"))).mtimeMs}catch{}return R>N}):g=!0,g){console.log("Compiling TypeScript...");let E=u("npx",["tsc"],{cwd:d});if(E.stdout?.length&&console.log(E.stdout.toString()),E.stderr?.length&&console.log(E.stderr.toString()),A){let R=n(t(),"harperdb-tsc.pid"),N=!1;if(s(R))try{process.kill(+o(R,"utf8"),0),N=!0}catch{}if(!N){console.log("Starting background TypeScript compilation...");let v=f("npx",["tsc","--watch"],{detached:!0,cwd:d,stdio:"ignore"});c(R,v.pid.toString()),v.unref()}}}}let p=JC.constructor,S=p._findPath;p._findPath=function(g,A,E){if(g.startsWith(".")&&!E&&A.length===1&&A[0].startsWith(d)&&!A[0].includes("node_modules")){let R=r(d,A[0]),N;R.startsWith(_)?N=n(d,r(_,R)):N=n(d,_,R);let v=n(N,g),k=v+".js";if(s(k))return k;if(v.includes(".")&&s(v))return v}return S(g,A,E)}}});var $={};ve($,{AUTH_AUDIT_STATUS:()=>Ms,AUTH_AUDIT_TYPES:()=>Vo,BOOT_PROPS_FILE_NAME:()=>a2,BOOT_PROP_PARAMS:()=>eP,CLUSTERING_FLAG:()=>M2,CLUSTERING_PROCESSES:()=>YQ,CLUSTER_MESSAGE_TYPE_ENUM:()=>XT,CLUSTER_OPERATIONS:()=>y2,CONFIG_PARAMS:()=>x,CONFIG_PARAM_MAP:()=>tP,DATABASES_DIR_NAME:()=>Za,DATABASES_PARAM_CONFIG:()=>w2,DEFAULT_DATABASE_NAME:()=>zQ,ESCAPED_FORWARD_SLASH_REGEX:()=>s2,FORWARD_SLASH_REGEX:()=>r2,FUNC_VAL:()=>k2,GEO_CONVERSION_ENUM:()=>O2,HDB_COMPONENT_CONFIG_FILE:()=>kQ,HDB_CONFIG_FILE:()=>BQ,HDB_DEFAULT_CONFIG_FILE:()=>HQ,HDB_FILE_PERMISSIONS:()=>l2,HDB_HOME_DIR_NAME:()=>o2,HDB_PID_FILE:()=>WQ,HDB_PROCESS_SERVICES:()=>KQ,HDB_PROC_NAME:()=>FQ,HDB_RESTART_SCRIPT:()=>GQ,HDB_ROOT_DIR_NAME:()=>WT,HDB_SETTINGS_NAMES:()=>JT,HDB_SUPPORT_ADDRESS:()=>ZC,INFO_TABLE_HASH_ATTRIBUTE:()=>p2,INSERT_MAX_CHARACTER_SIZE:()=>_2,INSTALL_PROMPTS:()=>f2,ITC_EVENT_TYPES:()=>eA,JOB_STATUS_ENUM:()=>S2,JOB_TYPE_ENUM:()=>I2,JWT_ENUM:()=>Yd,LAUNCH_SERVICE_SCRIPTS:()=>JQ,LEGACY_CONFIG_PARAMS:()=>N2,LEGACY_DATABASES_DIR_NAME:()=>Ap,LICENSE_FILE_NAME:()=>g2,LICENSE_KEY_DIR_NAME:()=>jT,LICENSE_VALUES:()=>C2,LOG_LEVELS:()=>jQ,LOG_NAMES:()=>QQ,MEM_SETTING_KEY:()=>i2,METADATA_PROPERTY:()=>L2,NODE_ERROR_CODES:()=>D2,OPERATIONS_ENUM:()=>qt,PERMS_CRUD_ENUM:()=>B2,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>x2,PRE_4_0_0_VERSION:()=>F2,PROCESS_DESCRIPTORS:()=>VQ,PROCESS_NAME_ENV_PROP:()=>d2,RAM_ALLOCATION_ENUM:()=>P2,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>yp,REG_KEY_FILE_NAME:()=>E2,RESTART_TIMEOUT_MS:()=>c2,ROLE_TYPES_ENUM:()=>XQ,S3_BUCKET_AUTH_KEYS:()=>A2,SEARCH_NOT_FOUND_MESSAGE:()=>e2,SEARCH_WILDCARDS:()=>H2,SERVICE_ACTIONS_ENUM:()=>b2,SUPPORT_HELP_MSG:()=>ZQ,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>m2,SYSTEM_SCHEMA_NAME:()=>Kd,SYSTEM_TABLE_NAMES:()=>Hl,THREAD_TYPES:()=>tA,TIME_STAMP_NAMES:()=>U2,TIME_STAMP_NAMES_ENUM:()=>v2,TRANSACTIONS_DIR_NAME:()=>u2,UNICODE_FORWARD_SLASH:()=>n2,UNICODE_PERIOD:()=>t2,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>h2,VALID_S3_FILE_TYPES:()=>T2,VALID_SQL_OPS_ENUM:()=>R2,VALUE_SEARCH_COMPARATORS:()=>Rp,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>ZT});var Sp,Tp,BQ,HQ,WT,kQ,FQ,GQ,XC,YT,zT,QT,qQ,$Q,VQ,KQ,YQ,WQ,zQ,QQ,jQ,JQ,XQ,ZC,ZQ,e2,t2,r2,n2,s2,i2,Kd,o2,jT,a2,c2,l2,Za,Ap,u2,d2,eP,f2,_2,h2,Hl,p2,m2,E2,g2,S2,qt,T2,A2,R2,y2,b2,O2,JT,N2,x,tP,w2,I2,XT,C2,P2,D2,L2,M2,rP,nP,v2,U2,x2,Rp,ZT,B2,H2,k2,yp,Yd,eA,tA,F2,Ms,Vo,H=be(()=>{Sp=require("node:path"),Tp=M(mt()),BQ="harperdb-config.yaml",HQ="defaultConfig.yaml",WT="hdb",kQ="config.yaml",FQ="harperdb.js",GQ="restartHdb.js",XC="HarperDB",YT="Custom Functions",zT="Clustering Hub",QT="Clustering Leaf",qQ="Clustering Ingest Service",$Q="Clustering Reply Service",VQ={HDB:XC,CLUSTERING_HUB:zT,CLUSTERING_LEAF:QT,CLUSTERING_INGEST_SERVICE:qQ,CLUSTERING_REPLY_SERVICE:$Q,CUSTOM_FUNCTIONS:YT,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"},KQ={harperdb:XC,"clustering hub":zT,"clustering leaf":QT,"custom functions":YT,custom_functions:YT,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},YQ={CLUSTERING_HUB_PROC_DESCRIPTOR:zT,CLUSTERING_LEAF_PROC_DESCRIPTOR:QT},WQ="hdb.pid",zQ="data",QQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},jQ={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},JQ={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},XQ={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ZC="support@harperdb.io",ZQ=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${ZC}`,e2="None of the specified records were found.",t2="U+002E",r2=/\//g,n2="U+002F",s2=/U\+002F/g,i2="--max-old-space-size=",Kd="system",o2=".harperdb",jT="keys",a2="hdb_boot_properties.file",c2=6e4,l2=448,Za="database",Ap="schema",u2="transactions",d2="PROCESS_NAME",eP={SETTINGS_PATH_KEY:"settings_path"},f2={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"},_2=250,h2={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Hl={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"},p2="info_id",m2={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"},E2="060493.ks",g2=".license",S2={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},qt={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},T2={CSV:".csv",JSON:".json"},A2={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},R2={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},y2={[qt.INSERT]:qt.INSERT,[qt.UPDATE]:qt.UPDATE,[qt.UPSERT]:qt.UPSERT,[qt.DELETE]:qt.DELETE},b2={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},O2={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},JT={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"},N2={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},x={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",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"},tP={settings_path:eP.SETTINGS_PATH_KEY,hdb_root_key:x.ROOTPATH,hdb_root:x.ROOTPATH,rootpath:x.ROOTPATH,server_port_key:x.OPERATIONSAPI_NETWORK_PORT,server_port:x.OPERATIONSAPI_NETWORK_PORT,cert_key:x.TLS_CERTIFICATE,certificate:x.TLS_CERTIFICATE,private_key_key:x.TLS_PRIVATEKEY,private_key:x.TLS_PRIVATEKEY,http_secure_enabled_key:x.OPERATIONSAPI_NETWORK_HTTPS,https_on:x.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:x.OPERATIONSAPI_NETWORK_CORS,cors_on:x.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:x.LOGGING_LEVEL,log_level:x.LOGGING_LEVEL,log_path_key:x.LOGGING_ROOT,log_path:x.LOGGING_ROOT,clustering_node_name_key:x.CLUSTERING_NODENAME,node_name:x.CLUSTERING_NODENAME,clustering_enabled_key:x.CLUSTERING_ENABLED,clustering:x.CLUSTERING_ENABLED,max_http_threads:x.THREADS_COUNT,max_hdb_processes:x.THREADS_COUNT,server_timeout_key:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:x.LOGGING_AUDITLOG,disable_transaction_log:x.LOGGING_AUDITLOG,operation_token_timeout_key:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:x.HTTP_PORT,custom_functions_port:x.HTTP_PORT,custom_functions_directory_key:x.COMPONENTSROOT,custom_functions_directory:x.COMPONENTSROOT,max_custom_function_processes:x.THREADS_COUNT,logging_console:x.LOGGING_CONSOLE,log_to_file:x.LOGGING_FILE,log_to_stdstreams:x.LOGGING_STDSTREAMS,local_studio_on:x.LOCALSTUDIO_ENABLED,clustering_port:x.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:x.CLUSTERING_USER,customfunctions_network_port:x.HTTP_PORT,customfunctions_tls_certificate:x.TLS_CERTIFICATE,customfunctions_network_cors:x.HTTP_CORS,customfunctions_network_corsaccesslist:x.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:x.HTTP_HEADERSTIMEOUT,customfunctions_network_https:x.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:x.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:x.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:x.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:x.HTTP_TIMEOUT,customfunctions_tls:x.TLS,http_threads:x.THREADS_COUNT,threads:x.THREADS_COUNT,threads_count:x.THREADS_COUNT,customfunctions_processes:x.THREADS_COUNT,customfunctions_root:x.COMPONENTSROOT,operationsapi_root:x.ROOTPATH};for(let e in x){let t=x[e];tP[t.toLowerCase()]=t}w2={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},I2={csv_file_load:"csv_file_load",csv_data_load:qt.CSV_DATA_LOAD,csv_url_load:qt.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"},XT={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"},C2={VERSION_DEFAULT:"2.2.0"},P2={DEVELOPMENT:8192,DEFAULT:512},D2={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},L2=Symbol("metadata"),M2="__clustering__",rP="__createdtime__",nP="__updatedtime__",v2={CREATED_TIME:rP,UPDATED_TIME:nP},U2=[rP,nP],x2=15984864e5,Rp={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},ZT={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},B2={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},H2=["*","%"],k2="func_val",yp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yd={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},eA={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"},tA={HTTP:"http"},F2="3.x.x",Ms={SUCCESS:"success",FAILURE:"failure"},Vo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var ec=I((HTe,oP)=>{"use strict";var sP=require("minimist");oP.exports=G2;function G2(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=iP(process.env),n=iP(sP(process.argv))):(r=process.env,n=sP(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(G2,"assignCMDENVVariables");function iP(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(iP,"objKeysToLowerCase")});var li=I(vs=>{"use strict";global.Resource=vs.Resource=void 0;global.tables=vs.tables={};global.databases=vs.databases={};global.getUser=vs.getUser=void 0;global.authenticateUser=vs.authenticateUser=void 0;global.server=vs.server={};global.contentTypes=vs.contentTypes=null;global.threads=vs.threads=[];global.logger={};vs._assignPackageExport=(e,t)=>{global[e]=vs[e]=t}});var Q=I((AP,RP)=>{"use strict";var Yi=require("fs-extra"),{workerData:q2,threadId:$2,isMainThread:V2}=require("worker_threads"),di=require("path"),uP=require("yaml"),dP=require("properties-reader"),$t=(H(),P($)),aP=ec(),K2=require("os"),{PACKAGE_ROOT:iA}=mt(),{_assignPackageExport:Y2}=li(),cP=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},fP={STDOUT:"stdOut",STDERR:"stdErr"},W2=di.join(iA,"logs"),z2=di.join(iA,"config/yaml/",$t.HDB_DEFAULT_CONFIG_FILE),Q2=1e4,rA,ui,as,Ir,bp,Wd,Op,Ko,zd;zd===void 0&&_P();Object.assign(AP,{notify:gP,fatal:SP,error:Np,warn:TP,info:pP,debug:EP,trace:mP,setLogLevel:nj,log_level:Ir,loggerWithTag:X2,suppressLogging:Z2,initLogSettings:_P,logCustomLevel:tj,closeLogFile:oA,logsAtLevel:j2,getLogFilePath:a(()=>Op,"getLogFilePath"),OUTPUTS:fP,AuthAuditLog:oj});Y2("logger",RP.exports);var nA;function j2(e){return fr[Ir]<=fr[e]}a(j2,"logsAtLevel");function _P(e=!1){try{if(zd===void 0||e){oA();let t=rj(),r=aP(["ROOTPATH"]);try{zd=dP(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Yi.pathExistsSync(di.join(r.ROOTPATH,$t.HDB_CONFIG_FILE)))throw n}if({level:Ir,config_log_path:Wd,to_file:ui,to_stream:as}=sj(r.ROOTPATH?di.join(r.ROOTPATH,$t.HDB_CONFIG_FILE):zd.get("settings_path")),bp=$t.LOG_NAMES.HDB,Op=di.join(Wd,bp),V2)try{require("segfault-handler").registerHandler(di.join(Wd,"crash.log"))}catch{}}}catch(t){if(zd=void 0,t.code===$t.NODE_ERROR_CODES.ENOENT||t.code===$t.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=aP(Object.keys($t.CONFIG_PARAM_MAP),!0);for(let o in r){let c=$t.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===$t.CONFIG_PARAMS.LOGGING_LEVEL){Ir=l;continue}if(c===$t.CONFIG_PARAMS.LOGGING_STDSTREAMS){as=l;continue}c===$t.CONFIG_PARAMS.LOGGING_FILE&&(ui=c),c===$t.CONFIG_PARAMS.LOGGING_CONSOLE&&(rA=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=ij();ui=ui===void 0?s:ui,ui=lP(ui),as=as===void 0?i:as,as=lP(as),Ir=Ir===void 0?n:Ir,Wd=W2,bp=$t.LOG_NAMES.INSTALL,Op=di.join(Wd,bp);return}throw Np("Error initializing log settings"),Np(t),t}process.env.DEV_MODE&&(as=!0),J2()}a(_P,"initLogSettings");var Yo=!0;function J2(){ui&&(process.stdout.write=function(e){return typeof e=="string"&&Yo&&rA!==!1&&(sA(),e=e.toString(),e[e.length-1]===`
2
- `&&(e=e.slice(0,-1)),Yi.appendFileSync(Ko,Us("stdout",[e]))),cP.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Yo&&rA!==!1&&(sA(),e[e.length-1]===`
3
- `&&(e=e.slice(0,-1)),Yi.appendFileSync(Ko,Us("stderr",[e]))),cP.apply(process.stderr,arguments)})}a(J2,"stdioLogging");function X2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(gP,"notify"),fatal:n(SP,"fatal"),error:n(Np,"error"),warn:n(TP,"warn"),info:n(pP,"info"),debug:n(EP,"debug"),trace:n(mP,"trace")};function n(s,i){return!t||fr[Ir]<=fr[i]?function(...o){return s(r,...o)}:null}}a(X2,"loggerWithTag");function Z2(e){try{Yo=!1,e()}finally{Yo=!0}}a(Z2,"suppressLogging");var ej=q2?.name?.replace(/ /g,"-")||"main";function Us(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||ej+"/"+$2);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
1
+ "use strict";var wQ=Object.create;var Vd=Object.defineProperty;var IQ=Object.getOwnPropertyDescriptor;var CQ=Object.getOwnPropertyNames;var PQ=Object.getPrototypeOf,DQ=Object.prototype.hasOwnProperty;var a=(e,t)=>Vd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ve=(e,t)=>{for(var r in t)Vd(e,r,{get:t[r],enumerable:!0})},QC=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of CQ(t))!DQ.call(e,s)&&s!==r&&Vd(e,s,{get:()=>t[s],enumerable:!(n=IQ(t,s))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?wQ(PQ(e)):{},QC(t||!e||!e.__esModule?Vd(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>QC(Vd({},"__esModule",{value:!0}),e);var Et=I((xTe,XC)=>{var{join:LQ,dirname:jC}=require("node:path"),{existsSync:MQ,readFileSync:vQ}=require("node:fs");function UQ(){let t=__dirname,r,n=0;for(;!MQ(r=LQ(t,"package.json"));)if(t===(t=jC(t))||n++>10)throw new Error("Could not find package root");return r}a(UQ,"findPackageJson");var JC=UQ(),xQ=JSON.parse(vQ(JC,"utf8")),BQ=jC(JC);XC.exports={packageJson:xQ,PACKAGE_ROOT:BQ}});var KT=I((HTe,ZC)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c}=require("node:fs"),{isMainThread:l}=require("node:worker_threads"),{spawnSync:u,spawn:f}=require("node:child_process"),{PACKAGE_ROOT:d}=Et(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],_="ts-build";if(l){let g=!1,R=!1;if((R=s(n(d,_)))?g=e.sync(h.map(E=>`${E}/**/*.ts`),{cwd:d}).some(E=>{let A=0,O=0;try{A=i(n(d,E)).mtimeMs-5e3,O=i(n(d,_,E.replace(/.ts$/,".js"))).mtimeMs}catch{}return A>O}):g=!0,g){console.log("Compiling TypeScript...");let E=u("npx",["tsc"],{cwd:d});if(E.stdout?.length&&console.log(E.stdout.toString()),E.stderr?.length&&console.log(E.stderr.toString()),R){let A=n(t(),"harperdb-tsc.pid"),O=!1;if(s(A))try{process.kill(+o(A,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let v=f("npx",["tsc","--watch"],{detached:!0,cwd:d,stdio:"ignore"});c(A,v.pid.toString()),v.unref()}}}}let p=ZC.constructor,S=p._findPath;p._findPath=function(g,R,E){if(g.startsWith(".")&&!E&&R.length===1&&R[0].startsWith(d)&&!R[0].includes("node_modules")){let A=r(d,R[0]),O;A.startsWith(_)?O=n(d,r(_,A)):O=n(d,_,A);let v=n(O,g),F=v+".js";if(s(F))return F;if(v.includes(".")&&s(v))return v}return S(g,R,E)}}});var q={};ve(q,{AUTH_AUDIT_STATUS:()=>Ls,AUTH_AUDIT_TYPES:()=>Vo,BOOT_PROPS_FILE_NAME:()=>c2,BOOT_PROP_PARAMS:()=>rP,CLUSTERING_FLAG:()=>v2,CLUSTERING_PROCESSES:()=>WQ,CLUSTER_MESSAGE_TYPE_ENUM:()=>XT,CLUSTER_OPERATIONS:()=>b2,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>nP,DATABASES_DIR_NAME:()=>Za,DATABASES_PARAM_CONFIG:()=>I2,DEFAULT_DATABASE_NAME:()=>QQ,ESCAPED_FORWARD_SLASH_REGEX:()=>i2,FORWARD_SLASH_REGEX:()=>n2,FUNC_VAL:()=>F2,GEO_CONVERSION_ENUM:()=>N2,HDB_COMPONENT_CONFIG_FILE:()=>FQ,HDB_CONFIG_FILE:()=>HQ,HDB_DEFAULT_CONFIG_FILE:()=>kQ,HDB_FILE_PERMISSIONS:()=>u2,HDB_HOME_DIR_NAME:()=>a2,HDB_PID_FILE:()=>zQ,HDB_PROCESS_SERVICES:()=>YQ,HDB_PROC_NAME:()=>GQ,HDB_RESTART_SCRIPT:()=>qQ,HDB_ROOT_DIR_NAME:()=>WT,HDB_SETTINGS_NAMES:()=>JT,HDB_SUPPORT_ADDRESS:()=>tP,INFO_TABLE_HASH_ATTRIBUTE:()=>m2,INSERT_MAX_CHARACTER_SIZE:()=>h2,INSTALL_PROMPTS:()=>_2,ITC_EVENT_TYPES:()=>eA,JOB_STATUS_ENUM:()=>T2,JOB_TYPE_ENUM:()=>C2,JWT_ENUM:()=>Yd,LAUNCH_SERVICE_SCRIPTS:()=>XQ,LEGACY_CONFIG_PARAMS:()=>w2,LEGACY_DATABASES_DIR_NAME:()=>Ap,LICENSE_FILE_NAME:()=>S2,LICENSE_KEY_DIR_NAME:()=>jT,LICENSE_VALUES:()=>P2,LOG_LEVELS:()=>JQ,LOG_NAMES:()=>jQ,MEM_SETTING_KEY:()=>o2,METADATA_PROPERTY:()=>M2,NODE_ERROR_CODES:()=>L2,OPERATIONS_ENUM:()=>$t,PERMS_CRUD_ENUM:()=>H2,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>B2,PRE_4_0_0_VERSION:()=>G2,PROCESS_DESCRIPTORS:()=>KQ,PROCESS_NAME_ENV_PROP:()=>f2,RAM_ALLOCATION_ENUM:()=>D2,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>yp,REG_KEY_FILE_NAME:()=>g2,RESTART_TIMEOUT_MS:()=>l2,ROLE_TYPES_ENUM:()=>ZQ,S3_BUCKET_AUTH_KEYS:()=>R2,SEARCH_NOT_FOUND_MESSAGE:()=>t2,SEARCH_WILDCARDS:()=>k2,SERVICE_ACTIONS_ENUM:()=>O2,SUPPORT_HELP_MSG:()=>e2,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>E2,SYSTEM_SCHEMA_NAME:()=>Kd,SYSTEM_TABLE_NAMES:()=>Hl,THREAD_TYPES:()=>tA,TIME_STAMP_NAMES:()=>x2,TIME_STAMP_NAMES_ENUM:()=>U2,TRANSACTIONS_DIR_NAME:()=>d2,UNICODE_FORWARD_SLASH:()=>s2,UNICODE_PERIOD:()=>r2,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>p2,VALID_S3_FILE_TYPES:()=>A2,VALID_SQL_OPS_ENUM:()=>y2,VALUE_SEARCH_COMPARATORS:()=>Rp,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>ZT});var Sp,Tp,HQ,kQ,WT,FQ,GQ,qQ,eP,YT,zT,QT,$Q,VQ,KQ,YQ,WQ,zQ,QQ,jQ,JQ,XQ,ZQ,tP,e2,t2,r2,n2,s2,i2,o2,Kd,a2,jT,c2,l2,u2,Za,Ap,d2,f2,rP,_2,h2,p2,Hl,m2,E2,g2,S2,T2,$t,A2,R2,y2,b2,O2,N2,JT,w2,B,nP,I2,C2,XT,P2,D2,L2,M2,v2,sP,iP,U2,x2,B2,Rp,ZT,H2,k2,F2,yp,Yd,eA,tA,G2,Ls,Vo,H=be(()=>{Sp=require("node:path"),Tp=M(Et()),HQ="harperdb-config.yaml",kQ="defaultConfig.yaml",WT="hdb",FQ="config.yaml",GQ="harperdb.js",qQ="restartHdb.js",eP="HarperDB",YT="Custom Functions",zT="Clustering Hub",QT="Clustering Leaf",$Q="Clustering Ingest Service",VQ="Clustering Reply Service",KQ={HDB:eP,CLUSTERING_HUB:zT,CLUSTERING_LEAF:QT,CLUSTERING_INGEST_SERVICE:$Q,CLUSTERING_REPLY_SERVICE:VQ,CUSTOM_FUNCTIONS:YT,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"},YQ={harperdb:eP,"clustering hub":zT,"clustering leaf":QT,"custom functions":YT,custom_functions:YT,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},WQ={CLUSTERING_HUB_PROC_DESCRIPTOR:zT,CLUSTERING_LEAF_PROC_DESCRIPTOR:QT},zQ="hdb.pid",QQ="data",jQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},JQ={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},XQ={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},ZQ={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},tP="support@harperdb.io",e2=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${tP}`,t2="None of the specified records were found.",r2="U+002E",n2=/\//g,s2="U+002F",i2=/U\+002F/g,o2="--max-old-space-size=",Kd="system",a2=".harperdb",jT="keys",c2="hdb_boot_properties.file",l2=6e4,u2=448,Za="database",Ap="schema",d2="transactions",f2="PROCESS_NAME",rP={SETTINGS_PATH_KEY:"settings_path"},_2={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"},h2=250,p2={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Hl={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"},m2="info_id",E2={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"},g2="060493.ks",S2=".license",T2={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$t={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},A2={CSV:".csv",JSON:".json"},R2={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},y2={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},b2={[$t.INSERT]:$t.INSERT,[$t.UPDATE]:$t.UPDATE,[$t.UPSERT]:$t.UPSERT,[$t.DELETE]:$t.DELETE},O2={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},N2={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},JT={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"},w2={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",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"},nP={settings_path:rP.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];nP[t.toLowerCase()]=t}I2={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},C2={csv_file_load:"csv_file_load",csv_data_load:$t.CSV_DATA_LOAD,csv_url_load:$t.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"},XT={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"},P2={VERSION_DEFAULT:"2.2.0"},D2={DEVELOPMENT:8192,DEFAULT:512},L2={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},M2=Symbol("metadata"),v2="__clustering__",sP="__createdtime__",iP="__updatedtime__",U2={CREATED_TIME:sP,UPDATED_TIME:iP},x2=[sP,iP],B2=15984864e5,Rp={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},ZT={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},H2={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},k2=["*","%"],F2="func_val",yp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yd={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},eA={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"},tA={HTTP:"http"},G2="3.x.x",Ls={SUCCESS:"success",FAILURE:"failure"},Vo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var ec=I((kTe,cP)=>{"use strict";var oP=require("minimist");cP.exports=q2;function q2(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=aP(process.env),n=aP(oP(process.argv))):(r=process.env,n=oP(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(q2,"assignCMDENVVariables");function aP(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(aP,"objKeysToLowerCase")});var ci=I(Ms=>{"use strict";global.Resource=Ms.Resource=void 0;global.tables=Ms.tables={};global.databases=Ms.databases={};global.getUser=Ms.getUser=void 0;global.authenticateUser=Ms.authenticateUser=void 0;global.server=Ms.server={};global.contentTypes=Ms.contentTypes=null;global.threads=Ms.threads=[];global.logger={};Ms._assignPackageExport=(e,t)=>{global[e]=Ms[e]=t}});var j=I((yP,bP)=>{"use strict";var Ki=require("fs-extra"),{workerData:$2,threadId:V2,isMainThread:K2}=require("worker_threads"),ui=require("path"),fP=require("yaml"),_P=require("properties-reader"),Vt=(H(),D(q)),lP=ec(),Y2=require("os"),{PACKAGE_ROOT:iA}=Et(),{_assignPackageExport:W2}=ci(),uP=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),_r={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},hP={STDOUT:"stdOut",STDERR:"stdErr"},z2=ui.join(iA,"logs"),Q2=ui.join(iA,"config/yaml/",Vt.HDB_DEFAULT_CONFIG_FILE),j2=1e4,rA,li,os,wr,bp,Wd,Op,Ko,zd;zd===void 0&&pP();Object.assign(yP,{notify:TP,fatal:AP,error:Np,warn:RP,info:EP,debug:SP,trace:gP,setLogLevel:sj,log_level:wr,loggerWithTag:Z2,suppressLogging:ej,initLogSettings:pP,logCustomLevel:rj,closeLogFile:oA,logsAtLevel:J2,getLogFilePath:a(()=>Op,"getLogFilePath"),OUTPUTS:hP,AuthAuditLog:aj});W2("logger",bP.exports);var nA;function J2(e){return _r[wr]<=_r[e]}a(J2,"logsAtLevel");function pP(e=!1){try{if(zd===void 0||e){oA();let t=nj(),r=lP(["ROOTPATH"]);try{zd=_P(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Ki.pathExistsSync(ui.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE)))throw n}if({level:wr,config_log_path:Wd,to_file:li,to_stream:os}=ij(r.ROOTPATH?ui.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE):zd.get("settings_path")),bp=Vt.LOG_NAMES.HDB,Op=ui.join(Wd,bp),K2)try{require("segfault-handler").registerHandler(ui.join(Wd,"crash.log"))}catch{}}}catch(t){if(zd=void 0,t.code===Vt.NODE_ERROR_CODES.ENOENT||t.code===Vt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=lP(Object.keys(Vt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Vt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Vt.CONFIG_PARAMS.LOGGING_LEVEL){wr=l;continue}if(c===Vt.CONFIG_PARAMS.LOGGING_STDSTREAMS){os=l;continue}c===Vt.CONFIG_PARAMS.LOGGING_FILE&&(li=c),c===Vt.CONFIG_PARAMS.LOGGING_CONSOLE&&(rA=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=oj();li=li===void 0?s:li,li=dP(li),os=os===void 0?i:os,os=dP(os),wr=wr===void 0?n:wr,Wd=z2,bp=Vt.LOG_NAMES.INSTALL,Op=ui.join(Wd,bp);return}throw Np("Error initializing log settings"),Np(t),t}process.env.DEV_MODE&&(os=!0),X2()}a(pP,"initLogSettings");var Yo=!0;function X2(){li&&(process.stdout.write=function(e){return typeof e=="string"&&Yo&&rA!==!1&&(sA(),e=e.toString(),e[e.length-1]===`
2
+ `&&(e=e.slice(0,-1)),Ki.appendFileSync(Ko,vs("stdout",[e]))),uP.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Yo&&rA!==!1&&(sA(),e[e.length-1]===`
3
+ `&&(e=e.slice(0,-1)),Ki.appendFileSync(Ko,vs("stderr",[e]))),uP.apply(process.stderr,arguments)})}a(X2,"stdioLogging");function Z2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(TP,"notify"),fatal:n(AP,"fatal"),error:n(Np,"error"),warn:n(RP,"warn"),info:n(EP,"info"),debug:n(SP,"debug"),trace:n(gP,"trace")};function n(s,i){return!t||_r[wr]<=_r[i]?function(...o){return s(r,...o)}:null}}a(Z2,"loggerWithTag");function ej(e){try{Yo=!1,e()}finally{Yo=!0}}a(ej,"suppressLogging");var tj=$2?.name?.replace(/ /g,"-")||"main";function vs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||tj+"/"+V2);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
4
4
  `+JSON.stringify(u)),u.cause&&(t[c--]=u.cause,u&&(n+=`
5
5
  Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Object ["+Object.keys(u)+"]"}else n+=u;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
6
- `}a(Us,"createLogRecord");function Qd(e){if(ui){if(hP(e),as){Yo=!1;try{process.stdout.write(e)}finally{Yo=!0}}}else as&&process.stdout.write(e)}a(Qd,"logStdOut");function wp(e){if(ui){if(hP(e),as){Yo=!1;try{process.stderr.write(e)}finally{Yo=!0}}}else as&&process.stderr.write(e)}a(wp,"logStdErr");function hP(e){sA(),Ko?Yi.appendFileSync(Ko,e):nA||console.log(e)}a(hP,"logToFile");function oA(){try{Yi.closeSync(Ko)}catch{}Ko=null}a(oA,"closeLogFile");function sA(){if(!Ko){try{Ko=Yi.openSync(Op,"a")}catch(e){nA||(nA=!0,console.error(e))}setTimeout(()=>{oA()},Q2).unref()}}a(sA,"openLogFile");function pP(...e){fr[Ir]<=fr.info&&Qd(Us("info",e))}a(pP,"info");function mP(...e){fr[Ir]<=fr.trace&&Qd(Us("trace",e))}a(mP,"trace");function Np(...e){fr[Ir]<=fr.error&&wp(Us("error",e))}a(Np,"error");function EP(...e){fr[Ir]<=fr.debug&&Qd(Us("debug",e))}a(EP,"debug");function gP(...e){fr[Ir]<=fr.notify&&Qd(Us("notify",e))}a(gP,"notify");function SP(...e){fr[Ir]<=fr.fatal&&wp(Us("fatal",e))}a(SP,"fatal");function TP(...e){fr[Ir]<=fr.warn&&wp(Us("warn",e))}a(TP,"warn");function tj(e,t,...r){t===fP.STDERR?wp(Us(e,r)):Qd(Us(e,r))}a(tj,"logCustomLevel");function rj(){let e;try{e=K2.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=di.join(e,$t.HDB_HOME_DIR_NAME,$t.BOOT_PROPS_FILE_NAME);return Yi.existsSync(t)||(t=di.join(iA,"utility/hdb_boot_properties.file")),t}a(rj,"getPropsFilePath");function nj(e){Ir=e}a(nj,"setLogLevel");function lP(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(lP,"autoCastBoolean");function sj(e){try{if(e.includes("config/settings.js")){let o=dP(e);return{level:o.get($t.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:di.dirname(o.get($t.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get($t.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get($t.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=uP.parseDocument(Yi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===$t.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(sj,"getLogConfig");function ij(){try{let e=uP.parseDocument(Yi.readFileSync(z2,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(ij,"getDefaultConfig");function oj(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(oj,"AuthAuditLog")});var aA=I((qTe,yP)=>{"use strict";var aj=require("util"),cj=require("path"),lj=require("child_process"),uj=aj.promisify(lj.execFile),dj=1e3*1e3*10;yP.exports={findPs:fj};async function fj(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await uj("ps",["wwxo",`pid,${r}`],{maxBuffer:dj});for(let s of n.trim().split(`
7
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:cj.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(fj,"findPs")});var vt=I((VTe,OP)=>{"use strict";var _j="__dbis__",hj="__txns__",pj="__environment_name__",mj="__dbi_defintion__",Ej={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"},gj=["__createdtime__","__updatedtime__"],Sj="\uFFFF",bP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Tj=Object.values(bP);OP.exports={AUDIT_STORE_NAME:hj,INTERNAL_DBIS_NAME:_j,DBI_DEFINITION_NAME:mj,SEARCH_TYPES:Ej,TIMESTAMP_NAMES:gj,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:pj,TRANSACTIONS_DBI_NAMES_ENUM:bP,TRANSACTIONS_DBIS:Tj,OVERFLOW_MARKER:Sj}});var Pn=I((KTe,vP)=>{"use strict";var NP=(H(),P($)),wP=vt(),IP={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},CP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),PP={500:CP("There was an error processing your request."),400:"Invalid request"},Aj=PP[IP.INTERNAL_SERVER_ERROR],Rj={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},yj={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},bj={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},Oj={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${wP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${wP.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"},Nj={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${NP.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 ${NP.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"},DP={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"},wj={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},Ij={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},Cj={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},Pj={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Dj={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},LP={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},MP={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},Lj={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"},Mj={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},vj={...DP,...bj,...Rj,...wj,...Ij,...Cj,...Pj,...Dj,...Nj,...LP,...MP,...Lj,...Mj,...yj};vP.exports={CHECK_LOGS_WRAPPER:CP,HDB_ERROR_MSGS:vj,DEFAULT_ERROR_MSGS:PP,DEFAULT_ERROR_RESP:Aj,HTTP_STATUS_CODES:IP,LMDB_ERRORS_ENUM:Oj,AUTHENTICATION_ERROR_MSGS:DP,VALIDATION_ERROR_MSGS:LP,ITC_ERRORS:MP}});var he=I((WTe,BP)=>{"use strict";var kl=Pn(),Uj=Q(),xj=(H(),P($)),Ip=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,UP),this.statusCode=n||kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(kl.DEFAULT_ERROR_MSGS[n]?kl.DEFAULT_ERROR_MSGS[n]:kl.DEFAULT_ERROR_MSGS[kl.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&&Uj[s](i)}},cA=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},lA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function UP(e,t,r,n=xj.LOG_LEVELS.ERROR,s=null,i=!1){if(xP(e))return e;let o=new Ip(e,t,r,n,s);return i&&delete o.stack,o}a(UP,"handleHDBError");function xP(e){return e.__proto__.constructor.name===Ip.name}a(xP,"isHDBError");BP.exports={isHDBError:xP,handleHDBError:UP,ClientError:cA,ServerError:lA,hdb_errors:kl}});var Et=I((QTe,VP)=>{"use strict";var ef=(H(),P($)),Bj=ae(),an=le(),tf=require("path"),Hj=require("minimist"),HP=require("fs-extra"),kP=require("lodash");an.initSync();var{CONFIG_PARAMS:Wo,DATABASES_PARAM_CONFIG:jd,SYSTEM_SCHEMA_NAME:Cp}=ef,Jd,Xd,Zd;function FP(){if(Jd!==void 0)return Jd;if(an.getHdbBasePath()!==void 0)return Jd=an.get(Wo.STORAGE_PATH)||tf.join(an.getHdbBasePath(),ef.DATABASES_DIR_NAME),Jd}a(FP,"getBaseSchemaPath");function GP(){if(Xd!==void 0)return Xd;if(an.getHdbBasePath()!==void 0)return Xd=$P(Cp),Xd}a(GP,"getSystemSchemaPath");function qP(){if(Zd!==void 0)return Zd;if(an.getHdbBasePath()!==void 0)return Zd=an.get(ef.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||tf.join(an.getHdbBasePath(),ef.TRANSACTIONS_DIR_NAME),Zd}a(qP,"getTransactionAuditStoreBasePath");function kj(e,t){let r=an.get(Wo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||tf.join(qP(),e.toString())}a(kj,"getTransactionAuditStorePath");function $P(e,t){e=e.toString(),t=t&&t.toString();let r=an.get(ef.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||tf.join(FP(),e)}a($P,"getSchemaPath");function Fj(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Hj(process.argv));let n=r[Wo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!Bj.isObject(n))throw o;i=n}for(let o of i){let c=o[Cp];if(!c)continue;let l=an.get(Wo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[jd.PATH];if(u)return kP.set(l,[Cp,jd.TABLES,t,jd.PATH],u),an.setProperty(Wo.DATABASES,l),u;let f=c?.[jd.PATH];if(f)return kP.set(l,[Cp,jd.PATH],f),an.setProperty(Wo.DATABASES,l),f}}let s=r[Wo.STORAGE_PATH.toUpperCase()];if(s){if(!HP.pathExistsSync(s))throw new Error(s+" does not exist");let i=tf.join(s,e);return HP.mkdirsSync(i),an.setProperty(Wo.STORAGE_PATH,s),i}return GP()}a(Fj,"initSystemSchemaPaths");function Gj(){Jd=void 0,Xd=void 0,Zd=void 0}a(Gj,"resetPaths");VP.exports={getBaseSchemaPath:FP,getSystemSchemaPath:GP,getTransactionAuditStorePath:kj,getTransactionAuditStoreBasePath:qP,getSchemaPath:$P,initSystemSchemaPaths:Fj,resetPaths:Gj}});var cn=I((ZTe,QP)=>{"use strict";var qj=Pn().LMDB_ERRORS_ENUM,JTe=require("lmdb"),$j=vt(),XTe=require("buffer").Buffer,{OVERFLOW_MARKER:KP,MAX_SEARCH_KEY_LENGTH:Pp}=$j,YP=["number","string","symbol","boolean","bigint"];function Vj(e){if(e=e?.primaryStore||e,!e)throw new Error(qj.ENV_REQUIRED)}a(Vj,"validateEnv");function Kj(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(Kj,"stringifyData");function Yj(e){return e instanceof Date?e.valueOf():e}a(Yj,"convertKeyValueToWrite");function Wj(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(YP.includes(typeof e))return e.length>Pp?[e.slice(0,Pp)+KP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(YP.includes(typeof i))i.length>Pp?r.push(i.slice(0,Pp)+KP):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(Wj,"getIndexedValues");var Dp=0,WP=0;function zP(){WP=Date.now()-performance.now()}a(zP,"adjustStartTime");zP();var zj=6e4;setInterval(zP,zj).unref();function Qj(){let e=performance.now()+WP;return e>Dp?(Dp=e,e):(Dp+=488e-6,Dp)}a(Qj,"getNextMonotonicTime");QP.exports={validateEnv:Vj,stringifyData:Kj,convertKeyValueToWrite:Yj,getNextMonotonicTime:Qj,getIndexedValues:Wj}});var rf=I((tAe,jP)=>{"use strict";var jj=(H(),P($)).OPERATIONS_ENUM,uA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=jj.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};jP.exports=uA});var nf=I((sAe,eD)=>{"use strict";var nAe=rf(),Lp=(H(),P($)),dA=ae(),JP=Q(),Jj=require("uuid"),{handleHDBError:Mp,hdb_errors:Xj}=he(),{HDB_ERROR_MSGS:vp,HTTP_STATUS_CODES:Up}=Xj;eD.exports=XP;function XP(e,t,r){for(let s=0;s<t.length;s++)ZP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];Zj(i,r,e.operation)}}a(XP,"processRows");XP.validateAttribute=ZP;function ZP(e){if(Buffer.byteLength(String(e))>Lp.INSERT_MAX_CHARACTER_SIZE)throw Mp(new Error,vp.ATTR_NAME_LENGTH_ERR(e),Up.BAD_REQUEST,void 0,void 0,!0);if(dA.isEmptyOrZeroLength(e)||dA.isEmpty(e.trim()))throw Mp(new Error,vp.ATTR_NAME_NULLISH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}a(ZP,"validateAttribute");function Zj(e,t,r){if(!e.hasOwnProperty(t)||dA.isEmptyOrZeroLength(e[t])){if(r===Lp.OPERATIONS_ENUM.INSERT||r===Lp.OPERATIONS_ENUM.UPSERT){e[t]=Jj.v4();return}throw JP.error("Update transaction aborted due to record with no hash value:",e),Mp(new Error,vp.RECORD_MISSING_HASH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Lp.INSERT_MAX_CHARACTER_SIZE)throw JP.error(e),Mp(new Error,vp.HASH_VAL_LENGTH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}a(Zj,"validateHash")});var tD,Dn,fA,Fl=be(()=>{tD=require("events"),Dn=class extends tD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new fA;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)}},fA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function cD(e){hA=e}function nJ(){rJ=setInterval(function(){for(let e of _A)if(e.stale){let t=e.getContext()?.url;iD.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},tJ).unref()}var pA,sD,iD,oD,aD,rD,_A,eJ,sf,nD,hA,tc,xp,tJ,rJ,Bp=be(()=>{pA=M(cn()),sD=M(he()),iD=M(Q()),oD=M(le());H();aD=M(ae()),rD=100,_A=new Set,eJ=(0,aD.convertToMS)(oD.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(cD,"replicationConfirmation");tc=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),_A.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(_A.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(sf&&!this.overloadChecked&&performance.now()-nD>eJ)throw new sD.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,pA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let p=this.writes[_];p&&(p.before||p.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let p;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let A=g[_===0?"before":"beforeIntermediate"];if(A){let E=A();p?p.push?p.push(E):p=[p,E]:p=E}}p&&await(p.push?Promise.all(p):p)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<rD>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return sf||(sf=s,nD=performance.now(),sf.then(()=>{sf=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];hA&&_&&i.push(hA(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+rD/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},xp=class extends tc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,pA.getNextMonotonicTime)())}getReadTxn(){}},tJ=3e4;a(nJ,"startMonitoringTxns");nJ()});function yt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new tc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var lD,rc=be(()=>{lD=M(li());Bp();a(yt,"transaction");(0,lD._assignPackageExport)("transaction",yt);yt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};yt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function EA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let p=e[_],S=u(p);d=d.concat(S)}let h=new Set;return d.filter(_=>{let p=_.key??_;return h.has(p)?!1:(h.add(p),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?EA(d.conditions,d.operator,r,n,s,i,o,c):$l(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((p,S)=>{if(p.conditions){let E=p.operator==="or",R=f(p.conditions,!E,_);return E?(N,v)=>R.some(k=>k(N,v)):(N,v)=>R.every(k=>k(N,v))}let g=(p.attribute||p[0])===r.primaryKey,A=cf(p,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=fJ(r.primaryStore,p.estimated_count,_)),A}).filter(Boolean)}a(f,"mapConditionsToFilters")}function $l(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new un.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],R=_i(n.attributes,E);if(R.relationship){if(o.length<2)throw new un.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let N=R.definition?.tableClass||R.elements?.definition?.tableClass,v=new Map,k=$l({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,N,s,v);if(R.relationship.to){i[o[0]]=v;let F=!!_i(N.attributes,R.relationship.to)?.elements;k=cJ(k,R,N.primaryStore,F,v)}if(R.relationship.from){let F=a(K=>(K?.key!==void 0&&(K=K.key),$l({attribute:R.relationship.from,value:K},t,r,n,s,v)),"searchEntry");R.elements?(i[o[0]]=v,k=lJ(k,R,N.primaryStore,v,F)):k=k.flatMap(F)}return k}else if(o.length===1)o=o[0];else throw new un.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(gA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=fi.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new un.ClientError(`Unknown query comparator "${l}"`)}let p,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>cs.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,cs.MAX_SEARCH_KEY_LENGTH)+cs.OVERFLOW_MARKER,h=!1,p=cf(e,n,null,i,S)),typeof f=="string"&&f.length>cs.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,cs.MAX_SEARCH_KEY_LENGTH)+cs.OVERFLOW_MARKER,d=!0,p=p??cf(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new un.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new un.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new un.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new un.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(p=p??cf(e,n,null,i,S),!p)throw new un.ClientError(`Unknown search operator ${e.comparator}`)}let A={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(A).map(p?function({key:R,value:N}){return this?.isSync?N&&p(N)?R:zo.SKIP:new Promise((v,k)=>setImmediate(()=>{try{v(N&&p(N)?R:zo.SKIP)}catch(F){k(F)}}))}:R=>R.value==null&&!(R.metadataFlags&(Ln|jo))?zo.SKIP:R);return E.hasEntries=!0,E}else return g?g.getRange(A).map(p?function({key:E,value:R}){let N;return typeof E=="string"&&E.length>cs.MAX_SEARCH_KEY_LENGTH?N=n.primaryStore.get(R):N={[o]:E},this.isSync?p(N)?R:zo.SKIP:new Promise((v,k)=>setImmediate(()=>{try{v(p(N)?R:zo.SKIP)}catch(F){k(F)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:R}){return this.isSync?R&&p(R)?E:zo.SKIP:new Promise((N,v)=>setImmediate(()=>{try{N(R&&p(R)?E:zo.SKIP)}catch(k){v(k)}}))})}function _i(e,t){if(Array.isArray(t))if(t.length>1){let r=_i(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?_i(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 cJ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function lJ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function cf(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=_i(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],p=cf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!p)return;if(_){_.filters||(_.filters=[]),_.filters.push(p);return}let S=t.propertyResolvers?.[f],g,A=a((E,R)=>{let N,v;if(S){if(S.from&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let F of p.idFilter.idSet)e={attribute:S.from,value:F};g=u(S.from,p.idFilter,!0,!0)}else g=u(S.from,p.idFilter,!1,!0);let k=g(E);return g.idFilter&&(A.idFilter=g.idFilter),k}v=S(E,r,R),N=v?.value}else N=E[f];return N?Array.isArray(N)?N.some(p):p(N,v):!1},"recordFilter");return A}}switch(l instanceof Date&&(l=l.getTime()),gA[o]||o){case cs.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,fi.compareKeys)(f,l[0])>=0&&(0,fi.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,fi.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,fi.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,fi.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,fi.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,fi.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new un.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let p;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&kp(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(h=!1));let S=0,g=3;function A(E){let R=E[f],N;if(typeof R!="object"||!R||_?N=d(R):Array.isArray(R)?N=R.some(d):R instanceof Date&&(N=d(R.getTime())),h&&(g++,!N&&!A.idFilter&&++S/g*(i-g)>p)){let v=$l(e,r.transaction.getReadTxn(),!1,t).map(Vl),k=new Set(v);A.idFilter=F=>k.has(Vl(F)),A.idFilter.idSet=k}return N}return a(A,"recordFilter"),s&&(A.idFilter=d),A}a(u,"attributeComparator")}function kp(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/Wi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=gA[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=_i(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=kp(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Wi(e.indices[i.relationship.from])/(Wi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Wi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=oJ*Wi(e.primaryStore)+1:n==="between"?r.estimated_count=iJ*Wi(e.primaryStore)+1:n==="sort"?r.estimated_count=Wi(e.primaryStore)+1:r.estimated_count=sJ*Wi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Fp(e){if(e)if(Qo=e,Gl.lastIndex=0,uJ.test(e))try{let t=of(new ql,"");if(ln!==Qo.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${ln} in '${Qo}'`,t}else return new URLSearchParams(e)}function of(e,t){let r=Gl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Qo);){ln=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=uD}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=af(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=aJ[d],l=mA[i]?uD:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=af(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&dD(p,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(p),S.operator=u}else Hp(e,u),e.conditions.push(p)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(af(f)),s=void 0;break;case"(":Gl.lastIndex=ln;let _=of(f?[]:new ql,")");switch(f){case"":Hp(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=fD(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}Qo[ln]===","?r.lastIndex=++ln:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");Gl.lastIndex=ln,h=of([],"}"),h.name=f,e.push(h),Qo[ln]===","?r.lastIndex=++ln:o=!0;break;case"[":Gl.lastIndex=ln,f?(h=of(new ql,"]"),h.name=f):h=of(e.conditions?new ql:[],"]"),e.conditions?(Hp(e,u),e.conditions.push(h),s=null):e.push(h),Qo[ln]===","?r.lastIndex=++ln:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let p={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&dD(p,f),Hp(e,u),e.conditions.push(p)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(af(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?dJ:Gl,r.lastIndex=ln),ln===Qo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Hp(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function af(e){return e.indexOf(".")>-1?e.split(".").map(af):decodeURIComponent(e)}function uD(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 un.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function dD(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new un.ClientError("wildcard can only be used at the end of a string")}function fD(e){let t=_D(e[0]);return e.length>1&&(t.next=fD(e.slice(1))),t}function _D(e){if(Array.isArray(e)){let t=_D(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Vl(e){return Array.isArray(e)?e.join("\0"):e}function Wi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function fJ(e,t,r){return t*r/Wi(e)}var un,cs,fi,zo,sJ,iJ,oJ,aJ,mA,gA,uJ,Gl,dJ,ln,Qo,ql,nc,lf=be(()=>{un=M(he()),cs=M(vt()),fi=require("ordered-binary"),zo=require("lmdb");uf();sJ=.3,iJ=.1,oJ=.05,aJ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},mA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EA,"executeConditions");a($l,"searchByIndex");a(_i,"findAttribute");a(cJ,"joinTo");a(lJ,"joinFrom");gA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(cf,"filterByType");a(kp,"estimateCondition");uJ=/[()[\]|!<>.]|(=\w*=)/,Gl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,dJ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Fp,"parseQuery");a(of,"parseBlock");a(Hp,"assignOperator");a(af,"decodeProperty");a(uD,"typedDecoding");a(dD,"wildcardDecoding");a(fD,"toSortObject");a(_D,"toSortEntry");ql=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Vl,"flattenKey");a(Wi,"estimatedEntryCount");a(fJ,"intersectionEstimate");nc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var TA={};ve(TA,{MultiPartId:()=>qp,Resource:()=>Gr,snake_case:()=>hJ,transformForSelect:()=>$p});function hJ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function hD(e,t){if(sc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new qp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sc=!0,null;e[e.length-1]==="/"&&(sc=!0)}return t.coerceId(decodeURIComponent(e))}function Mn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string")if(this.directURLMapping)c=c.slice(1);else{let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let p=this.parsePath(c,o,l);p?.id!==void 0?(p.query&&(l?l=Object.assign(p.query,l):l=p.query),u=p.isCollection,c=p.id):c=p}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new nc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return yt(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let p=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(p?.then)return p.then(S=>{if(!S)throw new Gp(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!p)throw new Gp(o.user)}return typeof f?.then=="function"?f.then(p=>e(_,l,o,p)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function vn(e,t){let r=new ED.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 SA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function $p(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):SA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(SA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(SA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(p=>u[h.name||h]=p))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=$p(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var pD,mD,ED,_J,Gr,Gp,sc,qp,Jo=be(()=>{pD=require("crypto");Fl();mD=M(li()),ED=M(he());rc();lf();_J={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Gr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Mn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=$p(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Mn(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):vn(t,"put")},{hasContent:!0,type:"update"});static patch=Mn(function(t,r,n,s){return t.patch?t.patch(s,r):vn(t,"patch")},{hasContent:!0,type:"update"});static delete=Mn(function(t,r,n,s){return t.delete?t.delete(r):vn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,pD.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),yt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):vn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=Mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):vn(t,"delete")},{hasContent:!1,type:"update"});static post=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Mn(function(t,r,n,s){return t.connect?t.connect(s,r):vn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):vn(t,"subscribe")},{type:"read"});static publish=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):vn(t,"publish")},{hasContent:!0,type:"create"});static search=Mn(function(t,r,n,s){let i=t.search?t.search(r):vn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=$p(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Mn(function(t,r,n,s){return t.search?t.search(s,r):vn(t,"search")},{hasContent:!0,type:"read"});static copy=Mn(function(t,r,n,s){return t.copy?t.copy(s,r):vn(t,"copy")},{hasContent:!0,type:"create"});static move=Mn(function(t,r,n,s){return t.move?t.move(s,r):vn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;vn(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Fp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&_J[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:hD(t,this),isCollection:sc}}let i=hD(t,this);return sc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new Dn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Dn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,mD._assignPackageExport)("Resource",Gr);a(hJ,"snake_case");Gp=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(hD,"pathToId");qp=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Mn,"transactional");a(vn,"missingMethod");a(SA,"selectFromObject");a($p,"transformForSelect")});var Xo,AA=be(()=>{Xo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var TD={};ve(TD,{Resources:()=>Vp,keyArrayToString:()=>Kl,resetResources:()=>pJ,resources:()=>hi});function pJ(){return hi=new Vp}function Kl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var gD,SD,Vp,hi,Yl=be(()=>{rc();AA();gD=M(Q()),SD=M(he()),Vp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new SD.ServerError(`Conflicting paths for ${t}`);gD.default.error(c),i.Resource=new Xo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),f=this.get(u),d=-1;if(!f&&n===o&&(d=u.indexOf("?",s),d!==-1)){let h=u.slice(0,d);f=this.get(h)}if(f&&(!r||f.exportTypes?.[r]!==!1)){if(f.relativeURL=t.slice(d!==-1?d:n),!f.hasSubPaths)return f;i=f}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return yt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(pJ,"resetResources");a(Kl,"keyArrayToString")});var Wl={};ve(Wl,{server:()=>We});var AD,We,qr=be(()=>{AD=M(li()),We={};(0,AD._assignPackageExport)("server",We)});var bA={};ve(bA,{loadGQLSchema:()=>gJ,start:()=>yA,startOnMainThread:()=>EJ});function yA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],p;for(let A of d.definitions)switch(A.kind){case l.OBJECT_TYPE_DEFINITION:let k=function(K){if(K.kind==="NonNullType"){let Z=k(K.type);return Z.nullable=!1,Z}if(K.kind==="ListType")return{type:"array",elements:k(K.type)};let oe={type:K.name?.value};return Object.defineProperty(oe,"location",{value:K.loc.startToken}),oe};a(k,"getProperty");let E=A.name.value,R=[],N={table:null,database:null,properties:R};h.set(E,N);for(let K of A.directives){if(K.name.value==="table"){for(let oe of K.arguments)N[oe.name.value]=oe.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=E),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,_.push(N)}if(K.name.value==="sealed"&&(N.sealed=!0),K.name.value==="splitSegments"&&(N.splitSegments=!0),K.name.value==="replicate"&&(N.replicate=!0),K.name.value==="export"){N.export=!0;for(let oe of K.arguments)typeof N.export!="object"&&(N.export={}),N.export[oe.name.value]=oe.value.value}}let v=!1,F={};for(let K of A.fields){let re=k(K.type);re.name=K.name.value,R.push(re),F[re.name]=void 0;for(let oe of K.directives){let Z=oe.name.value;if(Z==="primaryKey")v?console.warn("Can not define two attributes as a primary key at",oe.loc):(re.isPrimaryKey=!0,v=!0);else if(Z==="indexed")re.indexed=!0;else if(Z==="computed"){for(let se of oe.arguments||[])if(se.name.value==="from"){let Y=se.value.value;re.computed={from:g(Y,se,F)},re.version==null&&(re.version=Y)}else se.name.value==="version"&&(re.version=se.value.value);re.computed=re.computed||!0}else if(Z==="relationship"){let se={};for(let Y of oe.arguments)se[Y.name.value]=Y.value.value;re.relationship=se}else if(Z==="createdTime")re.assignCreatedTime=!0;else if(Z==="updatedTime")re.assignUpdatedTime=!0;else if(Z==="expiresAt")re.expiresAt=!0;else if(Z==="allow"){let se=re.authorizedRoles=[];for(let Y of oe.arguments)Y.name.value==="role"&&se.push(Y.value.value)}else server.knownGraphQLDirectives.includes(Z)&&console.warn(`@${Z} is an unknown directive, at`,oe.loc)}}N.type=E,E==="Query"&&(p=N)}function S(A){let E=h.get(A.type);E?(Object.defineProperty(A,"properties",{value:E.properties}),Object.defineProperty(A,"definition",{value:E})):A.type==="array"?S(A.elements):mJ.includes(A.type)||(0,yD.getWorkerIndex)()===0&&console.error(`The type ${A.type} is unknown at line ${A.location.line}, column ${A.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let A of h.values())for(let E of A.properties)S(E);for(let A of _)A.tableClass=e(A),A.export&&(A.export.name===""?i.set((0,RA.dirname)(n),A.tableClass):i.set((0,RA.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,E,R){return new RD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${A}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(R)}a(g,"createComputedFrom")}}var RA,RD,yD,mJ,EJ,gJ,bD=be(()=>{RA=require("path"),RD=require("node:vm");Me();yD=M(tt()),mJ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(yA,"start");EJ=yA,gJ=yA({ensureTable:ct}).handleFile});var DD={};ve(DD,{parse:()=>NA,streamAsJSON:()=>df,stringify:()=>ic});function df(e){return new OA({value:e})}function OD(e){return console.error(e),JSON.stringify(e.toString())}function ND(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ic(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===CD)return PD(e);if(t.resolution)return t.resolution.then(()=>ic(e));throw t}}function PD(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+=PD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ic(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function NA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),AJ.test(e)?SJ.parse(e):JSON.parse(e)):null}var wD,ID,SJ,TJ,CD,OA,AJ,wA=be(()=>{wD=require("stream"),ID=M(require("json-bigint-fixes")),SJ=(0,ID.default)({useNativeBigInt:!0}),TJ=1e4,CD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw CD};a(df,"streamAsJSON");OA=class extends wD.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),OD)}catch(s){yield OD(s)}else yield ic(t)}else yield ic(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);ND(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>TJ?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 ND(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(OD,"handleError");a(ND,"when");a(ic,"stringify");a(PD,"jsStringify");AJ=/[[,:]\s*-?\d{16,}/;a(NA,"parse")});var pi=I(Yp=>{var Kp=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])Kp.logsAtLevel(e)&&(Yp[e]=Kp[e]);Yp.loggerWithTag=e=>Kp.loggerWithTag(e,!0);Yp.setLogLevel=Kp.setLogLevel});var kD={};ve(kD,{asyncSerialization:()=>LA,contentTypes:()=>DA,findBestSerializer:()=>zp,getDeserializer:()=>Qi,registerContentHandlers:()=>hf,serialize:()=>pf,serializeMessage:()=>ea,toCsvStream:()=>Wp});function yJ(e){try{return e?.[0]===123?PA(e):e}catch{return e}}function hf(e){e.register(OJ,{serializers:[{regex:/^application\/json$/,serializer:df},{regex:/^application\/cbor$/,serializer:a(function(t){return new oc.EncoderStream(_f).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?ac.Readable.from((0,mi.encodeIter)(t,_f)):(0,mi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),Wp(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,mi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,oc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function zp(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let p of f){let S=p.indexOf("=");h[p.substring(0,S)]=p.substring(S+1)}d=+h.q;let _=$r.get(u);if(_){let p=(_.q||1)*d;p>s&&(n=_,i=_.type||u,s=p,o=h)}}if(!n){if(r)throw new vD.ClientError("No supported content types found in Accept header, supported types include: "+Array.from($r.keys()).join(", "),406);n=$r.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function pf(e,t,r){let n=MD&&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 Ei)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=zp(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}),CA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,zi.createBrotliCompress)({params:{[zi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?zi.constants.BROTLI_MODE_TEXT:zi.constants.BROTLI_MODE_GENERIC,[zi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>MD?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,zi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function ea(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Zo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=zp(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=ff(e);return Zo?.length>0?(Zo.length===1?Zo[0]:Promise.all(Zo)).then(()=>ea(e,t,!0)):n}finally{Zo=void 0}}function LA(e){if(Zo)Zo.push(e);else throw new Error("Unable to serialize asynchronously")}function NJ(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 IJ(e){return wJ.includes(e)}function CJ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Qi(e="",t=!1){let r=CJ(e),n=r.type&&$r.get(r.type)?.deserialize||PJ(r);return t?s=>NJ(s).then(n):n}function PJ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!IJ(e.parameters.charset)&&CA.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 PA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function DJ(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 Wp(e,t){let r=ac.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new RJ(n,s);return r.pipe(i)}var mi,oc,zi,vD,ac,UD,IA,xD,CA,RJ,BD,ff,PA,_f,$r,DA,LD,HD,bJ,OJ,MD,Zo,wJ,ji=be(()=>{wA();mi=require("msgpackr"),oc=require("cbor-x"),zi=require("zlib"),vD=M(he()),ac=M(require("stream"));qr();UD=M(li()),IA=M(le());H();xD=M(require("yaml")),CA=M(pi());ls();({Transform:RJ}=require("json2csv")),BD=IA.default.get(x.SERIALIZATION_BIGINT)!==!1,ff=BD?ic:JSON.stringify,PA=BD?NA:JSON.parse,_f={useRecords:!1,useToJSON:!0},$r=new Map,DA=$r;We.contentTypes=DA;(0,UD._assignPackageExport)("contentTypes",DA);$r.set("application/json",{serializeStream:df,serialize:ff,deserialize(e){return PA(e)},q:.8});LD=new oc.Encoder(_f);$r.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new oc.EncoderStream(_f).end(e)},serialize:LD.encode,deserialize:LD.decode,q:1});$r.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?ac.Readable.from((0,mi.encodeIter)(e,_f)):(0,mi.pack)(e)},serialize:mi.pack,deserialize:mi.unpack,q:.9});$r.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),Wp(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]),Wp(e,e?.getColumns?.())},q:.1});$r.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return ac.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});$r.set("text/yaml",{serialize(e){return xD.stringify(e,{aliasDuplicateObjects:!1})},q:.7});$r.set("text/event-stream",{serializeStream:a(function(e){return ac.Readable.from(DJ(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
6
+ `}a(vs,"createLogRecord");function Qd(e){if(li){if(mP(e),os){Yo=!1;try{process.stdout.write(e)}finally{Yo=!0}}}else os&&process.stdout.write(e)}a(Qd,"logStdOut");function wp(e){if(li){if(mP(e),os){Yo=!1;try{process.stderr.write(e)}finally{Yo=!0}}}else os&&process.stderr.write(e)}a(wp,"logStdErr");function mP(e){sA(),Ko?Ki.appendFileSync(Ko,e):nA||console.log(e)}a(mP,"logToFile");function oA(){try{Ki.closeSync(Ko)}catch{}Ko=null}a(oA,"closeLogFile");function sA(){if(!Ko){try{Ko=Ki.openSync(Op,"a")}catch(e){nA||(nA=!0,console.error(e))}setTimeout(()=>{oA()},j2).unref()}}a(sA,"openLogFile");function EP(...e){_r[wr]<=_r.info&&Qd(vs("info",e))}a(EP,"info");function gP(...e){_r[wr]<=_r.trace&&Qd(vs("trace",e))}a(gP,"trace");function Np(...e){_r[wr]<=_r.error&&wp(vs("error",e))}a(Np,"error");function SP(...e){_r[wr]<=_r.debug&&Qd(vs("debug",e))}a(SP,"debug");function TP(...e){_r[wr]<=_r.notify&&Qd(vs("notify",e))}a(TP,"notify");function AP(...e){_r[wr]<=_r.fatal&&wp(vs("fatal",e))}a(AP,"fatal");function RP(...e){_r[wr]<=_r.warn&&wp(vs("warn",e))}a(RP,"warn");function rj(e,t,...r){t===hP.STDERR?wp(vs(e,r)):Qd(vs(e,r))}a(rj,"logCustomLevel");function nj(){let e;try{e=Y2.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ui.join(e,Vt.HDB_HOME_DIR_NAME,Vt.BOOT_PROPS_FILE_NAME);return Ki.existsSync(t)||(t=ui.join(iA,"utility/hdb_boot_properties.file")),t}a(nj,"getPropsFilePath");function sj(e){wr=e}a(sj,"setLogLevel");function dP(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(dP,"autoCastBoolean");function ij(e){try{if(e.includes("config/settings.js")){let o=_P(e);return{level:o.get(Vt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ui.dirname(o.get(Vt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=fP.parseDocument(Ki.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Vt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(ij,"getLogConfig");function oj(){try{let e=fP.parseDocument(Ki.readFileSync(Q2,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(oj,"getDefaultConfig");function aj(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(aj,"AuthAuditLog")});var aA=I(($Te,OP)=>{"use strict";var cj=require("util"),lj=require("path"),uj=require("child_process"),dj=cj.promisify(uj.execFile),fj=1e3*1e3*10;OP.exports={findPs:_j};async function _j(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await dj("ps",["wwxo",`pid,${r}`],{maxBuffer:fj});for(let s of n.trim().split(`
7
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:lj.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(_j,"findPs")});var vt=I((KTe,wP)=>{"use strict";var hj="__dbis__",pj="__txns__",mj="__environment_name__",Ej="__dbi_defintion__",gj={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"},Sj=["__createdtime__","__updatedtime__"],Tj="\uFFFF",NP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Aj=Object.values(NP);wP.exports={AUDIT_STORE_NAME:pj,INTERNAL_DBIS_NAME:hj,DBI_DEFINITION_NAME:Ej,SEARCH_TYPES:gj,TIMESTAMP_NAMES:Sj,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:mj,TRANSACTIONS_DBI_NAMES_ENUM:NP,TRANSACTIONS_DBIS:Aj,OVERFLOW_MARKER:Tj}});var Cn=I((YTe,xP)=>{"use strict";var IP=(H(),D(q)),CP=vt(),PP={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},DP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),LP={500:DP("There was an error processing your request."),400:"Invalid request"},Rj=LP[PP.INTERNAL_SERVER_ERROR],yj={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},bj={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},Oj={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},Nj={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${CP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${CP.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"},wj={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${IP.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 ${IP.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"},MP={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"},Ij={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},Cj={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},Pj={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},Dj={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Lj={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},vP={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},UP={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},Mj={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"},vj={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Uj={...MP,...Oj,...yj,...Ij,...Cj,...Pj,...Dj,...Lj,...wj,...vP,...UP,...Mj,...vj,...bj};xP.exports={CHECK_LOGS_WRAPPER:DP,HDB_ERROR_MSGS:Uj,DEFAULT_ERROR_MSGS:LP,DEFAULT_ERROR_RESP:Rj,HTTP_STATUS_CODES:PP,LMDB_ERRORS_ENUM:Nj,AUTHENTICATION_ERROR_MSGS:MP,VALIDATION_ERROR_MSGS:vP,ITC_ERRORS:UP}});var he=I((zTe,kP)=>{"use strict";var kl=Cn(),xj=j(),Bj=(H(),D(q)),Ip=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,BP),this.statusCode=n||kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(kl.DEFAULT_ERROR_MSGS[n]?kl.DEFAULT_ERROR_MSGS[n]:kl.DEFAULT_ERROR_MSGS[kl.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&&xj[s](i)}},cA=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},lA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function BP(e,t,r,n=Bj.LOG_LEVELS.ERROR,s=null,i=!1){if(HP(e))return e;let o=new Ip(e,t,r,n,s);return i&&delete o.stack,o}a(BP,"handleHDBError");function HP(e){return e.__proto__.constructor.name===Ip.name}a(HP,"isHDBError");kP.exports={isHDBError:HP,handleHDBError:BP,ClientError:cA,ServerError:lA,hdb_errors:kl}});var gt=I((jTe,YP)=>{"use strict";var ef=(H(),D(q)),Hj=oe(),on=ce(),tf=require("path"),kj=require("minimist"),FP=require("fs-extra"),GP=require("lodash");on.initSync();var{CONFIG_PARAMS:Wo,DATABASES_PARAM_CONFIG:jd,SYSTEM_SCHEMA_NAME:Cp}=ef,Jd,Xd,Zd;function qP(){if(Jd!==void 0)return Jd;if(on.getHdbBasePath()!==void 0)return Jd=on.get(Wo.STORAGE_PATH)||tf.join(on.getHdbBasePath(),ef.DATABASES_DIR_NAME),Jd}a(qP,"getBaseSchemaPath");function $P(){if(Xd!==void 0)return Xd;if(on.getHdbBasePath()!==void 0)return Xd=KP(Cp),Xd}a($P,"getSystemSchemaPath");function VP(){if(Zd!==void 0)return Zd;if(on.getHdbBasePath()!==void 0)return Zd=on.get(ef.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||tf.join(on.getHdbBasePath(),ef.TRANSACTIONS_DIR_NAME),Zd}a(VP,"getTransactionAuditStoreBasePath");function Fj(e,t){let r=on.get(Wo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||tf.join(VP(),e.toString())}a(Fj,"getTransactionAuditStorePath");function KP(e,t){e=e.toString(),t=t&&t.toString();let r=on.get(ef.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||tf.join(qP(),e)}a(KP,"getSchemaPath");function Gj(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,kj(process.argv));let n=r[Wo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!Hj.isObject(n))throw o;i=n}for(let o of i){let c=o[Cp];if(!c)continue;let l=on.get(Wo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[jd.PATH];if(u)return GP.set(l,[Cp,jd.TABLES,t,jd.PATH],u),on.setProperty(Wo.DATABASES,l),u;let f=c?.[jd.PATH];if(f)return GP.set(l,[Cp,jd.PATH],f),on.setProperty(Wo.DATABASES,l),f}}let s=r[Wo.STORAGE_PATH.toUpperCase()];if(s){if(!FP.pathExistsSync(s))throw new Error(s+" does not exist");let i=tf.join(s,e);return FP.mkdirsSync(i),on.setProperty(Wo.STORAGE_PATH,s),i}return $P()}a(Gj,"initSystemSchemaPaths");function qj(){Jd=void 0,Xd=void 0,Zd=void 0}a(qj,"resetPaths");YP.exports={getBaseSchemaPath:qP,getSystemSchemaPath:$P,getTransactionAuditStorePath:Fj,getTransactionAuditStoreBasePath:VP,getSchemaPath:KP,initSystemSchemaPaths:Gj,resetPaths:qj}});var an=I((eAe,JP)=>{"use strict";var $j=Cn().LMDB_ERRORS_ENUM,XTe=require("lmdb"),Vj=vt(),ZTe=require("buffer").Buffer,{OVERFLOW_MARKER:WP,MAX_SEARCH_KEY_LENGTH:Pp}=Vj,zP=["number","string","symbol","boolean","bigint"];function Kj(e){if(e=e?.primaryStore||e,!e)throw new Error($j.ENV_REQUIRED)}a(Kj,"validateEnv");function Yj(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(Yj,"stringifyData");function Wj(e){return e instanceof Date?e.valueOf():e}a(Wj,"convertKeyValueToWrite");function zj(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(zP.includes(typeof e))return e.length>Pp?[e.slice(0,Pp)+WP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(zP.includes(typeof i))i.length>Pp?r.push(i.slice(0,Pp)+WP):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(zj,"getIndexedValues");var Dp=0,QP=0;function jP(){QP=Date.now()-performance.now()}a(jP,"adjustStartTime");jP();var Qj=6e4;setInterval(jP,Qj).unref();function jj(){let e=performance.now()+QP;return e>Dp?(Dp=e,e):(Dp+=488e-6,Dp)}a(jj,"getNextMonotonicTime");JP.exports={validateEnv:Kj,stringifyData:Yj,convertKeyValueToWrite:Wj,getNextMonotonicTime:jj,getIndexedValues:zj}});var rf=I((rAe,XP)=>{"use strict";var Jj=(H(),D(q)).OPERATIONS_ENUM,uA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=Jj.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};XP.exports=uA});var nf=I((iAe,rD)=>{"use strict";var sAe=rf(),Lp=(H(),D(q)),dA=oe(),ZP=j(),Xj=require("uuid"),{handleHDBError:Mp,hdb_errors:Zj}=he(),{HDB_ERROR_MSGS:vp,HTTP_STATUS_CODES:Up}=Zj;rD.exports=eD;function eD(e,t,r){for(let s=0;s<t.length;s++)tD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];eJ(i,r,e.operation)}}a(eD,"processRows");eD.validateAttribute=tD;function tD(e){if(Buffer.byteLength(String(e))>Lp.INSERT_MAX_CHARACTER_SIZE)throw Mp(new Error,vp.ATTR_NAME_LENGTH_ERR(e),Up.BAD_REQUEST,void 0,void 0,!0);if(dA.isEmptyOrZeroLength(e)||dA.isEmpty(e.trim()))throw Mp(new Error,vp.ATTR_NAME_NULLISH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}a(tD,"validateAttribute");function eJ(e,t,r){if(!e.hasOwnProperty(t)||dA.isEmptyOrZeroLength(e[t])){if(r===Lp.OPERATIONS_ENUM.INSERT||r===Lp.OPERATIONS_ENUM.UPSERT){e[t]=Xj.v4();return}throw ZP.error("Update transaction aborted due to record with no hash value:",e),Mp(new Error,vp.RECORD_MISSING_HASH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Lp.INSERT_MAX_CHARACTER_SIZE)throw ZP.error(e),Mp(new Error,vp.HASH_VAL_LENGTH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}a(eJ,"validateHash")});var nD,Pn,fA,Fl=be(()=>{nD=require("events"),Pn=class extends nD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new fA;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)}},fA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function uD(e){hA=e}function sJ(){nJ=setInterval(function(){for(let e of _A)if(e.stale){let t=e.getContext()?.url;aD.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},rJ).unref()}var pA,oD,aD,cD,lD,sD,_A,tJ,sf,iD,hA,tc,xp,rJ,nJ,Bp=be(()=>{pA=M(an()),oD=M(he()),aD=M(j()),cD=M(ce());H();lD=M(oe()),sD=100,_A=new Set,tJ=(0,lD.convertToMS)(cD.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(uD,"replicationConfirmation");tc=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),_A.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(_A.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(sf&&!this.overloadChecked&&performance.now()-iD>tJ)throw new oD.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,pA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let p=this.writes[_];p&&(p.before||p.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let p;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let R=g[_===0?"before":"beforeIntermediate"];if(R){let E=R();p?p.push?p.push(E):p=[p,E]:p=E}}p&&await(p.push?Promise.all(p):p)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<sD>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return sf||(sf=s,iD=performance.now(),sf.then(()=>{sf=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];hA&&_&&i.push(hA(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+sD/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},xp=class extends tc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,pA.getNextMonotonicTime)())}getReadTxn(){}},rJ=3e4;a(sJ,"startMonitoringTxns");sJ()});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new tc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var dD,rc=be(()=>{dD=M(ci());Bp();a(bt,"transaction");(0,dD._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function EA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let p=e[_],S=u(p);d=d.concat(S)}let h=new Set;return d.filter(_=>{let p=_.key??_;return h.has(p)?!1:(h.add(p),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?EA(d.conditions,d.operator,r,n,s,i,o,c):$l(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((p,S)=>{if(p.conditions){let E=p.operator==="or",A=f(p.conditions,!E,_);return E?(O,v)=>A.some(F=>F(O,v)):(O,v)=>A.every(F=>F(O,v))}let g=(p.attribute||p[0])===r.primaryKey,R=cf(p,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=_J(r.primaryStore,p.estimated_count,_)),R}).filter(Boolean)}a(f,"mapConditionsToFilters")}function $l(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new ln.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],A=fi(n.attributes,E);if(A.relationship){if(o.length<2)throw new ln.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=A.definition?.tableClass||A.elements?.definition?.tableClass,v=new Map,F=$l({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,O,s,v);if(A.relationship.to){i[o[0]]=v;let G=!!fi(O.attributes,A.relationship.to)?.elements;F=lJ(F,A,O.primaryStore,G,v)}if(A.relationship.from){let G=a(Y=>(Y?.key!==void 0&&(Y=Y.key),$l({attribute:A.relationship.from,value:Y},t,r,n,s,v)),"searchEntry");A.elements?(i[o[0]]=v,F=uJ(F,A,O.primaryStore,v,G)):F=F.flatMap(G)}return F}else if(o.length===1)o=o[0];else throw new ln.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(gA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=di.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new ln.ClientError(`Unknown query comparator "${l}"`)}let p,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>as.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,as.MAX_SEARCH_KEY_LENGTH)+as.OVERFLOW_MARKER,h=!1,p=cf(e,n,null,i,S)),typeof f=="string"&&f.length>as.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,as.MAX_SEARCH_KEY_LENGTH)+as.OVERFLOW_MARKER,d=!0,p=p??cf(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new ln.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new ln.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new ln.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new ln.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(p=p??cf(e,n,null,i,S),!p)throw new ln.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(R).map(p?function({key:A,value:O}){return this?.isSync?O&&p(O)?A:zo.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(O&&p(O)?A:zo.SKIP)}catch(G){F(G)}}))}:A=>A.value==null&&!(A.metadataFlags&(Dn|jo))?zo.SKIP:A);return E.hasEntries=!0,E}else return g?g.getRange(R).map(p?function({key:E,value:A}){let O;return typeof E=="string"&&E.length>as.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(A):O={[o]:E},this.isSync?p(O)?A:zo.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(p(O)?A:zo.SKIP)}catch(G){F(G)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:A}){return this.isSync?A&&p(A)?E:zo.SKIP:new Promise((O,v)=>setImmediate(()=>{try{O(A&&p(A)?E:zo.SKIP)}catch(F){v(F)}}))})}function fi(e,t){if(Array.isArray(t))if(t.length>1){let r=fi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?fi(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 lJ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function uJ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function cf(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=fi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],p=cf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!p)return;if(_){_.filters||(_.filters=[]),_.filters.push(p);return}let S=t.propertyResolvers?.[f],g,R=a((E,A)=>{let O,v;if(S){if(S.from&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let G of p.idFilter.idSet)e={attribute:S.from,value:G};g=u(S.from,p.idFilter,!0,!0)}else g=u(S.from,p.idFilter,!1,!0);let F=g(E);return g.idFilter&&(R.idFilter=g.idFilter),F}v=S(E,r,A),O=v?.value}else O=E[f];return O?Array.isArray(O)?O.some(p):p(O,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),gA[o]||o){case as.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,di.compareKeys)(f,l[0])>=0&&(0,di.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,di.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,di.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,di.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,di.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,di.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new ln.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let p;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&kp(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(h=!1));let S=0,g=3;function R(E){let A=E[f],O;if(typeof A!="object"||!A||_?O=d(A):Array.isArray(A)?O=A.some(d):A instanceof Date&&(O=d(A.getTime())),h&&(g++,!O&&!R.idFilter&&++S/g*(i-g)>p)){let v=$l(e,r.transaction.getReadTxn(),!1,t).map(Vl),F=new Set(v);R.idFilter=G=>F.has(Vl(G)),R.idFilter.idSet=F}return O}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(u,"attributeComparator")}function kp(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/Yi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=gA[n]||n,n===as.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=fi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=kp(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Yi(e.indices[i.relationship.from])/(Yi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Yi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=aJ*Yi(e.primaryStore)+1:n==="between"?r.estimated_count=oJ*Yi(e.primaryStore)+1:n==="sort"?r.estimated_count=Yi(e.primaryStore)+1:r.estimated_count=iJ*Yi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Fp(e){if(e)if(Qo=e,Gl.lastIndex=0,dJ.test(e))try{let t=of(new ql,"");if(cn!==Qo.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${cn} in '${Qo}'`,t}else return new URLSearchParams(e)}function of(e,t){let r=Gl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Qo);){cn=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=fD}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=af(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=cJ[d],l=mA[i]?fD:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=af(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&_D(p,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(p),S.operator=u}else Hp(e,u),e.conditions.push(p)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(af(f)),s=void 0;break;case"(":Gl.lastIndex=cn;let _=of(f?[]:new ql,")");switch(f){case"":Hp(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=hD(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}Qo[cn]===","?r.lastIndex=++cn:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");Gl.lastIndex=cn,h=of([],"}"),h.name=f,e.push(h),Qo[cn]===","?r.lastIndex=++cn:o=!0;break;case"[":Gl.lastIndex=cn,f?(h=of(new ql,"]"),h.name=f):h=of(e.conditions?new ql:[],"]"),e.conditions?(Hp(e,u),e.conditions.push(h),s=null):e.push(h),Qo[cn]===","?r.lastIndex=++cn:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let p={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&_D(p,f),Hp(e,u),e.conditions.push(p)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(af(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?fJ:Gl,r.lastIndex=cn),cn===Qo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Hp(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function af(e){return e.indexOf(".")>-1?e.split(".").map(af):decodeURIComponent(e)}function fD(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 ln.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function _D(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new ln.ClientError("wildcard can only be used at the end of a string")}function hD(e){let t=pD(e[0]);return e.length>1&&(t.next=hD(e.slice(1))),t}function pD(e){if(Array.isArray(e)){let t=pD(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Vl(e){return Array.isArray(e)?e.join("\0"):e}function Yi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function _J(e,t,r){return t*r/Yi(e)}var ln,as,di,zo,iJ,oJ,aJ,cJ,mA,gA,dJ,Gl,fJ,cn,Qo,ql,nc,lf=be(()=>{ln=M(he()),as=M(vt()),di=require("ordered-binary"),zo=require("lmdb");uf();iJ=.3,oJ=.1,aJ=.05,cJ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},mA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EA,"executeConditions");a($l,"searchByIndex");a(fi,"findAttribute");a(lJ,"joinTo");a(uJ,"joinFrom");gA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(cf,"filterByType");a(kp,"estimateCondition");dJ=/[()[\]|!<>.]|(=\w*=)/,Gl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,fJ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Fp,"parseQuery");a(of,"parseBlock");a(Hp,"assignOperator");a(af,"decodeProperty");a(fD,"typedDecoding");a(_D,"wildcardDecoding");a(hD,"toSortObject");a(pD,"toSortEntry");ql=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Vl,"flattenKey");a(Yi,"estimatedEntryCount");a(_J,"intersectionEstimate");nc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var TA={};ve(TA,{MultiPartId:()=>qp,Resource:()=>Fr,snake_case:()=>pJ,transformForSelect:()=>$p});function pJ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function mD(e,t){if(sc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new qp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sc=!0,null;e[e.length-1]==="/"&&(sc=!0)}return t.coerceId(decodeURIComponent(e))}function Ln(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string")if(this.directURLMapping)c=c.slice(1);else{let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let p=this.parsePath(c,o,l);p?.id!==void 0?(p.query&&(l?l=Object.assign(p.query,l):l=p.query),u=p.isCollection,c=p.id):c=p}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new nc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return bt(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let p=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(p?.then)return p.then(S=>{if(!S)throw new Gp(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!p)throw new Gp(o.user)}return typeof f?.then=="function"?f.then(p=>e(_,l,o,p)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function Mn(e,t){let r=new SD.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 SA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function $p(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):SA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(SA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(SA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(p=>u[h.name||h]=p))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=$p(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var ED,gD,SD,hJ,Fr,Gp,sc,qp,Jo=be(()=>{ED=require("crypto");Fl();gD=M(ci()),SD=M(he());rc();lf();hJ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Ln(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=$p(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=Ln(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Mn(t,"put")},{hasContent:!0,type:"update"});static patch=Ln(function(t,r,n,s){return t.patch?t.patch(s,r):Mn(t,"patch")},{hasContent:!0,type:"update"});static delete=Ln(function(t,r,n,s){return t.delete?t.delete(r):Mn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,ED.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),bt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Mn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=Ln(function(t,r,n,s){return t.invalidate?t.invalidate(r):Mn(t,"delete")},{hasContent:!1,type:"update"});static post=Ln(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Ln(function(t,r,n,s){return t.connect?t.connect(s,r):Mn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Ln(function(t,r,n,s){return t.subscribe?t.subscribe(r):Mn(t,"subscribe")},{type:"read"});static publish=Ln(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):Mn(t,"publish")},{hasContent:!0,type:"create"});static search=Ln(function(t,r,n,s){let i=t.search?t.search(r):Mn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=$p(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Ln(function(t,r,n,s){return t.search?t.search(s,r):Mn(t,"search")},{hasContent:!0,type:"read"});static copy=Ln(function(t,r,n,s){return t.copy?t.copy(s,r):Mn(t,"copy")},{hasContent:!0,type:"create"});static move=Ln(function(t,r,n,s){return t.move?t.move(s,r):Mn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;Mn(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Fp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&hJ[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:mD(t,this),isCollection:sc}}let i=mD(t,this);return sc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new Pn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Pn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,gD._assignPackageExport)("Resource",Fr);a(pJ,"snake_case");Gp=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(mD,"pathToId");qp=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Ln,"transactional");a(Mn,"missingMethod");a(SA,"selectFromObject");a($p,"transformForSelect")});var Xo,AA=be(()=>{Xo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var RD={};ve(RD,{Resources:()=>Vp,keyArrayToString:()=>Kl,resetResources:()=>mJ,resources:()=>_i});function mJ(){return _i=new Vp}function Kl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var TD,AD,Vp,_i,Yl=be(()=>{rc();AA();TD=M(j()),AD=M(he()),Vp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new AD.ServerError(`Conflicting paths for ${t}`);TD.default.error(c),i.Resource=new Xo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),f=this.get(u),d=-1;if(!f&&n===o&&(d=u.indexOf("?",s),d!==-1)){let h=u.slice(0,d);f=this.get(h)}if(f&&(!r||f.exportTypes?.[r]!==!1)){if(f.relativeURL=t.slice(d!==-1?d:n),!f.hasSubPaths)return f;i=f}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(mJ,"resetResources");a(Kl,"keyArrayToString")});var Wl={};ve(Wl,{server:()=>Ye});var yD,Ye,Gr=be(()=>{yD=M(ci()),Ye={};(0,yD._assignPackageExport)("server",Ye)});var bA={};ve(bA,{loadGQLSchema:()=>SJ,start:()=>yA,startOnMainThread:()=>gJ});function yA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],p;for(let R of d.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(Y){if(Y.kind==="NonNullType"){let X=F(Y.type);return X.nullable=!1,X}if(Y.kind==="ListType")return{type:"array",elements:F(Y.type)};let se={type:Y.name?.value};return Object.defineProperty(se,"location",{value:Y.loc.startToken}),se};a(F,"getProperty");let E=R.name.value,A=[],O={table:null,database:null,properties:A};h.set(E,O);for(let Y of R.directives){if(Y.name.value==="table"){for(let se of Y.arguments)O[se.name.value]=se.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=E),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,_.push(O)}if(Y.name.value==="sealed"&&(O.sealed=!0),Y.name.value==="splitSegments"&&(O.splitSegments=!0),Y.name.value==="replicate"&&(O.replicate=!0),Y.name.value==="export"){O.export=!0;for(let se of Y.arguments)typeof O.export!="object"&&(O.export={}),O.export[se.name.value]=se.value.value}}let v=!1,G={};for(let Y of R.fields){let te=F(Y.type);te.name=Y.name.value,A.push(te),G[te.name]=void 0;for(let se of Y.directives){let X=se.name.value;if(X==="primaryKey")v?console.warn("Can not define two attributes as a primary key at",se.loc):(te.isPrimaryKey=!0,v=!0);else if(X==="indexed")te.indexed=!0;else if(X==="computed"){for(let ne of se.arguments||[])if(ne.name.value==="from"){let Q=ne.value.value;te.computed={from:g(Q,ne,G)},te.version==null&&(te.version=Q)}else ne.name.value==="version"&&(te.version=ne.value.value);te.computed=te.computed||!0}else if(X==="relationship"){let ne={};for(let Q of se.arguments)ne[Q.name.value]=Q.value.value;te.relationship=ne}else if(X==="createdTime")te.assignCreatedTime=!0;else if(X==="updatedTime")te.assignUpdatedTime=!0;else if(X==="expiresAt")te.expiresAt=!0;else if(X==="allow"){let ne=te.authorizedRoles=[];for(let Q of se.arguments)Q.name.value==="role"&&ne.push(Q.value.value)}else server.knownGraphQLDirectives.includes(X)&&console.warn(`@${X} is an unknown directive, at`,se.loc)}}O.type=E,E==="Query"&&(p=O)}function S(R){let E=h.get(R.type);E?(Object.defineProperty(R,"properties",{value:E.properties}),Object.defineProperty(R,"definition",{value:E})):R.type==="array"?S(R.elements):EJ.includes(R.type)||(0,OD.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let R of h.values())for(let E of R.properties)S(E);for(let R of _)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,RA.dirname)(n),R.tableClass):i.set((0,RA.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,E,A){return new bD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(A)}a(g,"createComputedFrom")}}var RA,bD,OD,EJ,gJ,SJ,ND=be(()=>{RA=require("path"),bD=require("node:vm");Me();OD=M(rt()),EJ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(yA,"start");gJ=yA,SJ=yA({ensureTable:ut}).handleFile});var MD={};ve(MD,{parse:()=>NA,streamAsJSON:()=>df,stringify:()=>ic});function df(e){return new OA({value:e})}function wD(e){return console.error(e),JSON.stringify(e.toString())}function ID(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ic(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===DD)return LD(e);if(t.resolution)return t.resolution.then(()=>ic(e));throw t}}function LD(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+=LD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ic(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function NA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),RJ.test(e)?TJ.parse(e):JSON.parse(e)):null}var CD,PD,TJ,AJ,DD,OA,RJ,wA=be(()=>{CD=require("stream"),PD=M(require("json-bigint-fixes")),TJ=(0,PD.default)({useNativeBigInt:!0}),AJ=1e4,DD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw DD};a(df,"streamAsJSON");OA=class extends CD.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),wD)}catch(s){yield wD(s)}else yield ic(t)}else yield ic(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);ID(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>AJ?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 ID(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(wD,"handleError");a(ID,"when");a(ic,"stringify");a(LD,"jsStringify");RJ=/[[,:]\s*-?\d{16,}/;a(NA,"parse")});var hi=I(Yp=>{var Kp=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])Kp.logsAtLevel(e)&&(Yp[e]=Kp[e]);Yp.loggerWithTag=e=>Kp.loggerWithTag(e,!0);Yp.setLogLevel=Kp.setLogLevel});var GD={};ve(GD,{asyncSerialization:()=>LA,contentTypes:()=>DA,findBestSerializer:()=>zp,getDeserializer:()=>Qi,hasAsyncSerialization:()=>MA,registerContentHandlers:()=>hf,serialize:()=>pf,serializeMessage:()=>Zo,toCsvStream:()=>Wp});function bJ(e){try{return e?.[0]===123?PA(e):e}catch{return e}}function hf(e){e.register(NJ,{serializers:[{regex:/^application\/json$/,serializer:df},{regex:/^application\/cbor$/,serializer:a(function(t){return new oc.EncoderStream(_f).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?ac.Readable.from((0,pi.encodeIter)(t,_f)):(0,pi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),Wp(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,pi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,oc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function zp(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let p of f){let S=p.indexOf("=");h[p.substring(0,S)]=p.substring(S+1)}d=+h.q;let _=qr.get(u);if(_){let p=(_.q||1)*d;p>s&&(n=_,i=_.type||u,s=p,o=h)}}if(!n){if(r)throw new xD.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(qr.keys()).join(", "),406);n=qr.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function pf(e,t,r){let n=UD&&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 mi)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=zp(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}),CA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,zi.createBrotliCompress)({params:{[zi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?zi.constants.BROTLI_MODE_TEXT:zi.constants.BROTLI_MODE_GENERIC,[zi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>UD?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,zi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Zo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Wi=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=zp(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=ff(e);return Wi?.length>0?(Wi.length===1?Wi[0]:Promise.all(Wi)).then(()=>Zo(e,t,!0)):n}finally{Wi=void 0}}function LA(e){if(Wi)Wi.push(e);else throw new Error("Unable to serialize asynchronously")}function MA(){return!!Wi}function wJ(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 CJ(e){return IJ.includes(e)}function PJ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Qi(e="",t=!1){let r=PJ(e),n=r.type&&qr.get(r.type)?.deserialize||DJ(r);return t?s=>wJ(s).then(n):n}function DJ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!CJ(e.parameters.charset)&&CA.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 PA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function LJ(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 Wp(e,t){let r=ac.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new yJ(n,s);return r.pipe(i)}var pi,oc,zi,xD,ac,BD,IA,HD,CA,yJ,kD,ff,PA,_f,qr,DA,vD,FD,OJ,NJ,UD,Wi,IJ,ji=be(()=>{wA();pi=require("msgpackr"),oc=require("cbor-x"),zi=require("zlib"),xD=M(he()),ac=M(require("stream"));Gr();BD=M(ci()),IA=M(ce());H();HD=M(require("yaml")),CA=M(hi());cs();({Transform:yJ}=require("json2csv")),kD=IA.default.get(B.SERIALIZATION_BIGINT)!==!1,ff=kD?ic:JSON.stringify,PA=kD?NA:JSON.parse,_f={useRecords:!1,useToJSON:!0},qr=new Map,DA=qr;Ye.contentTypes=DA;(0,BD._assignPackageExport)("contentTypes",DA);qr.set("application/json",{serializeStream:df,serialize:ff,deserialize(e){return PA(e)},q:.8});vD=new oc.Encoder(_f);qr.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new oc.EncoderStream(_f).end(e)},serialize:vD.encode,deserialize:vD.decode,q:1});qr.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?ac.Readable.from((0,pi.encodeIter)(e,_f)):(0,pi.pack)(e)},serialize:pi.pack,deserialize:pi.unpack,q:.9});qr.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),Wp(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]),Wp(e,e?.getColumns?.())},q:.1});qr.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return ac.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});qr.set("text/yaml",{serialize(e){return HD.stringify(e,{aliasDuplicateObjects:!1})},q:.7});qr.set("text/event-stream",{serializeStream:a(function(e){return ac.Readable.from(LJ(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
8
8
  `),e.data){let r=e.data;typeof r=="object"&&(r=ff(r)),t+="data: "+r+`
9
9
  `}return e.id&&(t+="id: "+e.id+`
10
10
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -13,121 +13,121 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
13
13
 
14
14
  `:`data: ${e}
15
15
 
16
- `},"serialize"),compressible:!1,q:.8});$r.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});HD={type:"application/json",serializeStream:df,serialize:ff,deserialize:yJ,q:.5};$r.set("*/*",HD);$r.set("",HD);a(yJ,"tryJSONParse");a(hf,"registerContentHandlers");bJ=require("fastify-plugin"),OJ=bJ(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=zp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(zp,"findBestSerializer");MD=IA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(pf,"serialize");a(ea,"serializeMessage");a(LA,"asyncSerialization");a(NJ,"streamToBuffer");wJ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(IJ,"isBufferEncoding");a(CJ,"parseContentType");a(Qi,"getDeserializer");a(PJ,"deserializerUnknownType");a(DJ,"transformIterable");a(Wp,"toCsvStream")});var vA={};ve(vA,{start:()=>FJ});function LJ(e){if(e.kind!==De.Kind.OPERATION_DEFINITION&&e.kind!==De.Kind.FRAGMENT_DEFINITION)throw new Rr(`Unexpected non-executable definition type ${e.kind}.`)}function FD(e){if(typeof e!="object"||e===null)throw new gi("Request body must be an object.");if(!("query"in e))throw new gi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new gi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new gi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new gi("Request body `operationName` field must be a string.")}function MA(e){return parseInt(e.value,10)}function qD(e){return parseFloat(e.value)}function $D(e,t,r){let n=r.get(e.name.value);return VD(n)?KD(n,t):{attribute:t,value:n}}function VD(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function KD(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],VD(n)?KD(n,t):{attribute:t,value:n}))}function MJ(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case De.Kind.NULL:return{attribute:t,value:null};case De.Kind.INT:return{attribute:t,value:MA(e.value)};case De.Kind.FLOAT:return{attribute:t,value:qD(e.value)};case De.Kind.BOOLEAN:case De.Kind.STRING:return{attribute:t,value:e.value.value};case De.Kind.VARIABLE:return $D(e.value,t,r);case De.Kind.OBJECT:return YD(e.value,t,r);case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Value type, ${e.value.kind}, is not supported.`)}}function YD(e,t,r){return e.fields.flatMap(n=>MJ(n,t,r))}function vJ(e,t){switch(e.value.kind){case De.Kind.NULL:return{attribute:e.name.value,value:null};case De.Kind.INT:return{attribute:e.name.value,value:MA(e.value)};case De.Kind.FLOAT:return{attribute:e.name.value,value:qD(e.value)};case De.Kind.BOOLEAN:case De.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case De.Kind.VARIABLE:return $D(e.value,e.name.value,t);case De.Kind.OBJECT:return YD(e.value,[e.name.value],t);case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Argument type, ${e.value.kind}, is not supported.`)}}function UJ(e,t){return e.flatMap(r=>vJ(r,t))}function Qp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case De.Kind.FIELD:return r;case De.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Rr(`Fragment \`${n}\` not found.`);return Qp(s.selectionSet,t)}case De.Kind.INLINE_FRAGMENT:return Qp(r.selectionSet,t)}})}function WD(e,t){return Qp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:WD(r.selectionSet,t)}:r.name.value)}async function xJ(e,t,r,n){let s=hi.getMatch(e.name.value,"graphql");if(s===void 0)throw new Rr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:WD(e.selectionSet,r),conditions:UJ(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function zD(e){switch(e.kind){case De.Kind.NULL:return null;case De.Kind.INT:return MA(e);case De.Kind.FLOAT:return parseFloat(e.value);case De.Kind.STRING:case De.Kind.BOOLEAN:return e.value;case De.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:zD(r.value),...t}),{});case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Value type, ${e.kind}, is not supported.`)}}function BJ(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=zD(n.defaultValue)),n.type.kind===De.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Rr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function HJ(e,t,r,n){if(e.operation===De.OperationTypeNode.SUBSCRIPTION)throw new Rr("Subscriptions are not supported.");if(e.operation===De.OperationTypeNode.MUTATION)throw new Rr("Mutations are not supported yet.");let s=BJ(e.variableDefinitions,t),i=await Promise.all(Qp(e.selectionSet,r).map(c=>xJ(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function GD({query:e,variables:t={},operationName:r},n){let s=De.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(LJ(u),u.kind===De.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Rr("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Rr(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Rr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Rr(`Operation \`${r}\` not found.`);let l=await HJ(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function kJ(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 FD(r),GD(r,e)}case"POST":{let r=await Qi(e.headers.get("content-type"),!0)(e._nodeRequest);return FD(r),GD(r,e)}default:throw new gi("Method Not Allowed",405,{Allow:"GET, POST"})}}function FJ(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await kJ(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof De.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Rr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof De.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Rr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var De,Rr,gi,QD=be(()=>{De=M(require("graphql"));ji();Yl();a(LJ,"assertExecutableDefinitionNode");a(FD,"assertRequestParams");a(MA,"processIntValueNode");a(qD,"processFloatValueNode");a($D,"processVariableNode");a(VD,"isObject");a(KD,"transformObjectIntoQueryCondition");a(MJ,"processObjectFieldNode");a(YD,"processObjectValueNode");a(vJ,"processArgumentNode");a(UJ,"buildConditionsQuery");a(Qp,"fillInFragments");a(WD,"buildSelectQuery");a(xJ,"processFieldNode");a(zD,"processConstValueNode");a(BJ,"resolveVariables");a(HJ,"executeOperation");a(GD,"resolver");Rr=class extends Error{static{a(this,"GraphQLQueryingError")}},gi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(kJ,"graphqlQueryingHandler");a(FJ,"start")});var Ti=I((FAe,XD)=>{"use strict";var JD=ae(),jD=(H(),P($)),zl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),ta={schema_format:{pattern:zl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},GJ=Si.alternatives(Si.string().min(1).max(ta.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ta.schema_format.message}),Si.number(),Si.array()).required(),qJ=Si.alternatives(Si.string().min(1).max(ta.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ta.schema_format.message}),Si.number()),$J=Si.alternatives(Si.string().min(1).max(ta.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ta.schema_format.message}),Si.number()).required();function VJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ta.schema_length.maximum?`'${e}' maximum of 250 characters`:zl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(VJ,"checkValidTable");function KJ(e,t){return JD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(KJ,"validateSchemaExists");function YJ(e,t){let r=t.state.ancestors[0].schema;return JD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(YJ,"validateTableExists");function WJ(e,t){return e.toLowerCase()===jD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${jD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(WJ,"validateSchemaName");XD.exports={common_validators:ta,schema_regex:zl,hdb_schema_table:GJ,validateSchemaExists:KJ,validateTableExists:YJ,validateSchemaName:WJ,checkValidTable:VJ,hdb_database:qJ,hdb_table:$J}});var lt=I((qAe,ZD)=>{"use strict";var dn=require("validate.js");dn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dn.validators.type.checks[t](e)?null:` must be a '${t}' value`};dn.validators.type.checks={Object:a(function(e){return dn.isObject(e)&&!dn.isArray(e)},"Object"),Array:dn.isArray,Integer:dn.isInteger,Number:dn.isNumber,String:dn.isString,Date:dn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};dn.validators.hasValidFileExt=function(e,t){return dn.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};ZD.exports={validateObject:zJ,validateObjectAsync:QJ,validateBySchema:jJ};function zJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dn(e,t,{format:"flat"});return r?new Error(r):null}a(zJ,"validateObject");async function QJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(QJ,"validateObjectAsync");function jJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(jJ,"validateBySchema")});var xA=I((VAe,tL)=>{var{hdb_table:JJ,hdb_database:eL}=Ti(),XJ=lt(),UA=require("joi"),ZJ={undefined:"undefined",null:"null"},e4=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||ZJ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),t4=UA.object({database:eL,schema:eL,table:JJ,records:UA.array().items(UA.object().custom(e4)).required()});tL.exports=function(e){return XJ.validateBySchema(e,t4)}});var nL=I((YAe,rL)=>{"use strict";var BA=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};rL.exports=BA});var iL=I((zAe,sL)=>{"use strict";var HA=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};sL.exports=HA});var uL={};ve(uL,{HAS_EXPIRATION:()=>Xp,HAS_RESIDENCY_ID:()=>KA,HAS_STRUCTURE_UPDATE:()=>tm,LAST_TIMESTAMP_PLACEHOLDER:()=>Tf,LOCAL_TIMESTAMP:()=>r4,METADATA:()=>mf,NEW_TIMESTAMP_PLACEHOLDER:()=>aL,NO_TIMESTAMP:()=>kA,PENDING_LOCAL_TIME:()=>YA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>VA,RecordEncoder:()=>$A,TIMESTAMP_ASSIGN_LAST:()=>s4,TIMESTAMP_ASSIGN_NEW:()=>cL,TIMESTAMP_ASSIGN_PREVIOUS:()=>lL,TIMESTAMP_PLACEHOLDER:()=>jp,TIMESTAMP_RECORD_PREVIOUS:()=>FA,handleLocalTimeForGets:()=>rm,recordUpdater:()=>WA,removeEntry:()=>dc});function o4(){return Sf[0]=Sf[0]^64,n4.getFloat64(0)}function rm(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[mf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[mf]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[mf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,cc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<cc.length;u++){let f=cc[u].deref();(!f||f.isDone||f.isCommitted)&&cc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function WA(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?Ql=i?.localTime?FA|lL:kA:Ql=l?i?.localTime?FA|16384:cL|16384:kA;let _=u?.expiresAt;if(_>=0&&(c|=Xp),gf=c,GA=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:o,instructedWrite:Ql>0},S,g=0;try{let A=i?.residencyId,E=u?.residencyId;E&&(qA=E,gf|=KA,g|=fc),A!==E&&(g|=_c,A||(A=0)),c&Xp&&(g|=Rf),u?.originatingOperation&&(g|=Af),d&&(p.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&Un&&(r.getBinaryFast(i.localTime)||ra(i.value));let R;if(u?.omitLocalRecord||(R=em(()=>e.put(n,s,p),n,e.rootStore),lc&&(g|=Un)),l){let N=u?.user?.username;if(h&&(em(()=>e.encoder.encode(h),n,e.rootStore),lc&&(g|=Un)),e.encoder.hasStructureUpdate&&(g|=tm,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,k=r.get(v);if(k){let F=bt(k).previousLocalTime;return R=r.put(v,jl(o,t,n,F,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,Ef,g,E,A,_),{ifVersion:S}),R}}R=r.put(s===void 0?aL:Tf,jl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,Ef,g,E,A,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return R}catch(A){throw A.message+=" id: "+n+" options: "+p,A}}}function dc(e,t,r){if(t)return t.value&&t.metadataFlags&Un&&!e.auditStore.getBinaryFast(t.localTime)&&ra(t.value),e.remove(t.key,r)}var oL,Jp,jp,Tf,VA,aL,r4,mf,Sf,n4,kA,cL,s4,lL,FA,Xp,KA,YA,tm,i4,Ef,Ql,gf,GA,qA,$A,cc,Jl=be(()=>{oL=require("msgpackr");Ji();Jp=M(Q());ls();ls();jp=new Uint8Array([1,1,1,1,4,64,0,0]),Tf=new Uint8Array([1,1,1,1,1,0,0,0]),VA=new Uint8Array([1,1,1,1,3,64,0,0]),aL=new Uint8Array([1,1,1,1,0,64,0,0]),r4=Symbol("local-timestamp"),mf=Symbol("metadata"),Sf=new Uint8Array(8),n4=new DataView(Sf.buffer,0,8),kA=0,cL=0,s4=1,lL=3,FA=4,Xp=16,KA=32,YA=1,tm=256,Ql=0,gf=-1,GA=-1,qA=0,$A=class extends oL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ql||gf>=0){let o=0,c=Ql;c&&(o+=8,Ql=0);let l=gf,u=GA,f=qA;l>=0&&(o+=4,gf=-1,u>=0&&(o+=8,GA=-1),f&&(o+=4,qA=0));let d=i4=r.call(this,s,i|2048|o);Ef=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(jp[4]=c,jp[5]=c>>8,d.set(jp,h),h+=8),lc&&(l|=Un),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Zp<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return Ef=r.call(this,s,i),Ef};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Sf,0,c),c+=8;else for(let h=0;h<8;h++)Sf[h]=t[c++];l=o4(),i=t[c]}let u,f;i<32&&(i===Zp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Xp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&KA&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=uc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[mf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:uc(()=>super.decode(t,r),this.rootStore)}catch(c){return Jp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(o4,"getTimestamp");a(rm,"handleLocalTimeForGets");cc=[];setInterval(()=>{for(let e=0;e<cc.length;e++){let t=cc[e].deref();!t||t.isDone||t.isCommitted?cc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Jp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Jp.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(WA,"recordUpdater");a(dc,"removeEntry")});var yf=I((eRe,fL)=>{"use strict";var dL=le(),a4=(H(),P($)),{RecordEncoder:c4}=(Jl(),P(uL));dL.initSync();var l4=dL.get(a4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zA=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=l4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:c4})}};fL.exports=zA});var bf=I((rRe,_L)=>{"use strict";var xn=le(),us=(H(),P($));xn.initSync();var nm=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=xn.get(us.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xn.get(us.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xn.get(us.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xn.get(us.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=xn.get(us.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),xn.get(us.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=xn.get(us.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=xn.get(us.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};_L.exports=nm;nm.MAX_DBS=1e4});var ut=I((sRe,yL)=>{"use strict";var jA=require("lmdb"),xs=require("fs-extra"),Bn=require("path"),sm=cn(),mL=Q(),fn=Pn().LMDB_ERRORS_ENUM,im=iL(),JA=yf(),EL=bf(),na=vt(),hL=(H(),P($)),{table:u4,resetDatabases:d4}=(Me(),P(st)),pL=le(),Bs=na.INTERNAL_DBIS_NAME,gL=na.DBI_DEFINITION_NAME,f4="data.mdb",_4="lock.mdb",Of=".mdb",h4="-lock",QA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ds(t,r),this.key_type=this.dbi[na.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[na.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new jA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function om(e,t){if(e===void 0)throw new Error(fn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(fn.ENV_NAME_REQUIRED)}a(om,"pathEnvNameValidation");async function XA(e,t,r=!0){try{await xs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(fn.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+Of);return await xs.access(n,xs.constants.R_OK|xs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await xs.access(Bn.join(e,t,f4),xs.constants.R_OK|xs.constants.F_OK),Bn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(fn.INVALID_ENVIRONMENT)}else throw new Error(fn.INVALID_ENVIRONMENT);throw n}}a(XA,"validateEnvironmentPath");function am(e,t){if(sm.validateEnv(e),t===void 0)throw new Error(fn.DBI_NAME_REQUIRED)}a(am,"validateEnvDBIName");async function p4(e,t,r=!1,n=!1){om(e,t);let s=Bn.basename(e);t=t.toString();let i=pL.get(hL.CONFIG_PARAMS.DATABASES);i||pL.setProperty(hL.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await XA(e,t,n),SL(e,t,r)}catch(o){if(o.message===fn.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await xs.mkdirp(n?c:e);let l=new EL(n?c:c+Of,!1),u=jA.open(l);u.dbis=Object.create(null);let f=new JA(!1);u.openDB(Bs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ZA(e,t,r);return u[na.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(p4,"createEnvironment");async function m4(e,t,r,n=!0){om(e,t),t=t.toString();let s=Bn.join(e,t);return u4({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(m4,"copyEnvironment");async function SL(e,t,r=!1){om(e,t),t=t.toString();let n=ZA(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 XA(e,t),i=Bn.join(e,t+Of),o=s!=i,c=new EL(s,o),l=jA.open(c);l.dbis=Object.create(null);let u=AL(l);for(let f=0;f<u.length;f++)ds(l,u[f]);return l[na.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(SL,"openEnvironment");async function E4(e,t,r=!1){om(e,t),t=t.toString();let n=Bn.join(e,t+Of),s=await XA(e,t);if(global.lmdb_map!==void 0){let i=ZA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await TL(o),delete global.lmdb_map[i]}}await xs.remove(s),await xs.remove(s===n?s+h4:Bn.join(Bn.dirname(s),_4))}a(E4,"deleteEnvironment");async function TL(e){sm.validateEnv(e);let t=e[na.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(TL,"closeEnvironment");function ZA(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(ZA,"getCachedEnvironmentName");function g4(e){sm.validateEnv(e);let t=Object.create(null),r=ds(e,Bs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Bs)try{t[n]=Object.assign(new im,s)}catch{mL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(g4,"listDBIDefinitions");function AL(e){sm.validateEnv(e);let t=[],r=ds(e,Bs);for(let{key:n}of r.getRange({start:!1}))n!==Bs&&t.push(n);return t}a(AL,"listDBIs");function S4(e,t){let n=ds(e,Bs).getEntry(t),s=new im;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{mL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(S4,"getDBIDefinition");function RL(e,t,r,n=!r){if(am(e,t),t=t.toString(),t===Bs)throw new Error(fn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ds(e,t)}catch(s){if(s.message===fn.DBI_DOES_NOT_EXIST){let i=new JA(r,n===!0),o=e.openDB(t,i),c=new im(r===!0,n);return o[gL]=c,ds(e,Bs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(RL,"createDBI");function ds(e,t){if(am(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Bs?r=S4(e,t):r=new im,r===void 0)throw new Error(fn.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(fn.DBI_DOES_NOT_EXIST):s}return n[gL]=r,e.dbis[t]=n,n}a(ds,"openDBI");function T4(e,t){am(e,t),t=t.toString();let r=ds(e,t),n=r.getStats();return r[na.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(T4,"statDBI");async function A4(e,t){try{let r=Bn.join(e,t+Of);return(await xs.stat(r)).size}catch{throw new Error(fn.INVALID_ENVIRONMENT)}}a(A4,"environmentDataSize");function R4(e,t){if(am(e,t),t=t.toString(),t===Bs)throw new Error(fn.CANNOT_DROP_INTERNAL_DBIS_NAME);ds(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ds(e,Bs).removeSync(t)}a(R4,"dropDBI");function y4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ds(e,i)}catch(o){if(o.message===fn.DBI_DOES_NOT_EXIST)RL(e,i,i!==t,i===t),n=!0;else throw o}}n&&d4()}a(y4,"initializeDBIs");yL.exports={openDBI:ds,openEnvironment:SL,createEnvironment:p4,listDBIs:AL,listDBIDefinitions:g4,createDBI:RL,dropDBI:R4,statDBI:T4,deleteEnvironment:E4,initializeDBIs:y4,TransactionCursor:QA,environmentDataSize:A4,copyEnvironment:m4,closeEnvironment:TL}});var OL=I((oRe,bL)=>{"use strict";var eR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};bL.exports=eR});var wL=I((cRe,NL)=>{"use strict";var tR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};NL.exports=tR});var CL=I((uRe,IL)=>{"use strict";var rR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};IL.exports=rR});var pc=I((pRe,LL)=>{"use strict";var b4=ut(),O4=OL(),N4=wL(),w4=CL(),Ai=cn(),Nf=Pn().LMDB_ERRORS_ENUM,I4=vt(),Xi=(H(),P($)),C4=ae(),P4=require("uuid"),fRe=require("lmdb"),{handleHDBError:D4,hdb_errors:L4}=he(),{OVERFLOW_MARKER:_Re,MAX_SEARCH_KEY_LENGTH:hRe}=I4,PL=le();PL.initSync();var cm=PL.get(Xi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nR=Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hc=Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function M4(e,t,r,n,s=Ai.getNextMonotonicTime()){aR(e,t,r,n),sR(e,t,r);let i=new O4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];DL(u,!0,s);let f=v4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return iR(o,c,n,i,s)}a(M4,"insertRecords");function v4(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let f=c([[{}]]);Array.isArray(f)&&(c=f[0][Xi.FUNC_VAL],n[o]=c)}let l=Ai.getIndexedValues(c),u=e.dbis[o];if(l){cm&&u.prefetch(l.map(f=>({key:f,value:s})),lm);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}cm&&e.dbis[t].prefetch([s],lm),e.dbis[t].put(s,n,n[hc])})}a(v4,"insertRecord");function U4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(U4,"removeSkippedRecords");function DL(e,t,r){let n=r>0;(n||!Number.isInteger(e[hc]))&&(e[hc]=r||(r=Ai.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[nR]))&&(e[nR]=r||Ai.getNextMonotonicTime()):delete e[nR]}a(DL,"setTimestamps");function sR(e,t,r){r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),b4.initializeDBIs(e,t,r)}a(sR,"initializeTransaction");async function x4(e,t,r,n,s=Ai.getNextMonotonicTime()){aR(e,t,r,n),sR(e,t,r);let i=new N4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=oR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return iR(c,l,n,i,s,o)}a(x4,"updateRecords");async function B4(e,t,r,n,s=Ai.getNextMonotonicTime()){try{aR(e,t,r,n)}catch(l){throw D4(l,l.message,L4.HTTP_STATUS_CODES.BAD_REQUEST)}sR(e,t,r);let i=new w4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;C4.isEmpty(u[t])?(f=P4.v4(),u[t]=f):f=u[t];let d=oR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return iR(o,c,n,i,s)}a(B4,"upsertRecords");async function iR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ai.getNextMonotonicTime(),U4(r,i),n}a(iR,"finalizeWrite");function oR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(DL(r,!f,o),Number.isInteger(r[hc])&&u[hc]>r[hc])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let S=r[p],g=e.dbis[p];if(g===void 0)continue;let A=u[p];if(typeof S=="function"){let R=S([[u]]);Array.isArray(R)&&(S=R[0][Xi.FUNC_VAL],r[p]=S)}if(S===A)continue;let E=Ai.getIndexedValues(A);if(E){cm&&g.prefetch(E.map(R=>({key:R,value:n})),lm);for(let R=0,N=E.length;R<N;R++)g.remove(E[R],n)}if(E=Ai.getIndexedValues(S),E){cm&&g.prefetch(E.map(R=>({key:R,value:n})),lm);for(let R=0,N=E.length;R<N;R++)g.put(E[R],n)}}let _={...u,...r};c.put(n,_,_[hc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:oR(e,t,r,n,s,i,o))}a(oR,"updateUpsertRecord");function H4(e,t,r){if(Ai.validateEnv(e),t===void 0)throw new Error(Nf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Nf.WRITE_ATTRIBUTES_REQUIRED):new Error(Nf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(H4,"validateBasic");function aR(e,t,r,n){if(H4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Nf.RECORDS_REQUIRED):new Error(Nf.RECORDS_MUST_BE_ARRAY)}a(aR,"validateWrite");function lm(){}a(lm,"noop");LL.exports={insertRecords:M4,updateRecords:x4,upsertRecords:B4}});var Zi=I((ERe,k4)=>{k4.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var um=I((gRe,ML)=>{var{common_validators:Ri}=Ti(),If=lt(),wf="is required",Jt={database:{presence:!1,format:Ri.schema_format,length:Ri.schema_length},schema:{presence:!1,format:Ri.schema_format,length:Ri.schema_length},table:{presence:!0,format:Ri.schema_format,length:Ri.schema_length},attribute:{presence:!0,format:Ri.schema_format,length:Ri.schema_length},hash_attribute:{presence:!0,format:Ri.schema_format,length:Ri.schema_length}};function Cf(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Cf,"makeAttributesStrings");function F4(e){return e=Cf(e),Jt.table.presence=!1,Jt.attribute.presence=!1,Jt.hash_attribute.presence=!1,If.validateObject(e,Jt)}a(F4,"schema_object");function G4(e){return e=Cf(e),Jt.table.presence={message:wf},Jt.attribute.presence=!1,Jt.hash_attribute.presence=!1,If.validateObject(e,Jt)}a(G4,"table_object");function q4(e){return e=Cf(e),Jt.table.presence={message:wf},Jt.attribute.presence=!1,If.validateObject(e,Jt)}a(q4,"create_table_object");function $4(e){return e=Cf(e),Jt.table.presence={message:wf},Jt.attribute.presence={message:wf},Jt.hash_attribute.presence=!1,If.validateObject(e,Jt)}a($4,"attribute_object");function V4(e){return e=Cf(e),Jt.table.presence={message:wf},Jt.attribute.presence=!1,Jt.hash_attribute.presence=!1,If.validateObject(e,Jt)}a(V4,"describe_table");function K4(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(K4,"validateTableResidence");ML.exports={schema_object:F4,create_table_object:q4,table_object:G4,attribute_object:$4,describe_table:V4,validateTableResidence:K4}});var UL=I((TRe,vL)=>{"use strict";var Y4=require("uuid"),cR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Y4.v4(),this.schema_table=`${this.schema}.${this.table}`}};vL.exports=cR});var dm=I((RRe,xL)=>{"use strict";var W4=UL(),lR=class extends W4{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};xL.exports=lR});var HL=I((bRe,BL)=>{"use strict";BL.exports=Q4;var z4="inserted";function Q4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===z4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(Q4,"returnObject")});var fm=I((wRe,qL)=>{"use strict";var j4=(H(),P($)),uR=ut(),J4=pc(),{getSystemSchemaPath:X4,getSchemaPath:Z4}=Et(),NRe=Zi(),e3=um(),t3=dm(),r3=HL(),{handleHDBError:kL,hdb_errors:GL}=he(),FL=ae(),{HTTP_STATUS_CODES:n3}=GL,s3="inserted";qL.exports=i3;async function i3(e){let t=e3.attribute_object(e);if(t)throw kL(new Error,t.message,GL.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&FL.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kL(new Error,r,n3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=FL.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 t3(e.schema,e.table,e.attribute,e.id);try{let i=await uR.openEnvironment(Z4(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);uR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await uR.openEnvironment(X4(),j4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await J4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return r3(s3,c,{records:[s]},l)}catch(i){throw i}}a(i3,"lmdbCreateAttribute")});var Pf=I((PRe,VL)=>{"use strict";var eo=ae(),$L=Q(),CRe=xA(),{getDatabases:o3}=(Me(),P(st)),{ClientError:mc}=he();VL.exports=a3;function a3(e){if(eo.isEmpty(e))throw new mc("invalid update parameters defined.");if(eo.isEmptyOrZeroLength(e.schema))throw new mc("invalid schema specified.");if(eo.isEmptyOrZeroLength(e.table))throw new mc("invalid table specified.");if(!Array.isArray(e.records))throw new mc("records must be an array");let t=o3()[e.schema]?.[e.table];if(eo.isEmpty(t))throw new mc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&eo.isEmptyOrZeroLength(o[r]))throw $L.error("a valid hash attribute must be provided with update record:",o),new mc("a valid hash attribute must be provided with update record, check log for more info");if(!eo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw $L.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!eo.isEmpty(o[r])&&o[r]!==""&&n.has(eo.autoCast(o[r]))&&(o.skip=!0),n.add(eo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(a3,"insertUpdateValidate")});var YL=I((LRe,KL)=>{"use strict";var dR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};KL.exports=dR});var QL=I((vRe,zL)=>{"use strict";var fR=ut(),c3=Q(),WL=Pn().LMDB_ERRORS_ENUM;zL.exports=l3;async function l3(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await fR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==WL.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await fR.closeEnvironment(global.lmdb_map[n]),await fR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==WL.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){c3.error(t)}}a(l3,"cleanLMDBMap")});var cM=I((BRe,aM)=>{"use strict";var _R=require("recursive-iterator"),u3=require("alasql"),hR=require("clone"),jL=ae(),{handleHDBError:JL,hdb_errors:d3}=he(),{HDB_ERROR_MSGS:XL,HTTP_STATUS_CODES:ZL}=d3,{getDatabases:f3}=(Me(),P(st)),_3=["DISTINCT_ARRAY"],eM=Symbol("validateTables"),pR=Symbol("validateTable"),xRe=Symbol("getAllColumns"),tM=Symbol("validateAllColumns"),_m=Symbol("findColumn"),rM=Symbol("validateOrderBy"),Df=Symbol("validateSegment"),mR=Symbol("validateColumn"),nM=Symbol("setColumnsForTable"),sM=Symbol("checkColumnsForAsterisk"),iM=Symbol("validateGroupBy"),oM=Symbol("hasColumns"),ER=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eM](),this[sM](),this[tM]()}[eM](){if(this[oM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[pR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[pR](t.table)})}}[oM](){let t=!1,r=new _R(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[pR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=f3();if(!r[t.databaseid])throw JL(new Error,XL.SCHEMA_NOT_FOUND(t.databaseid),ZL.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw JL(new Error,XL.TABLE_NOT_FOUND(t.databaseid,t.tableid),ZL.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=hR(s);i.table=hR(t),this.attributes.push(i)})}[_m](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)}[sM](){let t=new _R(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[nM](r.tableid)}[nM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new u3.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tM](){this[Df](this.statement.columns,!1),this[Df](this.statement.joins,!1),this[Df](this.statement.where,!1),this[iM](this.statement.group,!1),this[Df](this.statement.order,!0)}[Df](t,r){if(!t)return;let n=new _R(t),s=[];for(let{node:i,path:o}of n)!jL.isEmpty(i)&&!jL.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rM](i):s.push(this[mR](i)));return s}[iM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&_3.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=hR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[_m](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[_m](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[rM](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[mR](t)}[mR](t){let r=this[_m](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]}};aM.exports=ER});var fM=I((kRe,dM)=>{"use strict";var lM=require("lodash"),Lf=require("mathjs"),h3=require("jsonata"),uM=ae();dM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?lM.uniqWith(e,lM.isEqual):e,"distinct_array"),searchJSON:p3,mad:Mf.bind(null,Lf.mad),mean:Mf.bind(null,Lf.mean),mode:Mf.bind(null,Lf.mode),prod:Mf.bind(null,Lf.prod),median:Mf.bind(null,Lf.median)};function Mf(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Mf,"aggregateFunction");function p3(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(uM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),uM.isEmpty(this.__ala__.res[r])){let n=h3(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(p3,"searchJSON")});var hM=I((GRe,_M)=>{"use strict";var Xt=require("moment"),gR="YYYY-MM-DDTHH:mm:ss.SSSZZ";Xt.suppressDeprecationWarnings=!0;_M.exports={current_date:a(()=>Xt().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>Xt().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return Xt(e).utc().format("YYYY");case"month":return Xt(e).utc().format("MM");case"day":return Xt(e).utc().format("DD");case"hour":return Xt(e).utc().format("HH");case"minute":return Xt(e).utc().format("mm");case"second":return Xt(e).utc().format("ss");case"millisecond":return Xt(e).utc().format("SSS");default:break}},"extract"),date:a(e=>Xt(e).utc().format(gR),"date"),date_format:a((e,t)=>Xt(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>Xt(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>Xt(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=Xt(e).utc(),s=Xt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>Xt().utc().valueOf(),"now"),get_server_time:a(()=>Xt().format(gR),"get_server_time"),offset_utc:a((e,t)=>Xt(e).utc().utcOffset(t).format(gR),"offset_utc")}});var gM=I(($Re,EM)=>{"use strict";var m3=require("@turf/area"),E3=require("@turf/length"),g3=require("@turf/circle"),S3=require("@turf/difference"),T3=require("@turf/distance"),A3=require("@turf/boolean-contains"),R3=require("@turf/boolean-equal"),y3=require("@turf/boolean-disjoint"),b3=require("@turf/helpers"),pM=(H(),P($)),qe=ae(),to=Q();EM.exports={geoArea:O3,geoLength:N3,geoCircle:w3,geoDifference:I3,geoDistance:mM,geoNear:C3,geoContains:P3,geoEqual:D3,geoCrosses:L3,geoConvert:M3};function O3(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return m3.default(e)}catch(t){return to.trace(t,e),NaN}}a(O3,"geoArea");function N3(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return E3.default(e,{units:t||"kilometers"})}catch(r){return to.trace(r,e),NaN}}a(N3,"geoLength");function w3(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return g3.default(e,t,{units:r||"kilometers"})}catch(n){return to.trace(n,e,t),NaN}}a(w3,"geoCircle");function I3(e,t){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return S3(e,t)}catch(r){return to.trace(r,e,t),NaN}}a(I3,"geoDifference");function mM(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return T3.default(e,t,{units:r||"kilometers"})}catch(n){return to.trace(n,e,t),NaN}}a(mM,"geoDistance");function C3(e,t,r,n){if(qe.isEmpty(e)||qe.isEmpty(t))return!1;if(qe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return mM(e,t,n)<=r}catch(s){return to.trace(s,e,t),!1}}a(C3,"geoNear");function P3(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return A3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(P3,"geoContains");function D3(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return R3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(D3,"geoEqual");function L3(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return!y3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(L3,"geoCrosses");function M3(e,t,r){if(qe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(qe.isEmpty(t))throw new Error("geo_type is required");if(qe.isEmpty(pM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(pM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),b3[t](e,r)}a(M3,"geoConvert")});var hm=I((KRe,SM)=>{var Ec=fM(),Hn=hM(),yi=gM();SM.exports=e=>{e.aggr.mad=e.aggr.MAD=Ec.mad,e.aggr.mean=e.aggr.MEAN=Ec.mean,e.aggr.mode=e.aggr.MODE=Ec.mode,e.aggr.prod=e.aggr.PROD=Ec.prod,e.aggr.median=e.aggr.MEDIAN=Ec.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ec.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ec.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hn.current_time,e.fn.extract=e.fn.EXTRACT=Hn.extract,e.fn.date=e.fn.DATE=Hn.date,e.fn.date_format=e.fn.DATE_FORMAT=Hn.date_format,e.fn.date_add=e.fn.DATE_ADD=Hn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hn.date_diff,e.fn.now=e.fn.NOW=Hn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hn.get_server_time,e.fn.getdate=e.fn.GETDATE=Hn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=yi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=yi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=yi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=yi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=yi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=yi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=yi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=yi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=yi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=yi.geoNear}});var yM=I((YRe,RM)=>{"use strict";var vf=require("lodash"),_n=require("alasql");_n.options.cache=!1;var v3=hm(),TM=require("clone"),pm=require("recursive-iterator"),Ue=Q(),ze=ae(),Xl=kn(),U3=(H(),P($)),{hdb_errors:x3}=he(),{getDatabases:AM}=(Me(),P(st)),B3="IS NULL",Hs="There was a problem performing this search. Please check the logs and try again.";v3(_n);var SR=class{static{a(this,"SQLSearch")}constructor(t,r){if(ze.isEmpty(t))throw Ue.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(),ze.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!ze.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Hs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Hs)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Hs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Hs)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Hs)}}_getColumns(){let t=new pm(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(TM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=vf.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=AM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ze.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new pm(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ze.isEmpty(r)&&r.right)if(ze.isNotEmptyAndHasValue(r.right.value)){let n=ze.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=ze.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&ze.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new pm(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ze.isEmpty(U3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ze.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ze.isEmptyOrZeroLength(r.left.columnid)||ze.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ze.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ze.isEmpty(r.right.value)||!ze.isEmpty(r.left.value)?n.add(ze.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(ze.isEmptyOrZeroLength(this.all_table_attributes)&&ze.isEmptyOrZeroLength(this.statement.from)&&ze.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&vf.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(ze.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);ze.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(ze.isEmptyOrZeroLength(this.all_table_attributes)&&!ze.isEmptyOrZeroLength(this.columns.columns))return t;if(ze.isEmptyOrZeroLength(this.all_table_attributes)&&ze.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.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(TM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(ze.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(B3)>-1&&this.tables.forEach(s=>{let i={columnid:AM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=vf.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!ze.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!ze.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await Xl.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Hs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await Xl.getDataByValue(d);for(let[_,p]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Hs)}else if(!ze.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!ze.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let p=await Xl.getDataByValue(c,_.operation);if(l)for(let[S]of p)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of p)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(f),new Error(Hs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await Xl.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(f),new Error(Hs)}}}_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 _n.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.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 _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let p=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(p+=" ON "+_.on.toString()),i.push(p),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let p=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${p}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${p}\` AS "${S}.${p}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,p=this._convertColumnsToIndexes(_,s);h=await _n.promise(p,t),t=null}catch(_){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,p=h.length;_<p;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let p=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=vf.difference(p,[..._.keys].map(g=>g.toString()));for(let g=0,A=S.length;g<A;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new pm(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=vf.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Hs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Xl.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let p=0;p<u;p++){let S=s.columns[p],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.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 Ue.error(x3.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Xl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Hs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};RM.exports=SR});var Vr=I((zRe,bM)=>{"use strict";var H3=cM();bM.exports={searchByConditions:F3,searchByHash:G3,searchByValue:q3,search:$3};var TR=kn(),{transformReq:AR}=ae(),k3=yM();async function F3(e){return AR(e),TR.searchByConditions(e)}a(F3,"searchByConditions");async function G3(e){AR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TR.searchByHash(e))r&&t.push(r);return t}a(G3,"searchByHash");async function q3(e){AR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TR.searchByValue(e))t.push(r);return t}a(q3,"searchByValue");function $3(e,t){try{let r=new H3(e);r.validate(),new k3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a($3,"search")});var ro=I((jRe,IM)=>{"use strict";var Uf=require("crypto"),V3=le(),{CONFIG_PARAMS:K3}=(H(),P($)),NM="aes-256-cbc",Y3=32,W3=16,RR=64,wM=32,z3=RR+wM,OM=new Map;IM.exports={encrypt:Q3,decrypt:j3,createNatsTableStreamName:J3};function Q3(e){let t=Uf.randomBytes(Y3),r=Uf.randomBytes(W3),n=Uf.createCipheriv(NM,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Q3,"encrypt");function j3(e){let t=e.substr(0,RR),r=e.substr(RR,wM),n=e.substr(z3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Uf.createDecipheriv(NM,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(j3,"decrypt");function J3(e,t){let r=V3.get(K3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=OM.get(r);return n||(n=Uf.createHash("md5").update(r).digest("hex"),OM.set(r,n)),n}a(J3,"createNatsTableStreamName")});var no=I((ZRe,DM)=>{"use strict";var XRe=Vr(),xf=Q(),CM=um(),X3=ro(),mm=ae(),{handleHDBError:Em,hdb_errors:Z3}=he(),{HDB_ERROR_MSGS:gm,HTTP_STATUS_CODES:yR}=Z3,PM=le();PM.initSync();var{getDatabases:bR}=(Me(),P(st)),eX=require("fs-extra"),tX=(H(),P($));DM.exports={describeAll:rX,describeTable:Sm,describeSchema:nX};async function rX(e={}){try{let t=mm.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=bR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let p;if(t||s||r)p=await Sm({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;p=await Sm({schema:d,table:_,exact_count:u},S)}p&&l.push(p)}catch(p){xf.error(p)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return xf.error("Got an error in describeAll"),xf.error(t),Em(new Error,gm.DESCRIBE_ALL_ERR)}}a(rX,"describeAll");async function Sm(e,t){mm.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=CM.describe_table(e);if(i)throw i;let c=bR()[r];if(!c)throw Em(new Error,gm.SCHEMA_NOT_FOUND(e.schema),yR.NOT_FOUND);let l=c[n];if(!l)throw Em(new Error,gm.TABLE_NOT_FOUND(e.schema,e.table),yR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(p=>({type:p.type,name:p.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(p=>{p.describe&&(_[p.attribute_name]=!0)}),l.attributes.forEach(p=>{_[p.name]&&u(p)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await eX.stat(l.primaryStore.env.path)).size}catch(_){xf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),PM.get(tX.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=X3.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:e.exact_count==="true"});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let p=l.auditStore;if(p)for(let S of p.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){xf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Sm,"descTable");async function nX(e){mm.transformReq(e);let t=CM.schema_object(e);if(t)throw t;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=bR()[n];if(!i)throw Em(new Error,gm.SCHEMA_NOT_FOUND(e.schema),yR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),mm.isEmpty(l)||l.describe){let u=await Sm({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(nX,"describeSchema")});var ks=I((nye,xM)=>{var sX=Zi(),{callbackify:MM,promisify:iX}=require("util"),{getDatabases:vM}=(Me(),P(st));xM.exports={setSchemaDataToGlobal:LM,getTableSchema:oX,getSystemSchema:aX,setSchemaDataToGlobalAsync:iX(LM)};var UM=no(),tye=MM(UM.describeAll),rye=MM(UM.describeTable);function LM(e){global.hdb_schema=vM(),e&&e()}a(LM,"setSchemaDataToGlobal");function oX(e,t,r){let n=vM()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(oX,"getTableSchema");function aX(){return sX}a(aX,"getSystemSchema")});var NR=I((iye,kM)=>{var cX=lt(),OR=require("joi"),{hdb_table:lX,hdb_database:BM}=Ti(),HM={schema:BM,database:BM,table:lX},uX={date:OR.date().iso().required()},dX={timestamp:OR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};kM.exports=function(e,t){let r=t==="timestamp"?{...HM,...dX}:{...HM,...uX},n=OR.object(r);return cX.validateBySchema(e,n)}});var qM=I((oye,GM)=>{var fX=lt(),wR=require("joi"),{hdb_table:_X,hdb_database:FM}=Ti(),hX=wR.object({schema:FM,database:FM,table:_X,hash_values:wR.array().required(),ids:wR.array()});GM.exports=function(e){return fX.validateBySchema(e,hX)}});var DR=I((aye,$M)=>{"use strict";var IR=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},CR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},PR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};$M.exports={InsertObject:IR,NoSQLSeachObject:CR,DeleteResponseObject:PR}});var Tc=I((lye,zM)=>{"use strict";var KM=NR(),pX=qM(),gc=ae(),VM=require("moment"),YM=Q(),{promisify:mX,callbackify:EX}=require("util"),Sc=(H(),P($)),gX=ks(),LR=mX(gX.getTableSchema),MR=kn(),{DeleteResponseObject:SX}=DR(),{handleHDBError:sa,hdb_errors:TX}=he(),{HDB_ERROR_MSGS:Tm,HTTP_STATUS_CODES:ia}=TX,AX="records successfully deleted",RX=EX(WM);zM.exports={delete:RX,deleteRecord:WM,deleteFilesBefore:yX,deleteAuditLogsBefore:bX};async function yX(e){let t=KM(e,"date");if(t)throw sa(t,t.message,ia.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),!VM(e.date,VM.ISO_8601).isValid())throw sa(new Error,Tm.INVALID_DATE,ia.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,Tm.INVALID_DATE,!0);let n=gc.checkSchemaTableExist(e.schema,e.table);if(n)throw sa(new Error,n,ia.NOT_FOUND,Sc.LOG_LEVELS.ERROR,n,!0);let s=await MR.deleteRecordsBefore(e);if(await LR(e.schema,e.table),YM.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(yX,"deleteFilesBefore");async function bX(e){let t=KM(e,"timestamp");if(t)throw sa(t,t.message,ia.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),isNaN(e.timestamp))throw sa(new Error,Tm.INVALID_VALUE("Timestamp"),ia.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,Tm.INVALID_VALUE("Timestamp"),!0);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw sa(new Error,r,ia.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);let n=await MR.deleteAuditLogsBefore(e);return await LR(e.schema,e.table),YM.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(bX,"deleteAuditLogsBefore");async function WM(e){e.ids&&(e.hash_values=e.ids);let t=pX(e);if(t)throw sa(t,t.message,ia.BAD_REQUEST,void 0,void 0,!0);gc.transformReq(e);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw sa(new Error,r,ia.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);try{await LR(e.schema,e.table);let n=await MR.deleteRecords(e);return gc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${AX}`),n}catch(n){if(n.message===Sc.SEARCH_NOT_FOUND_MESSAGE){let s=new SX;return s.message=Sc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(WM,"deleteRecord")});var Am={};ve(Am,{HASH_FUNCTION:()=>kf,hash:()=>xR,validate:()=>BR});function vR(e=Hf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Bf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function xR(e,t=kf[jM?.toUpperCase()]??"sha256"){return UR[t](e)}function BR(e,t,r=kf[jM?.toUpperCase()]??"sha256"){return e?OX[r](e,t):!1}var Bf,Zl,QM,jM,Hf,JM,kf,UR,OX,Rm=be(()=>{Bf=M(require("node:crypto")),Zl=M(require("argon2")),QM=M(le());H();jM=(0,QM.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Hf=16,JM=9,kf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(kf||{});a(vR,"generateSalt");UR={md5:a((e,t=void 0)=>{t=t??vR(JM);let r=Bf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??vR(Hf);let r=Bf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=vR(Hf),r=await Zl.hash(e,{type:Zl.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},OX={md5:a((e,t)=>{let r=e.slice(0,JM);return e===UR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Hf);return e===UR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await Zl.verify(e.slice(Hf),t),"argon2id")};a(xR,"hash");a(BR,"validate")});var ZM=I((_ye,XM)=>{var HR=lt(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function NX(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,HR.validateObject(e,Kr)}a(NX,"addUserValidation");function wX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,HR.validateObject(e,Kr)}a(wX,"alterUserValidation");function IX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,HR.validateObject(e,Kr)}a(IX,"dropUserValidation");XM.exports={addUserValidation:NX,alterUserValidation:wX,dropUserValidation:IX}});var Ot=I((mye,tv)=>{"use strict";var{platform:pye}=require("os"),CX="nats-server.zip",kR="nats-server",PX=process.platform==="win32"?`${kR}.exe`:kR,DX=/^[^\s.,*>]+$/,ev="__request__",LX=a(e=>`${e}.${ev}`,"REQUEST_SUBJECT"),MX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},vX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},UX={HUB:"hub.pid",LEAF:"leaf.pid"},xX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},BX={SUCCESS:"success",ERROR:"error"},HX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},kX={TXN:"txn",MSGID:"msgid"},eu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},FX={[eu.ERR]:1,[eu.WRN]:2,[eu.INF]:3,[eu.DBG]:4,[eu.TRC]:5},GX={debug:"-D",trace:"-DVV"};tv.exports={NATS_SERVER_ZIP:CX,NATS_SERVER_NAME:kR,NATS_BINARY_NAME:PX,PID_FILES:UX,NATS_CONFIG_FILES:vX,SERVER_SUFFIX:xX,NATS_TERM_CONSTRAINTS_RX:DX,REQUEST_SUFFIX:ev,UPDATE_REMOTE_RESPONSE_STATUSES:BX,CLUSTER_STATUS_STATUSES:HX,REQUEST_SUBJECT:LX,SUBJECT_PREFIXES:kX,MSG_HEADERS:MX,LOG_LEVELS:eu,LOG_LEVEL_FLAGS:GX,LOG_LEVEL_HIERARCHY:FX}});var FR=I(rv=>{"use strict";var qX={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
16
+ `},"serialize"),compressible:!1,q:.8});qr.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()}});FD={type:"application/json",serializeStream:df,serialize:ff,deserialize:bJ,q:.5};qr.set("*/*",FD);qr.set("",FD);a(bJ,"tryJSONParse");a(hf,"registerContentHandlers");OJ=require("fastify-plugin"),NJ=OJ(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=zp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(zp,"findBestSerializer");UD=IA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(pf,"serialize");a(Zo,"serializeMessage");a(LA,"asyncSerialization");a(MA,"hasAsyncSerialization");a(wJ,"streamToBuffer");IJ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(CJ,"isBufferEncoding");a(PJ,"parseContentType");a(Qi,"getDeserializer");a(DJ,"deserializerUnknownType");a(LJ,"transformIterable");a(Wp,"toCsvStream")});var UA={};ve(UA,{start:()=>GJ});function MJ(e){if(e.kind!==De.Kind.OPERATION_DEFINITION&&e.kind!==De.Kind.FRAGMENT_DEFINITION)throw new Rr(`Unexpected non-executable definition type ${e.kind}.`)}function qD(e){if(typeof e!="object"||e===null)throw new Ei("Request body must be an object.");if(!("query"in e))throw new Ei("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ei("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ei("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ei("Request body `operationName` field must be a string.")}function vA(e){return parseInt(e.value,10)}function VD(e){return parseFloat(e.value)}function KD(e,t,r){let n=r.get(e.name.value);return YD(n)?WD(n,t):{attribute:t,value:n}}function YD(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function WD(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],YD(n)?WD(n,t):{attribute:t,value:n}))}function vJ(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case De.Kind.NULL:return{attribute:t,value:null};case De.Kind.INT:return{attribute:t,value:vA(e.value)};case De.Kind.FLOAT:return{attribute:t,value:VD(e.value)};case De.Kind.BOOLEAN:case De.Kind.STRING:return{attribute:t,value:e.value.value};case De.Kind.VARIABLE:return KD(e.value,t,r);case De.Kind.OBJECT:return zD(e.value,t,r);case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Value type, ${e.value.kind}, is not supported.`)}}function zD(e,t,r){return e.fields.flatMap(n=>vJ(n,t,r))}function UJ(e,t){switch(e.value.kind){case De.Kind.NULL:return{attribute:e.name.value,value:null};case De.Kind.INT:return{attribute:e.name.value,value:vA(e.value)};case De.Kind.FLOAT:return{attribute:e.name.value,value:VD(e.value)};case De.Kind.BOOLEAN:case De.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case De.Kind.VARIABLE:return KD(e.value,e.name.value,t);case De.Kind.OBJECT:return zD(e.value,[e.name.value],t);case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Argument type, ${e.value.kind}, is not supported.`)}}function xJ(e,t){return e.flatMap(r=>UJ(r,t))}function Qp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case De.Kind.FIELD:return r;case De.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Rr(`Fragment \`${n}\` not found.`);return Qp(s.selectionSet,t)}case De.Kind.INLINE_FRAGMENT:return Qp(r.selectionSet,t)}})}function QD(e,t){return Qp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:QD(r.selectionSet,t)}:r.name.value)}async function BJ(e,t,r,n){let s=_i.getMatch(e.name.value,"graphql");if(s===void 0)throw new Rr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:QD(e.selectionSet,r),conditions:xJ(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function jD(e){switch(e.kind){case De.Kind.NULL:return null;case De.Kind.INT:return vA(e);case De.Kind.FLOAT:return parseFloat(e.value);case De.Kind.STRING:case De.Kind.BOOLEAN:return e.value;case De.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:jD(r.value),...t}),{});case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Value type, ${e.kind}, is not supported.`)}}function HJ(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=jD(n.defaultValue)),n.type.kind===De.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Rr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function kJ(e,t,r,n){if(e.operation===De.OperationTypeNode.SUBSCRIPTION)throw new Rr("Subscriptions are not supported.");if(e.operation===De.OperationTypeNode.MUTATION)throw new Rr("Mutations are not supported yet.");let s=HJ(e.variableDefinitions,t),i=await Promise.all(Qp(e.selectionSet,r).map(c=>BJ(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function $D({query:e,variables:t={},operationName:r},n){let s=De.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(MJ(u),u.kind===De.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Rr("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Rr(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Rr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Rr(`Operation \`${r}\` not found.`);let l=await kJ(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function FJ(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 qD(r),$D(r,e)}case"POST":{let r=await Qi(e.headers.get("content-type"),!0)(e._nodeRequest);return qD(r),$D(r,e)}default:throw new Ei("Method Not Allowed",405,{Allow:"GET, POST"})}}function GJ(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await FJ(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ei)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof De.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Rr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ei)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof De.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Rr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var De,Rr,Ei,JD=be(()=>{De=M(require("graphql"));ji();Yl();a(MJ,"assertExecutableDefinitionNode");a(qD,"assertRequestParams");a(vA,"processIntValueNode");a(VD,"processFloatValueNode");a(KD,"processVariableNode");a(YD,"isObject");a(WD,"transformObjectIntoQueryCondition");a(vJ,"processObjectFieldNode");a(zD,"processObjectValueNode");a(UJ,"processArgumentNode");a(xJ,"buildConditionsQuery");a(Qp,"fillInFragments");a(QD,"buildSelectQuery");a(BJ,"processFieldNode");a(jD,"processConstValueNode");a(HJ,"resolveVariables");a(kJ,"executeOperation");a($D,"resolver");Rr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ei=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(FJ,"graphqlQueryingHandler");a(GJ,"start")});var Si=I((GAe,eL)=>{"use strict";var ZD=oe(),XD=(H(),D(q)),zl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,gi=require("joi"),ea={schema_format:{pattern:zl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},qJ=gi.alternatives(gi.string().min(1).max(ea.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ea.schema_format.message}),gi.number(),gi.array()).required(),$J=gi.alternatives(gi.string().min(1).max(ea.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ea.schema_format.message}),gi.number()),VJ=gi.alternatives(gi.string().min(1).max(ea.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ea.schema_format.message}),gi.number()).required();function KJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ea.schema_length.maximum?`'${e}' maximum of 250 characters`:zl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(KJ,"checkValidTable");function YJ(e,t){return ZD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(YJ,"validateSchemaExists");function WJ(e,t){let r=t.state.ancestors[0].schema;return ZD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(WJ,"validateTableExists");function zJ(e,t){return e.toLowerCase()===XD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${XD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(zJ,"validateSchemaName");eL.exports={common_validators:ea,schema_regex:zl,hdb_schema_table:qJ,validateSchemaExists:YJ,validateTableExists:WJ,validateSchemaName:zJ,checkValidTable:KJ,hdb_database:$J,hdb_table:VJ}});var dt=I(($Ae,tL)=>{"use strict";var un=require("validate.js");un.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||un.validators.type.checks[t](e)?null:` must be a '${t}' value`};un.validators.type.checks={Object:a(function(e){return un.isObject(e)&&!un.isArray(e)},"Object"),Array:un.isArray,Integer:un.isInteger,Number:un.isNumber,String:un.isString,Date:un.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};un.validators.hasValidFileExt=function(e,t){return un.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};tL.exports={validateObject:QJ,validateObjectAsync:jJ,validateBySchema:JJ};function QJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=un(e,t,{format:"flat"});return r?new Error(r):null}a(QJ,"validateObject");async function jJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await un.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(jJ,"validateObjectAsync");function JJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(JJ,"validateBySchema")});var BA=I((KAe,nL)=>{var{hdb_table:XJ,hdb_database:rL}=Si(),ZJ=dt(),xA=require("joi"),e4={undefined:"undefined",null:"null"},t4=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||e4[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),r4=xA.object({database:rL,schema:rL,table:XJ,records:xA.array().items(xA.object().custom(t4)).required()});nL.exports=function(e){return ZJ.validateBySchema(e,r4)}});var iL=I((WAe,sL)=>{"use strict";var HA=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};sL.exports=HA});var aL=I((QAe,oL)=>{"use strict";var kA=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};oL.exports=kA});var fL={};ve(fL,{HAS_EXPIRATION:()=>Xp,HAS_RESIDENCY_ID:()=>YA,HAS_STRUCTURE_UPDATE:()=>tm,LAST_TIMESTAMP_PLACEHOLDER:()=>Tf,LOCAL_TIMESTAMP:()=>n4,METADATA:()=>mf,NEW_TIMESTAMP_PLACEHOLDER:()=>lL,NO_TIMESTAMP:()=>FA,PENDING_LOCAL_TIME:()=>WA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>KA,RecordEncoder:()=>VA,TIMESTAMP_ASSIGN_LAST:()=>i4,TIMESTAMP_ASSIGN_NEW:()=>uL,TIMESTAMP_ASSIGN_PREVIOUS:()=>dL,TIMESTAMP_PLACEHOLDER:()=>jp,TIMESTAMP_RECORD_PREVIOUS:()=>GA,handleLocalTimeForGets:()=>rm,recordUpdater:()=>zA,removeEntry:()=>dc});function a4(){return Sf[0]=Sf[0]^64,s4.getFloat64(0)}function rm(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[mf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[mf]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[mf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,cc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<cc.length;u++){let f=cc[u].deref();(!f||f.isDone||f.isCommitted)&&cc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function zA(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?Ql=i?.localTime?GA|dL:FA:Ql=l?i?.localTime?GA|16384:uL|16384:FA;let _=u?.expiresAt;if(_>=0&&(c|=Xp),gf=c,qA=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:o,instructedWrite:Ql>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&($A=E,gf|=YA,g|=fc),R!==E&&(g|=_c,R||(R=0)),c&Xp&&(g|=Rf),u?.originatingOperation&&(g|=Af),d&&(p.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&vn&&(r.getBinaryFast(i.localTime)||ta(i.value));let A;if(s!==void 0&&(A=em(()=>e.put(n,s,p),n,e.rootStore),lc&&(g|=vn)),l){let O=u?.user?.username;if(h&&(em(()=>e.encoder.encode(h),n,e.rootStore),lc&&(g|=vn)),e.encoder.hasStructureUpdate&&(g|=tm,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,F=r.get(v);if(F){let G=Ot(F).previousLocalTime;return A=r.put(v,jl(o,t,n,G,u?.nodeId??server.replication.getThisNodeId(r)??0,O,f,Ef,g,E,R,_),{ifVersion:S}),A}}A=r.put(s===void 0?lL:Tf,jl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,O,f,Ef,g,E,R,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return A}catch(R){throw R.message+=" id: "+n+" options: "+p,R}}}function dc(e,t,r){if(t)return t.value&&t.metadataFlags&vn&&!e.auditStore.getBinaryFast(t.localTime)&&ta(t.value),e.remove(t.key,r)}var cL,Jp,jp,Tf,KA,lL,n4,mf,Sf,s4,FA,uL,i4,dL,GA,Xp,YA,WA,tm,o4,Ef,Ql,gf,qA,$A,VA,cc,Jl=be(()=>{cL=require("msgpackr");Ji();Jp=M(j());cs();cs();jp=new Uint8Array([1,1,1,1,4,64,0,0]),Tf=new Uint8Array([1,1,1,1,1,0,0,0]),KA=new Uint8Array([1,1,1,1,3,64,0,0]),lL=new Uint8Array([1,1,1,1,0,64,0,0]),n4=Symbol("local-timestamp"),mf=Symbol("metadata"),Sf=new Uint8Array(8),s4=new DataView(Sf.buffer,0,8),FA=0,uL=0,i4=1,dL=3,GA=4,Xp=16,YA=32,WA=1,tm=256,Ql=0,gf=-1,qA=-1,$A=0,VA=class extends cL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ql||gf>=0){let o=0,c=Ql;c&&(o+=8,Ql=0);let l=gf,u=qA,f=$A;l>=0&&(o+=4,gf=-1,u>=0&&(o+=8,qA=-1),f&&(o+=4,$A=0));let d=o4=r.call(this,s,i|2048|o);Ef=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(jp[4]=c,jp[5]=c>>8,d.set(jp,h),h+=8),lc&&(l|=vn),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Zp<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return Ef=r.call(this,s,i),Ef};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Sf,0,c),c+=8;else for(let h=0;h<8;h++)Sf[h]=t[c++];l=a4(),i=t[c]}let u,f;i<32&&(i===Zp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Xp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&YA&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=uc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[mf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:uc(()=>super.decode(t,r),this.rootStore)}catch(c){return Jp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(a4,"getTimestamp");a(rm,"handleLocalTimeForGets");cc=[];setInterval(()=>{for(let e=0;e<cc.length;e++){let t=cc[e].deref();!t||t.isDone||t.isCommitted?cc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Jp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Jp.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(zA,"recordUpdater");a(dc,"removeEntry")});var yf=I((tRe,hL)=>{"use strict";var _L=ce(),c4=(H(),D(q)),{RecordEncoder:l4}=(Jl(),D(fL));_L.initSync();var u4=_L.get(c4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,QA=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=u4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:l4})}};hL.exports=QA});var bf=I((nRe,pL)=>{"use strict";var Un=ce(),ls=(H(),D(q));Un.initSync();var nm=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Un.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Un.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Un.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Un.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Un.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Un.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Un.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Un.get(ls.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};pL.exports=nm;nm.MAX_DBS=1e4});var ft=I((iRe,OL)=>{"use strict";var JA=require("lmdb"),Us=require("fs-extra"),xn=require("path"),sm=an(),gL=j(),dn=Cn().LMDB_ERRORS_ENUM,im=aL(),XA=yf(),SL=bf(),ra=vt(),mL=(H(),D(q)),{table:d4,resetDatabases:f4}=(Me(),D(st)),EL=ce(),xs=ra.INTERNAL_DBIS_NAME,TL=ra.DBI_DEFINITION_NAME,_4="data.mdb",h4="lock.mdb",Of=".mdb",p4="-lock",jA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[ra.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ra.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new JA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function om(e,t){if(e===void 0)throw new Error(dn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(dn.ENV_NAME_REQUIRED)}a(om,"pathEnvNameValidation");async function ZA(e,t,r=!0){try{await Us.access(e)}catch(n){throw n.code==="ENOENT"?new Error(dn.INVALID_BASE_PATH):n}try{let n=xn.join(e,t+Of);return await Us.access(n,Us.constants.R_OK|Us.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Us.access(xn.join(e,t,_4),Us.constants.R_OK|Us.constants.F_OK),xn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(dn.INVALID_ENVIRONMENT)}else throw new Error(dn.INVALID_ENVIRONMENT);throw n}}a(ZA,"validateEnvironmentPath");function am(e,t){if(sm.validateEnv(e),t===void 0)throw new Error(dn.DBI_NAME_REQUIRED)}a(am,"validateEnvDBIName");async function m4(e,t,r=!1,n=!1){om(e,t);let s=xn.basename(e);t=t.toString();let i=EL.get(mL.CONFIG_PARAMS.DATABASES);i||EL.setProperty(mL.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await ZA(e,t,n),AL(e,t,r)}catch(o){if(o.message===dn.INVALID_ENVIRONMENT){let c=xn.join(e,t);await Us.mkdirp(n?c:e);let l=new SL(n?c:c+Of,!1),u=JA.open(l);u.dbis=Object.create(null);let f=new XA(!1);u.openDB(xs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=eR(e,t,r);return u[ra.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(m4,"createEnvironment");async function E4(e,t,r,n=!0){om(e,t),t=t.toString();let s=xn.join(e,t);return d4({table:t,database:xn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(E4,"copyEnvironment");async function AL(e,t,r=!1){om(e,t),t=t.toString();let n=eR(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 ZA(e,t),i=xn.join(e,t+Of),o=s!=i,c=new SL(s,o),l=JA.open(c);l.dbis=Object.create(null);let u=yL(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[ra.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(AL,"openEnvironment");async function g4(e,t,r=!1){om(e,t),t=t.toString();let n=xn.join(e,t+Of),s=await ZA(e,t);if(global.lmdb_map!==void 0){let i=eR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RL(o),delete global.lmdb_map[i]}}await Us.remove(s),await Us.remove(s===n?s+p4:xn.join(xn.dirname(s),h4))}a(g4,"deleteEnvironment");async function RL(e){sm.validateEnv(e);let t=e[ra.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(RL,"closeEnvironment");function eR(e,t,r=!1){let s=`${xn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(eR,"getCachedEnvironmentName");function S4(e){sm.validateEnv(e);let t=Object.create(null),r=us(e,xs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==xs)try{t[n]=Object.assign(new im,s)}catch{gL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(S4,"listDBIDefinitions");function yL(e){sm.validateEnv(e);let t=[],r=us(e,xs);for(let{key:n}of r.getRange({start:!1}))n!==xs&&t.push(n);return t}a(yL,"listDBIs");function T4(e,t){let n=us(e,xs).getEntry(t),s=new im;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{gL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(T4,"getDBIDefinition");function bL(e,t,r,n=!r){if(am(e,t),t=t.toString(),t===xs)throw new Error(dn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return us(e,t)}catch(s){if(s.message===dn.DBI_DOES_NOT_EXIST){let i=new XA(r,n===!0),o=e.openDB(t,i),c=new im(r===!0,n);return o[TL]=c,us(e,xs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(bL,"createDBI");function us(e,t){if(am(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==xs?r=T4(e,t):r=new im,r===void 0)throw new Error(dn.DBI_DOES_NOT_EXIST);let n;try{let s=new XA(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(dn.DBI_DOES_NOT_EXIST):s}return n[TL]=r,e.dbis[t]=n,n}a(us,"openDBI");function A4(e,t){am(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[ra.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(A4,"statDBI");async function R4(e,t){try{let r=xn.join(e,t+Of);return(await Us.stat(r)).size}catch{throw new Error(dn.INVALID_ENVIRONMENT)}}a(R4,"environmentDataSize");function y4(e,t){if(am(e,t),t=t.toString(),t===xs)throw new Error(dn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,xs).removeSync(t)}a(y4,"dropDBI");function b4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{us(e,i)}catch(o){if(o.message===dn.DBI_DOES_NOT_EXIST)bL(e,i,i!==t,i===t),n=!0;else throw o}}n&&f4()}a(b4,"initializeDBIs");OL.exports={openDBI:us,openEnvironment:AL,createEnvironment:m4,listDBIs:yL,listDBIDefinitions:S4,createDBI:bL,dropDBI:y4,statDBI:A4,deleteEnvironment:g4,initializeDBIs:b4,TransactionCursor:jA,environmentDataSize:R4,copyEnvironment:E4,closeEnvironment:RL}});var wL=I((aRe,NL)=>{"use strict";var tR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};NL.exports=tR});var CL=I((lRe,IL)=>{"use strict";var rR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};IL.exports=rR});var DL=I((dRe,PL)=>{"use strict";var nR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};PL.exports=nR});var pc=I((mRe,vL)=>{"use strict";var O4=ft(),N4=wL(),w4=CL(),I4=DL(),Ti=an(),Nf=Cn().LMDB_ERRORS_ENUM,C4=vt(),Xi=(H(),D(q)),P4=oe(),D4=require("uuid"),_Re=require("lmdb"),{handleHDBError:L4,hdb_errors:M4}=he(),{OVERFLOW_MARKER:hRe,MAX_SEARCH_KEY_LENGTH:pRe}=C4,LL=ce();LL.initSync();var cm=LL.get(Xi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),sR=Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hc=Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function v4(e,t,r,n,s=Ti.getNextMonotonicTime()){cR(e,t,r,n),iR(e,t,r);let i=new N4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];ML(u,!0,s);let f=U4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return oR(o,c,n,i,s)}a(v4,"insertRecords");function U4(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let f=c([[{}]]);Array.isArray(f)&&(c=f[0][Xi.FUNC_VAL],n[o]=c)}let l=Ti.getIndexedValues(c),u=e.dbis[o];if(l){cm&&u.prefetch(l.map(f=>({key:f,value:s})),lm);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}cm&&e.dbis[t].prefetch([s],lm),e.dbis[t].put(s,n,n[hc])})}a(U4,"insertRecord");function x4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(x4,"removeSkippedRecords");function ML(e,t,r){let n=r>0;(n||!Number.isInteger(e[hc]))&&(e[hc]=r||(r=Ti.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[sR]))&&(e[sR]=r||Ti.getNextMonotonicTime()):delete e[sR]}a(ML,"setTimestamps");function iR(e,t,r){r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),O4.initializeDBIs(e,t,r)}a(iR,"initializeTransaction");async function B4(e,t,r,n,s=Ti.getNextMonotonicTime()){cR(e,t,r,n),iR(e,t,r);let i=new w4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=aR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return oR(c,l,n,i,s,o)}a(B4,"updateRecords");async function H4(e,t,r,n,s=Ti.getNextMonotonicTime()){try{cR(e,t,r,n)}catch(l){throw L4(l,l.message,M4.HTTP_STATUS_CODES.BAD_REQUEST)}iR(e,t,r);let i=new I4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;P4.isEmpty(u[t])?(f=D4.v4(),u[t]=f):f=u[t];let d=aR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return oR(o,c,n,i,s)}a(H4,"upsertRecords");async function oR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ti.getNextMonotonicTime(),x4(r,i),n}a(oR,"finalizeWrite");function aR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(ML(r,!f,o),Number.isInteger(r[hc])&&u[hc]>r[hc])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let S=r[p],g=e.dbis[p];if(g===void 0)continue;let R=u[p];if(typeof S=="function"){let A=S([[u]]);Array.isArray(A)&&(S=A[0][Xi.FUNC_VAL],r[p]=S)}if(S===R)continue;let E=Ti.getIndexedValues(R);if(E){cm&&g.prefetch(E.map(A=>({key:A,value:n})),lm);for(let A=0,O=E.length;A<O;A++)g.remove(E[A],n)}if(E=Ti.getIndexedValues(S),E){cm&&g.prefetch(E.map(A=>({key:A,value:n})),lm);for(let A=0,O=E.length;A<O;A++)g.put(E[A],n)}}let _={...u,...r};c.put(n,_,_[hc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:aR(e,t,r,n,s,i,o))}a(aR,"updateUpsertRecord");function k4(e,t,r){if(Ti.validateEnv(e),t===void 0)throw new Error(Nf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Nf.WRITE_ATTRIBUTES_REQUIRED):new Error(Nf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(k4,"validateBasic");function cR(e,t,r,n){if(k4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Nf.RECORDS_REQUIRED):new Error(Nf.RECORDS_MUST_BE_ARRAY)}a(cR,"validateWrite");function lm(){}a(lm,"noop");vL.exports={insertRecords:v4,updateRecords:B4,upsertRecords:H4}});var Zi=I((gRe,F4)=>{F4.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var um=I((SRe,UL)=>{var{common_validators:Ai}=Si(),If=dt(),wf="is required",Xt={database:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},schema:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},table:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},hash_attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length}};function Cf(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Cf,"makeAttributesStrings");function G4(e){return e=Cf(e),Xt.table.presence=!1,Xt.attribute.presence=!1,Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(G4,"schema_object");function q4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence=!1,Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(q4,"table_object");function $4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence=!1,If.validateObject(e,Xt)}a($4,"create_table_object");function V4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence={message:wf},Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(V4,"attribute_object");function K4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence=!1,Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(K4,"describe_table");function Y4(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(Y4,"validateTableResidence");UL.exports={schema_object:G4,create_table_object:$4,table_object:q4,attribute_object:V4,describe_table:K4,validateTableResidence:Y4}});var BL=I((ARe,xL)=>{"use strict";var W4=require("uuid"),lR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||W4.v4(),this.schema_table=`${this.schema}.${this.table}`}};xL.exports=lR});var dm=I((yRe,HL)=>{"use strict";var z4=BL(),uR=class extends z4{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};HL.exports=uR});var FL=I((ORe,kL)=>{"use strict";kL.exports=j4;var Q4="inserted";function j4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===Q4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(j4,"returnObject")});var fm=I((IRe,VL)=>{"use strict";var J4=(H(),D(q)),dR=ft(),X4=pc(),{getSystemSchemaPath:Z4,getSchemaPath:e3}=gt(),wRe=Zi(),t3=um(),r3=dm(),n3=FL(),{handleHDBError:GL,hdb_errors:$L}=he(),qL=oe(),{HTTP_STATUS_CODES:s3}=$L,i3="inserted";VL.exports=o3;async function o3(e){let t=t3.attribute_object(e);if(t)throw GL(new Error,t.message,$L.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qL.checkGlobalSchemaTable(e.schema,e.table);if(r)throw GL(new Error,r,s3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qL.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 r3(e.schema,e.table,e.attribute,e.id);try{let i=await dR.openEnvironment(e3(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);dR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await dR.openEnvironment(Z4(),J4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await X4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return n3(i3,c,{records:[s]},l)}catch(i){throw i}}a(o3,"lmdbCreateAttribute")});var Pf=I((DRe,YL)=>{"use strict";var eo=oe(),KL=j(),PRe=BA(),{getDatabases:a3}=(Me(),D(st)),{ClientError:mc}=he();YL.exports=c3;function c3(e){if(eo.isEmpty(e))throw new mc("invalid update parameters defined.");if(eo.isEmptyOrZeroLength(e.schema))throw new mc("invalid schema specified.");if(eo.isEmptyOrZeroLength(e.table))throw new mc("invalid table specified.");if(!Array.isArray(e.records))throw new mc("records must be an array");let t=a3()[e.schema]?.[e.table];if(eo.isEmpty(t))throw new mc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&eo.isEmptyOrZeroLength(o[r]))throw KL.error("a valid hash attribute must be provided with update record:",o),new mc("a valid hash attribute must be provided with update record, check log for more info");if(!eo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw KL.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!eo.isEmpty(o[r])&&o[r]!==""&&n.has(eo.autoCast(o[r]))&&(o.skip=!0),n.add(eo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(c3,"insertUpdateValidate")});var zL=I((MRe,WL)=>{"use strict";var fR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};WL.exports=fR});var JL=I((URe,jL)=>{"use strict";var _R=ft(),l3=j(),QL=Cn().LMDB_ERRORS_ENUM;jL.exports=u3;async function u3(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await _R.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==QL.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await _R.closeEnvironment(global.lmdb_map[n]),await _R.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==QL.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){l3.error(t)}}a(u3,"cleanLMDBMap")});var uM=I((HRe,lM)=>{"use strict";var hR=require("recursive-iterator"),d3=require("alasql"),pR=require("clone"),XL=oe(),{handleHDBError:ZL,hdb_errors:f3}=he(),{HDB_ERROR_MSGS:eM,HTTP_STATUS_CODES:tM}=f3,{getDatabases:_3}=(Me(),D(st)),h3=["DISTINCT_ARRAY"],rM=Symbol("validateTables"),mR=Symbol("validateTable"),BRe=Symbol("getAllColumns"),nM=Symbol("validateAllColumns"),_m=Symbol("findColumn"),sM=Symbol("validateOrderBy"),Df=Symbol("validateSegment"),ER=Symbol("validateColumn"),iM=Symbol("setColumnsForTable"),oM=Symbol("checkColumnsForAsterisk"),aM=Symbol("validateGroupBy"),cM=Symbol("hasColumns"),gR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[rM](),this[oM](),this[nM]()}[rM](){if(this[cM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mR](t.table)})}}[cM](){let t=!1,r=new hR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[mR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=_3();if(!r[t.databaseid])throw ZL(new Error,eM.SCHEMA_NOT_FOUND(t.databaseid),tM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw ZL(new Error,eM.TABLE_NOT_FOUND(t.databaseid,t.tableid),tM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=pR(s);i.table=pR(t),this.attributes.push(i)})}[_m](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)}[oM](){let t=new hR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[iM](r.tableid)}[iM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new d3.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[nM](){this[Df](this.statement.columns,!1),this[Df](this.statement.joins,!1),this[Df](this.statement.where,!1),this[aM](this.statement.group,!1),this[Df](this.statement.order,!0)}[Df](t,r){if(!t)return;let n=new hR(t),s=[];for(let{node:i,path:o}of n)!XL.isEmpty(i)&&!XL.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[sM](i):s.push(this[ER](i)));return s}[aM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&h3.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=pR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[_m](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[_m](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[sM](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[ER](t)}[ER](t){let r=this[_m](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]}};lM.exports=gR});var hM=I((FRe,_M)=>{"use strict";var dM=require("lodash"),Lf=require("mathjs"),p3=require("jsonata"),fM=oe();_M.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?dM.uniqWith(e,dM.isEqual):e,"distinct_array"),searchJSON:m3,mad:Mf.bind(null,Lf.mad),mean:Mf.bind(null,Lf.mean),mode:Mf.bind(null,Lf.mode),prod:Mf.bind(null,Lf.prod),median:Mf.bind(null,Lf.median)};function Mf(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Mf,"aggregateFunction");function m3(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(fM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fM.isEmpty(this.__ala__.res[r])){let n=p3(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(m3,"searchJSON")});var mM=I((qRe,pM)=>{"use strict";var Zt=require("moment"),SR="YYYY-MM-DDTHH:mm:ss.SSSZZ";Zt.suppressDeprecationWarnings=!0;pM.exports={current_date:a(()=>Zt().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>Zt().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return Zt(e).utc().format("YYYY");case"month":return Zt(e).utc().format("MM");case"day":return Zt(e).utc().format("DD");case"hour":return Zt(e).utc().format("HH");case"minute":return Zt(e).utc().format("mm");case"second":return Zt(e).utc().format("ss");case"millisecond":return Zt(e).utc().format("SSS");default:break}},"extract"),date:a(e=>Zt(e).utc().format(SR),"date"),date_format:a((e,t)=>Zt(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>Zt(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>Zt(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=Zt(e).utc(),s=Zt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>Zt().utc().valueOf(),"now"),get_server_time:a(()=>Zt().format(SR),"get_server_time"),offset_utc:a((e,t)=>Zt(e).utc().utcOffset(t).format(SR),"offset_utc")}});var TM=I((VRe,SM)=>{"use strict";var E3=require("@turf/area"),g3=require("@turf/length"),S3=require("@turf/circle"),T3=require("@turf/difference"),A3=require("@turf/distance"),R3=require("@turf/boolean-contains"),y3=require("@turf/boolean-equal"),b3=require("@turf/boolean-disjoint"),O3=require("@turf/helpers"),EM=(H(),D(q)),Ge=oe(),to=j();SM.exports={geoArea:N3,geoLength:w3,geoCircle:I3,geoDifference:C3,geoDistance:gM,geoNear:P3,geoContains:D3,geoEqual:L3,geoCrosses:M3,geoConvert:v3};function N3(e){if(Ge.isEmpty(e))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e));try{return E3.default(e)}catch(t){return to.trace(t,e),NaN}}a(N3,"geoArea");function w3(e,t){if(Ge.isEmpty(e))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e));try{return g3.default(e,{units:t||"kilometers"})}catch(r){return to.trace(r,e),NaN}}a(w3,"geoLength");function I3(e,t,r){if(Ge.isEmpty(e))return NaN;if(Ge.isEmpty(t))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e));try{return S3.default(e,t,{units:r||"kilometers"})}catch(n){return to.trace(n,e,t),NaN}}a(I3,"geoCircle");function C3(e,t){if(Ge.isEmpty(e))return NaN;if(Ge.isEmpty(t))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return T3(e,t)}catch(r){return to.trace(r,e,t),NaN}}a(C3,"geoDifference");function gM(e,t,r){if(Ge.isEmpty(e))return NaN;if(Ge.isEmpty(t))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return A3.default(e,t,{units:r||"kilometers"})}catch(n){return to.trace(n,e,t),NaN}}a(gM,"geoDistance");function P3(e,t,r,n){if(Ge.isEmpty(e)||Ge.isEmpty(t))return!1;if(Ge.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return gM(e,t,n)<=r}catch(s){return to.trace(s,e,t),!1}}a(P3,"geoNear");function D3(e,t){if(Ge.isEmpty(e)||Ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return R3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(D3,"geoContains");function L3(e,t){if(Ge.isEmpty(e)||Ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return y3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(L3,"geoEqual");function M3(e,t){if(Ge.isEmpty(e)||Ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return!b3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(M3,"geoCrosses");function v3(e,t,r){if(Ge.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ge.isEmpty(t))throw new Error("geo_type is required");if(Ge.isEmpty(EM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(EM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ge.autoCastJSON(e)),O3[t](e,r)}a(v3,"geoConvert")});var hm=I((YRe,AM)=>{var Ec=hM(),Bn=mM(),Ri=TM();AM.exports=e=>{e.aggr.mad=e.aggr.MAD=Ec.mad,e.aggr.mean=e.aggr.MEAN=Ec.mean,e.aggr.mode=e.aggr.MODE=Ec.mode,e.aggr.prod=e.aggr.PROD=Ec.prod,e.aggr.median=e.aggr.MEDIAN=Ec.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ec.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ec.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Bn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Bn.current_time,e.fn.extract=e.fn.EXTRACT=Bn.extract,e.fn.date=e.fn.DATE=Bn.date,e.fn.date_format=e.fn.DATE_FORMAT=Bn.date_format,e.fn.date_add=e.fn.DATE_ADD=Bn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Bn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Bn.date_diff,e.fn.now=e.fn.NOW=Bn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Bn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Bn.get_server_time,e.fn.getdate=e.fn.GETDATE=Bn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Bn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ri.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ri.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ri.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ri.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ri.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ri.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ri.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ri.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ri.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ri.geoNear}});var OM=I((WRe,bM)=>{"use strict";var vf=require("lodash"),fn=require("alasql");fn.options.cache=!1;var U3=hm(),RM=require("clone"),pm=require("recursive-iterator"),Ue=j(),We=oe(),Xl=Hn(),x3=(H(),D(q)),{hdb_errors:B3}=he(),{getDatabases:yM}=(Me(),D(st)),H3="IS NULL",Bs="There was a problem performing this search. Please check the logs and try again.";U3(fn);var TR=class{static{a(this,"SQLSearch")}constructor(t,r){if(We.isEmpty(t))throw Ue.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(),We.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!We.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Bs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Bs)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Bs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Bs)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Bs)}}_getColumns(){let t=new pm(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(RM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=vf.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=yM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(We.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new pm(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!We.isEmpty(r)&&r.right)if(We.isNotEmptyAndHasValue(r.right.value)){let n=We.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new fn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=We.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new fn.yy.LogicValue({value:i}):n instanceof fn.yy.StringValue&&We.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new fn.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new pm(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!We.isEmpty(x3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(We.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(We.isEmptyOrZeroLength(r.left.columnid)||We.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(We.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!We.isEmpty(r.right.value)||!We.isEmpty(r.left.value)?n.add(We.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(We.isEmptyOrZeroLength(this.all_table_attributes)&&We.isEmptyOrZeroLength(this.statement.from)&&We.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&vf.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(We.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);We.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(We.isEmptyOrZeroLength(this.all_table_attributes)&&!We.isEmptyOrZeroLength(this.columns.columns))return t;if(We.isEmptyOrZeroLength(this.all_table_attributes)&&We.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await fn.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.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(RM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(We.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(H3)>-1&&this.tables.forEach(s=>{let i={columnid:yM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=vf.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!We.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await Xl.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Bs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await Xl.getDataByValue(d);for(let[_,p]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Bs)}else if(!We.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let p=await Xl.getDataByValue(c,_.operation);if(l)for(let[S]of p)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of p)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(f),new Error(Bs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await Xl.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(f),new Error(Bs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof fn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new fn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new fn.yy.FuncValue:new fn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let p=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(p+=" ON "+_.on.toString()),i.push(p),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let p=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${p}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${p}\` AS "${S}.${p}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,p=this._convertColumnsToIndexes(_,s);h=await fn.promise(p,t),t=null}catch(_){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,p=h.length;_<p;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let p=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=vf.difference(p,[..._.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new pm(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=vf.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Bs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Xl.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let p=0;p<u;p++){let S=s.columns[p],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await fn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.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 Ue.error(B3.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Xl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Bs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};bM.exports=TR});var $r=I((QRe,NM)=>{"use strict";var k3=uM();NM.exports={searchByConditions:G3,searchByHash:q3,searchByValue:$3,search:V3};var AR=Hn(),{transformReq:RR}=oe(),F3=OM();async function G3(e){return RR(e),AR.searchByConditions(e)}a(G3,"searchByConditions");async function q3(e){RR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of AR.searchByHash(e))r&&t.push(r);return t}a(q3,"searchByHash");async function $3(e){RR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of AR.searchByValue(e))t.push(r);return t}a($3,"searchByValue");function V3(e,t){try{let r=new k3(e);r.validate(),new F3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(V3,"search")});var ro=I((JRe,PM)=>{"use strict";var Uf=require("crypto"),K3=ce(),{CONFIG_PARAMS:Y3}=(H(),D(q)),IM="aes-256-cbc",W3=32,z3=16,yR=64,CM=32,Q3=yR+CM,wM=new Map;PM.exports={encrypt:j3,decrypt:J3,createNatsTableStreamName:X3};function j3(e){let t=Uf.randomBytes(W3),r=Uf.randomBytes(z3),n=Uf.createCipheriv(IM,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(j3,"encrypt");function J3(e){let t=e.substr(0,yR),r=e.substr(yR,CM),n=e.substr(Q3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Uf.createDecipheriv(IM,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(J3,"decrypt");function X3(e,t){let r=K3.get(Y3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=wM.get(r);return n||(n=Uf.createHash("md5").update(r).digest("hex"),wM.set(r,n)),n}a(X3,"createNatsTableStreamName")});var no=I((eye,MM)=>{"use strict";var ZRe=$r(),xf=j(),DM=um(),Z3=ro(),mm=oe(),{handleHDBError:Em,hdb_errors:eX}=he(),{HDB_ERROR_MSGS:gm,HTTP_STATUS_CODES:bR}=eX,LM=ce();LM.initSync();var{getDatabases:OR}=(Me(),D(st)),tX=require("fs-extra"),rX=(H(),D(q));MM.exports={describeAll:nX,describeTable:Sm,describeSchema:sX};async function nX(e={}){try{let t=mm.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=OR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let p;if(t||s||r)p=await Sm({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;p=await Sm({schema:d,table:_,exact_count:u},S)}p&&l.push(p)}catch(p){xf.error(p)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return xf.error("Got an error in describeAll"),xf.error(t),Em(new Error,gm.DESCRIBE_ALL_ERR)}}a(nX,"describeAll");async function Sm(e,t){mm.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=DM.describe_table(e);if(i)throw i;let c=OR()[r];if(!c)throw Em(new Error,gm.SCHEMA_NOT_FOUND(e.schema),bR.NOT_FOUND);let l=c[n];if(!l)throw Em(new Error,gm.TABLE_NOT_FOUND(e.schema,e.table),bR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(p=>({type:p.type,name:p.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(p=>{p.describe&&(_[p.attribute_name]=!0)}),l.attributes.forEach(p=>{_[p.name]&&u(p)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await tX.stat(l.primaryStore.env.path)).size}catch(_){xf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),LM.get(rX.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=Z3.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:e.exact_count==="true"});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let p=l.auditStore;if(p)for(let S of p.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){xf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Sm,"descTable");async function sX(e){mm.transformReq(e);let t=DM.schema_object(e);if(t)throw t;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=OR()[n];if(!i)throw Em(new Error,gm.SCHEMA_NOT_FOUND(e.schema),bR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),mm.isEmpty(l)||l.describe){let u=await Sm({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(sX,"describeSchema")});var Hs=I((sye,HM)=>{var iX=Zi(),{callbackify:UM,promisify:oX}=require("util"),{getDatabases:xM}=(Me(),D(st));HM.exports={setSchemaDataToGlobal:vM,getTableSchema:aX,getSystemSchema:cX,setSchemaDataToGlobalAsync:oX(vM)};var BM=no(),rye=UM(BM.describeAll),nye=UM(BM.describeTable);function vM(e){global.hdb_schema=xM(),e&&e()}a(vM,"setSchemaDataToGlobal");function aX(e,t,r){let n=xM()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(aX,"getTableSchema");function cX(){return iX}a(cX,"getSystemSchema")});var wR=I((oye,GM)=>{var lX=dt(),NR=require("joi"),{hdb_table:uX,hdb_database:kM}=Si(),FM={schema:kM,database:kM,table:uX},dX={date:NR.date().iso().required()},fX={timestamp:NR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GM.exports=function(e,t){let r=t==="timestamp"?{...FM,...fX}:{...FM,...dX},n=NR.object(r);return lX.validateBySchema(e,n)}});var VM=I((aye,$M)=>{var _X=dt(),IR=require("joi"),{hdb_table:hX,hdb_database:qM}=Si(),pX=IR.object({schema:qM,database:qM,table:hX,hash_values:IR.array().required(),ids:IR.array()});$M.exports=function(e){return _X.validateBySchema(e,pX)}});var LR=I((cye,KM)=>{"use strict";var CR=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},PR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},DR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};KM.exports={InsertObject:CR,NoSQLSeachObject:PR,DeleteResponseObject:DR}});var Tc=I((uye,jM)=>{"use strict";var WM=wR(),mX=VM(),gc=oe(),YM=require("moment"),zM=j(),{promisify:EX,callbackify:gX}=require("util"),Sc=(H(),D(q)),SX=Hs(),MR=EX(SX.getTableSchema),vR=Hn(),{DeleteResponseObject:TX}=LR(),{handleHDBError:na,hdb_errors:AX}=he(),{HDB_ERROR_MSGS:Tm,HTTP_STATUS_CODES:sa}=AX,RX="records successfully deleted",yX=gX(QM);jM.exports={delete:yX,deleteRecord:QM,deleteFilesBefore:bX,deleteAuditLogsBefore:OX};async function bX(e){let t=WM(e,"date");if(t)throw na(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),!YM(e.date,YM.ISO_8601).isValid())throw na(new Error,Tm.INVALID_DATE,sa.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,Tm.INVALID_DATE,!0);let n=gc.checkSchemaTableExist(e.schema,e.table);if(n)throw na(new Error,n,sa.NOT_FOUND,Sc.LOG_LEVELS.ERROR,n,!0);let s=await vR.deleteRecordsBefore(e);if(await MR(e.schema,e.table),zM.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(bX,"deleteFilesBefore");async function OX(e){let t=WM(e,"timestamp");if(t)throw na(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),isNaN(e.timestamp))throw na(new Error,Tm.INVALID_VALUE("Timestamp"),sa.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,Tm.INVALID_VALUE("Timestamp"),!0);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw na(new Error,r,sa.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);let n=await vR.deleteAuditLogsBefore(e);return await MR(e.schema,e.table),zM.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(OX,"deleteAuditLogsBefore");async function QM(e){e.ids&&(e.hash_values=e.ids);let t=mX(e);if(t)throw na(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);gc.transformReq(e);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw na(new Error,r,sa.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);try{await MR(e.schema,e.table);let n=await vR.deleteRecords(e);return gc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${RX}`),n}catch(n){if(n.message===Sc.SEARCH_NOT_FOUND_MESSAGE){let s=new TX;return s.message=Sc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(QM,"deleteRecord")});var Am={};ve(Am,{HASH_FUNCTION:()=>kf,hash:()=>BR,validate:()=>HR});function UR(e=Hf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Bf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function BR(e,t=kf[XM?.toUpperCase()]??"sha256"){return xR[t](e)}function HR(e,t,r=kf[XM?.toUpperCase()]??"sha256"){return e?NX[r](e,t):!1}var Bf,Zl,JM,XM,Hf,ZM,kf,xR,NX,Rm=be(()=>{Bf=M(require("node:crypto")),Zl=M(require("argon2")),JM=M(ce());H();XM=(0,JM.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Hf=16,ZM=9,kf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(kf||{});a(UR,"generateSalt");xR={md5:a((e,t=void 0)=>{t=t??UR(ZM);let r=Bf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??UR(Hf);let r=Bf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=UR(Hf),r=await Zl.hash(e,{type:Zl.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},NX={md5:a((e,t)=>{let r=e.slice(0,ZM);return e===xR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Hf);return e===xR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await Zl.verify(e.slice(Hf),t),"argon2id")};a(BR,"hash");a(HR,"validate")});var tv=I((hye,ev)=>{var kR=dt(),Vr={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 wX(e){return Vr.password.presence=!0,Vr.username.presence=!0,Vr.role.presence=!0,Vr.active.presence=!0,kR.validateObject(e,Vr)}a(wX,"addUserValidation");function IX(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,kR.validateObject(e,Vr)}a(IX,"alterUserValidation");function CX(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,kR.validateObject(e,Vr)}a(CX,"dropUserValidation");ev.exports={addUserValidation:wX,alterUserValidation:IX,dropUserValidation:CX}});var Nt=I((Eye,nv)=>{"use strict";var{platform:mye}=require("os"),PX="nats-server.zip",FR="nats-server",DX=process.platform==="win32"?`${FR}.exe`:FR,LX=/^[^\s.,*>]+$/,rv="__request__",MX=a(e=>`${e}.${rv}`,"REQUEST_SUBJECT"),vX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},UX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},xX={HUB:"hub.pid",LEAF:"leaf.pid"},BX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},HX={SUCCESS:"success",ERROR:"error"},kX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},FX={TXN:"txn",MSGID:"msgid"},eu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},GX={[eu.ERR]:1,[eu.WRN]:2,[eu.INF]:3,[eu.DBG]:4,[eu.TRC]:5},qX={debug:"-D",trace:"-DVV"};nv.exports={NATS_SERVER_ZIP:PX,NATS_SERVER_NAME:FR,NATS_BINARY_NAME:DX,PID_FILES:xX,NATS_CONFIG_FILES:UX,SERVER_SUFFIX:BX,NATS_TERM_CONSTRAINTS_RX:LX,REQUEST_SUFFIX:rv,UPDATE_REMOTE_RESPONSE_STATUSES:HX,CLUSTER_STATUS_STATUSES:kX,REQUEST_SUBJECT:MX,SUBJECT_PREFIXES:FX,MSG_HEADERS:vX,LOG_LEVELS:eu,LOG_LEVEL_FLAGS:qX,LOG_LEVEL_HIERARCHY:GX}});var GR=I(sv=>{"use strict";var $X={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
17
17
  `),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
18
- `)},$X="certificate.pem",VX="privateKey.pem",KX="caCertificate.pem",YX="natsCertificate.pem",WX="natsCaCertificate.pem",St={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},zX={tls_certificate:St.SERVER,tls_certificateAuthority:St.CA,customFunctions_tls_certificate:St.SERVER,customFunctions_tls_certificateAuthority:St.CA,operationsApi_tls_certificate:St["OPERATIONS-API"],operationsApi_tls_certificateAuthority:St["OPERATIONS-CA"]},QX={[St.SERVER]:2,[St.DEFAULT]:1},jX={[St["OPERATIONS-API"]]:3,[St.SERVER]:2,[St.DEFAULT]:1},JX={[St["OPERATIONS-API"]]:3,[St.SERVER]:2,[St.DEFAULT]:1},XX={[St["OPERATIONS-CA"]]:3,[St.CA]:2,[St["DEFAULT-CA"]]:1},ZX={[St["OPERATIONS-CA"]]:3,[St.CA]:2,[St["DEFAULT-CA"]]:1},eZ={[St.CA]:2,[St["DEFAULT-CA"]]:1};Object.assign(rv,{CERTIFICATE_PEM_NAME:$X,PRIVATEKEY_PEM_NAME:VX,CA_PEM_NAME:KX,CERT_NAME:St,CERT_CONFIG_NAME_MAP:zX,CERT_PREFERENCE_APP:QX,CERT_PREFERENCE_OPS:jX,CERT_PREFERENCE_REP:JX,CA_CERT_PREFERENCE_REP:XX,CA_CERT_PREFERENCE_OPS:ZX,CA_CERT_PREFERENCE_APP:eZ,CERTIFICATE_VALUES:qX,NATS_CERTIFICATE_PEM_NAME:YX,NATS_CA_PEM_NAME:WX})});var qR=I((Tye,cv)=>{"use strict";var ov=require("fs-extra"),Se=require("joi"),tZ=require("os"),{boolean:He,string:Tt,number:Zt,array:Rc}=Se.types(),{totalmem:nv}=require("os"),Ac=require("path"),rZ=Q(),GR=ae(),Sye=FR(),sv=(H(),P($)),nZ=lt(),iv="log",sZ="components",iZ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",oZ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",aZ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",cZ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",lZ="rootPath config parameter is undefined",hn=Se.alternatives([Zt.min(0),Tt]).optional().empty(null),ym=Se.alternatives([Rc.items(Tt,{host:Tt.required(),port:hn},{hostname:Tt.required(),port:hn}).empty(null),Rc.items(Tt)]),bi,av=!1;cv.exports={configValidator:uZ,routesValidator:mZ,route_constraints:ym};function uZ(e,t=!1){if(av=t,bi=e.rootPath,GR.isEmpty(bi))throw lZ;let r=He.optional(),n=Zt.min(0).max(1e3).empty(null).default(pZ),s=Tt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ff),i=Tt.optional().empty(null),o=Tt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Se.string().empty(null).default(Ff),l=Se.custom(fZ).empty(null).default(Ff),u=e.clustering?.enabled,f=Se.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Se.object({enabled:r,hubServer:Se.object({cluster:Se.object({name:Se.required().empty(null),network:Se.object({port:hn,routes:ym}).required()}).required(),leafNodes:Se.object({network:Se.object({port:hn}).required()}).required(),network:Se.object({port:hn}).required()}).required(),leafServer:Se.object({network:Se.object({port:hn,routes:ym}).required(),streams:Se.object({maxAge:Zt.min(120).allow(null).optional(),maxBytes:Zt.min(1).allow(null).optional(),maxMsgs:Zt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Se.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:Tt.optional().empty(null)}).optional():d=Se.object({enabled:r,tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),Se.object({authentication:Se.alternatives(Se.object({authorizeLocal:He,cacheTTL:Zt.required(),enableSessions:He,hashFunction:Tt.valid("md5","sha256","argon2id").optional().empty(null)}),He).optional(),analytics:Se.object({aggregatePeriod:Zt}),replication:Se.object({hostname:Se.alternatives(Tt,Zt).optional().empty(null),url:Tt.optional().empty(null),port:hn,securePort:hn,routes:Rc.optional().empty(null),databases:Se.alternatives(Tt,Rc),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Se.object({enabled:r}).required(),logging:Se.object({auditAuthEvents:Se.object({logFailed:He,logSuccessful:He}),file:He.required(),level:Se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Se.object({enabled:He.optional(),compress:He.optional(),interval:Tt.custom(hZ).optional().empty(null),maxSize:Tt.custom(_Z).optional().empty(null),path:Tt.optional().empty(null).default(Ff)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:Se.object({network:Se.object({cors:He.optional(),corsAccessList:Rc.optional(),headersTimeout:Zt.min(1).optional(),keepAliveTimeout:Zt.min(1).optional(),port:hn,domainSocket:Se.optional().empty("hdb/operations-server").default(Ff),securePort:hn,timeout:Zt.min(1).optional()}).optional(),tls:Se.alternatives([Se.array().items(f),f])}).required(),rootPath:Tt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Se.object({network:Se.object({port:hn,securePort:hn,mtls:Se.alternatives([He.optional(),Se.object({user:Tt.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:Se.object({compressionThreshold:Zt.optional(),cors:He.optional(),corsAccessList:Rc.optional(),headersTimeout:Zt.min(1).optional(),port:hn,securePort:hn,maxHeaderSize:Zt.optional(),mtls:Se.alternatives([He.optional(),Se.object({user:Tt.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:Se.alternatives([Rc.optional(),Tt.optional()])}).required(),threads:Se.alternatives(n.optional(),Se.object({count:n.optional(),debug:Se.alternatives(He.optional(),Se.object({startingPort:Zt.min(1).optional(),host:Tt.optional(),waitForDebugger:He.optional()})),maxHeapMemory:Zt.min(0).optional()})),storage:Se.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:Se.alternatives([He.optional(),Se.object({dictionary:Tt.optional(),threshold:Zt.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:Zt.optional(),maxFreeSpaceToRetain:Zt.optional()}).required(),ignoreScripts:He.optional(),tls:Se.alternatives([Se.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(uZ,"configValidator");function dZ(e){return av||ov.existsSync(e)?null:`Specified path ${e} does not exist.`}a(dZ,"doesPathExist");function fZ(e,t){Se.assert(e,Tt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=dZ(e);if(r)return t.message(r)}a(fZ,"validatePath");function _Z(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(iZ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(aZ):e}a(_Z,"validateRotationMaxSize");function hZ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(oZ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(cZ):e}a(hZ,"validateRotationInterval");function pZ(e,t){let r=t.state.path.join("."),n=tZ.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),rZ.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(pZ,"setDefaultThreads");function Ff(e,t){let r=t.state.path.join(".");if(!GR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(GR.isEmpty(bi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ac.join(bi,sZ);case"logging.root":return Ac.join(bi,iv);case"clustering.leafServer.streams.path":return Ac.join(bi,"clustering","leaf");case"storage.path":let n=Ac.join(bi,sv.LEGACY_DATABASES_DIR_NAME);return ov.existsSync(n)?n:Ac.join(bi,sv.DATABASES_DIR_NAME);case"logging.rotation.path":return Ac.join(bi,iv);case"operationsApi.network.domainSocket":return r==null?null:Ac.join(bi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ff,"setDefaultRoot");function mZ(e){let t=Se.object({routes:ym});return nZ.validateBySchema({routes:e},t)}a(mZ,"routesValidator")});var wt=I(Sv=>{"use strict";var fs=(H(),P($)),_r=ae(),er=Q(),{configValidator:EZ,routesValidator:lv}=qR(),Yr=require("fs-extra"),dv=require("yaml"),Gn=require("path"),gZ=require("is-number"),fv=require("properties-reader"),SZ=require("lodash"),{handleHDBError:TZ}=he(),{HTTP_STATUS_CODES:AZ,HDB_ERROR_MSGS:tu}=Pn(),{server:RZ}=(qr(),P(Wl)),{PACKAGE_ROOT:_v}=mt(),{DATABASES_PARAM_CONFIG:Gf,CONFIG_PARAMS:Fn,CONFIG_PARAM_MAP:Fs}=fs,yZ="Unable to get config value because config is uninitialized",bZ="Config successfully initialized",OZ="Error backing up config file",NZ="Empty parameter sent to getConfigValue",hv=Gn.join(_v,"config","yaml",fs.HDB_DEFAULT_CONFIG_FILE),wZ=Gn.join(_v,"config","yaml","defaultNatsConfig.yaml"),IZ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",uv={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},bm,Nt,Om;Object.assign(Sv,{createConfigFile:CZ,getDefaultConfig:PZ,getConfigValue:mv,initConfig:Nm,flattenConfig:ru,updateConfigValue:Ev,updateConfigObject:LZ,getConfiguration:UZ,setConfiguration:xZ,readConfigFile:YR,getClusteringRoutes:BZ,initOldConfig:gv,getConfigFromFile:HZ,getConfigFilePath:yc,addConfig:kZ,deleteConfigFromFile:FZ,getConfigObj:GZ,resolvePath:$R,getFlatConfigObj:qZ});function $R(e){if(e?.startsWith("~/"))return Gn.join(_r.getHomeDir(),e.slice(1));let t=le();return Gn.resolve(t.getHdbBasePath(),e)}a($R,"resolvePath");function CZ(e,t=!1){let r=oa(hv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=dv.parseDocument(Yr.readFileSync(wZ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}bm=ru(r.toJSON());let n;for(let c in e){let l=Fs[c.toLowerCase()];if(l===Fn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=VR(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){er.error(d)}}}n&&pv(r,n),KR(r,t);let s=r.toJSON();Nt=ru(s);let i=r.getIn(["rootPath"]),o=Gn.join(i,fs.HDB_CONFIG_FILE);if(Yr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Yr.writeFileSync(o,String(r)),er.trace(`Config file written to ${o}`)}a(CZ,"createConfigFile");function pv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!_r.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Gf.TABLES))for(let i in n[s][Gf.TABLES])for(let o in n[s][Gf.TABLES][i]){let c=n[s][Gf.TABLES][i][o],l=[Fn.DATABASES,s,Gf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Fn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){er.error("Error parsing schemas CLI/env config arguments",n)}}a(pv,"setSchemasConfig");function PZ(e){if(bm===void 0){let r=oa(hv);bm=ru(r.toJSON())}let t=Fs[e.toLowerCase()];if(t!==void 0)return bm[t.toLowerCase()]}a(PZ,"getDefaultConfig");function mv(e){if(e==null){er.info(NZ);return}if(Nt===void 0){er.trace(yZ);return}let t=Fs[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(mv,"getConfigValue");function yc(e=_r.getPropsFilePath()){let t=_r.getEnvCliRootPath();if(t)return $R(Gn.join(t,fs.HDB_CONFIG_FILE));let r=fv(e);return $R(r.get(fs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(yc,"getConfigFilePath");function Nm(e=!1){if(Nt===void 0||e){let t;if(!_r.noBootFile()){t=_r.getPropsFilePath();try{Yr.accessSync(t,Yr.constants.F_OK|Yr.constants.R_OK)}catch(i){throw er.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=yc(t),n;if(r.includes("config/settings.js"))try{gv(r);return}catch(i){if(i.code!==fs.NODE_ERROR_CODES.ENOENT)throw i}try{n=oa(r)}catch(i){if(i.code===fs.NODE_ERROR_CODES.ENOENT){er.trace(`HarperDB config file not found at ${r}.
19
- This can occur during early stages of install where the config file has not yet been created`);return}else throw er.error(i),new Error(`Error reading HarperDB config file at ${r}`)}DZ(n,r),KR(n);let s=n.toJSON();if(RZ.config=s,Nt=ru(s),Nt.logging_rotation_rotate)for(let i in uv)Nt[i]&&er.error(`Config ${uv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);er.trace(bZ)}}a(Nm,"initConfig");function DZ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Gn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Gn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(er.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Yr.writeFileSync(t,String(e))}}a(DZ,"checkForUpdatedConfig");function KR(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 tu.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 tu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=EZ(r,t);if(n.error)throw tu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(KR,"validateConfig");function LZ(e,t){Nt===void 0&&(Nt={});let r=Fs[e.toLowerCase()];if(r===void 0){er.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a(LZ,"updateConfigObject");function Ev(e,t,r=void 0,n=!1,s=!1,i=!1){Nt===void 0&&Nm();let o=mv(Fs.hdb_root),c=Gn.join(o,fs.HDB_CONFIG_FILE),l=oa(c),u;if(r&&Nt){let h=!1;for(let _ in r)if(r[_]!=Nt[_.toLowerCase()]){h=!0;break}if(!h){er.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Fn.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=Fs[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),p=VR(h,t);l.setIn([..._],p)}else for(let h in r){let _=Fs[h.toLowerCase()];if(_===Fn.HTTP_SECUREPORT&&r[h]===Nt[Fn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Fn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===Nt[Fn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Fn.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let p=_.split("_"),S=fs.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,p=S.split("_"));let g=VR(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(A){er.error(A)}}}u&&pv(l,u),KR(l);let f=l.getIn(["rootPath"]),d=Gn.join(f,fs.HDB_CONFIG_FILE);if(n===!0&&MZ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Yr.writeFileSync(d,String(l)),s&&(Nt=ru(l.toJSON())),er.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Ev,"updateConfigValue");function MZ(e,t){try{let r=Gn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${fs.HDB_CONFIG_FILE}.bak`);Yr.copySync(e,r),er.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){er.error(OZ),er.error(r)}}a(MZ,"backupConfigFile");var vZ=["databases"];function ru(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}),Om=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])&&!vZ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Fn[l.toUpperCase()]&&Fs[l]&&(s[Fs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(ru,"flattenConfig");function VR(e,t){if(e===Fn.CLUSTERING_NODENAME||e===Fn.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(gZ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_r.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 _r.autoCast(t)}a(VR,"castConfigValue");function UZ(){let e=_r.getPropsFilePath(),t=yc(e);return oa(t).toJSON()}a(UZ,"getConfiguration");async function xZ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return Ev(void 0,void 0,s,!0),IZ}catch(i){throw typeof i=="string"||i instanceof String?TZ(i,i,AZ.BAD_REQUEST,void 0,void 0,!0):i}}a(xZ,"setConfiguration");function YR(){let e=_r.getPropsFilePath();try{Yr.accessSync(e,Yr.constants.F_OK|Yr.constants.R_OK)}catch(n){if(!_r.noBootFile())throw er.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=yc(e);return oa(t).toJSON()}a(YR,"readConfigFile");function oa(e){return dv.parseDocument(Yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(oa,"parseYamlDoc");function BZ(){let e=YR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_r.isEmptyOrZeroLength(t)?[]:t;let r=lv(t);if(r)throw tu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=_r.isEmptyOrZeroLength(n)?[]:n;let s=lv(n);if(s)throw tu.CONFIG_VALIDATION(s.message);if(!_r.isEmptyOrZeroLength(n)&&!_r.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!_r.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw tu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(BZ,"getClusteringRoutes");function gv(e){let t=fv(e);Nt={};for(let r in Fs){let n=t.get(r.toUpperCase());if(_r.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Fs[r].toLowerCase();s===Fn.LOGGING_ROOT?Nt[s]=Gn.dirname(n):Nt[s]=n}return Nt}a(gv,"initOldConfig");function HZ(e){let t=YR();return SZ.get(t,e.replaceAll("_","."))}a(HZ,"getConfigFromFile");async function kZ(e,t){let r=oa(yc());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 Yr.writeFile(yc(),String(r))}a(kZ,"addConfig");function FZ(e){let t=yc(_r.getPropsFilePath()),r=oa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Gn.join(n,fs.HDB_CONFIG_FILE);Yr.writeFileSync(s,String(r))}a(FZ,"deleteConfigFromFile");function GZ(){return Om||(Nm(),Om)}a(GZ,"getConfigObj");function qZ(){return Nt||Nm(),Nt}a(qZ,"getFlatConfigObj")});var qn=I((bye,yr)=>{"use strict";var Rv="username is required",yv="nothing to update, must supply active, role or password to update",bv="password cannot be an empty string",Ov="If role is specified, it cannot be empty.",Nv="active must be true or false";yr.exports.addUser=JZ;yr.exports.alterUser=XZ;yr.exports.dropUser=e6;yr.exports.getSuperUser=i6;yr.exports.userInfo=t6;yr.exports.listUsers=Im;yr.exports.listUsersExternal=r6;yr.exports.setUsersWithRolesCache=bc;yr.exports.findAndValidateUser=ty;yr.exports.getClusterUser=o6;yr.exports.getUsersWithRolesCache=s6;yr.exports.USERNAME_REQUIRED=Rv;yr.exports.ALTERUSER_NOTHING_TO_UPDATE=yv;yr.exports.EMPTY_PASSWORD=bv;yr.exports.EMPTY_ROLE=Ov;yr.exports.ACTIVE_BOOLEAN=Nv;var wv=pn(),$Z=Tc(),qf=(Rm(),P(Am)),Iv=ZM(),$f=Vr(),JR=io(),Oi=ae(),Cv=require("validate.js"),XR=Q(),{promisify:VZ}=require("util"),ZR=ro(),zR=(H(),P($)),Tv=Ot(),KZ=wt(),YZ=le(),WZ=Zi(),{hdb_errors:zZ,ClientError:Gs}=he(),{HTTP_STATUS_CODES:so,AUTHENTICATION_ERROR_MSGS:WR,HDB_ERROR_MSGS:nu}=zZ,{UserEventMsg:ey}=qs(),QR=require("lodash"),{server:wm}=(qr(),P(Wl)),QZ=Q();wm.getUser=(e,t)=>ty(e,t,t!=null);wm.authenticateUser=(e,t)=>ty(e,t);var Pv={username:!0,active:!0,role:!0,password:!0},Av=new Map,jZ=VZ($Z.delete),jR=YZ.get(zR.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??qf.HASH_FUNCTION.SHA256,Ni;async function JZ(e){let t=Cv.cleanAttributes(e,Pv),r=Iv.addUserValidation(t);if(r)throw new Gs(r.message);let n=await $f.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Gs(nu.ROLE_NAME_NOT_FOUND(t.role),so.NOT_FOUND);if(n.length>1)throw new Gs(nu.DUP_ROLES_FOUND(t.role),so.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=ZR.encrypt(t.password)),t.password=await qf.hash(t.password,jR),t.hash_function=jR,t.role=n[0].id;let s=await wv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(XR.debug(s),await bc(),s.skipped_hashes.length===1)throw new Gs(nu.USER_ALREADY_EXISTS(t.username),so.CONFLICT);return JR.signalUserChange(new ey(process.pid)),`${t.username} successfully added`}a(JZ,"addUser");async function XZ(e){let t=Cv.cleanAttributes(e,Pv);if(Oi.isEmptyOrZeroLength(t.username))throw new Error(Rv);if(Oi.isEmptyOrZeroLength(t.password)&&Oi.isEmptyOrZeroLength(t.role)&&Oi.isEmptyOrZeroLength(t.active))throw new Error(yv);if(!Oi.isEmpty(t.password)&&Oi.isEmptyOrZeroLength(t.password.trim()))throw new Error(bv);if(!Oi.isEmpty(t.active)&&!Oi.isBoolean(t.active))throw new Error(Nv);if(!Oi.isEmpty(t.password)&&!Oi.isEmptyOrZeroLength(t.password.trim())&&(ZZ(t.username)&&(t.hash=ZR.encrypt(t.password)),t.password=await qf.hash(t.password,jR)),t.role==="")throw new Error(Ov);if(t.role){let n=await $f.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Gs(nu.ALTER_USER_ROLE_NOT_FOUND(t.role),so.NOT_FOUND);if(n.length>1)throw new Gs(nu.DUP_ROLES_FOUND(t.role),so.CONFLICT);t.role=n[0].id}let r=await wv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await bc(),JR.signalUserChange(new ey(process.pid)),r}a(XZ,"alterUser");function ZZ(e){let t=!1,r=Ni.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZZ,"isClusterUser");async function e6(e){let t=Iv.dropUserValidation(e);if(t)throw new Gs(t.message);if(Ni.get(e.username)===void 0)throw new Gs(nu.USER_NOT_EXIST(e.username),so.NOT_FOUND);let r=await jZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return XR.debug(r),await bc(),JR.signalUserChange(new ey(process.pid)),`${e.username} successfully deleted`}a(e6,"dropUser");async function t6(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=QR.cloneDeep(e.hdb_user);let r=await $f.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(t6,"userInfo");async function r6(){let e=await Im();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(r6,"listUsersExternal");async function Im(){let e=await $f.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=QR.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await $f.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=QR.cloneDeep(s),s.role=t[s.role],n6(s.role),n.set(s.username,s);return n}a(Im,"listUsers");function n6(e){if(!e){XR.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(WZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(n6,"appendSystemTablesToRole");async function bc(e=void 0){e?Ni=e:Ni=await Im()}a(bc,"setUsersWithRolesCache");async function s6(){return Ni||await bc(),Ni}a(s6,"getUsersWithRolesCache");async function ty(e,t,r=!0){Ni||await bc();let n=Ni.get(e);if(!n){if(!r)return{username:e};throw new Gs(WR.GENERIC_AUTH_FAIL,so.UNAUTHORIZED)}if(n&&!n.active)throw new Gs(WR.USER_INACTIVE,so.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(Av.get(t)===n.password)return s;{let i=qf.validate(n.password,t,n.hash_function||qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)Av.set(t,n.password);else throw new Gs(WR.GENERIC_AUTH_FAIL,so.UNAUTHORIZED)}}return s}a(ty,"findAndValidateUser");async function i6(){Ni||await bc();for(let[,e]of Ni)if(e.role.role==="super_user")return e}a(i6,"getSuperUser");async function o6(){let e=await Im(),t=KZ.getConfigFromFile(zR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==zR.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=ZR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Tv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Tv.SERVER_SUFFIX.ADMIN,r}a(o6,"getClusterUser");var Dv=[];wm.invalidateUser=function(e){for(let t of Dv)try{t(e)}catch(r){QZ.error("Error invalidating user",r)}};wm.onInvalidatedUser=function(e){Dv.push(e)}});var Kf=I((Iye,Uv)=>{"use strict";var Oc=Q(),$n=(H(),P($)),a6=QL(),Nye=ks(),wye=no(),c6=qn(),{validateEvent:Lv}=qs(),Vf=kn(),l6=require("process"),{resetDatabases:u6}=(Me(),P(st)),d6={[$n.ITC_EVENT_TYPES.SCHEMA]:f6,[$n.ITC_EVENT_TYPES.USER]:vv};async function f6(e){let t=Lv(e);if(t){Oc.error(t);return}Oc.trace("ITC schemaHandler received schema event:",e),await a6(e.message),await _6(e.message)}a(f6,"schemaHandler");async function _6(e){try{Vf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Vf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Vf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=u6();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oc.error(t)}}a(_6,"syncSchemaMetadata");var Mv=[];async function vv(e){try{try{Vf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Vf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oc.warn(r)}let t=Lv(e);if(t){Oc.error(t);return}Oc.trace(`ITC userHandler ${$n.HDB_ITC_CLIENT_PREFIX}${l6.pid} received user event:`,e),await c6.setUsersWithRolesCache();for(let r of Mv)r()}catch(t){Oc.error(t)}}a(vv,"userHandler");vv.addListener=function(e){Mv.push(e)};Uv.exports=d6});var qs=I((vye,Bv)=>{"use strict";var Pye=Q(),ry=ae(),h6=(H(),P($)),{ITC_ERRORS:Yf}=Pn(),{parentPort:Dye,threadId:p6,isMainThread:m6,workerData:Lye}=require("worker_threads"),{onMessageFromWorkers:E6,broadcast:Mye,broadcastWithAcknowledgement:g6}=tt();Bv.exports={sendItcEvent:S6,validateEvent:xv,SchemaEventMsg:T6,UserEventMsg:A6};var Cm;E6(async(e,t)=>{Cm=Cm||Kf(),xv(e),Cm[e.type]&&await Cm[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S6(e){return!m6&&e.message&&(e.message.originator=p6),g6(e)}a(S6,"sendItcEvent");function xv(e){if(typeof e!="object")return Yf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||ry.isEmpty(e.type))return Yf.MISSING_TYPE;if(!e.hasOwnProperty("message")||ry.isEmpty(e.message))return Yf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ry.isEmpty(e.message.originator))return Yf.MISSING_ORIGIN;if(h6.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Yf.INVALID_EVENT(e.type)}a(xv,"validateEvent");function T6(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(T6,"SchemaEventMsg");function A6(e){this.originator=e}a(A6,"UserEventMsg")});var io=I((Bye,Gv)=>{"use strict";var Hv=(H(),P($)),xye=ae(),Pm=Q(),kv=YL(),su,{sendItcEvent:Fv}=qs();function R6(e){try{Pm.info("signalSchemaChange called with message:",e),su=su||Kf();let t=new kv(Hv.ITC_EVENT_TYPES.SCHEMA,e);return su.schema(t),Fv(t)}catch(t){Pm.error(t)}}a(R6,"signalSchemaChange");function y6(e){try{Pm.trace("signalUserChange called with message:",e),su=su||Kf();let t=new kv(Hv.ITC_EVENT_TYPES.USER,e);return su.user(t),Fv(t)}catch(t){Pm.error(t)}}a(y6,"signalUserChange");Gv.exports={signalSchemaChange:R6,signalUserChange:y6}});var Dm=I((kye,$v)=>{"use strict";var qv=ae(),b6=(H(),P($)),O6=Q(),N6=fm(),w6=dm(),I6=io(),{SchemaEventMsg:C6}=qs(),P6="already exists in";$v.exports=D6;async function D6(e,t,r){if(qv.isEmptyOrZeroLength(r))return r;let n=[];qv.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 L6(e,t.schema,t.name,i)})),s}a(D6,"lmdbCheckForNewAttributes");async function L6(e,t,r,n){let s=new w6(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await M6(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(P6))O6.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(L6,"createNewAttribute");async function M6(e){let t;return t=await N6(e),I6.signalSchemaChange(new C6(process.pid,b6.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(M6,"createAttribute")});var iu=I((Gye,Vv)=>{"use strict";var ny=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Vv.exports=ny});var Yv=I(($ye,Kv)=>{"use strict";var v6=iu(),U6=(H(),P($)).OPERATIONS_ENUM,sy=class extends v6{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(U6.INSERT,r,n,s,i),this.records=t}};Kv.exports=sy});var zv=I((Kye,Wv)=>{"use strict";var x6=iu(),B6=(H(),P($)).OPERATIONS_ENUM,iy=class extends x6{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(B6.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Wv.exports=iy});var jv=I((Wye,Qv)=>{"use strict";var H6=iu(),k6=(H(),P($)).OPERATIONS_ENUM,oy=class extends H6{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(k6.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Qv.exports=oy});var Xv=I((Qye,Jv)=>{"use strict";var F6=iu(),G6=(H(),P($)).OPERATIONS_ENUM,ay=class extends F6{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(G6.DELETE,n,s,t,i),this.original_records=r}};Jv.exports=ay});var Wf=I((Xye,rU)=>{"use strict";var Jye=require("path"),Zv=ut(),q6=Yv(),$6=zv(),V6=jv(),K6=Xv(),ou=vt(),eU=ae(),{CONFIG_PARAMS:Y6}=(H(),P($)),tU=le();tU.initSync();var Lm=(H(),P($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:W6}=Et();rU.exports=z6;async function z6(e,t){if(tU.get(Y6.LOGGING_AUDITLOG)===!1)return;let r=W6(e.schema,e.table),n=await Zv.openEnvironment(r,e.table,!0),s=Q6(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Zv.initializeDBIs(n,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ou.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),eU.isEmpty(s.user_name)||n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(z6,"writeTransaction");function Q6(e,t){let r=eU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Lm.INSERT)return new q6(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.UPDATE)return new $6(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.UPSERT)return new V6(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.DELETE)return new K6(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Q6,"createTransactionObject")});var cy=I((tbe,nU)=>{"use strict";var j6=Pf(),ebe=rf(),zf=(H(),P($)),J6=nf(),X6=pc().insertRecords,Z6=ut(),e8=Q(),t8=Dm(),{getSchemaPath:r8}=Et(),n8=Wf();nU.exports=s8;async function s8(e){try{let{schema_table:t,attributes:r}=j6(e);J6(e,r,t.hash_attribute),e.schema!==zf.SYSTEM_SCHEMA_NAME&&(r.includes(zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t8(e.hdb_auth_header,t,r),s=r8(e.schema,e.table),i=await Z6.openEnvironment(s,e.table),o=await X6(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n8(e,o)}catch(c){e8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(s8,"lmdbCreateRecords")});var oU=I((nbe,iU)=>{"use strict";var sU=(H(),P($)),i8=cy(),o8=rf(),a8=require("fs-extra"),{getSchemaPath:c8}=Et();iU.exports=l8;async function l8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o8(sU.SYSTEM_SCHEMA_NAME,sU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i8(r),await a8.mkdirp(c8(e.schema))}a(l8,"lmdbCreateSchema")});var cU=I((ibe,aU)=>{"use strict";var ly=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};aU.exports=ly});var fU=I((ube,dU)=>{"use strict";var lU=ut(),uy=cn(),dy=Pn().LMDB_ERRORS_ENUM,u8=vt(),uU=Q(),abe=ae(),d8=require("lmdb"),f8=cU(),_8=(H(),P($)),{OVERFLOW_MARKER:cbe,MAX_SEARCH_KEY_LENGTH:lbe}=u8,h8=_8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p8(e,t,r,n){if(uy.validateEnv(e),t===void 0)throw new Error(dy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(dy.IDS_REQUIRED):new Error(dy.IDS_MUST_BE_ITERABLE);try{let s=lU.listDBIs(e);lU.initializeDBIs(e,t,s);let i=new f8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let p=e.dbis[t].get(o);if(!p||n&&p[h8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,d8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let A=s[g];if(!p.hasOwnProperty(A)||A===t)continue;let E=e.dbis[A],R=p[A];if(R!=null)try{let N=uy.getIndexedValues(R);if(N)for(let v=0,k=N.length;v<k;v++)E.remove(N[v],o)}catch{uU.warn(`cannot delete from attribute: ${A}, ${R}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(p)}catch(p){uU.warn(p),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=uy.getNextMonotonicTime(),i}catch(s){throw s}}a(p8,"deleteRecords");dU.exports={deleteRecords:p8}});var Qf=I((fbe,hU)=>{"use strict";var au=ae(),m8=fU(),E8=ut(),{getSchemaPath:g8}=Et(),S8=Wf(),T8=Q();hU.exports=A8;async function A8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(au.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(au.isEmptyOrZeroLength(e.hash_values)&&!au.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];au.isEmpty(l)||e.hash_values.push(l)}}if(au.isEmptyOrZeroLength(e.hash_values))return _U([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(au.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=g8(e.schema,e.table),i=await E8.openEnvironment(s,e.table),o=await m8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await S8(e,o)}catch(c){T8.error(`unable to write transaction due to ${c.message}`)}return _U(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A8,"lmdbDeleteRecords");function _U(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(_U,"createDeleteResponse")});var _y=I((pbe,pU)=>{"use strict";var R8=(H(),P($)),hbe=cn();function fy(e,t){let r=Object.create(null);if(t.length===1&&R8.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(fy,"parseRow");function y8(e,t,r,n){let s=fy(r,e);n.push(s)}a(y8,"searchAll");function b8(e,t,r,n){let s=fy(r,e);n[t]=s}a(b8,"searchAllToMap");function O8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(O8,"iterateDBI");function Nc(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Nc,"pushResults");function N8(e,t,r,n,s,i){t.toString().endsWith(e)&&Nc(t,r,n,s,i)}a(N8,"endsWith");function w8(e,t,r,n,s,i){t.toString().includes(e)&&Nc(t,r,n,s,i)}a(w8,"contains");function I8(e,t,r,n,s,i){t>e&&Nc(t,r,n,s,i)}a(I8,"greaterThanCompare");function C8(e,t,r,n,s,i){t>=e&&Nc(t,r,n,s,i)}a(C8,"greaterThanEqualCompare");function P8(e,t,r,n,s,i){t<e&&Nc(t,r,n,s,i)}a(P8,"lessThanCompare");function D8(e,t,r,n,s,i){t<=e&&Nc(t,r,n,s,i)}a(D8,"lessThanEqualCompare");pU.exports={parseRow:fy,searchAll:y8,searchAllToMap:b8,iterateDBI:O8,endsWith:N8,contains:w8,greaterThanCompare:I8,greaterThanEqualCompare:C8,lessThanCompare:P8,lessThanEqualCompare:D8,pushResults:Nc}});var cu=I((Tbe,RU)=>{"use strict";var aa=ut(),Ebe=Q(),Vn=cn(),Mm=vt(),Vt=Pn().LMDB_ERRORS_ENUM,gbe=ae(),L8=(H(),P($)),vm=_y(),{parseRow:M8}=vm,Sbe=require("lmdb"),{OVERFLOW_MARKER:mU,MAX_SEARCH_KEY_LENGTH:v8}=Mm;function EU(e,t,r,n=!1,s=void 0,i=void 0){return wc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(EU,"iterateFullIndex");function jf(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return wc(e,t,r,(f,d,h,_)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(E.values=!1,d.getRange(E).map(R=>({value:R}))):d.getRange(E)})}a(jf,"iterateRangeBetween");function wc(e,t,r,n){let s=e.database||e,i=aa.openDBI(s,r);i[Mm.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&aa.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(wc,"setupTransaction");function gU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(mU)){if(!s)if(r)s=aa.openDBI(e,r);else{let l=aa.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=aa.openDBI(e,l[u]),!s[Mm.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(gU,"getOverflowCheck");function U8(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Vt.HASH_ATTRIBUTE_REQUIRED);return wc(e,t,t,(o,c,l)=>(Um(r),r=Jf(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>M8(u.value,r))))}a(U8,"searchAll");function x8(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Vt.HASH_ATTRIBUTE_REQUIRED);Um(r),r=Jf(e.database||e,r);let o=new Map;for(let{key:c,value:l}of EU(e,t,t,n,s,i))o.set(c,vm.parseRow(l,r));return o}a(x8,"searchAllToMap");function B8(e,t,r=!1,n=void 0,s=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Vt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=EU(e,void 0,t,r,n,s),c=o.transaction,l=gU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(B8,"iterateDBI");function H8(e,t){if(Vn.validateEnv(e),t===void 0)throw new Error(Vt.HASH_ATTRIBUTE_REQUIRED);return aa.statDBI(e,t).entryCount}a(H8,"countAll");function k8(e,t,r,n,s=!1,i=void 0,o=void 0){return ca(e,r,n),wc(e,t,r,(c,l,u,f)=>(n=Vn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(k8,"equals");function F8(e,t,r){return ca(e,t,r),aa.openDBI(e,t).getValuesCount(r)}a(F8,"count");function G8(e,t,r,n,s=!1,i=void 0,o=void 0){return ca(e,r,n),wc(e,null,r,(c,l)=>{n=Vn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(G8,"startsWith");function q8(e,t,r,n,s=!1,i=void 0,o=void 0){return SU(e,t,r,n,s,i,o,!0)}a(q8,"endsWith");function SU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ca(e,r,n),wc(e,null,r,(l,u,f,d)=>{let h=gU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let p=_.toString();return p.endsWith(mU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?p.endsWith(n):p.includes(n))?u[Mm.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(SU,"contains");function $8(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),jf(e,t,r,n,l,s,i,o,!0,!1)}a($8,"greaterThan");function V8(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),jf(e,t,r,n,l,s,i,o,!1,!1)}a(V8,"greaterThanEqual");function K8(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),jf(e,t,r,l,n,s,i,o,!1,!0)}a(K8,"lessThan");function Y8(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),jf(e,t,r,l,n,s,i,o,!1,!1)}a(Y8,"lessThanEqual");function W8(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Vn.validateEnv(e),r===void 0)throw new Error(Vt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Vt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Vt.END_VALUE_REQUIRED);if(n=Vn.convertKeyValueToWrite(n),s=Vn.convertKeyValueToWrite(s),n>s)throw new Error(Vt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return jf(e,t,r,n,s,i,o,c)}a(W8,"between");function z8(e,t,r,n){Vn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Vt.HASH_ATTRIBUTE_REQUIRED);if(Um(r),r=Jf(s,r),n===void 0)throw new Error(Vt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=vm.parseRow(c,r)),o}a(z8,"searchByHash");function Q8(e,t,r){Vn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Vt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Vt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Q8,"checkHashExists");function j8(e,t,r,n,s=[]){return AU(e,t,r,n,s),TU(e,t,r,n,s).map(i=>i[1])}a(j8,"batchSearchByHash");function J8(e,t,r,n,s=[]){AU(e,t,r,n,s);let i=new Map;for(let[o,c]of TU(e,t,r,n,s))i.set(o,c);return i}a(J8,"batchSearchByHashToMap");function TU(e,t,r,n,s=[]){return wc(e,t,t,(i,o,c)=>{r=Jf(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,vm.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(TU,"batchHashSearch");function AU(e,t,r,n,s){if(Vn.validateEnv(e),t===void 0)throw new Error(Vt.HASH_ATTRIBUTE_REQUIRED);if(Um(r),n==null)throw new Error(Vt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Vt.IDS_MUST_BE_ITERABLE)}a(AU,"initializeBatchSearchByHash");function Um(e){if(!Array.isArray(e))throw e===void 0?new Error(Vt.FETCH_ATTRIBUTES_REQUIRED):new Error(Vt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Um,"validateFetchAttributes");function ca(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(Vt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Vt.SEARCH_VALUE_REQUIRED);if(r?.length>v8)throw new Error(Vt.SEARCH_VALUE_TOO_LARGE)}a(ca,"validateComparisonFunctions");function Jf(e,t){return t.length===1&&L8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=aa.listDBIs(e)),t}a(Jf,"setGetWholeRowAttributes");RU.exports={searchAll:U8,searchAllToMap:x8,count:F8,countAll:H8,equals:k8,startsWith:G8,endsWith:q8,contains:SU,searchByHash:z8,setGetWholeRowAttributes:Jf,batchSearchByHash:j8,batchSearchByHashToMap:J8,checkHashExists:Q8,iterateDBI:B8,greaterThan:$8,greaterThanEqual:V8,lessThan:K8,lessThanEqual:Y8,between:W8}});var lu=I((Rbe,wU)=>{var yU=require("lodash"),bU=lt(),ke=require("joi"),X8=ae(),{hdb_schema_table:Xf,checkValidTable:OU,hdb_table:NU,hdb_database:xm}=Ti(),{handleHDBError:Z8,hdb_errors:e5}=he(),{getDatabases:t5}=(Me(),P(st)),{HTTP_STATUS_CODES:r5}=e5,n5=ke.object({database:xm,schema:xm,table:NU,search_attribute:Xf,search_value:ke.any().required(),get_attributes:ke.array().min(1).items(ke.alternatives(Xf,ke.object())).optional(),desc:ke.bool(),limit:ke.number().integer().min(1),offset:ke.number().integer().min(0)}),s5=ke.object({database:xm,schema:xm,table:NU,operator:ke.string().valid("and","or").default("and").lowercase(),offset:ke.number().integer().min(0),limit:ke.number().integer().min(1),get_attributes:ke.array().min(1).items(ke.alternatives(Xf,ke.object())).optional(),sort:ke.object({attribute:ke.alternatives(Xf,ke.array().min(1)),descending:ke.bool().optional()}).optional(),conditions:ke.array().min(1).items(ke.alternatives(ke.object({operator:ke.string().valid("and","or").default("and").lowercase(),conditions:ke.array()}),ke.object({search_attribute:ke.alternatives(Xf,ke.array().min(1)),search_type:ke.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:ke.when("search_type",{switch:[{is:"equals",then:ke.any()},{is:"between",then:ke.array().items(ke.alternatives([ke.string(),ke.number()])).length(2)}],otherwise:ke.alternatives(ke.string(),ke.number())}).required()}))).required()});wU.exports=function(e,t){let r=null;switch(t){case"value":r=bU.validateBySchema(e,n5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(OU("database",e.schema)),i(OU("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=bU.validateBySchema(e,s5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=X8.checkGlobalSchemaTable(e.schema,e.table);if(s)return Z8(new Error,s,r5.NOT_FOUND);let o=t5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=yU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!yU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var hy=I((bbe,IU)=>{"use strict";var i5=ut(),o5=lu(),{getSchemaPath:a5}=Et();IU.exports=c5;function c5(e){let t=o5(e,"hashes");if(t)throw t;let r=a5(e.schema,e.table);return i5.openEnvironment(r,e.table)}a(c5,"initialize")});var py=I((Nbe,CU)=>{"use strict";var l5=cu(),u5=hy();CU.exports=d5;async function d5(e){let t=await u5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return l5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d5,"lmdbGetDataByHash")});var uu=I((Ibe,PU)=>{"use strict";var my=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};PU.exports=my});var LU=I((Dbe,DU)=>{"use strict";var Pbe=uu(),f5=cu(),_5=hy();DU.exports=h5;async function h5(e){let t=await _5(e),r=global.hdb_schema[e.schema][e.table];return f5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(h5,"lmdbSearchByHash")});var $s=I((Mbe,MU)=>{"use strict";var Ey=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};MU.exports=Ey});var Bm=I((Ube,kU)=>{"use strict";var Wr=cu(),p5=ut(),m5=ae(),Fe=vt(),Ic=(H(),P($)),E5=Zi(),vU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:g5}=Et(),oo=Ic.SEARCH_WILDCARDS;async function S5(e,t,r){let n;e.schema===Ic.SYSTEM_SCHEMA_NAME?n=E5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=HU(e,n.hash_attribute,r,t);return xU(e,s,n.hash_attribute,r)}a(S5,"prepSearch");async function xU(e,t,r,n){let s=g5(e.schema,e.table),i=await p5.openEnvironment(s,e.table),o=BU(i,e,t,r),c=o.transaction||i;if([Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Fe.SEARCH_TYPES.SEARCH_ALL,Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(T5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?UU(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?UU(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(xU,"executeSearch");function BU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Fe.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.ENDS_WITH:case Fe.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.STARTS_WITH:case Fe.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN:case Fe.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Fe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN:case Fe.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN_EQUAL:case Fe.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(BU,"searchByType");function UU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(UU,"createMapFromIterable");function T5(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(T5,"checkToFetchMore");function HU(e,t,r,n){if(m5.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),oo.indexOf(s)>-1)return r===!0?Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Fe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oo[0])<0&&s.indexOf(oo[1])<0)return c===!0?r===!0?Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Fe.SEARCH_TYPES.EQUALS;if(oo.indexOf(i)>=0&&oo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Fe.SEARCH_TYPES.CONTAINS;if(oo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Fe.SEARCH_TYPES.ENDS_WITH;if(oo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Fe.SEARCH_TYPES.STARTS_WITH;if(s.includes(oo[0])||s.includes(oo[1]))return Fe.SEARCH_TYPES.EQUALS;throw new Error(vU.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ic.VALUE_SEARCH_COMPARATORS.BETWEEN:return Fe.SEARCH_TYPES.BETWEEN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER:return Fe.SEARCH_TYPES.GREATER_THAN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Fe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ic.VALUE_SEARCH_COMPARATORS.LESS:return Fe.SEARCH_TYPES.LESS_THAN;case Ic.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Fe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(vU.UNKNOWN_SEARCH_TYPE)}}a(HU,"createSearchTypeFromSearchObject");kU.exports={executeSearch:xU,createSearchTypeFromSearchObject:HU,prepSearch:S5,searchByType:BU}});var GU=I((Hbe,FU)=>{"use strict";var Bbe=$s(),A5=lu(),R5=ae(),y5=(H(),P($)),b5=Bm();FU.exports=O5;function O5(e,t){if(!R5.isEmpty(t)&&y5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A5(e,"value");if(n)throw n;return b5.prepSearch(e,t,!0)}a(O5,"lmdbGetDataByValue")});var Zf=I((Gbe,qU)=>{"use strict";var Fbe=$s(),N5=lu(),w5=ae(),I5=(H(),P($)),C5=Bm();qU.exports=P5;async function P5(e,t){if(!w5.isEmpty(t)&&I5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N5(e,"value");if(n)throw n;return C5.prepSearch(e,t,!1)}a(P5,"lmdbSearchByValue")});var VU=I((Vbe,$U)=>{"use strict";var $be=vt(),gy=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Sy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Ty=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};$U.exports={SearchByConditionsObject:gy,SearchCondition:Sy,SortAttribute:Ty}});var QU=I((zbe,zU)=>{"use strict";var Ybe=VU().SearchByConditionsObject,D5=$s(),L5=lu(),Ay=cu(),Hm=vt(),{Resource:Wbe}=(Jo(),P(TA)),WU=Bm(),M5=_y(),v5=require("lodash"),{getSchemaPath:U5}=Et(),KU=ut(),{handleHDBError:x5,hdb_errors:B5}=he(),{HTTP_STATUS_CODES:H5}=B5,k5=1e8;zU.exports=F5;async function F5(e){let t=L5(e,"conditions");if(t)throw x5(t,t.message,H5.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=U5(e.schema,e.table),n=await KU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)KU.openDBI(n,u.search_attribute);let i=v5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Hm.SEARCH_TYPES.EQUALS?u.estimated_count=Ay.count(n,u.search_attribute,u.search_value):f===Hm.SEARCH_TYPES.CONTAINS||f===Hm.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=k5}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await YU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(WU.filterByType),d=f.length,h=Ay.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let p=0;p<d;p++)if(!f[p](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>M5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await YU(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=Ay.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F5,"lmdbSearchByConditions");async function YU(e,t,r,n){let s=new D5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Hm.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,WU.searchByType(e,s,i,n).map(o=>o.value)}a(YU,"executeConditionSearch")});var e_=I((jbe,jU)=>{"use strict";var G5=(H(),P($)).OPERATIONS_ENUM,Ry=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=G5.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};jU.exports=Ry});var yy=I((Xbe,s0)=>{"use strict";var e0=$s(),t0=e_(),r0=Zf(),n0=Qf(),mn=(H(),P($)),JU=ae(),XU=ut(),{getTransactionAuditStorePath:q5,getSchemaPath:$5}=Et(),ZU=Q();s0.exports=V5;async function V5(e){try{if(JU.isEmpty(global.hdb_schema[e.schema])||JU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K5(e),await Y5(e);let t=$5(e.schema,e.table);try{await XU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ZU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=q5(e.schema,e.table);await XU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ZU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V5,"lmdbDropTable");async function K5(e){let t=new e0(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await r0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new t0(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await n0(s)}a(K5,"deleteAttributesFromSystem");async function Y5(e){let t=new e0(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await r0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new t0(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await n0(s)}catch(i){throw i}}a(Y5,"dropTableFromSystem")});var o0=I((eOe,i0)=>{"use strict";var W5=require("fs-extra"),z5=$s(),Q5=uu(),j5=e_(),J5=yy(),X5=Qf(),Z5=py(),e9=Zf(),ao=(H(),P($)),{getSchemaPath:t9}=Et(),{handleHDBError:r9,hdb_errors:n9}=he(),{HDB_ERROR_MSGS:s9,HTTP_STATUS_CODES:i9}=n9;i0.exports=o9;async function o9(e){let t;try{t=await a9(e.schema);let r=new z5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await e9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await J5(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await X5(s);let i=t9(t);await W5.remove(i)}catch(r){throw r}}a(o9,"lmdbDropSchema");async function a9(e){let t=new Q5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Z5(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw r9(new Error,s9.SCHEMA_NOT_FOUND(e),i9.NOT_FOUND,void 0,void 0,!0);return n}a(a9,"validateDropSchema")});var t_=I((rOe,a0)=>{"use strict";var by=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};a0.exports=by});var Ny=I((iOe,c0)=>{"use strict";var c9=require("fs-extra"),km=ut(),{getTransactionAuditStorePath:l9}=Et(),Oy=vt(),sOe=t_();c0.exports=u9;async function u9(e){let t;try{let r=l9(e.schema,e.table);await c9.mkdirp(r),t=await km.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{km.createDBI(t,Oy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),km.createDBI(t,Oy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),km.createDBI(t,Oy.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(u9,"createTransactionsAuditEnvironment")});var d0=I((cOe,u0)=>{"use strict";var wy=(H(),P($)),l0=ut(),d9=pc(),{getSystemSchemaPath:f9,getSchemaPath:_9}=Et(),aOe=Zi(),h9=fm(),Iy=dm(),p9=Q(),m9=Ny();u0.exports=E9;async function E9(e,t){let r=_9(t.schema,t.table),n=new Iy(t.schema,t.table,wy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Iy(t.schema,t.table,wy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Iy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await l0.createEnvironment(r,t.table),e!==void 0){let o=await l0.openEnvironment(f9(),wy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await d9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Cy(n),await Cy(s),await Cy(i)}await m9(t)}catch(o){throw o}}a(E9,"lmdbCreateTable");async function Cy(e){try{await h9(e)}catch(t){p9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Cy,"createAttribute")});var _0=I((uOe,f0)=>{"use strict";var g9=Pf(),S9=nf(),T9=Dm(),r_=(H(),P($)),A9=pc().updateRecords,R9=ut(),{getSchemaPath:y9}=Et(),b9=Wf(),O9=Q();f0.exports=N9;async function N9(e){try{let{schema_table:t,attributes:r}=g9(e);S9(e,r,t.hash_attribute),e.schema!==r_.SYSTEM_SCHEMA_NAME&&(r.includes(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await T9(e.hdb_auth_header,t,r),s=y9(e.schema,e.table),i=await R9.openEnvironment(s,e.table),o=await A9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await b9(e,o)}catch(c){O9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(N9,"lmdbUpdateRecords")});var p0=I((fOe,h0)=>{"use strict";var w9=(H(),P($)).OPERATIONS_ENUM,Py=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=w9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};h0.exports=Py});var E0=I((pOe,m0)=>{"use strict";var hOe=p0(),I9=Pf(),C9=nf(),P9=Dm(),n_=(H(),P($)),D9=pc().upsertRecords,L9=ut(),{getSchemaPath:M9}=Et(),v9=Wf(),U9=Q(),{handleHDBError:x9,hdb_errors:B9}=he();m0.exports=H9;async function H9(e){let t;try{t=I9(e)}catch(l){throw x9(l,l.message,B9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;C9(e,n,r.hash_attribute),e.schema!==n_.SYSTEM_SCHEMA_NAME&&(n.includes(n_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(n_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(n_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(n_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await P9(e.hdb_auth_header,r,n),i=M9(e.schema,e.table),o=await L9.openEnvironment(i,e.table),c=await D9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await v9(e,c)}catch(l){U9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(H9,"lmdbUpsertRecords")});var S0=I((EOe,g0)=>{"use strict";var Dy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};g0.exports=Dy});var A0=I((SOe,T0)=>{"use strict";var Ly=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};T0.exports=Ly});var b0=I((ROe,y0)=>{"use strict";var My=ut(),{getTransactionAuditStorePath:k9}=Et(),AOe=S0(),s_=vt(),F9=ae(),R0=A0(),G9=require("util").promisify,q9=G9(setTimeout),$9=1e4,V9=100;y0.exports=K9;async function K9(e){let t=k9(e.schema,e.table),r=await My.openEnvironment(t,e.table,!0),n=My.listDBIs(r);My.initializeDBIs(r,s_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new R0;do s=await Y9(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 q9(V9);while(s.transactions_deleted>0);return i}a(K9,"deleteAuditLogsBefore");async function Y9(e,t){let r=new R0;try{let n=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[s_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];F9.isEmpty(c)||(s=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$9)break}return await s,r}catch(n){throw n}}a(Y9,"deleteTransactions")});var N0=I((bOe,O0)=>{"use strict";var vy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};O0.exports=vy});var I0=I((wOe,w0)=>{"use strict";var W9=$s(),z9=e_(),NOe=N0(),wi=(H(),P($)),Q9=ae(),Uy=ut(),j9=Zi(),J9=Zf(),X9=Qf(),{getSchemaPath:Z9}=Et();w0.exports=e7;async function e7(e,t=!0){let r;e.schema===wi.SYSTEM_SCHEMA_NAME?r=j9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await r7(e),s=Z9(e.schema,e.table),i=await Uy.openEnvironment(s,e.table);return t===!0&&await t7(e,i,r.hash_attribute),Uy.dropDBI(i,e.attribute),n}a(e7,"lmdbDropAttribute");async function t7(e,t,r){let n=Uy.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(t7,"removeAttributeFromAllObjects");async function r7(e){let t=new W9(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await J9(t)).filter(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Q9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new z9(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return X9(i)}a(r7,"dropAttributeFromSystem")});var v0=I((POe,M0)=>{"use strict";var xy=ut(),du=vt(),COe=cn(),By=(H(),P($)),C0=ae(),{getTransactionAuditStorePath:n7}=Et(),s7=cu(),Fm=iu(),i7=Q();M0.exports=o7;async function o7(e){let t=n7(e.schema,e.table),r=await xy.openEnvironment(t,e.table,!0),n=xy.listDBIs(r);xy.initializeDBIs(r,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case By.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return P0(r,e.search_values);case By.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,c7(r,e.search_values,s);case By.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return a7(r,e.search_values);default:return P0(r)}}a(o7,"readAuditLog");function P0(e,t=[0,Date.now()]){C0.isEmpty(t[0])&&(t[0]=0),C0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[du.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 Fm,s))}a(P0,"searchTransactionsByTimestamp");function a7(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,L0(e,i))}return Object.fromEntries(r)}a(a7,"searchTransactionsByUsername");function c7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=s7.equals(e,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,du.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=L0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);D0(l,"records",r,f,o),D0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(c7,"searchTransactionsByHashValues");function D0(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new Fm(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new Fm(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(D0,"loopRecords");function L0(e,t){let r=[];try{let n=e.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Fm,i);r.push(o)}}catch(i){i7.warn(i)}return r}catch(n){throw n}}a(L0,"batchSearchTransactions")});var x0=I((vOe,U0)=>{"use strict";var{getSchemaPath:LOe}=Et(),MOe=ut(),{database:l7}=(Me(),P(st));U0.exports={writeTransaction:u7};async function u7(e,t,r){return l7({database:e,table:t}).transaction(r)}a(u7,"writeTransaction")});var F0=I((xOe,k0)=>{"use strict";var{getSchemaPath:B0}=Et(),H0=ut();k0.exports={flush:d7,resetReadTxn:f7};async function d7(e,t){return(await H0.openEnvironment(B0(e,t),t.toString())).flushed}a(d7,"flush");async function f7(e,t){try{(await H0.openEnvironment(B0(e,t),t.toString())).resetReadTxn()}catch{}}a(f7,"resetReadTxn")});var V0=I((HOe,$0)=>{"use strict";var{Readable:_7}=require("stream"),{getDatabases:h7}=(Me(),P(st)),{readSync:p7,openSync:m7,createReadStream:G0}=require("fs"),{open:E7}=require("lmdb"),q0=yf(),g7=bf(),{AUDIT_STORE_OPTIONS:S7}=(Ji(),P(K0)),{INTERNAL_DBIS_NAME:T7,AUDIT_STORE_NAME:A7}=vt();$0.exports=y7;var Hy=32768,R7=100;async function y7(e){let t=e.database||e.schema||"data",r=h7()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=E7({noSync:!0,maxDbs:g7.MAX_DBS}),h,_=d.openDB(T7,new q0(!1)),p=f.useReadTransaction(),S=0,g=a(async function(E,R){R.encoding="binary",R.encoder=void 0;let N=d.openDB(E,R),v=f.openDB(E,R);for(let{key:k,version:F,value:K}of v.getRange({start:null,transaction:p,versions:v.useVersions}))h=N.put(k,K,F),S++%R7===0&&(await new Promise(re=>setTimeout(re,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:E,value:R}of f.getRange({transaction:p,start:!1}))if(s.some(N=>E.startsWith?.(N+"/"))){_.put(E,R);let[,N]=E.split("/"),v=!N,k=new q0(!v,v);await g(E,k)}e.include_audit&&await g(A7,{...S7}),await h;let A=G0(d.path);return A.headers=l(),A.on("close",()=>{p.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=m7(o.path);return o.transaction(()=>{let u=Buffer.alloc(Hy);p7(c,u,0,Hy),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=G0(null,{fd:c,start:Hy}),h=new _7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(y7,"getBackup")});var z0=I((FOe,W0)=>{"use strict";var b7=Q(),{handleHDBError:O7}=he(),N7=nL(),w7=fm(),I7=cy(),C7=oU(),P7=Qf(),D7=py(),L7=LU(),M7=GU(),v7=Zf(),U7=QU(),x7=o0(),B7=d0(),H7=_0(),k7=E0(),F7=b0(),G7=yy(),q7=I0(),$7=v0(),V7=x0(),Y0=F0(),K7=V0(),ky=class extends N7{static{a(this,"LMDBBridge")}async searchByConditions(t){return U7(t)}async getDataByHash(t){return await D7(t)}async searchByHash(t){return await L7(t)}async getDataByValue(t,r){return await M7(t,r)}async searchByValue(t){return await v7(t)}async createSchema(t){return await C7(t)}async dropSchema(t){return await x7(t)}async createTable(t,r){return await B7(t,r)}async dropTable(t){return await G7(t)}async createAttribute(t){return await w7(t)}async createRecords(t){return await I7(t)}async updateRecords(t){return await H7(t)}async upsertRecords(t){try{return await k7(t)}catch(r){throw O7(r,null,null,b7.ERR,r)}}async deleteRecords(t){return await P7(t)}async dropAttribute(t){return await q7(t)}async deleteAuditLogsBefore(t){return await F7(t)}async readAuditLog(t){return await $7(t)}writeTransaction(t,r,n){return V7.writeTransaction(t,r,n)}flush(t,r){return Y0.flush(t,r)}resetReadTxn(t,r){return Y0.resetReadTxn(t,r)}getBackup(t){return K7(t)}};W0.exports=ky});var Gy={};ve(Gy,{add:()=>Gm,applyReverse:()=>Q0,getRecordAtTime:()=>Fy,rebuildUpdateBefore:()=>qm});function Gm(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 qm(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,Gm(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Q0(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Y7[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=j0}}function Fy(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=bt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Q0(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===j0&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=bt(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Y7,j0,$m=be(()=>{Ji();a(Gm,"add");Gm.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)};Y7={add:Gm};a(qm,"rebuildUpdateBefore");a(Q0,"applyReverse");j0={};a(Fy,"getRecordAtTime")});function En(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Wm(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a number, attempt to assign ${h}`);En(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be a number, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Kn.ClientError(`${l} must be a Date, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof Ei||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){En(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be an object, attempt to assign ${d}`);En(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let p=this.getRecord()?.[l];return _.update(p)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=qy(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Kn.ClientError("Can not add a property to a sealed table schema");En(this)[c]=l}),i("deleteProperty",function(c){En(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,X0);break}o=c}while(o&&o!==X0)}function qy(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends i_{static{a(this,"TrackedObject")}},Wm(r,t)),new r(e)):new i_(e);case Array:let n=new Km(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=qy(o,t?.elements)),n[s]=o}return n;default:return e}}function zm(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=zm(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 Pc(e,t=e.getChanges?.()){let r;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Pc(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Gy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Pc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)W7.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function Vm(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Cc]||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(Vm(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(Vm(s))return!0}else return!0}else return!0}}return!1}var Kn,J0,X0,i_,W7,Cc,Km,Ym,$y=be(()=>{Kn=M(he());$m();ls();a(En,"getChanges");a(Wm,"assignTrackedAccessors");J0=Object.prototype,X0=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(J0[t])return J0[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=qy(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(qy,"trackObject");i_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Wm(i_,{});a(zm,"collapseData");W7=Object.prototype.hasOwnProperty;a(Pc,"updateAndFreeze");a(Vm,"hasChanges");Cc=Symbol.for("has-array-changes"),Km=class extends Array{static{a(this,"TrackedArray")}#e;[Cc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Cc]=!0,super.splice(...t)}push(...t){return this[Cc]=!0,super.push(...t)}pop(){return this[Cc]=!0,super.pop()}unshift(...t){return this[Cc]=!0,super.unshift(...t)}shift(){return this[Cc]=!0,super.shift()}};Km.prototype.constructor=Array;Ym=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var ox={};ve(ox,{ResourceBridge:()=>Yy});function Wy({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 ex(e,t){let r=Ii(e),n=Wy(e,r);if(!r)throw new Vs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;yt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&zm(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ii(e){let t=e.database||e.schema||Q7,r=Je()[t];if(!r)throw(0,Vs.handleHDBError)(new Error,z7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function tx(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*rx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var nx,Qm,Vs,sx,Vy,Ky,ix,z7,Q7,j7,J7,Z0,Yy,ax=be(()=>{"use strict";nx=M(z0()),Qm=M(lu()),Vs=M(he());Me();sx=M(Pf());H();Vy=M(io()),Ky=M(qs()),ix=M(ae());rc();$y();({HDB_ERROR_MSGS:z7}=Vs.hdb_errors),Q7="data",j7=1e4,J7=10,Yy=class extends nx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Z0=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,Qm.default)(t,"conditions");if(r)throw(0,Vs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ii(t);if(!n)throw new Vs.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Wy(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Vs.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}]}ct({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ii(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ii(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ii(t).dropTable()}createSchema(t){return fu({database:t.schema,table:null}),Vy.signalSchemaChange(new Ky.SchemaEventMsg(process.pid,qt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zy(t.schema),Vy.signalSchemaChange(new Ky.SchemaEventMsg(process.pid,qt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Z0.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,sx.default)(t),s,i=Je()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),yt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=zm(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let p=f[_];if(typeof p=="function")try{let S=p([[h]]);Array.isArray(S)&&(p=S[0].func_val,f[_]=p)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Je()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),yt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return tx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Je()[t.schema][t.table];if(!r.createdTimeProperty)throw new Vs.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:Rp.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,ix.async_set_timeout)(J7),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%j7===0&&await u();return l.length>0&&await u(),s?tx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Qm.default)(t,"hashes");if(r)throw r;return ex(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ex(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ZT[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Qm.default)(t,"value");if(n)throw n;let s=Ii(t);if(!s)throw new Vs.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Rp.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:Wy(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ii(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ii({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ii(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ii(t),n={};switch(t.search_type){case yp.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case yp.USERNAME:let s=t.search_values;for await(let i of rx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return rx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Wy,"getSelect");a(ex,"getRecords");a(Ii,"getTable");a(tx,"createDeleteResponse");a(rx,"groupRecordsInHistory")});var kn=I((ZOe,cx)=>{"use strict";var{ResourceBridge:X7}=(ax(),P(ox)),Z7=le();Z7.initSync();var jm;function eee(){return jm||(jm=new X7,jm)}a(eee,"getBridge");cx.exports=eee()});var pn=I((tNe,fx)=>{"use strict";var Xm=xA(),Cr=ae(),tee=require("util"),Zm=kn(),ree=ks(),lx=Q(),{handleHDBError:Dc,hdb_errors:nee}=he(),{HTTP_STATUS_CODES:Lc}=nee,see=tee.promisify(ree.getTableSchema),iee="updated",ux="inserted",dx="upserted";fx.exports={insert:aee,update:cee,upsert:lee,validation:oee,flush:uee};async function oee(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await see(e.schema,e.table),r=Xm(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw lx.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(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw lx.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(oee,"validation");async function aee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.createRecords(e);return Jm(ux,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(aee,"insertData");async function cee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Jm(iee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Jm(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(cee,"updateData");async function lee(e){if(e.operation!=="upsert")throw Dc(new Error,"invalid operation, must be upsert",Lc.INTERNAL_SERVER_ERROR);let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.upsertRecords(e);return Jm(dx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(lee,"upsertData");function Jm(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===ux?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Jm,"returnObject");function uee(e){return Cr.transformReq(e),Zm.flush(e.schema,e.table)}a(uee,"flush")});var gx=I((nNe,Ex)=>{var _u=require("validate.js"),hx=lt(),hu=(H(),P($)),{handleHDBError:dee,hdb_errors:fee}=he(),{HDB_ERROR_MSGS:Kt,HTTP_STATUS_CODES:_ee}=fee,Qy=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),hee={STRUCTURE_USER:"structure_user"},_x=Object.values(hu.ROLE_TYPES_ENUM),pee="attribute_permissions",mee="attribute_name",{PERMS_CRUD_ENUM:pu}=hu,Eee=[pee,...Object.values(pu)],px=[pu.READ,pu.INSERT,pu.UPDATE],gee=[mee,...px];function See(e){let t=Qy();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,mx(e,t)}a(See,"addRoleValidation");function Tee(e){let t=Qy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,mx(e,t)}a(Tee,"alterRoleValidation");function Aee(e){let t=Qy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,hx.validateObject(e,t)}a(Aee,"dropRoleValidation");var Ree=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function mx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Ree.includes(n[o])||s.push(n[o]);s.length>0&&tr(Kt.INVALID_ROLE_JSON_KEYS(s),r);let i=hx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{tr(o,r)}),e.permission){let o=yee(e);o&&tr(o,r),_x.forEach(c=>{e.permission[c]&&!_u.isBoolean(e.permission[c])&&tr(Kt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(_x.indexOf(o)<0){if(o===hee.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||tr(Kt.SCHEMA_NOT_FOUND(d),r)}continue}tr(Kt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){tr(Kt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){tr(Kt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{Eee.includes(f)||tr(Kt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(pu).forEach(f=>{_u.isDefined(u[f])?_u.isBoolean(u[f])||tr(Kt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):tr(Kt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){tr(Kt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){tr(Kt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!gee.includes(S)&&S!==pu.DELETE&&tr(Kt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!_u.isDefined(_.attribute_name)){tr(Kt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let p=_.attribute_name;if(!f.includes(p)){tr(Kt.INVALID_ATTRIBUTE_IN_PERMS(p),r,o,l);continue}px.forEach(S=>{_u.isDefined(_[S])?_u.isBoolean(_[S])||tr(Kt.ATTR_PERM_NOT_BOOLEAN(S,p),r,o,l):tr(Kt.ATTR_PERM_MISSING(S,p),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;tr(Kt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return bee(r)}a(mx,"customValidate");Ex.exports={addRoleValidation:See,alterRoleValidation:Tee,dropRoleValidation:Aee};function yee(e){let{operation:t,permission:r}=e;if(t===hu.OPERATIONS_ENUM.ADD_ROLE||t===hu.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 Kt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?hu.ROLE_TYPES_ENUM.SUPER_USER:hu.ROLE_TYPES_ENUM.CLUSTER_USER;return Kt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(yee,"validateNoSUPerms");function bee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Kt.ROLE_PERMS_ERROR,...e};return dee(new Error,n,_ee.BAD_REQUEST)}else return null}a(bee,"generateRolePermResponse");function tr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(tr,"addPermError")});var a_=I((oNe,Rx)=>{"use strict";var Sx=pn(),Tx=Vr(),Oee=Tc(),Jy=gx(),Xy=io(),iNe=require("uuid").v4,Nee=require("util"),eE=(H(),P($)),wee=ae(),Zy=Tx.searchByValue,Iee=Tx.searchByHash,Cee=Nee.promisify(Oee.delete),Pee=$s(),Dee=uu(),{hdb_errors:Lee,handleHDBError:Mc}=he(),{HDB_ERROR_MSGS:Ax,HTTP_STATUS_CODES:o_}=Lee,{UserEventMsg:eb}=qs();Rx.exports={addRole:Mee,alterRole:vee,dropRole:Uee,listRoles:xee};function jy(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(jy,"scrubRoleDetails");async function Mee(e){let t=Jy.addRoleValidation(e);if(t)throw t;e=jy(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await Zy(r)||[])}catch(i){throw Mc(i)}if(n&&n.length>0)throw Mc(new Error,Ax.ROLE_ALREADY_EXISTS(e.role),o_.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 Sx.insert(s),Xy.signalUserChange(new eb(process.pid)),e=jy(e),e}a(Mee,"addRole");async function vee(e){let t=Jy.alterRoleValidation(e);if(t)throw t;e=jy(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Sx.update(r)}catch(s){throw Mc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Mc(new Error,"Invalid role id",o_.BAD_REQUEST,void 0,void 0,!0);return await Xy.signalUserChange(new eb(process.pid)),e}a(vee,"alterRole");async function Uee(e){let t=Jy.dropRoleValidation(e);if(t)throw Mc(new Error,t,o_.BAD_REQUEST,void 0,void 0,!0);let r=new Dee(eE.SYSTEM_SCHEMA_NAME,eE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Iee(r));if(n.length===0)throw Mc(new Error,Ax.ROLE_NOT_FOUND,o_.NOT_FOUND,void 0,void 0,!0);let s=new Pee(eE.SYSTEM_SCHEMA_NAME,eE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Zy(s)),o=!1;if(wee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Mc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,o_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Cee(c),Xy.signalUserChange(new eb(process.pid)),`${n[0].role} successfully deleted`}a(Uee,"dropRole");async function xee(){return Zy({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(xee,"listRoles")});var tb={};ve(tb,{start:()=>Ox,startOnMainThread:()=>kee});function Ox({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,yx.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Bee.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await Hee(i)}}}async function Hee(e){let t=Je().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,bx.isEqual)(i,e)?void 0:(e.id=r.id,(0,tE.alterRole)(e))}return(0,tE.addRole)(e)}var tE,yx,bx,Bee,kee,Nx=be(()=>{Me();tE=M(a_()),yx=require("yaml"),bx=require("lodash"),Bee=["super_user","cluster_user","structure_user"];a(Ox,"start");a(Hee,"ensureRole");kee=Ox});async function rE(e){let t=(0,Cx.pathToFileURL)(e).toString();return Fee?(c_||(c_=Gee($ee)),(await(await c_).import(t)).namespace):import(t)}async function Gee(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),c_=new Compartment({console,Math,Date,fetch:qee,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Ix.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Gr,tables:Yn,databases:$e})}};let n=await(0,wx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),c_}function qee(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 $ee(){return{Resource:Gr,tables:Yn}}var wx,Ix,Cx,Fee,c_,rb=be(()=>{Jo();Me();wx=require("fs/promises"),Ix=require("path"),Cx=require("url"),Fee=!1;a(rE,"secureImport");a(Gee,"getCompartment");a(qee,"secureOnlyFetch");a($ee,"getGlobalVars")});var sb={};ve(sb,{handleFile:()=>Vee});async function Vee(e,t,r,n){let s=new Map,i=await rE(r);c(i.default)&&n.set((0,nb.dirname)(t),i.default),o(i,(0,nb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var nb,Px=be(()=>{rb();nb=require("path");a(Vee,"handleFile")});var ob={};ve(ob,{start:()=>Kee});function Kee({resources:e}){e.set("login",ib),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var ib,Dx=be(()=>{Jo();a(Kee,"start");ib=class extends Gr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var h_={};ve(h_,{addAnalyticsListener:()=>__,calculateCPUUtilization:()=>jx,diffResourceUsage:()=>Jx,recordAction:()=>rr,recordActionBinary:()=>Wn,setAnalyticsEnabled:()=>Yee});function Yee(e){Kx=e}function Wee(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 zee(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},sE.set(e,o)}function rr(e,t,r,n,s){if(!Kx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=sE.get(i);o?Wee(e,o):zee(i,e,t,r,n,s),nE||Qee()}function Wn(e,t,r,n,s){rr(!!e,t,r,n,s)}function __(e){zx.push(e)}function Qee(){nE=performance.now(),setTimeout(async()=>{let e=performance.now()-nE;nE=0;let t=[],r={time:Date.now(),period:e,threadId:vc.threadId,metrics:t};for(let[s,i]of sE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of Qx){let h=Math.floor(c*d),_=o[h-1];if(h>l){let p=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+p}:S.count+=p}else u.push(p>1?{value:_,count:p}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Xx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:vc.threadId,byThread:!0,...n});for(let s of zx)s(t);sE=new Map,vc.parentPort?vc.parentPort.postMessage({type:Wx,report:r}):tB({report:r})},Yx).unref()}function iE(e,t,r){let n={id:(0,d_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function jx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function Jx(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function jee(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};iE(e,"table-size",l),Uc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function Lx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getAuditSize(),o=Vx.default.statSync(s.primaryStore.env.path).size,c=jee(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};iE(e,"database-size",u),Uc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Uc.warn?.("Error getting DB size metrics",s)}}function Mx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};iE(e,"storage-volume",o),Uc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Uc.warn?.("Error getting DB volumne metrics",s)}}async function Jee(e,t=6e4){let r=cb(),n=Zx(),s=new Promise(E=>{let R=performance.now();setImmediate(()=>{let N=performance.now();N-R>5e3&&Uc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(N-R)+"ms"),R=performance.now()}),n.primaryStore.prefetch([1],()=>{let N=performance.now();N-R>5e3&&Uc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(N-R)+"ms"),E(N-R)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:R}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!R)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:N,threadId:v}=R;for(let k of N||[]){let{path:F,method:K,type:re,metric:oe,count:Z,total:se,distribution:Y,threads:pe,...Te}=k;Z||(Z=1);let Ce=oe+(F?"-"+F:"");K!==void 0&&(Ce+="-"+K),re!==void 0&&(Ce+="-"+re);let me=c.get(Ce);if(me){if(me.threads){let at=me.threads[v];if(at)me=at;else{me.threads[v]={...Te};continue}}me.count||(me.count=1);let jt=me.count;for(let at in Te){let Ar=Te[at];typeof Ar=="number"&&(me[at]=(me[at]*jt+Ar*Z)/(jt+Z))}me.count+=Z,se>=0&&(me.total+=se,me.ratio=me.total/me.count)}else me={period:t,...k},delete me.distribution,c.set(Ce,me),me.byThread&&(me.threads=[],me.threads[v]={...Te},u.push(me));if(Y){Y=Y.map(at=>typeof at=="number"?{value:at,count:1}:at);let jt=l.get(Ce);jt?jt.push(...Y):l.set(Ce,Y)}}await Xx()}for(let E of u){let{path:R,method:N,type:v,metric:k,count:F,total:K,distribution:re,threads:oe,...Z}=E;oe=oe.filter(se=>se);for(let se in Z){if(typeof E[se]!="number")continue;let Y=0;for(let pe of oe){let Te=pe[se];typeof Te=="number"&&(Y+=Te)}E[se]=Y}E.count=oe.length,delete E.threads,delete E.byThread}for(let[E,R]of l){let N=c.get(E);R.sort((at,Ar)=>at.value>Ar.value?1:-1);let v=N.count-1,k=[],F=0,K=0,re;for(let at of Qx){let Ar=v*at;for(;F<Ar;)re=R[K++],F+=re.count,K===1&&F--;let os=R[K>1?K-2:0];re||(re=R[0]),k.push(re.value-(re.value-os.value)*(F-Ar)/re.count)}let[oe,Z,se,Y,pe,Te,Ce,me,jt]=k;Object.assign(N,{p1:oe,p10:Z,p25:se,median:Y,p75:pe,p90:Te,p95:Ce,p99:me,p999:jt})}let d;for(let[E,R]of c)R.id=(0,d_.getNextMonotonicTime)(),R.time=f,n.primaryStore.put(R.id,R,{append:!0}).then(N=>{N||n.primaryStore.put(R.id,R)}),d=!0;let h=Date.now(),{idle:_,active:p}=performance.eventLoopUtilization();if(d||p*10>_){let E=(0,d_.getNextMonotonicTime)(),R={id:E,metric:"main-thread-utilization",idle:_-vx,active:p-Ux,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,R,{append:!0}).then(N=>{N||n.primaryStore.put(E,R)})}vx=_,Ux=p;let S=process.resourceUsage(),g=Jx(l_,S);g.time=h,g.period=l_.time?h-l_.time:t,g.cpuUtilization=jx(l_,g.period),iE(n,"resource-usage",g),l_=g;let A=Je();Lx(n,A),Lx(n,{system:A.system}),Mx(n,A),Mx(n,{system:A.system})}async function xx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function cb(){return Bx||(Bx=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Zx(){return Hx||(Hx=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function ete(){eB=!0;let e=(0,f_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Jee(Yx,e),await xx(cb(),Xee),await xx(Zx(),Zee)},Math.min(e/2,2147483647)).unref()}function tB(e,t){let r=e.report;r.threadId=t?.threadId||vc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(kx+=n.mean*n.count);r.totalBytesProcessed=kx,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Fx.get(t))}),Fx.set(t,t.performance.eventLoopUtilization())),r.id=(0,d_.getNextMonotonicTime)(),cb().primaryStore.put(r.id,r),eB||ete(),tte&&(rB=nte(r))}async function nte(e){if(await rB,!la){let r=(0,u_.dirname)((0,qx.getLogFilePath)());try{la=await(0,ab.open)((0,u_.join)(r,"analytics.log"),"r+")}catch{la=await(0,ab.open)((0,u_.join)(r,"analytics.log"),"w+")}}let t=(await la.stat()).size;if(t>rte){let r=Buffer.alloc(t);await la.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await la.write(r,{position:0}),await la.truncate(r.length),t=r.length}await la.write(JSON.stringify(e)+`
20
- `,t)}var vc,Gx,qx,$x,u_,ab,d_,f_,Vx,Uc,sE,Kx,nE,Yx,Wx,zx,Qx,vx,Ux,l_,Xx,Xee,Zee,Bx,Hx,eB,kx,Fx,tte,rB,la,rte,Ci=be(()=>{vc=require("worker_threads"),Gx=M(tt());Me();qx=M(Q()),$x=M(pi()),u_=require("path"),ab=require("fs/promises"),d_=M(cn()),f_=M(le());H();qr();Vx=M(require("node:fs")),Uc=(0,$x.loggerWithTag)("analytics");(0,f_.initSync)();sE=new Map,Kx=(0,f_.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(Yee,"setAnalyticsEnabled");a(Wee,"recordExistingAction");a(zee,"recordNewAction");a(rr,"recordAction");We.recordAnalytics=rr;a(Wn,"recordActionBinary");nE=0,Yx=1e3,Wx="analytics-report",zx=[];a(__,"addAnalyticsListener");Qx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Qee,"sendAnalytics");a(iE,"storeMetric");a(jx,"calculateCPUUtilization");a(Jx,"diffResourceUsage");a(jee,"storeTableSizeMetrics");a(Lx,"storeDBSizeMetrics");a(Mx,"storeVolumeMetrics");a(Jee,"aggregation");vx=0,Ux=0,l_={},Xx=a(()=>new Promise(setImmediate),"rest");a(xx,"cleanup");Xee=36e5,Zee=31536e6;a(cb,"getRawAnalyticsTable");a(Zx,"getAnalyticsTable");(0,Gx.setChildListenerByType)(Wx,tB);a(ete,"startScheduledTasks");kx=0,Fx=new Map,tte=!1;a(tB,"recordAnalytics");rte=1e6;a(nte,"logAnalytics")});var nB={};ve(nB,{Headers:()=>co,appendHeader:()=>oE,mergeHeaders:()=>lb});function oE(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 lb(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new co(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 co,p_=be(()=>{co=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(oE,"appendHeader");a(lb,"mergeHeaders")});function cB(e){let t={openapi:ste,info:{title:"HarperDB HTTP REST interface",version:aB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:R,name:N,elements:v,relationship:k,definition:F}of o){if(k)R==="array"?u[N]={type:"array",items:{$ref:ua+v.type}}:u[N]={$ref:ua+R};else{let K=F??v?.definition;if(K){if(!t.components.schemas[K.type]){let re={};K.properties.forEach(oe=>{re[oe.name]=new _b(ub[oe.type],oe.type)}),t.components.schemas[K.type]=new oB(re)}R==="array"?u[N]={type:"array",items:{$ref:ua+K.type}}:u[N]={$ref:ua+K.type}}else R==="array"?v.type==="Any"||v.type=="ID"?u[N]={type:"array",items:{format:v.type}}:u[N]={type:"array",items:new _b(ub[v.type],v.type)}:R==="Any"||R=="ID"?u[N]={format:R}:u[N]=new _b(ub[R],R)}f.push(new hb(N,"query",u[N]))}let d=Object.keys(u),h=new hb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new hb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new oB(u);let p=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",A=typeof l.delete=="function",E="/"+s+"/";p&&(t.paths[E]={},t.paths[E].post=new ite(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new db(f,r,{200:new fb({$ref:ua+i})},"search for records by the specified property name and value pairs")),A&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new iB(f,r,"delete all the records that match the provided query",{204:new sB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new db([h],r,{200:new fb({$ref:ua+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new ote([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),A&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new iB([h],r,"delete a record with the given primary key",{204:new sB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new db([h,_],r,{200:new fb({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function ite(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ua+e}}}},this.security=t,this.responses={200:{description:pb,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function db(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function fb(e){this.description=pb,this.content={"application/json":{schema:e}}}function sB(){this.description="successfully processed request, no content returned to client"}function ote(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ua+r}}}},this.responses={200:{description:pb}}}function iB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function oB(e){this.type="object",this.properties=e}function _b(e,t){this.type=e,this.format=t}function hb(e,t,r){this.name=e,this.in=t,this.schema=r}var aB,ste,ub,ua,pb,lB=be(()=>{aB=M(mt()),ste="3.0.3",ub={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ua="#/components/schemas/",pb="successful operation";a(cB,"generateJsonApi");a(ite,"Post");a(db,"Get");a(fb,"Response200");a(sB,"Response204");a(ote,"Put");a(iB,"Delete");a(oB,"ResourceSchema");a(_b,"Type");a(hb,"Parameter")});var cE={};ve(cE,{parseHeaderValue:()=>Eb,start:()=>lte});async function cte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Fp(e);let i=new co;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==uB){let g=aE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new nc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=Eb(g);for(let E of A)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=Eb(u).map(A=>(A.next?.name==="confirm"&&A.next.value>=0&&(e.replicatedConfirmation=+A.next.value),A.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await yt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Qi(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new mu.ClientError(g,400)}if(e.authorize=!0,o===uB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return cB(aE);throw new mu.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new mu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new mu.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,mb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=lb(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=pf(d.data,e,d)),d}else if(_=e.lastModified){ate[0]=_;let g=String.fromCharCode(34,(Pr[0]&63)+62,(Pr[0]>>6)+(Pr[1]<<2&63)+62,(Pr[1]>>4)+(Pr[2]<<4&63)+62,(Pr[2]>>2)+62,(Pr[3]&63)+62,(Pr[3]>>6)+(Pr[4]<<2&63)+62,(Pr[4]>>4)+(Pr[5]<<4&63)+62,(Pr[5]>>2)+62,(Pr[6]&63)+62,(Pr[6]>>6)+(Pr[7]<<2&63)+62,34),A=r["if-none-match"];A&&g==A?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),mb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(p.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(p.body=pf(d,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(o){o.statusCode?o.statusCode===500?Pi.warn(o):Pi.info(o):Pi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=pf(o.contentType?o:o.toString(),e,c),c}}function lte(e){mb=e,!dB&&(dB=!0,aE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return cte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{m_++;let s=new Dn;fB||(fB=!0,__(l=>{m_>0&&l.push({metric:"ws-connections",connections:m_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Pi.warn(l)});let o;t.on("message",a(function(u){o||(o=Qi(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);rr(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{m_--,Wn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=aE.getMatch(l,"ws");if(Wn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,rr(p=>({count:p.count,total:m_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new nc(u.relativeURL),d=u.Resource;c=(await yt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let p=await ea(_.value,r);t.send(p),rr(p.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Pi.warn(l):Pi.info(l):Pi.error(l),t.close(ute[l.statusCode]||1011,l.toString())}t.close()},e))}function Eb(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Pi,mu,Pr,ate,mb,uB,dB,aE,fB,m_,ute,_B=be(()=>{ji();Ci();Pi=M(Q()),mu=M(he());lf();Fl();rc();p_();lB();lf();Pr=new Uint8Array(8),ate=new Float64Array(Pr.buffer,0,1),mb={},uB="openapi";a(cte,"http");m_=0;a(lte,"start");ute={401:3e3,403:3003};a(Eb,"parseHeaderValue")});var gb=I((UNe,pB)=>{var{recordAction:lE,recordActionBinary:hB}=(Ci(),P(h_)),dte=require("fastify-plugin"),fte=200;pB.exports=dte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),lE(o,"duration",u,d,f),hB(s.raw.statusCode<400,"success",u,d,f),hB(1,"response_"+s.raw.statusCode,u,d,f);let h=fte;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{lE(performance.now()-c,"transfer",u,d,f),lE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,lE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),p=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",p?`${p}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var EB=I((xNe,mB)=>{var _te=lt(),hte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};mB.exports=function(e){return _te.validateObject(e,hte)}});var uE=I((BNe,gB)=>{"use strict";var pte=(H(),P($)).OPERATIONS_ENUM,Sb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=pte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gB.exports=Sb});var S_={};ve(S_,{createTokens:()=>Ete,getJWTRSAKeys:()=>pE,refreshOperationToken:()=>gte,validateOperationToken:()=>Rb,validateRefreshToken:()=>mE});async function pE(){if(dE)return dE;try{let e=E_.default.join(g_.default.getHdbBasePath(),jT),t=await fE.default.readFile(E_.default.join(e,Yd.JWT_PASSPHRASE_NAME),"utf8"),r=await fE.default.readFile(E_.default.join(e,Yd.JWT_PRIVATE_KEY_NAME),"utf8");return dE={publicKey:await fE.default.readFile(E_.default.join(e,Yd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},dE}catch(e){throw hE.default.error(e),new Ks.ClientError(gu.NO_ENCRYPTION_KEYS,Eu.INTERNAL_SERVER_ERROR)}}async function Ete(e){let t=(0,Tb.validateBySchema)(e,Di.default.object({username:Di.default.string().optional(),password:Di.default.string().optional(),role:Di.default.string().optional(),expires_in:Di.default.alternatives(Di.default.string(),Di.default.number()).optional()}));if(t)throw new Ks.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,Ab.findAndValidateUser)(e.username,e.password,d)}catch(d){throw hE.default.error(d),new Ks.ClientError(gu.INVALID_CREDENTIALS,Eu.UNAUTHORIZED)}if(!r)throw new Ks.ClientError(gu.INVALID_CREDENTIALS,Eu.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await pE(),c=await Su.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??yB,algorithm:_E,subject:"operation"}),l=await Su.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:mte,algorithm:_E,subject:"refresh"}),u=xR(l,"sha256");if((await(0,SB.update)(new TB.default(Kd,Hl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ks.ClientError(gu.REFRESH_TOKEN_SAVE_FAILED,Eu.INTERNAL_SERVER_ERROR);return AB.default.signalUserChange(new RB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function gte(e){let t=(0,Tb.validateBySchema)(e,Di.default.object({refresh_token:Di.default.string().required()}).required());if(t)throw new Ks.ClientError(t.message);let{refresh_token:r}=e;await mE(r);let n=await pE(),s=await Su.default.decode(r);return{operation_token:await Su.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:yB,algorithm:_E,subject:"operation"})}}async function Rb(e){return bB(e,"operation")}async function mE(e){return bB(e,"refresh")}async function bB(e,t){try{let r=await pE(),n=await Su.default.verify(e,r.publicKey,{algorithms:_E,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,Ab.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!BR(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw hE.default.warn(r),r?.name==="TokenExpiredError"?new Ks.ClientError(gu.TOKEN_EXPIRED,Eu.FORBIDDEN):new Ks.ClientError(gu.INVALID_TOKEN,Eu.UNAUTHORIZED)}}var Su,fE,E_,Di,Tb,Ks,hE,Ab,SB,TB,AB,RB,g_,Eu,gu,yB,mte,_E,dE,Tu=be(()=>{Su=M(require("jsonwebtoken")),fE=M(require("fs-extra")),E_=M(require("node:path")),Di=M(require("joi")),Tb=M(lt());H();Ks=M(he()),hE=M(Q());Rm();Ab=M(qn()),SB=M(pn()),TB=M(uE()),AB=M(io()),RB=M(qs()),g_=M(le()),{HTTP_STATUS_CODES:Eu,AUTHENTICATION_ERROR_MSGS:gu}=Ks.hdb_errors;g_.default.initSync();yB=g_.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",mte=g_.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",_E="RS256";a(pE,"getJWTRSAKeys");a(Ete,"createTokens");a(gte,"refreshOperationToken");a(Rb,"validateOperationToken");a(mE,"validateRefreshToken");a(bB,"validateToken")});var yb=I((qNe,wB)=>{"use strict";var Ste=EB(),Au=require("passport"),Tte=require("passport-local").Strategy,Ate=require("passport-http").BasicStrategy,Rte=require("util"),yte=qn(),NB=Rte.callbackify(yte.findAndValidateUser),GNe=Pn(),bte=(H(),P($)),OB=(Tu(),P(S_));Au.use(new Tte(function(e,t,r){NB(e,t,r)}));Au.use(new Ate(function(e,t,r){NB(e,t,r)}));Au.serializeUser(function(e,t){t(null,e)});Au.deserializeUser(function(e,t){t(null,e)});function Ote(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Au.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===bte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?OB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):OB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Au.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Ote,"authorize");function Nte(e,t){let r=Ste(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(Nte,"checkPermissions");wB.exports={authorize:Ote,checkPermissions:Nte}});var EE=I((VNe,IB)=>{"use strict";var wte=kn();IB.exports={writeTransaction:Ite};function Ite(e,t,r){return wte.writeTransaction(e,t,r)}a(Ite,"writeTransaction")});var LB=I((WNe,DB)=>{"use strict";var Cte=Vr(),Pte=ks(),CB=Q(),Dte=pn(),YNe=EE(),Lte=require("clone"),Ob=require("alasql"),Mte=hm(),PB=require("util"),vte=PB.promisify(Pte.getTableSchema),Ute=PB.promisify(Cte.search),xte=(H(),P($)),bb=ae();Mte(Ob);DB.exports={update:Hte};var Bte="There was a problem performing this update. Please check the logs and try again.";async function Hte({statement:e,hdb_user:t}){let r=await vte(e.table.databaseid,e.table.tableid),n=kte(e.columns);bb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Lte(s),c=bb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=Ob.parse(l).statements[0],f=await Ute(u),d=Fte(n,f);return Gte(o,d,t)}a(Hte,"update");function kte(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Ob.compile(`SELECT ${r.expression.toString()} AS [${xte.FUNC_VAL}] FROM ?`)}),t}catch(t){throw CB.error(t),new Error(Bte)}}a(kte,"createUpdateRecord");function Fte(e,t){return bb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Fte,"buildUpdateRecords");async function Gte(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Dte.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){CB.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Gte,"updateRecords")});var vB=I((JNe,MB)=>{var qte=require("alasql"),$te=Vr(),Vte=Q(),Kte=kn(),wb=require("util"),Nb=ae(),Yte=(H(),P($)),Wte=ks(),QNe=EE(),jNe=pn(),zte="record",Qte="successfully deleted",jte=wb.callbackify(ere),Jte=wb.promisify($te.search),Xte=wb.promisify(Wte.getTableSchema);MB.exports={convertDelete:jte};function Zte(e){return`${e.deleted_hashes.length} ${zte}${e.deleted_hashes.length===1?"":"s"} ${Qte}`}a(Zte,"generateReturnMessage");async function ere({statement:e,hdb_user:t}){let r=await Xte(e.table.databaseid,e.table.tableid);Nb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Nb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=qte.parse(o).statements[0],l={operation:Yte.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Jte(c);let u=await Kte.deleteRecords(l);return Nb.isEmptyOrZeroLength(u.message)&&(u.message=Zte(u)),delete u.txn_time,u}catch(u){throw Vte.error(u),u.hdb_code?u.message:u}}a(ere,"convertDelete")});var kB=I((ZNe,HB)=>{"use strict";var tre=no(),{hdb_errors:UB}=he(),{getDatabases:xB}=(Me(),P(st));HB.exports={checkSchemaExists:BB,checkSchemaTableExists:rre,schema_describe:tre};async function BB(e){if(!xB()[e])return UB.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(BB,"checkSchemaExists");async function rre(e,t){let r=await BB(e);if(r)return r;if(!xB()[e][t])return UB.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rre,"checkSchemaTableExists")});var Lb=I((swe,JB)=>{"use strict";var{decode:nre}=require("msgpackr"),{isMainThread:twe,parentPort:rwe,threadId:nwe}=require("worker_threads"),TE=hr(),Ru=Ot(),Pb=(H(),P($)),zr=Q(),Cb=le(),sre=(H(),P($)),{onMessageByType:ire}=tt(),$B=ro(),{recordAction:FB,recordActionBinary:ore}=(Ci(),P(h_)),{publishToStream:are}=TE,{ConsumerEvents:GB}=require("nats"),cre=Vr(),{promisify:lre}=require("util"),{decodeBlobsWithWrites:ure}=(ls(),P(bE)),VB=lre(setTimeout),AE=1e4,RE,SE,dre,fre,KB,T_=new Map,yu=new Map;JB.exports={initialize:YB,ingestConsumer:Db,setSubscription:_re,setIgnoreOrigin:mre,getDatabaseSubscriptions:pre,updateConsumer:WB};async function YB(){ire(Pb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await WB(n)}),KB=!0,zr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await TE.getNATSReferences();RE=e,SE=e.info.server_name,dre=t,fre=r}a(YB,"initialize");async function WB(e){if(e.status==="start"){let{js:t,jsm:r}=await zB(e.node_domain_name);Db(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=T_.get(e.stream_name+e.node_domain_name);t&&(zr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),T_.set(e.stream_name+e.node_domain_name,"close")),yu.get(e.node_domain_name)==="failed"&&yu.set(e.node_domain_name,"close")}}a(WB,"updateConsumer");var yE=new Map;function _re(e,t,r){let n=yE.get(e);n||yE.set(e,n=new Map),n.set(t,r),KB||YB().then(hre)}a(_re,"setSubscription");async function hre(){let e=await cre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ru.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await zB(r),!n))break;let{schema:o,table:c}=i,l=$B.createNatsTableStreamName(o,c);Db(l,n,s,r)}}}a(hre,"accessConsumers");async function zB(e){let t,r,n=1;for(;!r;)try{t=await RE.jetstream({domain:e}),r=await RE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(yu.get(e)==="close")break;yu.set(e,"failed"),n%10===1&&zr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<AE?n++*100:AE;await VB(i)}return{js:t,jsm:r}}a(zB,"connectToRemoteJS");function pre(){return yE}a(pre,"getDatabaseSubscriptions");var QB;function mre(e){QB=e}a(mre,"setIgnoreOrigin");var jB=100,qB=new Array(jB),gE=0;async function Db(e,t,r,n){let{connection:s}=await TE.getNATSReferences();RE=s,SE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,SE),zr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(yu.get(n)==="close")break;o%10===1&&zr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(zr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await TE.createConsumer(r,e,SE,new Date(Date.now()).toISOString()));let f=o++*100<AE?o++*100:AE;await VB(f)}let c=!1,l;for(;!c;){if(T_.get(e+n)==="close"||yu.get(n)==="close"){T_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Cb.get(Pb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),T_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===GB.ConsumerDeleted&&(await l.close(),c=!0),f.type===GB.HeartbeatsMissed){let d=f.data;zr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(zr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await qB[gE],qB[gE]=Ere(f).catch(d=>{zr.error(d)}),++gE>=jB&&(gE=0)}catch(f){f.message==="consumer deleted"?(zr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):zr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(Db,"ingestConsumer");async function Ere(e){let t;await ure(()=>{t=nre(e.data)}),FB(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Cb.get(Pb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ru.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ru.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ru.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!QB),ore(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ru.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;zr.trace("processing message:",o,c,u,(f?"records: "+f.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zr.trace(`messageProcessor nats msg id: ${e.headers.get(Ru.MSG_HEADERS.NATS_MSG_ID)}`);let p;f||(f=d);let S=new Promise(v=>p=v),{timestamp:g,user:A,node_name:E}=h||{},R=yE.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=p,R.send(t);else if(f.length===1&&!l)R.send({type:Ib(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:p,user:A,nodeName:E});else{let v=f.map((k,F)=>({type:Ib(o),value:k,expiresAt:_,id:d?.[F],table:u}));for(;l;)v.push({type:Ib(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:v,table:u,timestamp:g,onCommit:p,user:A,nodeName:E})}Cb.get(sre.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&are(e.subject.split(".").slice(0,-1).join("."),$B.createNatsTableStreamName(c,u),e.headers,e.data),await S;let N=Date.now()-g;g&&FB(N,"replication-latency",e.subject,o,"ingest")}catch(o){zr.error(o)}e.ack()}a(Ere,"messageProcessor");function Ib(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Ib,"convertOperation")});var hr=I((dwe,hH)=>{"use strict";var br=le();br.initSync();var gre=require("fs-extra"),Sre=require("semver"),y_=require("path"),{monotonicFactory:Tre}=require("ulidx"),ZB=Tre(),Are=require("util"),eH=require("child_process"),Rre=Are.promisify(eH.exec),yre=eH.spawn,Dr=Ot(),Ve=(H(),P($)),{packageJson:bre,PACKAGE_ROOT:Ore}=mt(),OE=ae(),Ys=Q(),NE=ro(),Nre=EE(),A_=wt(),{broadcast:wre,onMessageByType:Ire,getWorkerIndex:Cre}=tt(),{isMainThread:tH}=require("worker_threads"),{Encoder:Pre,decode:xb}=require("msgpackr"),rH=new Pre,{isEmpty:kc}=OE,nH=qn(),owe=48*36e11;tH&&Ire(Ve.ITC_EVENT_TYPES.RESTART,()=>{Qr=void 0,Hc=void 0});var{connect:Dre,StorageType:Lre,RetentionPolicy:Mre,AckPolicy:Bb,DeliverPolicy:Hb,DiscardPolicy:vre,NatsConnection:awe,JetStreamManager:cwe,JetStreamClient:lwe,StringCodec:uwe,JSONCodec:Ure,createInbox:kb,headers:xre,ErrorCode:XB}=require("nats"),{recordAction:Bre}=(Ci(),P(h_)),{encodeBlobsAsBuffers:Hre}=(ls(),P(bE)),sH=Ure(),kre="clustering",Fre=bre.engines[Dr.NATS_SERVER_NAME],Gre=y_.join(Ore,"dependencies"),Ub=y_.join(Gre,`${process.platform}-${process.arch}`,Dr.NATS_BINARY_NAME),Mb,vb,R_,xc,Bc;hH.exports={runCommand:iH,checkNATSServerInstalled:qre,createConnection:Fb,getConnection:b_,getJetStreamManager:O_,getJetStream:aH,getNATSReferences:Li,getServerList:Vre,createLocalStream:Gb,listStreams:cH,deleteLocalStream:Kre,getServerConfig:bu,listRemoteStreams:Yre,viewStream:Wre,viewStreamIterator:zre,publishToStream:Qre,request:Xre,reloadNATS:qb,reloadNATSHub:Zre,reloadNATSLeaf:ene,extractServerName:Jre,requestErrorHandler:tne,createLocalTableStream:fH,createTableStreams:sne,purgeTableStream:_H,purgeSchemaTableStreams:ine,getStreamInfo:one,updateLocalStreams:cne,closeConnection:$re,getJsmServerName:wE,addNatsMsgHeader:lH,clearClientCache:oH,updateRemoteConsumer:rne,createConsumer:uH,updateConsumerIterator:nne};async function iH(e,t=void 0){let{stdout:r,stderr:n}=await Rre(e,{cwd:t});if(n)throw new Error(n.replace(`
18
+ `)},VX="certificate.pem",KX="privateKey.pem",YX="caCertificate.pem",WX="natsCertificate.pem",zX="natsCaCertificate.pem",Tt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},QX={tls_certificate:Tt.SERVER,tls_certificateAuthority:Tt.CA,customFunctions_tls_certificate:Tt.SERVER,customFunctions_tls_certificateAuthority:Tt.CA,operationsApi_tls_certificate:Tt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Tt["OPERATIONS-CA"]},jX={[Tt.SERVER]:2,[Tt.DEFAULT]:1},JX={[Tt["OPERATIONS-API"]]:3,[Tt.SERVER]:2,[Tt.DEFAULT]:1},XX={[Tt["OPERATIONS-API"]]:3,[Tt.SERVER]:2,[Tt.DEFAULT]:1},ZX={[Tt["OPERATIONS-CA"]]:3,[Tt.CA]:2,[Tt["DEFAULT-CA"]]:1},e6={[Tt["OPERATIONS-CA"]]:3,[Tt.CA]:2,[Tt["DEFAULT-CA"]]:1},t6={[Tt.CA]:2,[Tt["DEFAULT-CA"]]:1};Object.assign(sv,{CERTIFICATE_PEM_NAME:VX,PRIVATEKEY_PEM_NAME:KX,CA_PEM_NAME:YX,CERT_NAME:Tt,CERT_CONFIG_NAME_MAP:QX,CERT_PREFERENCE_APP:jX,CERT_PREFERENCE_OPS:JX,CERT_PREFERENCE_REP:XX,CA_CERT_PREFERENCE_REP:ZX,CA_CERT_PREFERENCE_OPS:e6,CA_CERT_PREFERENCE_APP:t6,CERTIFICATE_VALUES:$X,NATS_CERTIFICATE_PEM_NAME:WX,NATS_CA_PEM_NAME:zX})});var $R=I((Aye,uv)=>{"use strict";var cv=require("fs-extra"),Te=require("joi"),r6=require("os"),{boolean:Be,string:At,number:er,array:Rc}=Te.types(),{totalmem:iv}=require("os"),Ac=require("path"),n6=j(),qR=oe(),Tye=GR(),ov=(H(),D(q)),s6=dt(),av="log",i6="components",o6="Invalid logging.rotation.maxSize unit. Available units are G, M or K",a6="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",c6="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",l6="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",u6="rootPath config parameter is undefined",_n=Te.alternatives([er.min(0),At]).optional().empty(null),ym=Te.alternatives([Rc.items(At,{host:At.required(),port:_n},{hostname:At.required(),port:_n}).empty(null),Rc.items(At)]),yi,lv=!1;uv.exports={configValidator:d6,routesValidator:E6,route_constraints:ym};function d6(e,t=!1){if(lv=t,yi=e.rootPath,qR.isEmpty(yi))throw u6;let r=Be.optional(),n=er.min(0).max(1e3).empty(null).default(m6),s=At.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ff),i=At.optional().empty(null),o=At.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Te.string().empty(null).default(Ff),l=Te.custom(_6).empty(null).default(Ff),u=e.clustering?.enabled,f=Te.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Te.object({enabled:r,hubServer:Te.object({cluster:Te.object({name:Te.required().empty(null),network:Te.object({port:_n,routes:ym}).required()}).required(),leafNodes:Te.object({network:Te.object({port:_n}).required()}).required(),network:Te.object({port:_n}).required()}).required(),leafServer:Te.object({network:Te.object({port:_n,routes:ym}).required(),streams:Te.object({maxAge:er.min(120).allow(null).optional(),maxBytes:er.min(1).allow(null).optional(),maxMsgs:er.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Te.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:Te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Be.required(),verify:Be.optional()}),user:At.optional().empty(null)}).optional():d=Te.object({enabled:r,tls:Te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Be.optional()})}).optional(),Te.object({authentication:Te.alternatives(Te.object({authorizeLocal:Be,cacheTTL:er.required(),enableSessions:Be,hashFunction:At.valid("md5","sha256","argon2id").optional().empty(null)}),Be).optional(),analytics:Te.object({aggregatePeriod:er}),replication:Te.object({hostname:Te.alternatives(At,er).optional().empty(null),url:At.optional().empty(null),port:_n,securePort:_n,routes:Rc.optional().empty(null),databases:Te.alternatives(At,Rc),enableRootCAs:Be.optional(),copyTablesToCatchUp:Be.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Te.object({enabled:r}).required(),logging:Te.object({auditAuthEvents:Te.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:Te.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Te.object({enabled:Be.optional(),compress:Be.optional(),interval:At.custom(p6).optional().empty(null),maxSize:At.custom(h6).optional().empty(null),path:At.optional().empty(null).default(Ff)}).required(),root:s,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:Te.object({network:Te.object({cors:Be.optional(),corsAccessList:Rc.optional(),headersTimeout:er.min(1).optional(),keepAliveTimeout:er.min(1).optional(),port:_n,domainSocket:Te.optional().empty("hdb/operations-server").default(Ff),securePort:_n,timeout:er.min(1).optional()}).optional(),tls:Te.alternatives([Te.array().items(f),f])}).required(),rootPath:At.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Te.object({network:Te.object({port:_n,securePort:_n,mtls:Te.alternatives([Be.optional(),Te.object({user:At.optional(),certificateAuthority:i,required:Be.optional()})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:Te.object({compressionThreshold:er.optional(),cors:Be.optional(),corsAccessList:Rc.optional(),headersTimeout:er.min(1).optional(),port:_n,securePort:_n,maxHeaderSize:er.optional(),mtls:Te.alternatives([Be.optional(),Te.object({user:At.optional(),certificateAuthority:i,required:Be.optional()})]),threadRange:Te.alternatives([Rc.optional(),At.optional()])}).required(),threads:Te.alternatives(n.optional(),Te.object({count:n.optional(),debug:Te.alternatives(Be.optional(),Te.object({startingPort:er.min(1).optional(),host:At.optional(),waitForDebugger:Be.optional()})),maxHeapMemory:er.min(0).optional()})),storage:Te.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Te.alternatives([Be.optional(),Te.object({dictionary:At.optional(),threshold:er.optional()})]),compactOnStart:Be.optional(),compactOnStartKeepBackup:Be.optional(),noReadAhead:Be.optional(),path:l,prefetchWrites:Be.optional(),maxFreeSpaceToLoad:er.optional(),maxFreeSpaceToRetain:er.optional()}).required(),ignoreScripts:Be.optional(),tls:Te.alternatives([Te.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(d6,"configValidator");function f6(e){return lv||cv.existsSync(e)?null:`Specified path ${e} does not exist.`}a(f6,"doesPathExist");function _6(e,t){Te.assert(e,At.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=f6(e);if(r)return t.message(r)}a(_6,"validatePath");function h6(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(o6);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(c6):e}a(h6,"validateRotationMaxSize");function p6(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(a6);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(l6):e}a(p6,"validateRotationInterval");function m6(e,t){let r=t.state.path.join("."),n=r6.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||iv();return i=Math.round(Math.min(i,iv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),n6.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(m6,"setDefaultThreads");function Ff(e,t){let r=t.state.path.join(".");if(!qR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(qR.isEmpty(yi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ac.join(yi,i6);case"logging.root":return Ac.join(yi,av);case"clustering.leafServer.streams.path":return Ac.join(yi,"clustering","leaf");case"storage.path":let n=Ac.join(yi,ov.LEGACY_DATABASES_DIR_NAME);return cv.existsSync(n)?n:Ac.join(yi,ov.DATABASES_DIR_NAME);case"logging.rotation.path":return Ac.join(yi,av);case"operationsApi.network.domainSocket":return r==null?null:Ac.join(yi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ff,"setDefaultRoot");function E6(e){let t=Te.object({routes:ym});return s6.validateBySchema({routes:e},t)}a(E6,"routesValidator")});var It=I(Av=>{"use strict";var ds=(H(),D(q)),hr=oe(),tr=j(),{configValidator:g6,routesValidator:dv}=$R(),Kr=require("fs-extra"),_v=require("yaml"),Fn=require("path"),S6=require("is-number"),hv=require("properties-reader"),T6=require("lodash"),{handleHDBError:A6}=he(),{HTTP_STATUS_CODES:R6,HDB_ERROR_MSGS:tu}=Cn(),{server:y6}=(Gr(),D(Wl)),{PACKAGE_ROOT:pv}=Et(),{DATABASES_PARAM_CONFIG:Gf,CONFIG_PARAMS:kn,CONFIG_PARAM_MAP:ks}=ds,b6="Unable to get config value because config is uninitialized",O6="Config successfully initialized",N6="Error backing up config file",w6="Empty parameter sent to getConfigValue",mv=Fn.join(pv,"config","yaml",ds.HDB_DEFAULT_CONFIG_FILE),I6=Fn.join(pv,"config","yaml","defaultNatsConfig.yaml"),C6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",fv={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"},bm,wt,Om;Object.assign(Av,{createConfigFile:P6,getDefaultConfig:D6,getConfigValue:gv,initConfig:Nm,flattenConfig:ru,updateConfigValue:Sv,updateConfigObject:M6,getConfiguration:x6,setConfiguration:B6,readConfigFile:WR,getClusteringRoutes:H6,initOldConfig:Tv,getConfigFromFile:k6,getConfigFilePath:yc,addConfig:F6,deleteConfigFromFile:G6,getConfigObj:q6,resolvePath:VR,getFlatConfigObj:$6});function VR(e){if(e?.startsWith("~/"))return Fn.join(hr.getHomeDir(),e.slice(1));let t=ce();return Fn.resolve(t.getHdbBasePath(),e)}a(VR,"resolvePath");function P6(e,t=!1){let r=ia(mv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=_v.parseDocument(Kr.readFileSync(I6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}bm=ru(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===kn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=KR(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){tr.error(d)}}}n&&Ev(r,n),YR(r,t);let s=r.toJSON();wt=ru(s);let i=r.getIn(["rootPath"]),o=Fn.join(i,ds.HDB_CONFIG_FILE);if(Kr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Kr.writeFileSync(o,String(r)),tr.trace(`Config file written to ${o}`)}a(P6,"createConfigFile");function Ev(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!hr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Gf.TABLES))for(let i in n[s][Gf.TABLES])for(let o in n[s][Gf.TABLES][i]){let c=n[s][Gf.TABLES][i][o],l=[kn.DATABASES,s,Gf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[kn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){tr.error("Error parsing schemas CLI/env config arguments",n)}}a(Ev,"setSchemasConfig");function D6(e){if(bm===void 0){let r=ia(mv);bm=ru(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return bm[t.toLowerCase()]}a(D6,"getDefaultConfig");function gv(e){if(e==null){tr.info(w6);return}if(wt===void 0){tr.trace(b6);return}let t=ks[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(gv,"getConfigValue");function yc(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return VR(Fn.join(t,ds.HDB_CONFIG_FILE));let r=hv(e);return VR(r.get(ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(yc,"getConfigFilePath");function Nm(e=!1){if(wt===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{Kr.accessSync(t,Kr.constants.F_OK|Kr.constants.R_OK)}catch(i){throw tr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=yc(t),n;if(r.includes("config/settings.js"))try{Tv(r);return}catch(i){if(i.code!==ds.NODE_ERROR_CODES.ENOENT)throw i}try{n=ia(r)}catch(i){if(i.code===ds.NODE_ERROR_CODES.ENOENT){tr.trace(`HarperDB config file not found at ${r}.
19
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw tr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}L6(n,r),YR(n);let s=n.toJSON();if(y6.config=s,wt=ru(s),wt.logging_rotation_rotate)for(let i in fv)wt[i]&&tr.error(`Config ${fv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);tr.trace(O6)}}a(Nm,"initConfig");function L6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Fn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Fn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(tr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Kr.writeFileSync(t,String(e))}}a(L6,"checkForUpdatedConfig");function YR(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 tu.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 tu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=g6(r,t);if(n.error)throw tu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(YR,"validateConfig");function M6(e,t){wt===void 0&&(wt={});let r=ks[e.toLowerCase()];if(r===void 0){tr.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(M6,"updateConfigObject");function Sv(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&Nm();let o=gv(ks.hdb_root),c=Fn.join(o,ds.HDB_CONFIG_FILE),l=ia(c),u;if(r&&wt){let h=!1;for(let _ in r)if(r[_]!=wt[_.toLowerCase()]){h=!0;break}if(!h){tr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===kn.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=ks[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),p=KR(h,t);l.setIn([..._],p)}else for(let h in r){let _=ks[h.toLowerCase()];if(_===kn.HTTP_SECUREPORT&&r[h]===wt[kn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===kn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===wt[kn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===kn.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let p=_.split("_"),S=ds.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,p=S.split("_"));let g=KR(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(R){tr.error(R)}}}u&&Ev(l,u),YR(l);let f=l.getIn(["rootPath"]),d=Fn.join(f,ds.HDB_CONFIG_FILE);if(n===!0&&v6(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Kr.writeFileSync(d,String(l)),s&&(wt=ru(l.toJSON())),tr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Sv,"updateConfigValue");function v6(e,t){try{let r=Fn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ds.HDB_CONFIG_FILE}.bak`);Kr.copySync(e,r),tr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){tr.error(N6),tr.error(r)}}a(v6,"backupConfigFile");var U6=["databases"];function ru(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}),Om=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])&&!U6.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!kn[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(ru,"flattenConfig");function KR(e,t){if(e===kn.CLUSTERING_NODENAME||e===kn.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(S6(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return hr.autoCast(t)}a(KR,"castConfigValue");function x6(){let e=hr.getPropsFilePath(),t=yc(e);return ia(t).toJSON()}a(x6,"getConfiguration");async function B6(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return Sv(void 0,void 0,s,!0),C6}catch(i){throw typeof i=="string"||i instanceof String?A6(i,i,R6.BAD_REQUEST,void 0,void 0,!0):i}}a(B6,"setConfiguration");function WR(){let e=hr.getPropsFilePath();try{Kr.accessSync(e,Kr.constants.F_OK|Kr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw tr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=yc(e);return ia(t).toJSON()}a(WR,"readConfigFile");function ia(e){return _v.parseDocument(Kr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ia,"parseYamlDoc");function H6(){let e=WR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=dv(t);if(r)throw tu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=dv(n);if(s)throw tu.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw tu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(H6,"getClusteringRoutes");function Tv(e){let t=hv(e);wt={};for(let r in ks){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===kn.LOGGING_ROOT?wt[s]=Fn.dirname(n):wt[s]=n}return wt}a(Tv,"initOldConfig");function k6(e){let t=WR();return T6.get(t,e.replaceAll("_","."))}a(k6,"getConfigFromFile");async function F6(e,t){let r=ia(yc());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 Kr.writeFile(yc(),String(r))}a(F6,"addConfig");function G6(e){let t=yc(hr.getPropsFilePath()),r=ia(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Fn.join(n,ds.HDB_CONFIG_FILE);Kr.writeFileSync(s,String(r))}a(G6,"deleteConfigFromFile");function q6(){return Om||(Nm(),Om)}a(q6,"getConfigObj");function $6(){return wt||Nm(),wt}a($6,"getFlatConfigObj")});var Gn=I((Oye,yr)=>{"use strict";var bv="username is required",Ov="nothing to update, must supply active, role or password to update",Nv="password cannot be an empty string",wv="If role is specified, it cannot be empty.",Iv="active must be true or false";yr.exports.addUser=X6;yr.exports.alterUser=Z6;yr.exports.dropUser=tZ;yr.exports.getSuperUser=oZ;yr.exports.userInfo=rZ;yr.exports.listUsers=Im;yr.exports.listUsersExternal=nZ;yr.exports.setUsersWithRolesCache=bc;yr.exports.findAndValidateUser=ry;yr.exports.getClusterUser=aZ;yr.exports.getUsersWithRolesCache=iZ;yr.exports.USERNAME_REQUIRED=bv;yr.exports.ALTERUSER_NOTHING_TO_UPDATE=Ov;yr.exports.EMPTY_PASSWORD=Nv;yr.exports.EMPTY_ROLE=wv;yr.exports.ACTIVE_BOOLEAN=Iv;var Cv=hn(),V6=Tc(),qf=(Rm(),D(Am)),Pv=tv(),$f=$r(),XR=io(),bi=oe(),Dv=require("validate.js"),ZR=j(),{promisify:K6}=require("util"),ey=ro(),QR=(H(),D(q)),Rv=Nt(),Y6=It(),W6=ce(),z6=Zi(),{hdb_errors:Q6,ClientError:Fs}=he(),{HTTP_STATUS_CODES:so,AUTHENTICATION_ERROR_MSGS:zR,HDB_ERROR_MSGS:nu}=Q6,{UserEventMsg:ty}=Gs(),jR=require("lodash"),{server:wm}=(Gr(),D(Wl)),j6=j();wm.getUser=(e,t)=>ry(e,t,t!=null);wm.authenticateUser=(e,t)=>ry(e,t);var Lv={username:!0,active:!0,role:!0,password:!0},yv=new Map,J6=K6(V6.delete),JR=W6.get(QR.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??qf.HASH_FUNCTION.SHA256,Oi;async function X6(e){let t=Dv.cleanAttributes(e,Lv),r=Pv.addUserValidation(t);if(r)throw new Fs(r.message);let n=await $f.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Fs(nu.ROLE_NAME_NOT_FOUND(t.role),so.NOT_FOUND);if(n.length>1)throw new Fs(nu.DUP_ROLES_FOUND(t.role),so.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=ey.encrypt(t.password)),t.password=await qf.hash(t.password,JR),t.hash_function=JR,t.role=n[0].id;let s=await Cv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ZR.debug(s),await bc(),s.skipped_hashes.length===1)throw new Fs(nu.USER_ALREADY_EXISTS(t.username),so.CONFLICT);return XR.signalUserChange(new ty(process.pid)),`${t.username} successfully added`}a(X6,"addUser");async function Z6(e){let t=Dv.cleanAttributes(e,Lv);if(bi.isEmptyOrZeroLength(t.username))throw new Error(bv);if(bi.isEmptyOrZeroLength(t.password)&&bi.isEmptyOrZeroLength(t.role)&&bi.isEmptyOrZeroLength(t.active))throw new Error(Ov);if(!bi.isEmpty(t.password)&&bi.isEmptyOrZeroLength(t.password.trim()))throw new Error(Nv);if(!bi.isEmpty(t.active)&&!bi.isBoolean(t.active))throw new Error(Iv);if(!bi.isEmpty(t.password)&&!bi.isEmptyOrZeroLength(t.password.trim())&&(eZ(t.username)&&(t.hash=ey.encrypt(t.password)),t.password=await qf.hash(t.password,JR)),t.role==="")throw new Error(wv);if(t.role){let n=await $f.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Fs(nu.ALTER_USER_ROLE_NOT_FOUND(t.role),so.NOT_FOUND);if(n.length>1)throw new Fs(nu.DUP_ROLES_FOUND(t.role),so.CONFLICT);t.role=n[0].id}let r=await Cv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await bc(),XR.signalUserChange(new ty(process.pid)),r}a(Z6,"alterUser");function eZ(e){let t=!1,r=Oi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eZ,"isClusterUser");async function tZ(e){let t=Pv.dropUserValidation(e);if(t)throw new Fs(t.message);if(Oi.get(e.username)===void 0)throw new Fs(nu.USER_NOT_EXIST(e.username),so.NOT_FOUND);let r=await J6({table:"hdb_user",schema:"system",hash_values:[e.username]});return ZR.debug(r),await bc(),XR.signalUserChange(new ty(process.pid)),`${e.username} successfully deleted`}a(tZ,"dropUser");async function rZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r=await $f.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(rZ,"userInfo");async function nZ(){let e=await Im();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(nZ,"listUsersExternal");async function Im(){let e=await $f.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=jR.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await $f.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=jR.cloneDeep(s),s.role=t[s.role],sZ(s.role),n.set(s.username,s);return n}a(Im,"listUsers");function sZ(e){if(!e){ZR.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(z6)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(sZ,"appendSystemTablesToRole");async function bc(e=void 0){e?Oi=e:Oi=await Im()}a(bc,"setUsersWithRolesCache");async function iZ(){return Oi||await bc(),Oi}a(iZ,"getUsersWithRolesCache");async function ry(e,t,r=!0){Oi||await bc();let n=Oi.get(e);if(!n){if(!r)return{username:e};throw new Fs(zR.GENERIC_AUTH_FAIL,so.UNAUTHORIZED)}if(n&&!n.active)throw new Fs(zR.USER_INACTIVE,so.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(yv.get(t)===n.password)return s;{let i=qf.validate(n.password,t,n.hash_function||qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)yv.set(t,n.password);else throw new Fs(zR.GENERIC_AUTH_FAIL,so.UNAUTHORIZED)}}return s}a(ry,"findAndValidateUser");async function oZ(){Oi||await bc();for(let[,e]of Oi)if(e.role.role==="super_user")return e}a(oZ,"getSuperUser");async function aZ(){let e=await Im(),t=Y6.getConfigFromFile(QR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==QR.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=ey.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Rv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Rv.SERVER_SUFFIX.ADMIN,r}a(aZ,"getClusterUser");var Mv=[];wm.invalidateUser=function(e){for(let t of Mv)try{t(e)}catch(r){j6.error("Error invalidating user",r)}};wm.onInvalidatedUser=function(e){Mv.push(e)}});var Kf=I((Cye,Bv)=>{"use strict";var Oc=j(),qn=(H(),D(q)),cZ=JL(),wye=Hs(),Iye=no(),lZ=Gn(),{validateEvent:vv}=Gs(),Vf=Hn(),uZ=require("process"),{resetDatabases:dZ}=(Me(),D(st)),fZ={[qn.ITC_EVENT_TYPES.SCHEMA]:_Z,[qn.ITC_EVENT_TYPES.USER]:xv};async function _Z(e){let t=vv(e);if(t){Oc.error(t);return}Oc.trace("ITC schemaHandler received schema event:",e),await cZ(e.message),await hZ(e.message)}a(_Z,"schemaHandler");async function hZ(e){try{Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=dZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oc.error(t)}}a(hZ,"syncSchemaMetadata");var Uv=[];async function xv(e){try{try{Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oc.warn(r)}let t=vv(e);if(t){Oc.error(t);return}Oc.trace(`ITC userHandler ${qn.HDB_ITC_CLIENT_PREFIX}${uZ.pid} received user event:`,e),await lZ.setUsersWithRolesCache();for(let r of Uv)r()}catch(t){Oc.error(t)}}a(xv,"userHandler");xv.addListener=function(e){Uv.push(e)};Bv.exports=fZ});var Gs=I((Uye,kv)=>{"use strict";var Dye=j(),ny=oe(),pZ=(H(),D(q)),{ITC_ERRORS:Yf}=Cn(),{parentPort:Lye,threadId:mZ,isMainThread:EZ,workerData:Mye}=require("worker_threads"),{onMessageFromWorkers:gZ,broadcast:vye,broadcastWithAcknowledgement:SZ}=rt();kv.exports={sendItcEvent:TZ,validateEvent:Hv,SchemaEventMsg:AZ,UserEventMsg:RZ};var Cm;gZ(async(e,t)=>{Cm=Cm||Kf(),Hv(e),Cm[e.type]&&await Cm[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TZ(e){return!EZ&&e.message&&(e.message.originator=mZ),SZ(e)}a(TZ,"sendItcEvent");function Hv(e){if(typeof e!="object")return Yf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||ny.isEmpty(e.type))return Yf.MISSING_TYPE;if(!e.hasOwnProperty("message")||ny.isEmpty(e.message))return Yf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ny.isEmpty(e.message.originator))return Yf.MISSING_ORIGIN;if(pZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Yf.INVALID_EVENT(e.type)}a(Hv,"validateEvent");function AZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(AZ,"SchemaEventMsg");function RZ(e){this.originator=e}a(RZ,"UserEventMsg")});var io=I((Hye,$v)=>{"use strict";var Fv=(H(),D(q)),Bye=oe(),Pm=j(),Gv=zL(),su,{sendItcEvent:qv}=Gs();function yZ(e){try{Pm.info("signalSchemaChange called with message:",e),su=su||Kf();let t=new Gv(Fv.ITC_EVENT_TYPES.SCHEMA,e);return su.schema(t),qv(t)}catch(t){Pm.error(t)}}a(yZ,"signalSchemaChange");function bZ(e){try{Pm.trace("signalUserChange called with message:",e),su=su||Kf();let t=new Gv(Fv.ITC_EVENT_TYPES.USER,e);return su.user(t),qv(t)}catch(t){Pm.error(t)}}a(bZ,"signalUserChange");$v.exports={signalSchemaChange:yZ,signalUserChange:bZ}});var Dm=I((Fye,Kv)=>{"use strict";var Vv=oe(),OZ=(H(),D(q)),NZ=j(),wZ=fm(),IZ=dm(),CZ=io(),{SchemaEventMsg:PZ}=Gs(),DZ="already exists in";Kv.exports=LZ;async function LZ(e,t,r){if(Vv.isEmptyOrZeroLength(r))return r;let n=[];Vv.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await MZ(e,t.schema,t.name,i)})),s}a(LZ,"lmdbCheckForNewAttributes");async function MZ(e,t,r,n){let s=new IZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await vZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DZ))NZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(MZ,"createNewAttribute");async function vZ(e){let t;return t=await wZ(e),CZ.signalSchemaChange(new PZ(process.pid,OZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(vZ,"createAttribute")});var iu=I((qye,Yv)=>{"use strict";var sy=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Yv.exports=sy});var zv=I((Vye,Wv)=>{"use strict";var UZ=iu(),xZ=(H(),D(q)).OPERATIONS_ENUM,iy=class extends UZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(xZ.INSERT,r,n,s,i),this.records=t}};Wv.exports=iy});var jv=I((Yye,Qv)=>{"use strict";var BZ=iu(),HZ=(H(),D(q)).OPERATIONS_ENUM,oy=class extends BZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Qv.exports=oy});var Xv=I((zye,Jv)=>{"use strict";var kZ=iu(),FZ=(H(),D(q)).OPERATIONS_ENUM,ay=class extends kZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(FZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Jv.exports=ay});var eU=I((jye,Zv)=>{"use strict";var GZ=iu(),qZ=(H(),D(q)).OPERATIONS_ENUM,cy=class extends GZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(qZ.DELETE,n,s,t,i),this.original_records=r}};Zv.exports=cy});var Wf=I((Zye,sU)=>{"use strict";var Xye=require("path"),tU=ft(),$Z=zv(),VZ=jv(),KZ=Xv(),YZ=eU(),ou=vt(),rU=oe(),{CONFIG_PARAMS:WZ}=(H(),D(q)),nU=ce();nU.initSync();var Lm=(H(),D(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:zZ}=gt();sU.exports=QZ;async function QZ(e,t){if(nU.get(WZ.LOGGING_AUDITLOG)===!1)return;let r=zZ(e.schema,e.table),n=await tU.openEnvironment(r,e.table,!0),s=jZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){tU.initializeDBIs(n,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ou.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),rU.isEmpty(s.user_name)||n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(QZ,"writeTransaction");function jZ(e,t){let r=rU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Lm.INSERT)return new $Z(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.UPDATE)return new VZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.UPSERT)return new KZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.DELETE)return new YZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(jZ,"createTransactionObject")});var ly=I((rbe,iU)=>{"use strict";var JZ=Pf(),tbe=rf(),zf=(H(),D(q)),XZ=nf(),ZZ=pc().insertRecords,e8=ft(),t8=j(),r8=Dm(),{getSchemaPath:n8}=gt(),s8=Wf();iU.exports=i8;async function i8(e){try{let{schema_table:t,attributes:r}=JZ(e);XZ(e,r,t.hash_attribute),e.schema!==zf.SYSTEM_SCHEMA_NAME&&(r.includes(zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await r8(e.hdb_auth_header,t,r),s=n8(e.schema,e.table),i=await e8.openEnvironment(s,e.table),o=await ZZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await s8(e,o)}catch(c){t8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(i8,"lmdbCreateRecords")});var cU=I((sbe,aU)=>{"use strict";var oU=(H(),D(q)),o8=ly(),a8=rf(),c8=require("fs-extra"),{getSchemaPath:l8}=gt();aU.exports=u8;async function u8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a8(oU.SYSTEM_SCHEMA_NAME,oU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o8(r),await c8.mkdirp(l8(e.schema))}a(u8,"lmdbCreateSchema")});var uU=I((obe,lU)=>{"use strict";var uy=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};lU.exports=uy});var hU=I((dbe,_U)=>{"use strict";var dU=ft(),dy=an(),fy=Cn().LMDB_ERRORS_ENUM,d8=vt(),fU=j(),cbe=oe(),f8=require("lmdb"),_8=uU(),h8=(H(),D(q)),{OVERFLOW_MARKER:lbe,MAX_SEARCH_KEY_LENGTH:ube}=d8,p8=h8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m8(e,t,r,n){if(dy.validateEnv(e),t===void 0)throw new Error(fy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fy.IDS_REQUIRED):new Error(fy.IDS_MUST_BE_ITERABLE);try{let s=dU.listDBIs(e);dU.initializeDBIs(e,t,s);let i=new _8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let p=e.dbis[t].get(o);if(!p||n&&p[p8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,f8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!p.hasOwnProperty(R)||R===t)continue;let E=e.dbis[R],A=p[R];if(A!=null)try{let O=dy.getIndexedValues(A);if(O)for(let v=0,F=O.length;v<F;v++)E.remove(O[v],o)}catch{fU.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(p)}catch(p){fU.warn(p),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=dy.getNextMonotonicTime(),i}catch(s){throw s}}a(m8,"deleteRecords");_U.exports={deleteRecords:m8}});var Qf=I((_be,mU)=>{"use strict";var au=oe(),E8=hU(),g8=ft(),{getSchemaPath:S8}=gt(),T8=Wf(),A8=j();mU.exports=R8;async function R8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(au.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(au.isEmptyOrZeroLength(e.hash_values)&&!au.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];au.isEmpty(l)||e.hash_values.push(l)}}if(au.isEmptyOrZeroLength(e.hash_values))return pU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(au.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=S8(e.schema,e.table),i=await g8.openEnvironment(s,e.table),o=await E8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T8(e,o)}catch(c){A8.error(`unable to write transaction due to ${c.message}`)}return pU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(R8,"lmdbDeleteRecords");function pU(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(pU,"createDeleteResponse")});var hy=I((mbe,EU)=>{"use strict";var y8=(H(),D(q)),pbe=an();function _y(e,t){let r=Object.create(null);if(t.length===1&&y8.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(_y,"parseRow");function b8(e,t,r,n){let s=_y(r,e);n.push(s)}a(b8,"searchAll");function O8(e,t,r,n){let s=_y(r,e);n[t]=s}a(O8,"searchAllToMap");function N8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(N8,"iterateDBI");function Nc(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Nc,"pushResults");function w8(e,t,r,n,s,i){t.toString().endsWith(e)&&Nc(t,r,n,s,i)}a(w8,"endsWith");function I8(e,t,r,n,s,i){t.toString().includes(e)&&Nc(t,r,n,s,i)}a(I8,"contains");function C8(e,t,r,n,s,i){t>e&&Nc(t,r,n,s,i)}a(C8,"greaterThanCompare");function P8(e,t,r,n,s,i){t>=e&&Nc(t,r,n,s,i)}a(P8,"greaterThanEqualCompare");function D8(e,t,r,n,s,i){t<e&&Nc(t,r,n,s,i)}a(D8,"lessThanCompare");function L8(e,t,r,n,s,i){t<=e&&Nc(t,r,n,s,i)}a(L8,"lessThanEqualCompare");EU.exports={parseRow:_y,searchAll:b8,searchAllToMap:O8,iterateDBI:N8,endsWith:w8,contains:I8,greaterThanCompare:C8,greaterThanEqualCompare:P8,lessThanCompare:D8,lessThanEqualCompare:L8,pushResults:Nc}});var cu=I((Abe,bU)=>{"use strict";var oa=ft(),gbe=j(),$n=an(),Mm=vt(),Kt=Cn().LMDB_ERRORS_ENUM,Sbe=oe(),M8=(H(),D(q)),vm=hy(),{parseRow:v8}=vm,Tbe=require("lmdb"),{OVERFLOW_MARKER:gU,MAX_SEARCH_KEY_LENGTH:U8}=Mm;function SU(e,t,r,n=!1,s=void 0,i=void 0){return wc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(SU,"iterateFullIndex");function jf(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return wc(e,t,r,(f,d,h,_)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(E.values=!1,d.getRange(E).map(A=>({value:A}))):d.getRange(E)})}a(jf,"iterateRangeBetween");function wc(e,t,r,n){let s=e.database||e,i=oa.openDBI(s,r);i[Mm.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oa.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(wc,"setupTransaction");function TU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(gU)){if(!s)if(r)s=oa.openDBI(e,r);else{let l=oa.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=oa.openDBI(e,l[u]),!s[Mm.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(TU,"getOverflowCheck");function x8(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return wc(e,t,t,(o,c,l)=>(Um(r),r=Jf(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>v8(u.value,r))))}a(x8,"searchAll");function B8(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);Um(r),r=Jf(e.database||e,r);let o=new Map;for(let{key:c,value:l}of SU(e,t,t,n,s,i))o.set(c,vm.parseRow(l,r));return o}a(B8,"searchAllToMap");function H8(e,t,r=!1,n=void 0,s=void 0){if($n.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=SU(e,void 0,t,r,n,s),c=o.transaction,l=TU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(H8,"iterateDBI");function k8(e,t){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return oa.statDBI(e,t).entryCount}a(k8,"countAll");function F8(e,t,r,n,s=!1,i=void 0,o=void 0){return aa(e,r,n),wc(e,t,r,(c,l,u,f)=>(n=$n.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(F8,"equals");function G8(e,t,r){return aa(e,t,r),oa.openDBI(e,t).getValuesCount(r)}a(G8,"count");function q8(e,t,r,n,s=!1,i=void 0,o=void 0){return aa(e,r,n),wc(e,null,r,(c,l)=>{n=$n.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(q8,"startsWith");function $8(e,t,r,n,s=!1,i=void 0,o=void 0){return AU(e,t,r,n,s,i,o,!0)}a($8,"endsWith");function AU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return aa(e,r,n),wc(e,null,r,(l,u,f,d)=>{let h=TU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let p=_.toString();return p.endsWith(gU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?p.endsWith(n):p.includes(n))?u[Mm.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(AU,"contains");function V8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),jf(e,t,r,n,l,s,i,o,!0,!1)}a(V8,"greaterThan");function K8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),jf(e,t,r,n,l,s,i,o,!1,!1)}a(K8,"greaterThanEqual");function Y8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),jf(e,t,r,l,n,s,i,o,!1,!0)}a(Y8,"lessThan");function W8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),jf(e,t,r,l,n,s,i,o,!1,!1)}a(W8,"lessThanEqual");function z8(e,t,r,n,s,i=!1,o=void 0,c=void 0){if($n.validateEnv(e),r===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Kt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Kt.END_VALUE_REQUIRED);if(n=$n.convertKeyValueToWrite(n),s=$n.convertKeyValueToWrite(s),n>s)throw new Error(Kt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return jf(e,t,r,n,s,i,o,c)}a(z8,"between");function Q8(e,t,r,n){$n.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Um(r),r=Jf(s,r),n===void 0)throw new Error(Kt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=vm.parseRow(c,r)),o}a(Q8,"searchByHash");function j8(e,t,r){$n.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(j8,"checkHashExists");function J8(e,t,r,n,s=[]){return yU(e,t,r,n,s),RU(e,t,r,n,s).map(i=>i[1])}a(J8,"batchSearchByHash");function X8(e,t,r,n,s=[]){yU(e,t,r,n,s);let i=new Map;for(let[o,c]of RU(e,t,r,n,s))i.set(o,c);return i}a(X8,"batchSearchByHashToMap");function RU(e,t,r,n,s=[]){return wc(e,t,t,(i,o,c)=>{r=Jf(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,vm.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(RU,"batchHashSearch");function yU(e,t,r,n,s){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Um(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a(yU,"initializeBatchSearchByHash");function Um(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Um,"validateFetchAttributes");function aa(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.SEARCH_VALUE_REQUIRED);if(r?.length>U8)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(aa,"validateComparisonFunctions");function Jf(e,t){return t.length===1&&M8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oa.listDBIs(e)),t}a(Jf,"setGetWholeRowAttributes");bU.exports={searchAll:x8,searchAllToMap:B8,count:G8,countAll:k8,equals:F8,startsWith:q8,endsWith:$8,contains:AU,searchByHash:Q8,setGetWholeRowAttributes:Jf,batchSearchByHash:J8,batchSearchByHashToMap:X8,checkHashExists:j8,iterateDBI:H8,greaterThan:V8,greaterThanEqual:K8,lessThan:Y8,lessThanEqual:W8,between:z8}});var lu=I((ybe,CU)=>{var OU=require("lodash"),NU=dt(),He=require("joi"),Z8=oe(),{hdb_schema_table:Xf,checkValidTable:wU,hdb_table:IU,hdb_database:xm}=Si(),{handleHDBError:e5,hdb_errors:t5}=he(),{getDatabases:r5}=(Me(),D(st)),{HTTP_STATUS_CODES:n5}=t5,s5=He.object({database:xm,schema:xm,table:IU,search_attribute:Xf,search_value:He.any().required(),get_attributes:He.array().min(1).items(He.alternatives(Xf,He.object())).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),i5=He.object({database:xm,schema:xm,table:IU,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(He.alternatives(Xf,He.object())).optional(),sort:He.object({attribute:He.alternatives(Xf,He.array().min(1)),descending:He.bool().optional()}).optional(),conditions:He.array().min(1).items(He.alternatives(He.object({operator:He.string().valid("and","or").default("and").lowercase(),conditions:He.array()}),He.object({search_attribute:He.alternatives(Xf,He.array().min(1)),search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()}))).required()});CU.exports=function(e,t){let r=null;switch(t){case"value":r=NU.validateBySchema(e,s5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(wU("database",e.schema)),i(wU("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=NU.validateBySchema(e,i5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Z8.checkGlobalSchemaTable(e.schema,e.table);if(s)return e5(new Error,s,n5.NOT_FOUND);let o=r5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=OU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!OU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var py=I((Obe,PU)=>{"use strict";var o5=ft(),a5=lu(),{getSchemaPath:c5}=gt();PU.exports=l5;function l5(e){let t=a5(e,"hashes");if(t)throw t;let r=c5(e.schema,e.table);return o5.openEnvironment(r,e.table)}a(l5,"initialize")});var my=I((wbe,DU)=>{"use strict";var u5=cu(),d5=py();DU.exports=f5;async function f5(e){let t=await d5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return u5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(f5,"lmdbGetDataByHash")});var uu=I((Cbe,LU)=>{"use strict";var Ey=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};LU.exports=Ey});var vU=I((Lbe,MU)=>{"use strict";var Dbe=uu(),_5=cu(),h5=py();MU.exports=p5;async function p5(e){let t=await h5(e),r=global.hdb_schema[e.schema][e.table];return _5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(p5,"lmdbSearchByHash")});var qs=I((vbe,UU)=>{"use strict";var gy=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};UU.exports=gy});var Bm=I((xbe,GU)=>{"use strict";var Yr=cu(),m5=ft(),E5=oe(),ke=vt(),Ic=(H(),D(q)),g5=Zi(),xU=Cn().LMDB_ERRORS_ENUM,{getSchemaPath:S5}=gt(),oo=Ic.SEARCH_WILDCARDS;async function T5(e,t,r){let n;e.schema===Ic.SYSTEM_SCHEMA_NAME?n=g5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=FU(e,n.hash_attribute,r,t);return HU(e,s,n.hash_attribute,r)}a(T5,"prepSearch");async function HU(e,t,r,n){let s=S5(e.schema,e.table),i=await m5.openEnvironment(s,e.table),o=kU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(A5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?BU(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?BU(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Yr.batchSearchByHashToMap(c,r,e.get_attributes,u):Yr.batchSearchByHash(c,r,e.get_attributes,u)}a(HU,"executeSearch");function kU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Yr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Yr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Yr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Yr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Yr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Yr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Yr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Yr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(kU,"searchByType");function BU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(BU,"createMapFromIterable");function A5(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(A5,"checkToFetchMore");function FU(e,t,r,n){if(E5.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),oo.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oo[0])<0&&s.indexOf(oo[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(oo.indexOf(i)>=0&&oo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(oo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(oo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(oo[0])||s.includes(oo[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(xU.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ic.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ic.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case Ic.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(xU.UNKNOWN_SEARCH_TYPE)}}a(FU,"createSearchTypeFromSearchObject");GU.exports={executeSearch:HU,createSearchTypeFromSearchObject:FU,prepSearch:T5,searchByType:kU}});var $U=I((kbe,qU)=>{"use strict";var Hbe=qs(),R5=lu(),y5=oe(),b5=(H(),D(q)),O5=Bm();qU.exports=N5;function N5(e,t){if(!y5.isEmpty(t)&&b5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=R5(e,"value");if(n)throw n;return O5.prepSearch(e,t,!0)}a(N5,"lmdbGetDataByValue")});var Zf=I((qbe,VU)=>{"use strict";var Gbe=qs(),w5=lu(),I5=oe(),C5=(H(),D(q)),P5=Bm();VU.exports=D5;async function D5(e,t){if(!I5.isEmpty(t)&&C5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=w5(e,"value");if(n)throw n;return P5.prepSearch(e,t,!1)}a(D5,"lmdbSearchByValue")});var YU=I((Kbe,KU)=>{"use strict";var Vbe=vt(),Sy=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Ty=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Ay=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};KU.exports={SearchByConditionsObject:Sy,SearchCondition:Ty,SortAttribute:Ay}});var JU=I((Qbe,jU)=>{"use strict";var Wbe=YU().SearchByConditionsObject,L5=qs(),M5=lu(),Ry=cu(),Hm=vt(),{Resource:zbe}=(Jo(),D(TA)),QU=Bm(),v5=hy(),U5=require("lodash"),{getSchemaPath:x5}=gt(),WU=ft(),{handleHDBError:B5,hdb_errors:H5}=he(),{HTTP_STATUS_CODES:k5}=H5,F5=1e8;jU.exports=G5;async function G5(e){let t=M5(e,"conditions");if(t)throw B5(t,t.message,k5.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=x5(e.schema,e.table),n=await WU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)WU.openDBI(n,u.search_attribute);let i=U5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Hm.SEARCH_TYPES.EQUALS?u.estimated_count=Ry.count(n,u.search_attribute,u.search_value):f===Hm.SEARCH_TYPES.CONTAINS||f===Hm.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=F5}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await zU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(QU.filterByType),d=f.length,h=Ry.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let p=0;p<d;p++)if(!f[p](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>v5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await zU(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=Ry.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(G5,"lmdbSearchByConditions");async function zU(e,t,r,n){let s=new L5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Hm.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,QU.searchByType(e,s,i,n).map(o=>o.value)}a(zU,"executeConditionSearch")});var e_=I((Jbe,XU)=>{"use strict";var q5=(H(),D(q)).OPERATIONS_ENUM,yy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q5.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};XU.exports=yy});var by=I((Zbe,o0)=>{"use strict";var r0=qs(),n0=e_(),s0=Zf(),i0=Qf(),pn=(H(),D(q)),ZU=oe(),e0=ft(),{getTransactionAuditStorePath:$5,getSchemaPath:V5}=gt(),t0=j();o0.exports=K5;async function K5(e){try{if(ZU.isEmpty(global.hdb_schema[e.schema])||ZU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Y5(e),await W5(e);let t=V5(e.schema,e.table);try{await e0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")t0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$5(e.schema,e.table);await e0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")t0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(K5,"lmdbDropTable");async function Y5(e){let t=new r0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await s0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new n0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await i0(s)}a(Y5,"deleteAttributesFromSystem");async function W5(e){let t=new r0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await s0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new n0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await i0(s)}catch(i){throw i}}a(W5,"dropTableFromSystem")});var c0=I((tOe,a0)=>{"use strict";var z5=require("fs-extra"),Q5=qs(),j5=uu(),J5=e_(),X5=by(),Z5=Qf(),e9=my(),t9=Zf(),ao=(H(),D(q)),{getSchemaPath:r9}=gt(),{handleHDBError:n9,hdb_errors:s9}=he(),{HDB_ERROR_MSGS:i9,HTTP_STATUS_CODES:o9}=s9;a0.exports=a9;async function a9(e){let t;try{t=await c9(e.schema);let r=new Q5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await t9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await X5(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new J5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Z5(s);let i=r9(t);await z5.remove(i)}catch(r){throw r}}a(a9,"lmdbDropSchema");async function c9(e){let t=new j5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await e9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw n9(new Error,i9.SCHEMA_NOT_FOUND(e),o9.NOT_FOUND,void 0,void 0,!0);return n}a(c9,"validateDropSchema")});var t_=I((nOe,l0)=>{"use strict";var Oy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};l0.exports=Oy});var wy=I((oOe,u0)=>{"use strict";var l9=require("fs-extra"),km=ft(),{getTransactionAuditStorePath:u9}=gt(),Ny=vt(),iOe=t_();u0.exports=d9;async function d9(e){let t;try{let r=u9(e.schema,e.table);await l9.mkdirp(r),t=await km.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{km.createDBI(t,Ny.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),km.createDBI(t,Ny.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),km.createDBI(t,Ny.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(d9,"createTransactionsAuditEnvironment")});var _0=I((lOe,f0)=>{"use strict";var Iy=(H(),D(q)),d0=ft(),f9=pc(),{getSystemSchemaPath:_9,getSchemaPath:h9}=gt(),cOe=Zi(),p9=fm(),Cy=dm(),m9=j(),E9=wy();f0.exports=g9;async function g9(e,t){let r=h9(t.schema,t.table),n=new Cy(t.schema,t.table,Iy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Cy(t.schema,t.table,Iy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Cy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await d0.createEnvironment(r,t.table),e!==void 0){let o=await d0.openEnvironment(_9(),Iy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await f9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Py(n),await Py(s),await Py(i)}await E9(t)}catch(o){throw o}}a(g9,"lmdbCreateTable");async function Py(e){try{await p9(e)}catch(t){m9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Py,"createAttribute")});var p0=I((dOe,h0)=>{"use strict";var S9=Pf(),T9=nf(),A9=Dm(),r_=(H(),D(q)),R9=pc().updateRecords,y9=ft(),{getSchemaPath:b9}=gt(),O9=Wf(),N9=j();h0.exports=w9;async function w9(e){try{let{schema_table:t,attributes:r}=S9(e);T9(e,r,t.hash_attribute),e.schema!==r_.SYSTEM_SCHEMA_NAME&&(r.includes(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await A9(e.hdb_auth_header,t,r),s=b9(e.schema,e.table),i=await y9.openEnvironment(s,e.table),o=await R9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await O9(e,o)}catch(c){N9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(w9,"lmdbUpdateRecords")});var E0=I((_Oe,m0)=>{"use strict";var I9=(H(),D(q)).OPERATIONS_ENUM,Dy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=I9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};m0.exports=Dy});var S0=I((mOe,g0)=>{"use strict";var pOe=E0(),C9=Pf(),P9=nf(),D9=Dm(),n_=(H(),D(q)),L9=pc().upsertRecords,M9=ft(),{getSchemaPath:v9}=gt(),U9=Wf(),x9=j(),{handleHDBError:B9,hdb_errors:H9}=he();g0.exports=k9;async function k9(e){let t;try{t=C9(e)}catch(l){throw B9(l,l.message,H9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;P9(e,n,r.hash_attribute),e.schema!==n_.SYSTEM_SCHEMA_NAME&&(n.includes(n_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(n_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(n_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(n_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await D9(e.hdb_auth_header,r,n),i=v9(e.schema,e.table),o=await M9.openEnvironment(i,e.table),c=await L9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await U9(e,c)}catch(l){x9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(k9,"lmdbUpsertRecords")});var A0=I((gOe,T0)=>{"use strict";var Ly=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};T0.exports=Ly});var y0=I((TOe,R0)=>{"use strict";var My=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};R0.exports=My});var N0=I((yOe,O0)=>{"use strict";var vy=ft(),{getTransactionAuditStorePath:F9}=gt(),ROe=A0(),s_=vt(),G9=oe(),b0=y0(),q9=require("util").promisify,$9=q9(setTimeout),V9=1e4,K9=100;O0.exports=Y9;async function Y9(e){let t=F9(e.schema,e.table),r=await vy.openEnvironment(t,e.table,!0),n=vy.listDBIs(r);vy.initializeDBIs(r,s_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new b0;do s=await W9(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 $9(K9);while(s.transactions_deleted>0);return i}a(Y9,"deleteAuditLogsBefore");async function W9(e,t){let r=new b0;try{let n=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[s_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];G9.isEmpty(c)||(s=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>V9)break}return await s,r}catch(n){throw n}}a(W9,"deleteTransactions")});var I0=I((OOe,w0)=>{"use strict";var Uy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};w0.exports=Uy});var P0=I((IOe,C0)=>{"use strict";var z9=qs(),Q9=e_(),wOe=I0(),Ni=(H(),D(q)),j9=oe(),xy=ft(),J9=Zi(),X9=Zf(),Z9=Qf(),{getSchemaPath:e7}=gt();C0.exports=t7;async function t7(e,t=!0){let r;e.schema===Ni.SYSTEM_SCHEMA_NAME?r=J9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await n7(e),s=e7(e.schema,e.table),i=await xy.openEnvironment(s,e.table);return t===!0&&await r7(e,i,r.hash_attribute),xy.dropDBI(i,e.attribute),n}a(t7,"lmdbDropAttribute");async function r7(e,t,r){let n=xy.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(r7,"removeAttributeFromAllObjects");async function n7(e){let t=new z9(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await X9(t)).filter(o=>o[Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(j9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Q9(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Z9(i)}a(n7,"dropAttributeFromSystem")});var x0=I((DOe,U0)=>{"use strict";var By=ft(),du=vt(),POe=an(),Hy=(H(),D(q)),D0=oe(),{getTransactionAuditStorePath:s7}=gt(),i7=cu(),Fm=iu(),o7=j();U0.exports=a7;async function a7(e){let t=s7(e.schema,e.table),r=await By.openEnvironment(t,e.table,!0),n=By.listDBIs(r);By.initializeDBIs(r,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Hy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return L0(r,e.search_values);case Hy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,l7(r,e.search_values,s);case Hy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return c7(r,e.search_values);default:return L0(r)}}a(a7,"readAuditLog");function L0(e,t=[0,Date.now()]){D0.isEmpty(t[0])&&(t[0]=0),D0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[du.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 Fm,s))}a(L0,"searchTransactionsByTimestamp");function c7(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,v0(e,i))}return Object.fromEntries(r)}a(c7,"searchTransactionsByUsername");function l7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=i7.equals(e,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,du.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=v0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);M0(l,"records",r,f,o),M0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(l7,"searchTransactionsByHashValues");function M0(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new Fm(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new Fm(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(M0,"loopRecords");function v0(e,t){let r=[];try{let n=e.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Fm,i);r.push(o)}}catch(i){o7.warn(i)}return r}catch(n){throw n}}a(v0,"batchSearchTransactions")});var H0=I((UOe,B0)=>{"use strict";var{getSchemaPath:MOe}=gt(),vOe=ft(),{database:u7}=(Me(),D(st));B0.exports={writeTransaction:d7};async function d7(e,t,r){return u7({database:e,table:t}).transaction(r)}a(d7,"writeTransaction")});var q0=I((BOe,G0)=>{"use strict";var{getSchemaPath:k0}=gt(),F0=ft();G0.exports={flush:f7,resetReadTxn:_7};async function f7(e,t){return(await F0.openEnvironment(k0(e,t),t.toString())).flushed}a(f7,"flush");async function _7(e,t){try{(await F0.openEnvironment(k0(e,t),t.toString())).resetReadTxn()}catch{}}a(_7,"resetReadTxn")});var Y0=I((kOe,K0)=>{"use strict";var{Readable:h7}=require("stream"),{getDatabases:p7}=(Me(),D(st)),{readSync:m7,openSync:E7,createReadStream:$0}=require("fs"),{open:g7}=require("lmdb"),V0=yf(),S7=bf(),{AUDIT_STORE_OPTIONS:T7}=(Ji(),D(W0)),{INTERNAL_DBIS_NAME:A7,AUDIT_STORE_NAME:R7}=vt();K0.exports=b7;var ky=32768,y7=100;async function b7(e){let t=e.database||e.schema||"data",r=p7()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=g7({noSync:!0,maxDbs:S7.MAX_DBS}),h,_=d.openDB(A7,new V0(!1)),p=f.useReadTransaction(),S=0,g=a(async function(E,A){A.encoding="binary",A.encoder=void 0;let O=d.openDB(E,A),v=f.openDB(E,A);for(let{key:F,version:G,value:Y}of v.getRange({start:null,transaction:p,versions:v.useVersions}))h=O.put(F,Y,G),S++%y7===0&&(await new Promise(te=>setTimeout(te,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:E,value:A}of f.getRange({transaction:p,start:!1}))if(s.some(O=>E.startsWith?.(O+"/"))){_.put(E,A);let[,O]=E.split("/"),v=!O,F=new V0(!v,v);await g(E,F)}e.include_audit&&await g(R7,{...T7}),await h;let R=$0(d.path);return R.headers=l(),R.on("close",()=>{p.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=E7(o.path);return o.transaction(()=>{let u=Buffer.alloc(ky);m7(c,u,0,ky),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=$0(null,{fd:c,start:ky}),h=new h7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(b7,"getBackup")});var j0=I((GOe,Q0)=>{"use strict";var O7=j(),{handleHDBError:N7}=he(),w7=iL(),I7=fm(),C7=ly(),P7=cU(),D7=Qf(),L7=my(),M7=vU(),v7=$U(),U7=Zf(),x7=JU(),B7=c0(),H7=_0(),k7=p0(),F7=S0(),G7=N0(),q7=by(),$7=P0(),V7=x0(),K7=H0(),z0=q0(),Y7=Y0(),Fy=class extends w7{static{a(this,"LMDBBridge")}async searchByConditions(t){return x7(t)}async getDataByHash(t){return await L7(t)}async searchByHash(t){return await M7(t)}async getDataByValue(t,r){return await v7(t,r)}async searchByValue(t){return await U7(t)}async createSchema(t){return await P7(t)}async dropSchema(t){return await B7(t)}async createTable(t,r){return await H7(t,r)}async dropTable(t){return await q7(t)}async createAttribute(t){return await I7(t)}async createRecords(t){return await C7(t)}async updateRecords(t){return await k7(t)}async upsertRecords(t){try{return await F7(t)}catch(r){throw N7(r,null,null,O7.ERR,r)}}async deleteRecords(t){return await D7(t)}async dropAttribute(t){return await $7(t)}async deleteAuditLogsBefore(t){return await G7(t)}async readAuditLog(t){return await V7(t)}writeTransaction(t,r,n){return K7.writeTransaction(t,r,n)}flush(t,r){return z0.flush(t,r)}resetReadTxn(t,r){return z0.resetReadTxn(t,r)}getBackup(t){return Y7(t)}};Q0.exports=Fy});var qy={};ve(qy,{add:()=>Gm,applyReverse:()=>J0,getRecordAtTime:()=>Gy,rebuildUpdateBefore:()=>qm});function Gm(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 qm(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,Gm(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function J0(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=W7[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=X0}}function Gy(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ot(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":J0(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===X0&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ot(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var W7,X0,$m=be(()=>{Ji();a(Gm,"add");Gm.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)};W7={add:Gm};a(qm,"rebuildUpdateBefore");a(J0,"applyReverse");X0={};a(Gy,"getRecordAtTime")});function mn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Wm(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a number, attempt to assign ${h}`);mn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be a number, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Vn.ClientError(`${l} must be a Date, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof mi||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){mn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be an object, attempt to assign ${d}`);mn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let p=this.getRecord()?.[l];return _.update(p)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=$y(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");mn(this)[c]=l}),i("deleteProperty",function(c){mn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,ex);break}o=c}while(o&&o!==ex)}function $y(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends i_{static{a(this,"TrackedObject")}},Wm(r,t)),new r(e)):new i_(e);case Array:let n=new Km(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=$y(o,t?.elements)),n[s]=o}return n;default:return e}}function zm(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=zm(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 Pc(e,t=e.getChanges?.()){let r;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Pc(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=qy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Pc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)z7.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function Vm(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Cc]||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(Vm(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(Vm(s))return!0}else return!0}else return!0}}return!1}var Vn,Z0,ex,i_,z7,Cc,Km,Ym,Vy=be(()=>{Vn=M(he());$m();cs();a(mn,"getChanges");a(Wm,"assignTrackedAccessors");Z0=Object.prototype,ex=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Z0[t])return Z0[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=$y(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a($y,"trackObject");i_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Wm(i_,{});a(zm,"collapseData");z7=Object.prototype.hasOwnProperty;a(Pc,"updateAndFreeze");a(Vm,"hasChanges");Cc=Symbol.for("has-array-changes"),Km=class extends Array{static{a(this,"TrackedArray")}#e;[Cc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Cc]=!0,super.splice(...t)}push(...t){return this[Cc]=!0,super.push(...t)}pop(){return this[Cc]=!0,super.pop()}unshift(...t){return this[Cc]=!0,super.unshift(...t)}shift(){return this[Cc]=!0,super.shift()}};Km.prototype.constructor=Array;Ym=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var cx={};ve(cx,{ResourceBridge:()=>Wy});function zy({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 rx(e,t){let r=wi(e),n=zy(e,r);if(!r)throw new $s.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;bt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&zm(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function wi(e){let t=e.database||e.schema||j7,r=Je()[t];if(!r)throw(0,$s.handleHDBError)(new Error,Q7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function nx(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*sx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var ix,Qm,$s,ox,Ky,Yy,ax,Q7,j7,J7,X7,tx,Wy,lx=be(()=>{"use strict";ix=M(j0()),Qm=M(lu()),$s=M(he());Me();ox=M(Pf());H();Ky=M(io()),Yy=M(Gs()),ax=M(oe());rc();Vy();({HDB_ERROR_MSGS:Q7}=$s.hdb_errors),j7="data",J7=1e4,X7=10,Wy=class extends ix.default{static{a(this,"ResourceBridge")}constructor(t){super(t),tx=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,Qm.default)(t,"conditions");if(r)throw(0,$s.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=wi(t);if(!n)throw new $s.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:zy(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new $s.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}]}ut({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await wi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=wi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){wi(t).dropTable()}createSchema(t){return fu({database:t.schema,table:null}),Ky.signalSchemaChange(new Yy.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Qy(t.schema),Ky.signalSchemaChange(new Yy.SchemaEventMsg(process.pid,$t.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,tx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ox.default)(t),s,i=Je()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=zm(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let p=f[_];if(typeof p=="function")try{let S=p([[h]]);Array.isArray(S)&&(p=S[0].func_val,f[_]=p)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Je()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return nx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Je()[t.schema][t.table];if(!r.createdTimeProperty)throw new $s.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:Rp.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,ax.async_set_timeout)(X7),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%J7===0&&await u();return l.length>0&&await u(),s?nx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Qm.default)(t,"hashes");if(r)throw r;return rx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of rx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ZT[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Qm.default)(t,"value");if(n)throw n;let s=wi(t);if(!s)throw new $s.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Rp.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:zy(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=wi(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){wi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return wi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=wi(t),n={};switch(t.search_type){case yp.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case yp.USERNAME:let s=t.search_values;for await(let i of sx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return sx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(zy,"getSelect");a(rx,"getRecords");a(wi,"getTable");a(nx,"createDeleteResponse");a(sx,"groupRecordsInHistory")});var Hn=I((eNe,ux)=>{"use strict";var{ResourceBridge:Z7}=(lx(),D(cx)),eee=ce();eee.initSync();var jm;function tee(){return jm||(jm=new Z7,jm)}a(tee,"getBridge");ux.exports=tee()});var hn=I((rNe,hx)=>{"use strict";var Xm=BA(),Ir=oe(),ree=require("util"),Zm=Hn(),nee=Hs(),dx=j(),{handleHDBError:Dc,hdb_errors:see}=he(),{HTTP_STATUS_CODES:Lc}=see,iee=ree.promisify(nee.getTableSchema),oee="updated",fx="inserted",_x="upserted";hx.exports={insert:cee,update:lee,upsert:uee,validation:aee,flush:dee};async function aee(e){if(Ir.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ir.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ir.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await iee(e.schema,e.table),r=Xm(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ir.isEmptyOrZeroLength(c[n]))throw dx.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(!Ir.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw dx.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ir.isEmpty(c[n])&&c[n]!==""&&s.has(Ir.autoCast(c[n]))&&(c.skip=!0),s.add(Ir.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(aee,"validation");async function cee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Ir.transformReq(e);let r=Ir.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.createRecords(e);return Jm(fx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(cee,"insertData");async function lee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Ir.transformReq(e);let r=Ir.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.updateRecords(e);return Ir.isEmpty(n.existing_rows)?Jm(oee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Jm(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(lee,"updateData");async function uee(e){if(e.operation!=="upsert")throw Dc(new Error,"invalid operation, must be upsert",Lc.INTERNAL_SERVER_ERROR);let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Ir.transformReq(e);let r=Ir.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.upsertRecords(e);return Jm(_x,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(uee,"upsertData");function Jm(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===fx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===_x?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Jm,"returnObject");function dee(e){return Ir.transformReq(e),Zm.flush(e.schema,e.table)}a(dee,"flush")});var Tx=I((sNe,Sx)=>{var _u=require("validate.js"),mx=dt(),hu=(H(),D(q)),{handleHDBError:fee,hdb_errors:_ee}=he(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:hee}=_ee,jy=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),pee={STRUCTURE_USER:"structure_user"},px=Object.values(hu.ROLE_TYPES_ENUM),mee="attribute_permissions",Eee="attribute_name",{PERMS_CRUD_ENUM:pu}=hu,gee=[mee,...Object.values(pu)],Ex=[pu.READ,pu.INSERT,pu.UPDATE],See=[Eee,...Ex];function Tee(e){let t=jy();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,gx(e,t)}a(Tee,"addRoleValidation");function Aee(e){let t=jy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,gx(e,t)}a(Aee,"alterRoleValidation");function Ree(e){let t=jy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,mx.validateObject(e,t)}a(Ree,"dropRoleValidation");var yee=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function gx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)yee.includes(n[o])||s.push(n[o]);s.length>0&&rr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=mx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{rr(o,r)}),e.permission){let o=bee(e);o&&rr(o,r),px.forEach(c=>{e.permission[c]&&!_u.isBoolean(e.permission[c])&&rr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(px.indexOf(o)<0){if(o===pee.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||rr(Yt.SCHEMA_NOT_FOUND(d),r)}continue}rr(Yt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){rr(Yt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){rr(Yt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{gee.includes(f)||rr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(pu).forEach(f=>{_u.isDefined(u[f])?_u.isBoolean(u[f])||rr(Yt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):rr(Yt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){rr(Yt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){rr(Yt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!See.includes(S)&&S!==pu.DELETE&&rr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!_u.isDefined(_.attribute_name)){rr(Yt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let p=_.attribute_name;if(!f.includes(p)){rr(Yt.INVALID_ATTRIBUTE_IN_PERMS(p),r,o,l);continue}Ex.forEach(S=>{_u.isDefined(_[S])?_u.isBoolean(_[S])||rr(Yt.ATTR_PERM_NOT_BOOLEAN(S,p),r,o,l):rr(Yt.ATTR_PERM_MISSING(S,p),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;rr(Yt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return Oee(r)}a(gx,"customValidate");Sx.exports={addRoleValidation:Tee,alterRoleValidation:Aee,dropRoleValidation:Ree};function bee(e){let{operation:t,permission:r}=e;if(t===hu.OPERATIONS_ENUM.ADD_ROLE||t===hu.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 Yt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?hu.ROLE_TYPES_ENUM.SUPER_USER:hu.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(bee,"validateNoSUPerms");function Oee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Yt.ROLE_PERMS_ERROR,...e};return fee(new Error,n,hee.BAD_REQUEST)}else return null}a(Oee,"generateRolePermResponse");function rr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(rr,"addPermError")});var a_=I((aNe,bx)=>{"use strict";var Ax=hn(),Rx=$r(),Nee=Tc(),Xy=Tx(),Zy=io(),oNe=require("uuid").v4,wee=require("util"),eE=(H(),D(q)),Iee=oe(),eb=Rx.searchByValue,Cee=Rx.searchByHash,Pee=wee.promisify(Nee.delete),Dee=qs(),Lee=uu(),{hdb_errors:Mee,handleHDBError:Mc}=he(),{HDB_ERROR_MSGS:yx,HTTP_STATUS_CODES:o_}=Mee,{UserEventMsg:tb}=Gs();bx.exports={addRole:vee,alterRole:Uee,dropRole:xee,listRoles:Bee};function Jy(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(Jy,"scrubRoleDetails");async function vee(e){let t=Xy.addRoleValidation(e);if(t)throw t;e=Jy(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await eb(r)||[])}catch(i){throw Mc(i)}if(n&&n.length>0)throw Mc(new Error,yx.ROLE_ALREADY_EXISTS(e.role),o_.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 Ax.insert(s),Zy.signalUserChange(new tb(process.pid)),e=Jy(e),e}a(vee,"addRole");async function Uee(e){let t=Xy.alterRoleValidation(e);if(t)throw t;e=Jy(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Ax.update(r)}catch(s){throw Mc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Mc(new Error,"Invalid role id",o_.BAD_REQUEST,void 0,void 0,!0);return await Zy.signalUserChange(new tb(process.pid)),e}a(Uee,"alterRole");async function xee(e){let t=Xy.dropRoleValidation(e);if(t)throw Mc(new Error,t,o_.BAD_REQUEST,void 0,void 0,!0);let r=new Lee(eE.SYSTEM_SCHEMA_NAME,eE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Cee(r));if(n.length===0)throw Mc(new Error,yx.ROLE_NOT_FOUND,o_.NOT_FOUND,void 0,void 0,!0);let s=new Dee(eE.SYSTEM_SCHEMA_NAME,eE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await eb(s)),o=!1;if(Iee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Mc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,o_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Pee(c),Zy.signalUserChange(new tb(process.pid)),`${n[0].role} successfully deleted`}a(xee,"dropRole");async function Bee(){return eb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Bee,"listRoles")});var rb={};ve(rb,{start:()=>wx,startOnMainThread:()=>Fee});function wx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Ox.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Hee.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await kee(i)}}}async function kee(e){let t=Je().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Nx.isEqual)(i,e)?void 0:(e.id=r.id,(0,tE.alterRole)(e))}return(0,tE.addRole)(e)}var tE,Ox,Nx,Hee,Fee,Ix=be(()=>{Me();tE=M(a_()),Ox=require("yaml"),Nx=require("lodash"),Hee=["super_user","cluster_user","structure_user"];a(wx,"start");a(kee,"ensureRole");Fee=wx});async function rE(e){let t=(0,Dx.pathToFileURL)(e).toString();return Gee?(c_||(c_=qee(Vee)),(await(await c_).import(t)).namespace):import(t)}async function qee(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),c_=new Compartment({console,Math,Date,fetch:$ee,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Px.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Fr,tables:Kn,databases:qe})}};let n=await(0,Cx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),c_}function $ee(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 Vee(){return{Resource:Fr,tables:Kn}}var Cx,Px,Dx,Gee,c_,nb=be(()=>{Jo();Me();Cx=require("fs/promises"),Px=require("path"),Dx=require("url"),Gee=!1;a(rE,"secureImport");a(qee,"getCompartment");a($ee,"secureOnlyFetch");a(Vee,"getGlobalVars")});var ib={};ve(ib,{handleFile:()=>Kee});async function Kee(e,t,r,n){let s=new Map,i=await rE(r);c(i.default)&&n.set((0,sb.dirname)(t),i.default),o(i,(0,sb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var sb,Lx=be(()=>{nb();sb=require("path");a(Kee,"handleFile")});var ab={};ve(ab,{start:()=>Yee});function Yee({resources:e}){e.set("login",ob),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var ob,Mx=be(()=>{Jo();a(Yee,"start");ob=class extends Fr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var h_={};ve(h_,{addAnalyticsListener:()=>__,calculateCPUUtilization:()=>Xx,diffResourceUsage:()=>Zx,recordAction:()=>nr,recordActionBinary:()=>Yn,setAnalyticsEnabled:()=>Wee});function Wee(e){Wx=e}function zee(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 Qee(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},sE.set(e,o)}function nr(e,t,r,n,s){if(!Wx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=sE.get(i);o?zee(e,o):Qee(i,e,t,r,n,s),nE||jee()}function Yn(e,t,r,n,s){nr(!!e,t,r,n,s)}function __(e){jx.push(e)}function jee(){nE=performance.now(),setTimeout(async()=>{let e=performance.now()-nE;nE=0;let t=[],r={time:Date.now(),period:e,threadId:vc.threadId,metrics:t};for(let[s,i]of sE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of Jx){let h=Math.floor(c*d),_=o[h-1];if(h>l){let p=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+p}:S.count+=p}else u.push(p>1?{value:_,count:p}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await eB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:vc.threadId,byThread:!0,...n});for(let s of jx)s(t);sE=new Map,vc.parentPort?vc.parentPort.postMessage({type:Qx,report:r}):nB({report:r})},zx).unref()}function iE(e,t,r){let n={id:(0,d_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function Xx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function Zx(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Jee(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};iE(e,"table-size",l),Uc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function vx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getAuditSize(),o=Yx.default.statSync(s.primaryStore.env.path).size,c=Jee(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};iE(e,"database-size",u),Uc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Uc.warn?.("Error getting DB size metrics",s)}}function Ux(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};iE(e,"storage-volume",o),Uc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Uc.warn?.("Error getting DB volumne metrics",s)}}async function Xee(e,t=6e4){let r=lb(),n=tB(),s=new Promise(E=>{let A=performance.now();setImmediate(()=>{let O=performance.now();O-A>5e3&&Uc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-A)+"ms"),A=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-A>5e3&&Uc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-A)+"ms"),E(O-A)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:A}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!A)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:O,threadId:v}=A;for(let F of O||[]){let{path:G,method:Y,type:te,metric:se,count:X,total:ne,distribution:Q,threads:pe,...Re}=F;X||(X=1);let Ce=se+(G?"-"+G:"");Y!==void 0&&(Ce+="-"+Y),te!==void 0&&(Ce+="-"+te);let me=c.get(Ce);if(me){if(me.threads){let ct=me.threads[v];if(ct)me=ct;else{me.threads[v]={...Re};continue}}me.count||(me.count=1);let Jt=me.count;for(let ct in Re){let Ar=Re[ct];typeof Ar=="number"&&(me[ct]=(me[ct]*Jt+Ar*X)/(Jt+X))}me.count+=X,ne>=0&&(me.total+=ne,me.ratio=me.total/me.count)}else me={period:t,...F},delete me.distribution,c.set(Ce,me),me.byThread&&(me.threads=[],me.threads[v]={...Re},u.push(me));if(Q){Q=Q.map(ct=>typeof ct=="number"?{value:ct,count:1}:ct);let Jt=l.get(Ce);Jt?Jt.push(...Q):l.set(Ce,Q)}}await eB()}for(let E of u){let{path:A,method:O,type:v,metric:F,count:G,total:Y,distribution:te,threads:se,...X}=E;se=se.filter(ne=>ne);for(let ne in X){if(typeof E[ne]!="number")continue;let Q=0;for(let pe of se){let Re=pe[ne];typeof Re=="number"&&(Q+=Re)}E[ne]=Q}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,A]of l){let O=c.get(E);A.sort((ct,Ar)=>ct.value>Ar.value?1:-1);let v=O.count-1,F=[],G=0,Y=0,te;for(let ct of Jx){let Ar=v*ct;for(;G<Ar;)te=A[Y++],G+=te.count,Y===1&&G--;let is=A[Y>1?Y-2:0];te||(te=A[0]),F.push(te.value-(te.value-is.value)*(G-Ar)/te.count)}let[se,X,ne,Q,pe,Re,Ce,me,Jt]=F;Object.assign(O,{p1:se,p10:X,p25:ne,median:Q,p75:pe,p90:Re,p95:Ce,p99:me,p999:Jt})}let d;for(let[E,A]of c)A.id=(0,d_.getNextMonotonicTime)(),A.time=f,n.primaryStore.put(A.id,A,{append:!0}).then(O=>{O||n.primaryStore.put(A.id,A)}),d=!0;let h=Date.now(),{idle:_,active:p}=performance.eventLoopUtilization();if(d||p*10>_){let E=(0,d_.getNextMonotonicTime)(),A={id:E,metric:"main-thread-utilization",idle:_-xx,active:p-Bx,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,A,{append:!0}).then(O=>{O||n.primaryStore.put(E,A)})}xx=_,Bx=p;let S=process.resourceUsage(),g=Zx(l_,S);g.time=h,g.period=l_.time?h-l_.time:t,g.cpuUtilization=Xx(l_,g.period),iE(n,"resource-usage",g),l_=g;let R=Je();vx(n,R),vx(n,{system:R.system}),Ux(n,R),Ux(n,{system:R.system})}async function Hx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function lb(){return kx||(kx=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function tB(){return Fx||(Fx=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function tte(){rB=!0;let e=(0,f_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Xee(zx,e),await Hx(lb(),Zee),await Hx(tB(),ete)},Math.min(e/2,2147483647)).unref()}function nB(e,t){let r=e.report;r.threadId=t?.threadId||vc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Gx+=n.mean*n.count);r.totalBytesProcessed=Gx,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(qx.get(t))}),qx.set(t,t.performance.eventLoopUtilization())),r.id=(0,d_.getNextMonotonicTime)(),lb().primaryStore.put(r.id,r),rB||tte(),rte&&(sB=ste(r))}async function ste(e){if(await sB,!ca){let r=(0,u_.dirname)((0,Vx.getLogFilePath)());try{ca=await(0,cb.open)((0,u_.join)(r,"analytics.log"),"r+")}catch{ca=await(0,cb.open)((0,u_.join)(r,"analytics.log"),"w+")}}let t=(await ca.stat()).size;if(t>nte){let r=Buffer.alloc(t);await ca.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ca.write(r,{position:0}),await ca.truncate(r.length),t=r.length}await ca.write(JSON.stringify(e)+`
20
+ `,t)}var vc,$x,Vx,Kx,u_,cb,d_,f_,Yx,Uc,sE,Wx,nE,zx,Qx,jx,Jx,xx,Bx,l_,eB,Zee,ete,kx,Fx,rB,Gx,qx,rte,sB,ca,nte,Ii=be(()=>{vc=require("worker_threads"),$x=M(rt());Me();Vx=M(j()),Kx=M(hi()),u_=require("path"),cb=require("fs/promises"),d_=M(an()),f_=M(ce());H();Gr();Yx=M(require("node:fs")),Uc=(0,Kx.loggerWithTag)("analytics");(0,f_.initSync)();sE=new Map,Wx=(0,f_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(Wee,"setAnalyticsEnabled");a(zee,"recordExistingAction");a(Qee,"recordNewAction");a(nr,"recordAction");Ye.recordAnalytics=nr;a(Yn,"recordActionBinary");nE=0,zx=1e3,Qx="analytics-report",jx=[];a(__,"addAnalyticsListener");Jx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(jee,"sendAnalytics");a(iE,"storeMetric");a(Xx,"calculateCPUUtilization");a(Zx,"diffResourceUsage");a(Jee,"storeTableSizeMetrics");a(vx,"storeDBSizeMetrics");a(Ux,"storeVolumeMetrics");a(Xee,"aggregation");xx=0,Bx=0,l_={},eB=a(()=>new Promise(setImmediate),"rest");a(Hx,"cleanup");Zee=36e5,ete=31536e6;a(lb,"getRawAnalyticsTable");a(tB,"getAnalyticsTable");(0,$x.setChildListenerByType)(Qx,nB);a(tte,"startScheduledTasks");Gx=0,qx=new Map,rte=!1;a(nB,"recordAnalytics");nte=1e6;a(ste,"logAnalytics")});var iB={};ve(iB,{Headers:()=>co,appendHeader:()=>oE,mergeHeaders:()=>ub});function oE(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 ub(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new co(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 co,p_=be(()=>{co=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(oE,"appendHeader");a(ub,"mergeHeaders")});function uB(e){let t={openapi:ite,info:{title:"HarperDB HTTP REST interface",version:lB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:A,name:O,elements:v,relationship:F,definition:G}of o){if(F)A==="array"?u[O]={type:"array",items:{$ref:la+v.type}}:u[O]={$ref:la+A};else{let Y=G??v?.definition;if(Y){if(!t.components.schemas[Y.type]){let te={};Y.properties.forEach(se=>{te[se.name]=new hb(db[se.type],se.type)}),t.components.schemas[Y.type]=new cB(te)}A==="array"?u[O]={type:"array",items:{$ref:la+Y.type}}:u[O]={$ref:la+Y.type}}else A==="array"?v.type==="Any"||v.type=="ID"?u[O]={type:"array",items:{format:v.type}}:u[O]={type:"array",items:new hb(db[v.type],v.type)}:A==="Any"||A=="ID"?u[O]={format:A}:u[O]=new hb(db[A],A)}f.push(new pb(O,"query",u[O]))}let d=Object.keys(u),h=new pb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new pb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new cB(u);let p=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",E="/"+s+"/";p&&(t.paths[E]={},t.paths[E].post=new ote(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new fb(f,r,{200:new _b({$ref:la+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new aB(f,r,"delete all the records that match the provided query",{204:new oB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new fb([h],r,{200:new _b({$ref:la+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new ate([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new aB([h],r,"delete a record with the given primary key",{204:new oB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new fb([h,_],r,{200:new _b({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function ote(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:la+e}}}},this.security=t,this.responses={200:{description:mb,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function fb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function _b(e){this.description=mb,this.content={"application/json":{schema:e}}}function oB(){this.description="successfully processed request, no content returned to client"}function ate(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:la+r}}}},this.responses={200:{description:mb}}}function aB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function cB(e){this.type="object",this.properties=e}function hb(e,t){this.type=e,this.format=t}function pb(e,t,r){this.name=e,this.in=t,this.schema=r}var lB,ite,db,la,mb,dB=be(()=>{lB=M(Et()),ite="3.0.3",db={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},la="#/components/schemas/",mb="successful operation";a(uB,"generateJsonApi");a(ote,"Post");a(fb,"Get");a(_b,"Response200");a(oB,"Response204");a(ate,"Put");a(aB,"Delete");a(cB,"ResourceSchema");a(hb,"Type");a(pb,"Parameter")});var cE={};ve(cE,{parseHeaderValue:()=>gb,start:()=>ute});async function lte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Fp(e);let i=new co;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==fB){let g=aE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new nc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=gb(g);for(let E of R)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=gb(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Qi(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new mu.ClientError(g,400)}if(e.authorize=!0,o===fB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return uB(aE);throw new mu.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new mu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new mu.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,Eb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=ub(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=pf(d.data,e,d)),d}else if(_=e.lastModified){cte[0]=_;let g=String.fromCharCode(34,(Cr[0]&63)+62,(Cr[0]>>6)+(Cr[1]<<2&63)+62,(Cr[1]>>4)+(Cr[2]<<4&63)+62,(Cr[2]>>2)+62,(Cr[3]&63)+62,(Cr[3]>>6)+(Cr[4]<<2&63)+62,(Cr[4]>>4)+(Cr[5]<<4&63)+62,(Cr[5]>>2)+62,(Cr[6]&63)+62,(Cr[6]>>6)+(Cr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),Eb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(p.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(p.body=pf(d,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(o){o.statusCode?o.statusCode===500?Ci.warn(o):Ci.info(o):Ci.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=pf(o.contentType?o:o.toString(),e,c),c}}function ute(e){Eb=e,!_B&&(_B=!0,aE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return lte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{m_++;let s=new Pn;hB||(hB=!0,__(l=>{m_>0&&l.push({metric:"ws-connections",connections:m_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ci.warn(l)});let o;t.on("message",a(function(u){o||(o=Qi(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);nr(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{m_--,Yn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=aE.getMatch(l,"ws");if(Yn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,nr(p=>({count:p.count,total:m_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new nc(u.relativeURL),d=u.Resource;c=(await bt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let p=await Zo(_.value,r);t.send(p),nr(p.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ci.warn(l):Ci.info(l):Ci.error(l),t.close(dte[l.statusCode]||1011,l.toString())}t.close()},e))}function gb(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ci,mu,Cr,cte,Eb,fB,_B,aE,hB,m_,dte,pB=be(()=>{ji();Ii();Ci=M(j()),mu=M(he());lf();Fl();rc();p_();dB();lf();Cr=new Uint8Array(8),cte=new Float64Array(Cr.buffer,0,1),Eb={},fB="openapi";a(lte,"http");m_=0;a(ute,"start");dte={401:3e3,403:3003};a(gb,"parseHeaderValue")});var Sb=I((xNe,EB)=>{var{recordAction:lE,recordActionBinary:mB}=(Ii(),D(h_)),fte=require("fastify-plugin"),_te=200;EB.exports=fte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),lE(o,"duration",u,d,f),mB(s.raw.statusCode<400,"success",u,d,f),mB(1,"response_"+s.raw.statusCode,u,d,f);let h=_te;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{lE(performance.now()-c,"transfer",u,d,f),lE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,lE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),p=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",p?`${p}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var SB=I((BNe,gB)=>{var hte=dt(),pte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};gB.exports=function(e){return hte.validateObject(e,pte)}});var uE=I((HNe,TB)=>{"use strict";var mte=(H(),D(q)).OPERATIONS_ENUM,Tb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=mte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};TB.exports=Tb});var S_={};ve(S_,{createTokens:()=>gte,getJWTRSAKeys:()=>pE,refreshOperationToken:()=>Ste,validateOperationToken:()=>yb,validateRefreshToken:()=>mE});async function pE(){if(dE)return dE;try{let e=E_.default.join(g_.default.getHdbBasePath(),jT),t=await fE.default.readFile(E_.default.join(e,Yd.JWT_PASSPHRASE_NAME),"utf8"),r=await fE.default.readFile(E_.default.join(e,Yd.JWT_PRIVATE_KEY_NAME),"utf8");return dE={publicKey:await fE.default.readFile(E_.default.join(e,Yd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},dE}catch(e){throw hE.default.error(e),new Vs.ClientError(gu.NO_ENCRYPTION_KEYS,Eu.INTERNAL_SERVER_ERROR)}}async function gte(e){let t=(0,Ab.validateBySchema)(e,Pi.default.object({username:Pi.default.string().optional(),password:Pi.default.string().optional(),role:Pi.default.string().optional(),expires_in:Pi.default.alternatives(Pi.default.string(),Pi.default.number()).optional()}));if(t)throw new Vs.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,Rb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw hE.default.error(d),new Vs.ClientError(gu.INVALID_CREDENTIALS,Eu.UNAUTHORIZED)}if(!r)throw new Vs.ClientError(gu.INVALID_CREDENTIALS,Eu.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await pE(),c=await Su.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??OB,algorithm:_E,subject:"operation"}),l=await Su.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Ete,algorithm:_E,subject:"refresh"}),u=BR(l,"sha256");if((await(0,AB.update)(new RB.default(Kd,Hl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Vs.ClientError(gu.REFRESH_TOKEN_SAVE_FAILED,Eu.INTERNAL_SERVER_ERROR);return yB.default.signalUserChange(new bB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function Ste(e){let t=(0,Ab.validateBySchema)(e,Pi.default.object({refresh_token:Pi.default.string().required()}).required());if(t)throw new Vs.ClientError(t.message);let{refresh_token:r}=e;await mE(r);let n=await pE(),s=await Su.default.decode(r);return{operation_token:await Su.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:OB,algorithm:_E,subject:"operation"})}}async function yb(e){return NB(e,"operation")}async function mE(e){return NB(e,"refresh")}async function NB(e,t){try{let r=await pE(),n=await Su.default.verify(e,r.publicKey,{algorithms:_E,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,Rb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!HR(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw hE.default.warn(r),r?.name==="TokenExpiredError"?new Vs.ClientError(gu.TOKEN_EXPIRED,Eu.FORBIDDEN):new Vs.ClientError(gu.INVALID_TOKEN,Eu.UNAUTHORIZED)}}var Su,fE,E_,Pi,Ab,Vs,hE,Rb,AB,RB,yB,bB,g_,Eu,gu,OB,Ete,_E,dE,Tu=be(()=>{Su=M(require("jsonwebtoken")),fE=M(require("fs-extra")),E_=M(require("node:path")),Pi=M(require("joi")),Ab=M(dt());H();Vs=M(he()),hE=M(j());Rm();Rb=M(Gn()),AB=M(hn()),RB=M(uE()),yB=M(io()),bB=M(Gs()),g_=M(ce()),{HTTP_STATUS_CODES:Eu,AUTHENTICATION_ERROR_MSGS:gu}=Vs.hdb_errors;g_.default.initSync();OB=g_.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Ete=g_.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",_E="RS256";a(pE,"getJWTRSAKeys");a(gte,"createTokens");a(Ste,"refreshOperationToken");a(yb,"validateOperationToken");a(mE,"validateRefreshToken");a(NB,"validateToken")});var bb=I(($Ne,CB)=>{"use strict";var Tte=SB(),Au=require("passport"),Ate=require("passport-local").Strategy,Rte=require("passport-http").BasicStrategy,yte=require("util"),bte=Gn(),IB=yte.callbackify(bte.findAndValidateUser),qNe=Cn(),Ote=(H(),D(q)),wB=(Tu(),D(S_));Au.use(new Ate(function(e,t,r){IB(e,t,r)}));Au.use(new Rte(function(e,t,r){IB(e,t,r)}));Au.serializeUser(function(e,t){t(null,e)});Au.deserializeUser(function(e,t){t(null,e)});function Nte(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Au.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Ote.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):wB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Au.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Nte,"authorize");function wte(e,t){let r=Tte(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(wte,"checkPermissions");CB.exports={authorize:Nte,checkPermissions:wte}});var EE=I((KNe,PB)=>{"use strict";var Ite=Hn();PB.exports={writeTransaction:Cte};function Cte(e,t,r){return Ite.writeTransaction(e,t,r)}a(Cte,"writeTransaction")});var vB=I((zNe,MB)=>{"use strict";var Pte=$r(),Dte=Hs(),DB=j(),Lte=hn(),WNe=EE(),Mte=require("clone"),Nb=require("alasql"),vte=hm(),LB=require("util"),Ute=LB.promisify(Dte.getTableSchema),xte=LB.promisify(Pte.search),Bte=(H(),D(q)),Ob=oe();vte(Nb);MB.exports={update:kte};var Hte="There was a problem performing this update. Please check the logs and try again.";async function kte({statement:e,hdb_user:t}){let r=await Ute(e.table.databaseid,e.table.tableid),n=Fte(e.columns);Ob.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Mte(s),c=Ob.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=Nb.parse(l).statements[0],f=await xte(u),d=Gte(n,f);return qte(o,d,t)}a(kte,"update");function Fte(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Nb.compile(`SELECT ${r.expression.toString()} AS [${Bte.FUNC_VAL}] FROM ?`)}),t}catch(t){throw DB.error(t),new Error(Hte)}}a(Fte,"createUpdateRecord");function Gte(e,t){return Ob.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Gte,"buildUpdateRecords");async function qte(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Lte.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){DB.error(`Error delete new_attributes from update response: ${i}`)}return s}a(qte,"updateRecords")});var xB=I((XNe,UB)=>{var $te=require("alasql"),Vte=$r(),Kte=j(),Yte=Hn(),Ib=require("util"),wb=oe(),Wte=(H(),D(q)),zte=Hs(),jNe=EE(),JNe=hn(),Qte="record",jte="successfully deleted",Jte=Ib.callbackify(tre),Xte=Ib.promisify(Vte.search),Zte=Ib.promisify(zte.getTableSchema);UB.exports={convertDelete:Jte};function ere(e){return`${e.deleted_hashes.length} ${Qte}${e.deleted_hashes.length===1?"":"s"} ${jte}`}a(ere,"generateReturnMessage");async function tre({statement:e,hdb_user:t}){let r=await Zte(e.table.databaseid,e.table.tableid);wb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=wb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=$te.parse(o).statements[0],l={operation:Wte.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Xte(c);let u=await Yte.deleteRecords(l);return wb.isEmptyOrZeroLength(u.message)&&(u.message=ere(u)),delete u.txn_time,u}catch(u){throw Kte.error(u),u.hdb_code?u.message:u}}a(tre,"convertDelete")});var GB=I((ewe,FB)=>{"use strict";var rre=no(),{hdb_errors:BB}=he(),{getDatabases:HB}=(Me(),D(st));FB.exports={checkSchemaExists:kB,checkSchemaTableExists:nre,schema_describe:rre};async function kB(e){if(!HB()[e])return BB.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kB,"checkSchemaExists");async function nre(e,t){let r=await kB(e);if(r)return r;if(!HB()[e][t])return BB.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(nre,"checkSchemaTableExists")});var Mb=I((iwe,ZB)=>{"use strict";var{decode:sre}=require("msgpackr"),{isMainThread:rwe,parentPort:nwe,threadId:swe}=require("worker_threads"),TE=pr(),Ru=Nt(),Db=(H(),D(q)),Wr=j(),Pb=ce(),ire=(H(),D(q)),{onMessageByType:ore}=rt(),KB=ro(),{recordAction:qB,recordActionBinary:are}=(Ii(),D(h_)),{publishToStream:cre}=TE,{ConsumerEvents:$B}=require("nats"),lre=$r(),{promisify:ure}=require("util"),{decodeBlobsWithWrites:dre}=(cs(),D(bE)),YB=ure(setTimeout),AE=1e4,RE,SE,fre,_re,WB,T_=new Map,yu=new Map;ZB.exports={initialize:zB,ingestConsumer:Lb,setSubscription:hre,setIgnoreOrigin:Ere,getDatabaseSubscriptions:mre,updateConsumer:QB};async function zB(){ore(Db.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await QB(n)}),WB=!0,Wr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await TE.getNATSReferences();RE=e,SE=e.info.server_name,fre=t,_re=r}a(zB,"initialize");async function QB(e){if(e.status==="start"){let{js:t,jsm:r}=await jB(e.node_domain_name);Lb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=T_.get(e.stream_name+e.node_domain_name);t&&(Wr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),T_.set(e.stream_name+e.node_domain_name,"close")),yu.get(e.node_domain_name)==="failed"&&yu.set(e.node_domain_name,"close")}}a(QB,"updateConsumer");var yE=new Map;function hre(e,t,r){let n=yE.get(e);n||yE.set(e,n=new Map),n.set(t,r),WB||zB().then(pre)}a(hre,"setSubscription");async function pre(){let e=await lre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ru.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await jB(r),!n))break;let{schema:o,table:c}=i,l=KB.createNatsTableStreamName(o,c);Lb(l,n,s,r)}}}a(pre,"accessConsumers");async function jB(e){let t,r,n=1;for(;!r;)try{t=await RE.jetstream({domain:e}),r=await RE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(yu.get(e)==="close")break;yu.set(e,"failed"),n%10===1&&Wr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<AE?n++*100:AE;await YB(i)}return{js:t,jsm:r}}a(jB,"connectToRemoteJS");function mre(){return yE}a(mre,"getDatabaseSubscriptions");var JB;function Ere(e){JB=e}a(Ere,"setIgnoreOrigin");var XB=100,VB=new Array(XB),gE=0;async function Lb(e,t,r,n){let{connection:s}=await TE.getNATSReferences();RE=s,SE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,SE),Wr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(yu.get(n)==="close")break;o%10===1&&Wr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Wr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await TE.createConsumer(r,e,SE,new Date(Date.now()).toISOString()));let f=o++*100<AE?o++*100:AE;await YB(f)}let c=!1,l;for(;!c;){if(T_.get(e+n)==="close"||yu.get(n)==="close"){T_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Pb.get(Db.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),T_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===$B.ConsumerDeleted&&(await l.close(),c=!0),f.type===$B.HeartbeatsMissed){let d=f.data;Wr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Wr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await VB[gE],VB[gE]=gre(f).catch(d=>{Wr.error(d)}),++gE>=XB&&(gE=0)}catch(f){f.message==="consumer deleted"?(Wr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Wr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(Lb,"ingestConsumer");async function gre(e){let t;await dre(()=>{t=sre(e.data)}),qB(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Wr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Pb.get(Db.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ru.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ru.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ru.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!JB),are(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ru.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;Wr.trace("processing message:",o,c,u,(f?"records: "+f.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Wr.trace(`messageProcessor nats msg id: ${e.headers.get(Ru.MSG_HEADERS.NATS_MSG_ID)}`);let p;f||(f=d);let S=new Promise(v=>p=v),{timestamp:g,user:R,node_name:E}=h||{},A=yE.get(c)?.get(u);if(!A)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=p,A.send(t);else if(f.length===1&&!l)A.send({type:Cb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:p,user:R,nodeName:E});else{let v=f.map((F,G)=>({type:Cb(o),value:F,expiresAt:_,id:d?.[G],table:u}));for(;l;)v.push({type:Cb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:v,table:u,timestamp:g,onCommit:p,user:R,nodeName:E})}Pb.get(ire.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&cre(e.subject.split(".").slice(0,-1).join("."),KB.createNatsTableStreamName(c,u),e.headers,e.data),await S;let O=Date.now()-g;g&&qB(O,"replication-latency",e.subject,o,"ingest")}catch(o){Wr.error(o)}e.ack()}a(gre,"messageProcessor");function Cb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Cb,"convertOperation")});var pr=I((fwe,mH)=>{"use strict";var br=ce();br.initSync();var Sre=require("fs-extra"),Tre=require("semver"),y_=require("path"),{monotonicFactory:Are}=require("ulidx"),tH=Are(),Rre=require("util"),rH=require("child_process"),yre=Rre.promisify(rH.exec),bre=rH.spawn,Pr=Nt(),$e=(H(),D(q)),{packageJson:Ore,PACKAGE_ROOT:Nre}=Et(),OE=oe(),Ks=j(),NE=ro(),wre=EE(),A_=It(),{broadcast:Ire,onMessageByType:Cre,getWorkerIndex:Pre}=rt(),{isMainThread:nH}=require("worker_threads"),{Encoder:Dre,decode:Bb}=require("msgpackr"),sH=new Dre,{isEmpty:kc}=OE,iH=Gn(),awe=48*36e11;nH&&Cre($e.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,Hc=void 0});var{connect:Lre,StorageType:Mre,RetentionPolicy:vre,AckPolicy:Hb,DeliverPolicy:kb,DiscardPolicy:Ure,NatsConnection:cwe,JetStreamManager:lwe,JetStreamClient:uwe,StringCodec:dwe,JSONCodec:xre,createInbox:Fb,headers:Bre,ErrorCode:eH}=require("nats"),{recordAction:Hre}=(Ii(),D(h_)),{encodeBlobsAsBuffers:kre}=(cs(),D(bE)),oH=xre(),Fre="clustering",Gre=Ore.engines[Pr.NATS_SERVER_NAME],qre=y_.join(Nre,"dependencies"),xb=y_.join(qre,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),vb,Ub,R_,xc,Bc;mH.exports={runCommand:aH,checkNATSServerInstalled:$re,createConnection:Gb,getConnection:b_,getJetStreamManager:O_,getJetStream:lH,getNATSReferences:Di,getServerList:Kre,createLocalStream:qb,listStreams:uH,deleteLocalStream:Yre,getServerConfig:bu,listRemoteStreams:Wre,viewStream:zre,viewStreamIterator:Qre,publishToStream:jre,request:Zre,reloadNATS:$b,reloadNATSHub:ene,reloadNATSLeaf:tne,extractServerName:Xre,requestErrorHandler:rne,createLocalTableStream:hH,createTableStreams:ine,purgeTableStream:pH,purgeSchemaTableStreams:one,getStreamInfo:ane,updateLocalStreams:lne,closeConnection:Vre,getJsmServerName:wE,addNatsMsgHeader:dH,clearClientCache:cH,updateRemoteConsumer:nne,createConsumer:fH,updateConsumerIterator:sne};async function aH(e,t=void 0){let{stdout:r,stderr:n}=await yre(e,{cwd:t});if(n)throw new Error(n.replace(`
21
21
  `,""));return r.replace(`
22
- `,"")}a(iH,"runCommand");async function qre(){try{await gre.access(Ub)}catch{return!1}let e=await iH(`${Ub} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Sre.eq(t,Fre)}a(qre,"checkNATSServerInstalled");async function Fb(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await nH.getClusterUser();if(kc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ys.trace("create nats connection called");let i=await Dre({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:br.get(Ve.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:br.get(Ve.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:br.get(Ve.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ys.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ys.error("Error with Nats client connection, connection closed",o),i===Qr&&oH()}),i}a(Fb,"createConnection");function oH(){Qr=void 0,xc=void 0,Bc=void 0,Hc=void 0}a(oH,"clearClientCache");async function $re(){Qr&&(await Qr.drain(),Qr=void 0,xc=void 0,Bc=void 0,Hc=void 0)}a($re,"closeConnection");var Qr,Hc;async function b_(){return Hc||(Hc=Fb(br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await Hc),Qr||Hc}a(b_,"getConnection");async function O_(){if(xc)return xc;kc(Qr)&&await b_();let{domain:e}=bu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xc=await Qr.jetstreamManager({domain:e,timeout:6e4}),xc}a(O_,"getJetStreamManager");async function aH(){if(Bc)return Bc;kc(Qr)&&await b_();let{domain:e}=bu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Bc=Qr.jetstream({domain:e,timeout:6e4}),Bc}a(aH,"getJetStream");async function Li(){let e=Qr||await b_(),t=xc||await O_(),r=Bc||await aH();return{connection:e,jsm:t,js:r}}a(Li,"getNATSReferences");async function Vre(e){let t=br.get(Ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await nH.getClusterUser(),s=await Fb(t,r,n),i=kb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=sH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await OE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Vre,"getServerList");async function Gb(e,t){let{jsm:r}=await Li(),n=br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Lre.File,retention:Mre.Limits,subjects:t,discard:vre.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Gb,"createLocalStream");async function cH(){let{jsm:e}=await Li(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(cH,"listStreams");async function Kre(e){let{jsm:t}=await Li();await t.streams.delete(e)}a(Kre,"deleteLocalStream");async function Yre(e){let{connection:t}=await Li(),r=[],n=kb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(sH.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Yre,"listRemoteStreams");async function Wre(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=ZB(),o={durable_name:i,ack_policy:Bb.Explicit};t&&(o.deliver_policy=Hb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=xb(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Dr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(Wre,"viewStream");async function*zre(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=ZB(),o={durable_name:i,ack_policy:Bb.Explicit};t&&(o.deliver_policy=Hb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=xb(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Dr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(zre,"viewStreamIterator");async function Qre(e,t,r,n){Ys.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=lH(n,r);let{js:s}=await Li(),i=await wE(),o=`${e}.${i}`,c=await Hre(()=>n instanceof Uint8Array?n:rH.encode(n));try{Ys.trace(`publishToStream publishing to subject: ${o}`),Bre(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return dH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ys.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await Gb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Qre,"publishToStream");function lH(e,t){t===void 0&&(t=xre());let r=br.get(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Dr.MSG_HEADERS.ORIGIN)&&r&&t.append(Dr.MSG_HEADERS.ORIGIN,r),t}a(lH,"addNatsMsgHeader");function bu(e){e=e.toLowerCase();let t=y_.join(br.get(Ve.CONFIG_PARAMS.ROOTPATH),kre);if(e===Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return kc(vb)&&(vb={port:A_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:A_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.HUB,config_file:Dr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:y_.join(t,Dr.PID_FILES.HUB),hdb_nats_path:t}),vb;if(e===Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return kc(Mb)&&(Mb={port:A_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:A_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.LEAF,config_file:Dr.NATS_CONFIG_FILES.LEAF_SERVER,domain:A_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.LEAF,pid_file_path:y_.join(t,Dr.PID_FILES.LEAF),hdb_nats_path:t}),Mb;Ys.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(bu,"getServerConfig");async function uH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Bb.Explicit,durable_name:r,deliver_policy:Hb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(uH,"createConsumer");async function jre(e,t,r){await e.consumers.delete(t,r)}a(jre,"removeConsumer");function Jre(e){return e.split(".")[1]}a(Jre,"extractServerName");async function Xre(e,t,r=6e4,n=kb()){if(!OE.isObject(t))throw new Error("data param must be an object");let s=rH.encode(t),{connection:i}=await Li(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return xb(c.data)}a(Xre,"request");function qb(e){return new Promise(async(t,r)=>{let n=yre(Ub,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(qb,"reloadNATS");async function Zre(){let{pid_file_path:e}=bu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await qb(e)}a(Zre,"reloadNATSHub");async function ene(){let{pid_file_path:e}=bu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await qb(e)}a(ene,"reloadNATSLeaf");function tne(e,t,r){let n;switch(e.code){case XB.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case XB.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(tne,"requestErrorHandler");async function rne(e,t){let r=t+Dr.SERVER_SUFFIX.LEAF,{connection:n}=await Li(),{jsm:s}=await une(r),{schema:i,table:o}=e,c=NE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await dH(async()=>{if(e.subscribe===!0)await uH(s,c,n.info.server_name,l);else try{await jre(s,c,n.info.server_name)}catch(u){Ys.trace(u)}})}a(rne,"updateRemoteConsumer");async function nne(e,t,r,n){let s=NE.createNatsTableStreamName(e,t),i=r+Dr.SERVER_SUFFIX.LEAF,o={type:Ve.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!tH&&Cre()<br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Lb();await c(o)}await wre(o),n==="stop"&&await OE.async_set_timeout(1e3)}a(nne,"updateConsumerIterator");function dH(e){return Nre.writeTransaction(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(dH,"exclusiveLock");async function fH(e,t){let r=NE.createNatsTableStreamName(e,t),n=await wE(),s=ane(e,t,n);await Gb(r,[s])}a(fH,"createLocalTableStream");async function sne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await fH(n,s)}}a(sne,"createTableStreams");async function _H(e,t,r=void 0){if(br.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=NE.createNatsTableStreamName(e,t),{domain:s}=bu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await b_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ys.warn(n);else throw n}}a(_H,"purgeTableStream");async function ine(e,t){if(br.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await _H(e,t[r])}a(ine,"purgeSchemaTableStreams");async function one(e){return(await O_()).streams.info(e)}a(one,"getStreamInfo");function ane(e,t,r){return`${Dr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(ane,"createSubjectName");async function wE(){if(R_)return R_;if(R_=(await O_())?.nc?.info?.server_name,R_===void 0)throw new Error("Unable to get jetstream manager server name");return R_}a(wE,"getJsmServerName");async function cne(){let e=await O_(),t=await wE(),r=await cH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=lne(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");Ys.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(cne,"updateLocalStreams");function lne(e){let{config:t}=e,r=!1,n=br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=br.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(lne,"updateStreamLimits");async function une(e){let t,r;try{t=await Qr.jetstream({domain:e}),r=await Qr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ys.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(une,"connectToRemoteJS")});function $b(e){let t=e.get(IE),r=t?(0,Ou.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Xe(),s=!1;r.nodeName=Xe();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:w_(e)??1,nodes:[]})})}i[n]=0,e.putSync(IE,(0,Ou.pack)(r))}return r}function N_(e){return $b(e).remoteNameToId}function mH(e,t){let r=$b(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(IE,(0,Ou.pack)(r)),s}function CE(e,t){let r=$b(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(IE,(0,Ou.pack)(r))}return pH.trace?.("The remote node name map",e,n,s),s}var pH,Ou,IE,Vb=be(()=>{pH=M(pi());_s();Ou=require("msgpackr"),IE=Symbol.for("remote-ids");a($b,"getIdMappingRecord");a(N_,"exportIdMapping");a(mH,"remoteToLocalNodeId");a(CE,"getIdOfRemoteNode")});var Kb={};ve(Kb,{commits_awaiting_replication:()=>wu,getHDBNodeTable:()=>pr,getReplicationSharedStatus:()=>PE,iterateRoutes:()=>C_,shouldReplicateToNode:()=>I_,subscribeToNodeUpdates:()=>Iu});function pr(){return EH||(EH=ct({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 PE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Iu(e){pr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;AH.debug?.("adding node",n,"on node",Xe()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==Xe()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function I_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&pr().primaryStore.get(Xe())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function dne(){Iu(e=>{da({},(t,r)=>{let n=e.name,s=gH.get(n);if(s||gH.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=PE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of wu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*C_(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=Nu.default.get(x.REPLICATION_SECUREPORT)??(!Nu.default.get(x.REPLICATION_PORT)&&Nu.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Nu.default.get(x.REPLICATION_PORT)||Nu.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){SH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates}}}var SH,TH,Nu,AH,EH,gH,wu,Fc=be(()=>{Me();_s();Bp();SH=require("worker_threads"),TH=M(he()),Nu=M(le());H();AH=M(pi());server.nodes=[];a(pr,"getHDBNodeTable");a(PE,"getReplicationSharedStatus");a(Iu,"subscribeToNodeUpdates");a(I_,"shouldReplicateToNode");gH=new Map;cD((e,t,r)=>{if(r>server.nodes.length)throw new TH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);wu||(wu=new Map,dne());let n=wu.get(e);return n||(n=[],wu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(dne,"startSubscriptionToReplications");a(C_,"iterateRoutes")});var OH={};ve(OH,{connectedToNode:()=>Gc,disconnectedFromNode:()=>Du,ensureNode:()=>uo,requestClusterStatus:()=>bH,startOnMainThread:()=>Wb});async function Wb(e){let t=0,r=Je();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){DE.set(i,w_(l.auditStore));break}}}Mi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of C_(e))try{let c=!o.subscriptions;if(c){let u=Xe();pr().primaryStore.get(u)===void 0&&await uo(u,{name:u,url:e.url??fa(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Iu(s)});let n;function s(i,o=i?.name){let c=Xe()&&o===Xe()||fa()&&i?.url===fa();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of pr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(it.trace("Setting up node replication for",i),!i){for(let[d,h]of lo){let _;for(let[p,{worker:S,nodes:g}]of h){let A=g[0];if(A&&A.name==o){_=!0;for(let[E,{worker:R}]of h)h.delete(E),it.warn("Node was deleted, unsubscribing from node",o,E,d),R?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){lo.get(d).iterator.remove(),lo.delete(d);return}}return}if(c)return;if(!i.url){it.info(`Node ${i.name} is missing url`);return}let l=lo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(it.info(`Added node ${i.name} at ${i.url} for process ${Xe()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Cu)if(i.url===h.url){Cu.delete(d);break}Cu.set(i.name,i)}let u=Je();if(l||(l=new Map,lo.set(i.url,l)),l.iterator=da(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(it.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){it.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),p,S=[{replicateByDefault:h,...i}];DE.has(d)&&(S.push({replicateByDefault:h,name:Xe(),start_time:DE.get(d),end_time:Date.now(),replicates:!0}),DE.delete(d));let g=I_(i,d),A=Mi.workers.filter(E=>E.name==="http");if(_?(p=_.worker,_.nodes=S):g&&(t=t%A.length,p=A[t++],l.set(d,{worker:p,nodes:S,url:i.url}),p?.on("exit",()=>{l.get(d)?.worker===p&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};p?p.postMessage(E):Pu(E)},fne);else{it.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],pr().primaryStore.get(Xe())?.replicates),pr().primaryStore.get(Xe())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};p?p.postMessage(E):ME(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Du=a(function(i){try{it.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Cu.keys()),c=o.sort(),l=c.indexOf(i.name||Ws(i.url));if(l===-1){it.warn("Disconnected node not found in node map",i.name,o);return}let u=lo.get(i.url),f=u?.get(i.database);if(!f){it.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],p=Cu.get(_);u=lo.get(p.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:A}=S,E=!1;for(let R of f.nodes){if(A.some(N=>N.name===R.name)){it.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}A.push(R),E=!0}if(!E){it.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,it.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:A}):Pu({database:i.database,nodes:A});return}it.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){it.error("Error failing over node",o)}},"disconnectedFromNode"),Gc=a(function(i){let o=lo.get(i.url),c=o?.get(i.database);if(!c){it.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):Pu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Mi.onMessageByType)("disconnected-from-node",Du),(0,Mi.onMessageByType)("connected-to-node",Gc),(0,Mi.onMessageByType)("request-cluster-status",bH)}function bH(e,t){let r=[];for(let[n,s]of Cu)try{let i=lo.get(s.url);it.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,Yb.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){it.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function uo(e,t){let r=pr();e=e??Ws(t.url),t.name=e;try{if(t.ca){let s=new yH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){it.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(it.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!RH.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Yb.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}it.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Mi,LE,it,Yb,RH,yH,fne,lo,Du,Gc,Cu,DE,P_=be(()=>{Me();Mi=M(tt());_s();LE=require("worker_threads");Fc();it=M(Q()),Yb=require("lodash"),RH=M(le());H();yH=require("crypto"),fne=200,lo=new Map,Cu=new Map,DE=new Map;a(Wb,"startOnMainThread");a(bH,"requestClusterStatus");LE.parentPort&&(Du=a(e=>{LE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Gc=a(e=>{LE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Mi.onMessageByType)("subscribe-to-node",e=>{Pu(e)}),(0,Mi.onMessageByType)("unsubscribe-from-node",e=>{ME(e)}));a(uo,"ensureNode")});var js=I(zH=>{"use strict";var nr=require("path"),gn=require("fs-extra"),Lu=require("node-forge"),DH=require("net"),{generateKeyPair:Qb,X509Certificate:fo,createPrivateKey:LH}=require("crypto"),_ne=require("util");Qb=_ne.promisify(Qb);var At=Lu.pki,zs=require("joi"),{v4:MH}=require("uuid"),{validateBySchema:Zb}=lt(),dt=Q(),hs=le(),ps=(H(),P($)),{CONFIG_PARAMS:Mu}=ps,Qs=FR(),{ClientError:ha}=he(),vE=require("node:tls"),{relative:vH,join:hne}=require("node:path"),{CERT_PREFERENCE_APP:Iwe,CERTIFICATE_VALUES:NH}=Qs,pne=ec(),jb=wt(),{table:mne,getDatabases:Ene,databases:zb}=(Me(),P(st)),{getJWTRSAKeys:wH}=(Tu(),P(S_));Object.assign(zH,{generateKeys:rO,updateConfigCert:qH,createCsr:One,signCertificate:Nne,setCertTable:vu,loadCertificates:kH,reviewSelfSignedCert:sO,createTLSSelector:VH,listCertificates:YH,addCertificate:Lne,removeCertificate:vne,createNatsCerts:Cne,generateCertsKeys:Ine,getReplicationCert:L_,getReplicationCertAuth:bne,renewSelfSigned:Pne,hostnamesFromCert:WH,getKey:Une});var{urlToNodeName:UH,getThisNodeUrl:gne,getThisNodeName:xE,clearThisNodeName:Sne}=(_s(),P(Ea)),{readFileSync:Tne,watchFile:Ane,statSync:xH}=require("node:fs"),Cwe=le(),{getTicketKeys:Rne,onMessageFromWorkers:yne}=tt(),_a=Q(),{isMainThread:BH}=require("worker_threads"),{TLSSocket:HH,createSecureContext:Pwe}=require("node:tls"),eO=3650,D_=["127.0.0.1","localhost","::1"],tO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];yne(async e=>{e.type===ps.ITC_EVENT_TYPES.RESTART&&(hs.initSync(!0),await sO())});var Lr;function ma(){return Lr||(Lr=Ene().system.hdb_certificate,Lr||(Lr=mne({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__"}]}))),Lr}a(ma,"getCertTable");async function L_(){let e=VH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(xE());if(!r)return;let n=new fo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(L_,"getReplicationCert");async function bne(){ma();let e=(await L_()).options.cert,r=new fo(e).issuer.match(/CN=(.*)/)?.[1];return Lr.get(r)}a(bne,"getReplicationCertAuth");var IH,pa=new Map;function kH(){if(IH)return;IH=!0;let e=[{configKey:Mu.TLS},{configKey:Mu.OPERATIONSAPI_TLS}];ma();let t=nr.dirname(jb.getConfigFilePath()),r;for(let{configKey:n}of e){let s=jb.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&vH(hne(t,"keys"),o);c&&CH(o,l=>{pa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&BH){let f;CH(u,d=>{if(NH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=$H(u),p=new fo(_),S;try{S=iO(p)}catch(R){dt.error("error extracting common name from certificate",R);return}if(S==null){dt.error("error extracting common name from certificate");return}if(p.checkIssued(new fo(NH.cert)))return;let g=Lr.primaryStore.get(S),A=xH(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&A<=E){A<E&&dt.info(`Certificate ${S} at ${u} is older (${new Date(A)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=Lr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:A,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(kH,"loadCertificates");function CH(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&BH&&dt.warn(`Reloading ${r}:`,e),n=c,t($H(e)))}catch(c){dt.error(`Error loading ${r}:`,e,c)}},"loadFile");gn.existsSync(e)?s(xH(e)):dt.error(`${r} file not found:`,e),Ane(e,{persistent:!1},s)}a(CH,"loadAndWatch");function Jb(){let e=gne();if(e==null){let t=D_[0];return dt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return UH(e)}a(Jb,"getHost");function UE(){let e=xE();if(e==null){let t=D_[0];return dt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(UE,"getCommonName");async function One(){let e=await L_(),t=At.certificateFromPem(e.options.cert),r=At.privateKeyFromPem(e.options.key);dt.info("Creating CSR with cert named:",e.name);let n=At.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:UE()},...tO];dt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:FH()}];return dt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Lu.pki.certificationRequestToPem(n)}a(One,"createCsr");function FH(){let e=D_.includes(UE())?D_:[...D_,UE()];return e.includes(Jb())||e.push(Jb()),[{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=>DH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(FH,"certExtensions");async function Nne(e){let t={},r=nr.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ma();for await(let f of Lr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(pa.has(f.private_key_name)){n=pa.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await gn.exists(nr.join(r,f.private_key_name))){n=gn.readFile(nr.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await Xb();s=f.ca,n=f.private_key}n=At.privateKeyFromPem(n),t.signingCA=s.certificate;let i=At.certificateFromPem(s.certificate);dt.info("Signing CSR with cert named",s.name);let o=At.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return dt.error(f),new Error("Error verifying CSR: "+f.message)}let c=Lu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+eO),dt.info("sign cert setting validity:",c.validity),dt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),dt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;dt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Lu.md.sha256.create()),t.certificate=At.certificateToPem(c)}else dt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Nne,"signCertificate");async function wne(e,t){await vu({name:xE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await vu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:At.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(wne,"createCertificateTable");async function vu(e){let t=new fo(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ma(),await Lr.patch(e)}a(vu,"setCertTable");async function rO(){let e=await Qb("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:At.publicKeyFromPem(e.publicKey),private_key:At.privateKeyFromPem(e.privateKey)}}a(rO,"generateKeys");async function nO(e,t,r){let n=At.createCertificate();if(!t){let o=await L_();t=At.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+eO);let i=[{name:"commonName",value:UE()},...tO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(FH()),n.sign(e,Lu.md.sha256.create()),At.certificateToPem(n)}a(nO,"generateCertificates");async function Xb(){let e=await YH(),t;for(let r of e){if(!r.is_authority)continue;let n=await KH(r.private_key_name);if(r.private_key_name&&n&&new fo(r.certificate).checkPrivateKey(LH(n))){dt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;dt.trace("No CA found with matching private key")}a(Xb,"getCertAuthority");async function GH(e,t,r=!0){let n=At.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+eO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${hs.get(Mu.REPLICATION_HOSTNAME)??UH(hs.get(Mu.REPLICATION_URL))??MH().split("-")[0]}`},...tO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Lu.md.sha256.create());let o=nr.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),c=nr.join(o,Qs.PRIVATEKEY_PEM_NAME);return r&&await gn.writeFile(c,At.privateKeyToPem(e)),n}a(GH,"generateCertAuthority");async function Ine(){let{private_key:e,public_key:t}=await rO(),r=await GH(e,t),n=await nO(e,t,r);await wne(n,r),qH()}a(Ine,"generateCertsKeys");async function Cne(){let e=await nO(At.privateKeyFromPem(Qs.CERTIFICATE_VALUES.key),void 0,At.certificateFromPem(Qs.CERTIFICATE_VALUES.cert)),t=nr.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=nr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME);await gn.exists(r)||await gn.writeFile(r,e);let n=nr.join(t,Qs.NATS_CA_PEM_NAME);await gn.exists(n)||await gn.writeFile(n,Qs.CERTIFICATE_VALUES.cert)}a(Cne,"createNatsCerts");async function Pne(){ma();for await(let e of Lr.search([{attribute:"is_self_signed",value:!0}]))await Lr.delete(e.name);await sO()}a(Pne,"renewSelfSigned");async function sO(){Sne(),await kH(),ma();let e=await Xb();if(!e){dt.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=hs.get(Mu.TLS_PRIVATEKEY),n=nr.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),s,i=vH(n,r);try{s=At.privateKeyFromPem(await gn.readFile(r))}catch(c){dt.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await rO(),await gn.exists(nr.join(n,Qs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${MH().split("-")[0]}.pem`),await gn.writeFile(nr.join(n,i),At.privateKeyToPem(s))}let o=await GH(s,At.setRsaPublicKey(s.n,s.e),!1);await vu({name:o.subject.getField("CN").value,uses:["https"],certificate:At.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await L_()){let r=xE();dt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Xb();let n=At.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await nO(At.privateKeyFromPem(e.private_key),s,n);await vu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(sO,"reviewSelfSignedCert");function qH(){let e=pne(Object.keys(ps.CONFIG_PARAM_MAP),!0),t=nr.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=nr.join(t,Qs.PRIVATEKEY_PEM_NAME),n=nr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME),s=nr.join(t,Qs.NATS_CA_PEM_NAME),i=ps.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),jb.updateConfigValue(void 0,void 0,o,!1,!0)}a(qH,"updateConfigCert");function $H(e){return e.startsWith("-----BEGIN")?e:Tne(e,"utf8")}a($H,"readPEM");var PH=vE.createSecureContext;vE.createSecureContext=function(e){if(!e.cert||!e.key)return PH(e);let t={...e};delete t.key,delete t.cert;let r=PH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Dne=HH.prototype._init;HH.prototype._init=function(e,t){Dne.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var qc=new Map;function VH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),qc.clear();let f=0;for await(let d of zb.system.hdb_certificate.search([])){let h=d.certificate,_=new fo(h);d.is_authority&&(_.asString=h,qc.set(_.subject,h))}for await(let d of zb.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let p=await KH(d.private_key_name),S=d.certificate,g=new fo(S);if(qc.has(g.issuer)&&(S+=`
23
- `+qc.get(g.issuer)),!p||!S)throw new Error("Missing private key or certificate for secure server");let A={ciphers:d.ciphers,ticketKeys:Rne(),availableCAs:qc,ca:t&&Array.from(qc.values()),cert:S,key:p,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(A.sessionIdContext=o.sessionIdContext);let E=vE.createSecureContext(A);E.name=d.name,E.options=A,E.quality=_,E.certificateAuthorities=Array.from(qc),E.certStart=S.toString().slice(0,100);let R=d.hostnames??WH(g);Array.isArray(R)||(R=[R]);let N;for(let v of R)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===Jb()&&(_+=2),DH.isIP(v)&&(N=!0);let k=r.get(v)?.quality??0;_>k&&r.set(v,E)}else _a.error("No hostname found for certificate at",vE.certificate);_a.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",R,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){_a.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),zb.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){_a.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return _a.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?_a.debug("No certificate found to match",o,"using the default certificate"):_a.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):_a.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(VH,"createTLSSelector");async function KH(e){let t=pa.get(e);return!t&&e?await gn.readFile(nr.join(hs.get(Mu.ROOTPATH),ps.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(KH,"getPrivateKeyByName");async function YH(){ma();let e=[];for await(let t of Lr.search([]))e.push(t);return e}a(YH,"listCertificates");async function Lne(e){let t=Zb(e,zs.object({name:zs.string().required(),certificate:zs.string().required(),is_authority:zs.boolean().required(),private_key:zs.string(),hosts:zs.array(),uses:zs.array()}));if(t)throw new ha(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new fo(n),c=!1,l=!1,u;for(let[_,p]of pa)!s&&!c&&o.checkPrivateKey(LH(p))&&(c=!0,u=_),s&&s===p&&(l=!0,u=_);if(!i&&!s&&!c)throw new ha("A suitable private key was not found for this certificate");let f;if(!r){try{f=iO(o)}catch(_){dt.error(_)}if(f==null)throw new ha("Error extracting certificate common name, please provide a name parameter")}let d=Mne(r??f);s&&!c&&!l&&(await gn.writeFile(nr.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,d+".pem"),s),pa.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),await vu(h),"Successfully added certificate: "+d}a(Lne,"addCertificate");function Mne(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Mne,"sanitizeName");async function vne(e){let t=Zb(e,zs.object({name:zs.string().required()}));if(t)throw new ha(t.message);let{name:r}=e;ma();let n=await Lr.get(r);if(!n)throw new ha(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Lr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(dt.info("Removing private key named",s),await gn.remove(nr.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,s)))}return await Lr.delete(r),"Successfully removed "+r}a(vne,"removeCertificate");function iO(e){return e.subject.match(/CN=(.*)/)?.[1]}a(iO,"extractCommonName");function WH(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[iO(e)]}a(WH,"hostnamesFromCert");async function Une(e){if(e.bypass_auth!==!0)throw new ha("Unauthorized","401");let t=Zb(e,zs.object({name:zs.string().required()}));if(t)throw new ha(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await wH()).privateKey;if(r===".jwtPublic")return(await wH()).publicKey;if(pa.get(r))return pa.get(e.name);throw new ha("Key not found")}a(Une,"getKey")});var _k={};ve(_k,{CONFIRMATION_STATUS_POSITION:()=>fk,NodeReplicationConnection:()=>M_,OPERATION_REQUEST:()=>uO,RECEIVED_TIME_POSITION:()=>fO,RECEIVED_VERSION_POSITION:()=>dO,SENDING_TIME_POSITION:()=>GE,createWebSocket:()=>VE,database_subscriptions:()=>Sa,replicateOverWS:()=>v_,table_update_listeners:()=>hO});async function VE(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Xe(),i;if(e.includes("wss://")){if(!aO){let l=(0,lk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),aO=u.secureContexts}if(i=aO.get(s),i&&de.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,dk.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=uk.createSecureContext({...i.options,ca:Array.from(Vc)})),new ak.WebSocket(e,"harperdb-replication-v1",c)}function v_(e,t,r){let n=t.port||t.securePort,s=$c.pid%1e3+"-"+ck.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||Sa,d,h,_=!1,p=t.subscription;p?.then&&p.then(T=>p=T);let S=t.tables||u&&Je()[u];if(!r){de.error?.("No authorization provided"),sn(1008,"Unauthorized");return}let g=new Map,A=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let R,N,v,k,F,K,re,oe=1e3,Z,se=0,Y=0,pe=0,Te=new Map,Ce=[],me=0,jt;if(t.url){let T=a(()=>{F&&Y===e._socket?.bytesRead&&pe===e._socket?.bytesWritten?e.terminate():(F=performance.now(),e.ping(),Y=e._socket?.bytesRead,pe=e._socket?.bytesWritten)},"send_ping");v=setInterval(T,sk).unref(),T()}else at();e._socket?.setMaxListeners(200);function at(){clearTimeout(k),Y=e._socket?.bytesRead,pe=e._socket?.bytesWritten,k=setTimeout(()=>{Y===e._socket?.bytesRead&&pe===e._socket?.bytesWritten&&(de.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},sk*2).unref()}a(at,"resetPingTimer");function Ar(){return h||(h=PE(d,u,E)),h}a(Ar,"getSharedStatus"),u&&Fo(u);let os,Cn,Dl=[],Ll=[],kT,FT=[],Dt=[],Hd=[],fp=150,_p=25,kd=0,hp=0,Pe=!1,Fd,nn,Nr,Ml;e.on("message",T=>{se=performance.now();try{let O=T.dataView=new Kc(T.buffer,T.byteOffset,T.byteLength);if(T[0]>127){let b=(0,Qe.decode)(T),[U,L,C]=b;switch(U){case jH:{if(L){if(E){if(E!==L){de.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${L}, disconnecting`),e.send((0,Qe.encode)([Uu])),sn(1008,"Node name mismatch");return}}else if(E=L,t.connection?.tentativeNode){let ue=t.connection.tentativeNode;ue.name=E,t.connection.tentativeNode=null,uo(E,ue)}if(t.connection&&(t.connection.nodeName=E),de.debug?.(s,"received node name:",E,"db:",u),!u)try{Fo(u=b[2]),u==="system"&&(os=da(t,(ue,te)=>{Ul(te)&&Go(te)}),e.on("close",()=>{os?.remove()}))}catch(ue){de.warn?.(s,"Error setting database",ue),e.send((0,Qe.encode)([Uu])),sn(1008,ue.message);return}Hr()}break}case rk:{de.debug?.(s,"Received table definitions for",L.map(ue=>ue.table));for(let ue of L){let te=b[2];ue.database=te;let fe;Ul(te)&&(te==="system"?$e[te]?.[ue.table]||(fe=cO(ue,$e[te]?.[ue.table])):fe=cO(ue,$e[te]?.[ue.table]),d||(d=fe?.auditStore),S||(S=Je()?.[te]))}break}case Uu:sn();break;case uO:try{let ue=r?.replicates||r?.subscribers||r?.name;server.operation(L,{user:r},!ue).then(te=>{Array.isArray(te)&&(te={results:te}),te.requestId=L.requestId,e.send((0,Qe.encode)([HE,te]))},te=>{e.send((0,Qe.encode)([HE,{requestId:L.requestId,error:te instanceof Error?te.toString():te}]))})}catch(ue){e.send((0,Qe.encode)([HE,{requestId:L.requestId,error:ue instanceof Error?ue.toString():ue}]))}break;case HE:let{resolve:B,reject:q}=g.get(L.requestId);L.error?q(new Error(L.error)):B(L),g.delete(L.requestId);break;case oO:let z=b[3];S||(u?de.error?.(s,"No tables found for",u):de.error?.(s,"Database name never received"));let j=S[z];j=cO({table:z,database:u,attributes:L.attributes,schemaDefined:L.schemaDefined},j),Dl[C]={name:z,decoder:new Qe.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:L.typedStructs,structures:L.structures}),getEntry(ue){return j.primaryStore.getEntry(ue)},rootStore:j.primaryStore.rootStore};break;case JH:Ml=d?mH(L,d):new Map,kT=b[2],de.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${kT}`);break;case XH:let G=C;Hd[G]=L;break;case tk:Ar()[fk]=L,de.trace?.(s,"received and broadcasting committed update",L),Ar().buffer.notify();break;case ek:R=L,p.send({type:"end_txn",localTime:R,remoteNodeIds:A});break;case kE:{let ue=b[1],{fileId:te,size:fe,finished:ie,error:J}=ue,ce=Te.get(te);de.debug?.("Received blob",te,"has stream",!!ce,"connectedToBlob",!!ce?.connectedToBlob,"length",b[2].length,"finished",ie),ce||(ce=new lO.PassThrough,ce.expectedSize=fe,Te.set(te,ce)),ce.lastChunk=Date.now(),ie?(J?(ce.on("error",()=>{}),ce.destroy(new Error("Blob error: "+J))):ce.end(b[2]),ce.connectedToBlob&&Te.delete(te)):ce.write(b[2]);break}case ZH:{let ue=L,te;try{let fe=b[3],ie=Ll[C]||(Ll[C]=S[b[4]]);if(!ie)return de.warn?.("Unknown table id trying to handle record request",C);let J=ie.primaryStore.getBinaryFast(Symbol.for("structures")),ce=J.length;if(ce!==hp){hp=ce;let Re=(0,Qe.decode)(J);e.send((0,Qe.encode)([oO,{typedStructs:Re.typed,structures:Re.named},C,ie.tableName]))}let ye=ie.primaryStore.getBinaryFast(fe);if(ye){let Re=ie.primaryStore.decoder.decode(ye,{valueAsBuffer:!0});te=(0,Qe.encode)([BE,ue,{value:Re.value,expiresAt:Re.expiresAt,version:Re.version,residencyId:Re.residencyId,nodeId:Re.nodeId,user:Re.user}])}else te=(0,Qe.encode)([BE,ue])}catch(fe){te=(0,Qe.encode)([BE,ue,{error:fe.message}])}e.send(te);break}case BE:{let{resolve:ue,reject:te,tableId:fe,key:ie}=g.get(b[1]),J=b[2];if(J?.error)te(new Error(J.error));else if(J){let ce=Dl[fe].decoder.decode(J.value);J.value=ce,J.key=ie,ue(J)}else ue();g.delete(b[1]);break}case QH:{Nr=L;let ue,te,fe=!1;if(p){if(u!==p.databaseName&&!p.then){de.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=f.get(u);if(de.debug?.(s,"received subscription request for",u,"at",Nr),!p){let Ae;p=new Promise(et=>{de.debug?.("Waiting for subscription to database "+u),Ae=et}),p.ready=Ae,Sa.set(u,p)}if(r.name)te=pr().subscribe(r.name),te.then(async Ae=>{ue=Ae;for await(let et of ue){let Lt=et.value;if(!(Lt?.replicates===!0||Lt?.replicates?.receives||Lt?.subscriptions?.some(dr=>(dr.database||dr.schema)===u&&dr.publish!==!1))){fe=!0,e.send((0,Qe.encode)([Uu])),sn(1008,`Unauthorized database subscription to ${u}`);return}}},Ae=>{de.error?.(s,"Error subscribing to HDB nodes",Ae)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,Qe.encode)([Uu])),sn(1008,`Unauthorized database subscription to ${u}`);return}if(nn&&(de.debug?.(s,"stopping previous subscription",u),nn.emit("close")),Nr.length===0)return;let ie=Nr[0],J=a(Ae=>{if(Ae&&(ie.replicateByDefault?!ie.tables.includes(Ae.tableName):ie.tables.includes(Ae.tableName)))return{table:Ae}},"tableToTableEntry"),ce={txnTime:0},ye,Re,Be=1/0,nt,wr=a((Ae,et)=>{if(Ae.type==="end_txn"){ce.txnTime&&(o[i]!==66&&de.error?.("Invalid encoding of message"),xl(9),xl(qE),W(nt=et),kr()),i=c,ce.txnTime=0;return}let Lt=Ae.nodeId,dr=Ae.tableId,Gt=Re[dr];if(!Gt&&(Gt=Re[dr]=J(p.tableById[dr]),!Gt))return de.debug?.("Not subscribed to table",dr);let Fr=Gt.table,ja=Fr.primaryStore,Mt=ja.encoder;(Ae.extendedType&tm||!Mt.typedStructs)&&(Mt._mergeStructures(Mt.getStructures()),Mt.typedStructs&&(Mt.lastTypedStructuresLength=Mt.typedStructs.length));let mp=ye[Lt];if(!(mp&&mp.startTime<et&&(!mp.endTime||mp.endTime>et)))return FE&&de.trace?.(s,"skipping replication update",Ae.recordId,"to:",E,"from:",Lt,"subscribed:",ye),YC();FE&&de.trace?.(s,"sending replication update",Ae.recordId,"to:",E,"from:",Lt,"subscribed:",ye);let GT=Ae.version;ce.txnTime!==GT&&(ce.txnTime&&(FE&&de.trace?.(s,"new txn time, sending queued txn",ce.txnTime),o[i]!==66&&de.error?.("Invalid encoding of message"),kr()),ce.txnTime=GT,i=c,W(GT));let Ja=Ae.residencyId,qT=vl(Ja,Fr),Ep;if(qT&&!qT.includes(E)){let Xa=vl(Ae.previousResidencyId,Fr);if(Xa&&!Xa.includes(E)&&(Ae.type==="put"||Ae.type==="patch")||Fr.getResidencyById)return YC();let $d=Ae.recordId;de.trace?.(s,"sending invalidation",$d,E,"from",Lt);let $o=0;Ja&&($o|=fc),Ae.previousResidencyId&&($o|=_c);let Ls,on=null;for(let gp in Fr.indices){if(!on){if(Ls=Ae.getValue(ja,!0),!Ls)break;on={}}on[gp]=Ls[gp]}Ep=jl(Ae.version,dr,$d,null,Lt,Ae.user,Ae.type==="put"||Ae.type==="patch"?"invalidate":Ae.type,Mt.encode(on),$o,Ja,Ae.previousResidencyId,Ae.expiresAt)}function YC(){de.trace?.(s,"skipping audit record",Ae.recordId),K||(K=setTimeout(()=>{K=null,(nt||0)+nk/2<Be&&(FE&&de.trace?.(s,"sending skipped sequence update",Be),e.send((0,Qe.encode)([ek,Be])))},nk).unref())}a(YC,"skipAuditRecord");let $T=Mt.typedStructs,VT=Mt.structures;if(($T?.length!=Gt.typed_length||VT?.length!=Gt.structure_length)&&(Gt.typed_length=$T?.length,Gt.structure_length=VT.length,de.debug?.(s,"send table struct",Gt.typed_length,Gt.structure_length),Gt.sentName||(Gt.sentName=!0),e.send((0,Qe.encode)([oO,{typedStructs:$T,structures:VT,attributes:Fr.attributes,schemaDefined:Fr.schemaDefined},dr,Gt.table.tableName]))),Ja&&!Dt[Ja]&&(e.send((0,Qe.encode)([XH,qT,Ja])),Dt[Ja]=!0),Ep)xl(Ep.length),Bl(Ep);else{let Xa=Ae.encoded;Ae.extendedType&Un&&SO(()=>Ae.getValue(ja),async $o=>{let Ls=$E($o);try{let on;me++;for await(let gp of $o.stream()){if(on&&(de.debug?.("Sending blob chunk",Ls,"length",on.length),e.send((0,Qe.encode)([kE,{fileId:Ls,size:$o.size},on]))),on=gp,fe)return;e._socket.writableNeedDrain&&(de.debug?.("draining",Ls),await new Promise(OQ=>e._socket.once("drain",OQ)),de.debug?.("drained",Ls))}de.debug?.("Sending final blob chunk",Ls,"length",on.length),e.send((0,Qe.encode)([kE,{fileId:Ls,size:$o.size,finished:!0},on]))}catch(on){de.debug?.("Error sending blob",on),e.send((0,Qe.encode)([kE,{fileId:Ls,finished:!0,error:on.toString()},Buffer.alloc(0)]))}finally{me--,me<_p&&jt?.()}});let $d=Xa[0]===66?8:0;xl(Xa.length-$d),Bl(Xa,$d),de.trace?.("wrote record",Ae.recordId,"length:",Xa.length)}},"sendAuditRecord"),kr=a(()=>{c-i>8?(e.send(o.subarray(i,c)),de.debug?.(s,"Sent message, size:",c-i)):de.debug?.(s,"skipping empty transaction")},"sendQueuedData");nn=new _O.EventEmitter,nn.once("close",()=>{fe=!0,ue?.end()});for(let{startTime:Ae}of Nr)Ae<Be&&(Be=Ae);(te||Promise.resolve()).then(async()=>{p=await p,d=p.auditStore,Re=p.tableById.map(J),ye=[];for(let{name:et,startTime:Lt,endTime:dr}of Nr){let Gt=CE(et,d);de.debug?.("subscription to",et,"using local id",Gt,"starting",Lt),ye[Gt]={startTime:Lt,endTime:dr}}Go(u),os||(os=Yc(et=>{et.databaseName===u&&Go(u)}),Cn=U_(et=>{et===u&&(e.send((0,Qe.encode)([Uu])),sn())}),e.on("close",()=>{os?.remove(),Cn?.remove()})),e.send((0,Qe.encode)([JH,N_(p.auditStore),Nr.map(({name:et})=>et)]));let Ae=!0;do{isFinite(Be)||(de.warn?.("Invalid sequence id "+Be),sn(1008,"Invalid sequence id"+Be));let et;if(Ae&&!fe&&(Ae=!1,!(mO(d)<=Be)&&(ok.default.get(x.REPLICATION_COPYTABLESTOCATCHUP)??xne)&&server.nodes[0]?.name===E)){de.info?.("Replicating all tables to",E);let dr=Be,Gt=KE(d);for(let Fr in S){if(!J(Fr))continue;let ja=S[Fr];for(let Mt of ja.primaryStore.getRange({snapshot:!1})){if(fe)return;Mt.localTime>=Be&&(de.trace?.(s,"Copying record from",u,Fr,Mt.key,Mt.localTime),dr=Math.max(Mt.localTime,dr),et=!0,Ar()[GE]=1,wr({recordId:Mt.key,tableId:ja.tableId,type:"put",getValue(){return Mt.value},encoded:ja.primaryStore.getBinary(Mt.key),version:Mt.version,residencyId:Mt.residencyId,nodeId:Gt,extendedType:Mt.metadataFlags},Mt.localTime))}}Be=dr}for(let{key:Lt,value:dr}of d.getRange({start:Be||1,exclusiveStart:!0,snapshot:!1})){if(fe)return;let Gt=bt(dr);de.debug?.("sending audit record",new Date(Lt)),Ar()[GE]=Lt,Be=Lt,wr(Gt,Lt),e._socket.writableNeedDrain?await new Promise(Fr=>{de.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Fr)}):me>_p?await new Promise(Fr=>{jt=Fr}):await new Promise(setImmediate),nn.startTime=Lt,et=!0}et&&wr({type:"end_txn"},Be),Ar()[GE]=0,await hk(d)}while(!fe)}).catch(Ae=>{de.error?.(s,"Error handling subscription to node",Ae),sn(1008,"Error handling subscription to node")});break}}return}O.position=8;let w=!0,y,D;do{Ar();let b=O.readInt();if(b===9&&O.getUint8(O.position)==qE){O.position++,R=D=O.readFloat64(),h[dO]=R,h[fO]=Date.now(),de.trace?.("received remote sequence update",R,u);break}let U=O.position,L=bt(T,U,U+b),C=Dl[L.tableId];C||de.error?.(`No table found with an id of ${L.tableId}`);let B;L.residencyId&&(B=Hd[L.residencyId],de.trace?.(s,"received residency list",B,L.type,L.recordId));try{gO(()=>{y={table:C.name,id:L.recordId,type:L.type,nodeId:Ml.get(L.nodeId),residencyList:B,timestamp:L.version,value:L.getValue(C),user:L.user,beginTxn:w,expiresAt:L.expiresAt}},q=>{let z=$E(q),j=Te.get(z);de.debug?.("Received transaction with blob",z,"has stream",!!j,"ended",!!j?.writableEnded),j?j.writableEnded&&Te.delete(z):(j=new lO.PassThrough,Te.set(z,j)),j.connectedToBlob=!0,j.lastChunk=Date.now(),q.size===void 0&&j.expectedSize&&(q.size=j.expectedSize);let G=createBlob(j,q),ue=G.save({primaryStore:p.auditStore});return ue&&(ue.blobId=z,Ce.push(ue),ue.finally(()=>{de.debug?.(`Finished receiving blob stream ${z}`),Ce.splice(Ce.indexOf(ue),1)})),G})}catch(q){throw q.message+="typed structures for current decoder"+JSON.stringify(C.decoder.typedStructs),q}w=!1,de.trace?.(s,"received replication message",L.type,"id",y.id,"version",new Date(L.version),"nodeId",y.nodeId),h[dO]=L.version,h[fO]=Date.now(),p.send(y),O.position=U+b}while(O.position<T.byteLength);kd++,rr(T.byteLength,"bytes-received",`${E}.${u}.${y?.table||"unknown_table"}`,"replication","ingest"),kd>fp&&!Pe&&(Pe=!0,e.pause(),de.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),p.send({type:"end_txn",localTime:R,remoteNodeIds:A,async onCommit(){if(y){let b=Date.now()-y.timestamp;rr(b,"replication-latency",E+"."+u+"."+y.table,y.type,"ingest")}kd--,Pe&&(Pe=!1,e.resume(),de.debug?.(`Replication resuming ${E}`)),Ce.length>0&&await Promise.all(Ce),de.trace?.("All blobs finished"),!N&&D&&(de.trace?.(s,"queuing confirmation of a commit at",D),setTimeout(()=>{e.send((0,Qe.encode)([tk,N])),de.trace?.(s,"sent confirmation of a commit at",N),N=null},Bne)),N=D,de.debug?.("last sequence committed",new Date(D),u)}})}catch(O){de.error?.(s,"Error handling incoming replication message",O)}}),e.on("ping",at),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-F,Gc({name:E,database:u,url:t.url,latency:t.connection.latency})),F=null}),e.on("close",(T,O)=>{clearInterval(v),clearTimeout(k),clearInterval(re),nn&&nn.emit("close"),Fd&&Fd.end();for(let[w,{reject:y}]of g)y(new Error(`Connection closed ${O?.toString()} ${T}`));de.debug?.(s,"closed",T,O?.toString())});function Gd(){}a(Gd,"recordRemoteNodeSequence");function sn(T,O){e.isFinished=!0,e.close(T,O)}a(sn,"close");function Hr(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Hr)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let T=new Map;try{for(let y of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let D of y.value.nodes||[])D.lastTxnTime>(T.get(D.id)??0)&&T.set(D.id,D.lastTxnTime)}catch(y){if(!y.message.includes("Can not re"))throw y}let O=t.connection?.nodeSubscriptions?.[0];A=[];let w=t.connection?.nodeSubscriptions.map((y,D)=>{let b=[],{replicateByDefault:U}=y;if(y.subscriptions){for(let q of y.subscriptions)if(q.subscribe&&(q.schema||q.database)===u){let z=q.table;S?.[z]?.replicate!==!1&&b.push(z)}U=!1}else for(let q in S)(U?S[q].replicate===!1:S[q].replicate)&&b.push(q);let L=d&&CE(y.name,d),C=p?.dbisDB?.get([Symbol.for("seq"),L])??1,B=Math.max(C?.seqId??1,(typeof y.start_time=="string"?new Date(y.start_time).getTime():y.start_time)??1);if(de.debug?.("Starting time recorded in db",y.name,L,u,C?.seqId,"start time:",B,new Date(B)),O!==y){let q=d&&CE(O.name,d),z=p?.dbisDB?.get([Symbol.for("seq"),q])??1;for(let j of z?.nodes||[])j.name===y.name&&(B=j.seqId,de.debug?.("Using sequence id from proxy node",O.name,B))}return A.push(L),T.get(L)>B&&(B=T.get(L),de.debug?.("Updating start time from more recent txn recorded",O.name,B)),{name:y.name,replicateByDefault:U,tables:b,startTime:B,endTime:y.end_time}});if(w)if(de.debug?.(s,"sending subscription request",w,p?.dbisDB?.path),clearTimeout(Z),w.length>0)e.send((0,Qe.encode)([QH,w]));else{let y=a(()=>{let D=performance.now();Z=setTimeout(()=>{se<=D?sn(1008,"No nodes to subscribe to"):y()},oe)},"schedule_close");y()}}a(Hr,"sendSubscriptionRequestUpdate");function vl(T,O){if(!T)return;let w=FT[T];return w||(w=O.getResidencyRecord(T),FT[T]=w),w}a(vl,"getResidence");function Ul(T){return!(ga&&ga!="*"&&!ga[T]&&!ga.includes?.(T)&&!ga.some?.(O=>O.name===T))}a(Ul,"checkDatabaseAccess");function Fo(T){if(p=p||f.get(T),!Ul(T))throw new Error(`Access to database "${T}" is not permitted`);p||de.warn?.(`No database named "${T}" was declared and registered`),d=p?.auditStore,S||(S=Je()?.[T]);let O=Xe();if(O===E)throw O?new Error("Should not connect to self",O):new Error("Node name not defined");return pp(O,T),!0}a(Fo,"setDatabase");function pp(T,O){let w=Je()?.[O],y=[];for(let D in w){let b=w[D];y.push({table:D,schemaDefined:b.schemaDefined,attributes:b.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}de.trace?.("Sending database info for node",T,"database name",O),e.send((0,Qe.encode)([jH,T,O,y]))}a(pp,"sendNodeDBName");function Go(T){let O=Je()?.[T],w=[];for(let y in O){if(Nr&&!Nr.some(b=>b.replicateByDefault?!b.tables.includes(y):b.tables.includes(y)))continue;let D=O[y];w.push({table:y,schemaDefined:D.schemaDefined,attributes:D.attributes.map(b=>({name:b.name,type:b.type,isPrimaryKey:b.isPrimaryKey}))})}e.send((0,Qe.encode)([rk,w,T]))}a(Go,"sendDBSchema"),re=setInterval(()=>{for(let[T,O]of Te)O.lastChunk+3e4<Date.now()&&(de.warn?.(`Timeout waiting for blob stream to finish ${T} from ${E}`),Te.delete(T),O.end())},3e4).unref();let qo=1,qd=[];return{end(){Fd&&Fd.end(),nn&&nn.emit("close")},getRecord(T){let O=qo++;return new Promise((w,y)=>{let D=[ZH,O,T.table.tableId,T.id];qd[T.table.tableId]||(D.push(T.table.tableName),qd[T.table.tableId]=!0),e.send((0,Qe.encode)(D)),g.set(O,{tableId:T.table.tableId,key:T.id,resolve(b){let{table:U,entry:L}=T;w(b),b&&U._recordRelocate(L,b)},reject:y})})},sendOperation(T){let O=qo++;return T.requestId=O,e.send((0,Qe.encode)([uO,T])),new Promise((w,y)=>{g.set(O,{resolve:w,reject:y})})}};function xl(T){m(5),T<128?o[c++]=T:T<16384?(l.setUint16(c,T|32768),c+=2):T<1056964608?(l.setUint32(c,T|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,T),c+=5)}function Bl(T,O=0,w=T.length){let y=w-O;m(y),T.copy(o,c,O,w),c+=y}function W(T){m(8),l.setFloat64(c,T),c+=8}function m(T){if(T+16>o.length-c){let O=Buffer.allocUnsafeSlow(c+T-i+65536>>10<<11);o.copy(O,0,i,c),c=c-i,i=0,o=O,l=new DataView(o.buffer,0,o.length)}}}function cO(e,t){let r=e.database??"data";if(r!=="data"&&!$e[r]){de.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(de.debug?.("(Re)creating",e),ct({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var ok,Qe,ak,ck,de,_O,lk,uk,$c,dk,lO,QH,jH,JH,Uu,XH,oO,ZH,BE,uO,HE,ek,tk,rk,kE,fk,dO,fO,GE,xne,hO,Sa,FE,nk,Bne,sk,aO,ik,M_,pO=be(()=>{Me();Ji();Vb();EO();_s();ok=M(le());H();Jl();Qe=require("msgpackr"),ak=require("ws"),ck=require("worker_threads"),de=M(pi());P_();_O=require("events"),lk=M(js()),uk=M(require("node:tls"));Fc();$c=M(require("node:process")),dk=require("node:net");Ci();ls();lO=require("node:stream"),QH=129,jH=140,JH=141,Uu=142,XH=130,oO=132,ZH=133,BE=134,uO=136,HE=137,ek=143,tk=144,rk=145,kE=146,fk=0,dO=1,fO=2,GE=3,xne=$c.env.HDB_LEADER_URL||$c.argv.includes("--HDB_LEADER_URL"),hO=new Map,Sa=new Map,FE=!0,nk=300,Bne=2,sk=3e4;a(VE,"createWebSocket");ik=1e3,M_=class extends _O.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Ws(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=ik;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await VE(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;de.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${$c.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),de[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=ik,Gc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=v_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(de.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?de.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`):de.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(Du({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();de.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(v_,"replicateOverWS");a(cO,"ensureTableIfChanged")});var Ea={};ve(Ea,{clearThisNodeName:()=>Kne,disableReplication:()=>Gne,enabled_databases:()=>ga,forEachReplicatedDatabase:()=>da,getThisNodeId:()=>KE,getThisNodeName:()=>Xe,getThisNodeUrl:()=>fa,hostnameToUrl:()=>QE,lastTimeInAuditStore:()=>w_,monitorNodeCAs:()=>Rk,replicateOperation:()=>Wne,replication_certificate_authorities:()=>Vc,sendOperationToNode:()=>B_,servers:()=>kne,setReplicator:()=>bk,start:()=>Fne,startOnMainThread:()=>Wb,subscribeToNode:()=>Pu,unsubscribeFromNode:()=>ME,urlToNodeName:()=>Ws});function Fne(e){if(e.port||(e.port=ms.default.get(x.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=ms.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!Xe())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of C_(e))t.set(Ws(n.url),n);qne(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=We.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),v_(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&sr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,We.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&sr.error(`Incoming client connection from ${n.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`,n._nodeRequest.socket.authorizationError);let i=pr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));if(c)if(c?.revoked_certificates?.includes(n.peerCertificate.serialNumber)){sr.warn("Revoked certificate used in attempt to connect to node",c.name,"certificate serial number",n.peerCertificate.serialNumber);return}else n.user=c;else sr.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:sr.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Vc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=zE.createSecureContext(l)}catch(c){sr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),Rk(s),ms.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function Rk(e){let t=0;Iu(r=>{r?.ca&&(Vc.add(r.ca),Vc.size!==t&&(t=Vc.size,e?.()))})}function Gne(e=!0){Ak=e}function qne(e){Ak||(Je(),ga=e.databases,da(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Sa;for(let[s,i]of x_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];bk(r,s,e),hO.get(s)?.forEach(i=>i(s))}}))}function bk(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 yk extends Gr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Sa,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(sr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Dn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=$ne(h,yk.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Sk.ServerError("No connection to any other nodes are available",502);let d={requestId:Hne++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;sr.warn("Error in load from node",WE,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Ok(e,t,r,n,s){let i=x_.get(e);i||x_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new M_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function $ne(e,t,r){let n=pk.get(e)?.get(r);if(n)return n;let s=pr().primaryStore.get(e);return s?.url&&(n=Ok(s.url,t,r,e,s.authorization),pk.set(e,x_.get(s.url))),n}async function B_(e,t,r){r||(r={}),r.serverName=e.name;let n=await VE(e.url,r),s=v_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{sr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Pu(e){try{Tk.isMainThread&&sr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Sa.get(e.database);if(!t){let n;t=new Promise(s=>{sr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Sa.set(e.database,t)}let r=Ok(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=>I_(n,e.database)),e.replicateByDefault)}catch(t){sr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function ME({name:e,url:t,database:r}){sr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(pr().primaryStore.getRange({})));let n=x_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Vne(){if(TO!==void 0)return TO;let e=ms.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||ms.default.get(x.TLS_CERTIFICATE);if(e)return TO=new Ek.X509Certificate((0,gk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Xe(){return WE||(WE=ms.default.get("replication_hostname")??Ws(ms.default.get("replication_url"))??Vne()??mk("operationsapi_network_secureport")??mk("operationsapi_network_port")??"127.0.0.1")}function Kne(){WE=void 0}function mk(e){let t=ms.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function YE(e){let t=ms.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function KE(e){return N_(e)?.[Xe()]}function fa(){let e=ms.default.get("replication_url");return e||QE(Xe())}function QE(e){let t=YE("replication_port");if(t)return`ws://${e}:${t}`;if(t=YE("replication_secureport"),t)return`wss://${e}:${t}`;if(t=YE("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=YE("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ws(e){if(e)return new URL(e).hostname}function da(e,t){for(let n of Object.getOwnPropertyNames($e))r(n);return U_(n=>{r(n)}),Yc((n,s)=>{r(n.databaseName)});function r(n){let s=$e[n];sr.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):Yne(n)&&t(s,n,!1)}a(r,"forDatabase")}function Yne(e){let t=$e[e];for(let r in t)if(t[r].replicate)return!0}function w_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Wne(e){let t={message:""};if(e.replicated){e.replicated=!1,sr.trace?.("Replicating operation",e.operation,"to nodes",We.nodes.map(n=>n.name));let r=await Promise.allSettled(We.nodes.map(n=>B_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=We.nodes[s]?.name,i})}return t}var ms,sr,Ek,gk,zE,Sk,Tk,Ak,Hne,kne,Vc,ga,x_,pk,TO,WE,_s=be(()=>{Me();Jo();Fl();pO();qr();ms=M(le()),sr=M(Q()),Ek=require("crypto"),gk=require("fs");P_();Fc();H();Vb();zE=M(require("node:tls")),Sk=M(he()),Tk=require("worker_threads"),Hne=1,kne=[],Vc=ms.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(zE.rootCertificates):new Set;a(Fne,"start");a(Rk,"monitorNodeCAs");a(Gne,"disableReplication");a(qne,"assignReplicationSource");a(bk,"setReplicator");x_=new Map;a(Ok,"getConnection");pk=new Map;a($ne,"getConnectionByName");a(B_,"sendOperationToNode");a(Pu,"subscribeToNode");a(ME,"unsubscribeFromNode");a(Vne,"getCommonNameFromCert");a(Xe,"getThisNodeName");a(Kne,"clearThisNodeName");Object.defineProperty(We,"hostname",{get(){return Xe()}});a(mk,"getHostFromListeningPort");a(YE,"getPortFromListeningPort");a(KE,"getThisNodeId");We.replication={getThisNodeId:KE,exportIdMapping:N_};a(fa,"getThisNodeUrl");a(QE,"hostnameToUrl");a(Ws,"urlToNodeName");a(da,"forEachReplicatedDatabase");a(Yne,"hasExplicitlyReplicatedTable");a(w_,"lastTimeInAuditStore");a(Wne,"replicateOperation")});var ZE=I((nIe,Pk)=>{"use strict";var xu=um(),Bu=kB(),zne=Q(),Qne=require("uuid").v4,rIe=require("clone"),JE=io(),Hu=(H(),P($)),jne=require("util"),Ta=kn(),{handleHDBError:Sn,hdb_errors:Jne}=he(),{HDB_ERROR_MSGS:jE,HTTP_STATUS_CODES:Tn}=Jne,{SchemaEventMsg:XE}=qs(),Nk=hr(),{getDatabases:Xne}=(Me(),P(st)),{transformReq:ku}=ae(),{replicateOperation:wk}=(_s(),P(Ea));Pk.exports={createSchema:Zne,createSchemaStructure:Ik,createTable:ese,createTableStructure:Ck,createAttribute:ise,dropSchema:tse,dropTable:rse,dropAttribute:nse,getBackup:ose};async function Zne(e){let t=await Ik(e);return JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema)),t}a(Zne,"createSchema");async function Ik(e){let t=xu.schema_object(e);if(t)throw Sn(t,t.message,Tn.BAD_REQUEST,void 0,void 0,!0);if(ku(e),!await Bu.checkSchemaExists(e.schema))throw Sn(new Error,jE.SCHEMA_EXISTS_ERR(e.schema),Tn.BAD_REQUEST,Hu.LOG_LEVELS.ERROR,jE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ta.createSchema(e),`database '${e.schema}' successfully created`}a(Ik,"createSchemaStructure");async function ese(e){return ku(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Ck(e)}a(ese,"createTable");async function Ck(e){let t=xu.create_table_object(e);if(t)throw Sn(t,t.message,Tn.BAD_REQUEST,void 0,void 0,!0);if(xu.validateTableResidence(e.residence),!await Bu.checkSchemaTableExists(e.schema,e.table))throw Sn(new Error,jE.TABLE_EXISTS_ERR(e.schema,e.table),Tn.BAD_REQUEST,Hu.LOG_LEVELS.ERROR,jE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Qne(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ta.createTable(n,e);else throw Sn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Tn.BAD_REQUEST);else await Ta.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(Ck,"createTableStructure");async function tse(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=xu.schema_object(e),n=t??r;if(n)throw Sn(n,n.message,Tn.BAD_REQUEST,void 0,void 0,!0);ku(e);let s=await Bu.checkSchemaExists(e.schema);if(s)throw Sn(new Error,s,Tn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,s,!0);let i=await Bu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await Ta.dropSchema(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema)),await Nk.purgeSchemaTableStreams(e.schema,o);let c=await wk(e);return c.message=`successfully deleted '${e.schema}'`,c}a(tse,"dropSchema");async function rse(e){let t=xu.table_object(e);if(t)throw Sn(t,t.message,Tn.BAD_REQUEST,void 0,void 0,!0);ku(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw Sn(new Error,r,Tn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,r,!0);await Ta.dropTable(e),await Nk.purgeTableStream(e.schema,e.table);let n=await wk(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(rse,"dropTable");async function nse(e){let t=xu.attribute_object(e);if(t)throw Sn(t,t.message,Tn.BAD_REQUEST,void 0,void 0,!0);ku(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw Sn(new Error,r,Tn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Sn(new Error,"You cannot drop a hash attribute",Tn.BAD_REQUEST,void 0,void 0,!0);if(Hu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Sn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Tn.BAD_REQUEST,void 0,void 0,!0);try{return await Ta.dropAttribute(e),sse(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw zne.error(`Got an error deleting attribute ${jne.inspect(e)}.`),n}}a(nse,"dropAttribute");function sse(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(sse,"dropAttributeFromGlobal");async function ise(e){ku(e);let t=Xne()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Sn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Tn.BAD_REQUEST,void 0,void 0,!0);return await Ta.createAttribute(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(ise,"createAttribute");function ose(e){return Ta.getBackup(e)}a(ose,"getBackup")});var Lk=I((iIe,Dk)=>{"use strict";var{OPERATIONS_ENUM:ase}=(H(),P($)),AO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ase.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};Dk.exports=AO});var RO=I((cIe,Bk)=>{"use strict";var cse=kn(),aIe=Lk(),eg=ae(),tg=(H(),P($)),lse=le(),{handleHDBError:Mk,hdb_errors:use}=he(),{HDB_ERROR_MSGS:vk,HTTP_STATUS_CODES:Uk}=use,dse=Object.values(tg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),xk="To use this operation audit log must be enabled in harperdb-config.yaml";Bk.exports=fse;async function fse(e){if(eg.isEmpty(e.schema))throw new Error(vk.SCHEMA_REQUIRED_ERR);if(eg.isEmpty(e.table))throw new Error(vk.TABLE_REQUIRED_ERR);if(!lse.get(tg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Mk(new Error,xk,Uk.BAD_REQUEST,tg.LOG_LEVELS.ERROR,xk,!0);let t=eg.checkSchemaTableExist(e.schema,e.table);if(t)throw Mk(new Error,t,Uk.NOT_FOUND,tg.LOG_LEVELS.ERROR,t,!0);if(!eg.isEmpty(e.search_type)&&dse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await cse.readAuditLog(e)}a(fse,"readAuditLog")});var kk=I((uIe,Hk)=>{"use strict";var{OPERATIONS_ENUM:_se}=(H(),P($)),yO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=_se.GET_BACKUP,this.schema=t,this.table=r}};Hk.exports=yO});var qk=I((hIe,Gk)=>{"use strict";var hse=kn(),fIe=kk(),bO=ae(),pse=(H(),P($)),_Ie=le(),{handleHDBError:mse,hdb_errors:Ese}=he(),{HDB_ERROR_MSGS:Fk,HTTP_STATUS_CODES:gse}=Ese;Gk.exports=Sse;async function Sse(e){if(bO.isEmpty(e.schema))throw new Error(Fk.SCHEMA_REQUIRED_ERR);if(bO.isEmpty(e.table))throw new Error(Fk.TABLE_REQUIRED_ERR);let t=bO.checkSchemaTableExist(e.schema,e.table);if(t)throw mse(new Error,t,gse.NOT_FOUND,pse.LOG_LEVELS.ERROR,t,!0);return await hse.getBackup(read_audit_log_object)}a(Sse,"getBackup")});var Yk=I((mIe,Kk)=>{"use strict";var Tse=le(),Aa=require("joi"),Ase=lt(),$k=require("moment"),Rse=require("fs-extra"),OO=require("path"),yse=require("lodash"),H_=(H(),P($)),{LOG_LEVELS:Wc}=(H(),P($)),bse="YYYY-MM-DD hh:mm:ss",Ose=OO.resolve(__dirname,"../logs");Kk.exports=function(e){return Ase.validateBySchema(e,Nse)};var Nse=Aa.object({from:Aa.custom(Vk),until:Aa.custom(Vk),level:Aa.valid(Wc.NOTIFY,Wc.FATAL,Wc.ERROR,Wc.WARN,Wc.INFO,Wc.DEBUG,Wc.TRACE),order:Aa.valid("asc","desc"),limit:Aa.number().min(1),start:Aa.number().min(0),log_name:Aa.custom(wse)});function Vk(e,t){if($k(e,$k.ISO_8601).format(bse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Vk,"validateDatetime");function wse(e,t){if(yse.invert(H_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Tse.get(H_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?H_.LOG_NAMES.HDB:e,i=s===H_.LOG_NAMES.INSTALL?OO.join(Ose,H_.LOG_NAMES.INSTALL):OO.join(n,s);return Rse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(wse,"validateReadLogPath")});var wO=I((gIe,zk)=>{"use strict";var rg=(H(),P($)),Ise=Q(),Cse=le(),Pse=Yk(),NO=require("path"),Wk=require("fs-extra"),{once:Dse}=require("events"),{handleHDBError:Lse,hdb_errors:Mse}=he(),{PACKAGE_ROOT:vse}=mt(),Use=NO.join(vse,"logs"),xse=1e3,Bse=200;zk.exports=Hse;async function Hse(e){let t=Pse(e);if(t)throw Lse(t,t.message,Mse.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Cse.get(rg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?rg.LOG_NAMES.HDB:e.log_name,s=n===rg.LOG_NAMES.INSTALL?NO.join(Use,rg.LOG_NAMES.INSTALL):NO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?xse:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,p=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(Wk.statSync(s).size-(p+5)*Bse,0));let g=Wk.createReadStream(s,{start:S});g.on("error",k=>{Ise.error(k)});let A=0,E=[],R="",N;g.on("data",k=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;k=R+k;let K=0,re;for(;(re=F.exec(k))&&!g.destroyed;){N&&(N.message=k.slice(K,re.index),v(N));let[oe,Z,se]=re,Y=se.split("] ["),pe=Y[0],Te=Y[1];Y.splice(0,2),N={timestamp:Z,thread:pe,level:Te,tags:Y,message:""},K=re.index+oe.length}R=k.slice(K)}),g.on("end",k=>{g.destroyed||N&&(N.message=R.trim(),v(N))}),g.resume();function v(k){let F,K,re;switch(!0){case(i&&c&&u):F=new Date(k.timestamp),K=new Date(l),re=new Date(f),k.level===o&&F>=K&&F<=re&&A<_?A++:k.level===o&&F>=K&&F<=re&&(Ra(k,h,E),A++,A===p&&g.destroy());break;case(i&&c):F=new Date(k.timestamp),K=new Date(l),k.level===o&&F>=K&&A<_?A++:k.level===o&&F>=K&&(Ra(k,h,E),A++,A===p&&g.destroy());break;case(i&&u):F=new Date(k.timestamp),re=new Date(f),k.level===o&&F<=re&&A<_?A++:k.level===o&&F<=re&&(Ra(k,h,E),A++,A===p&&g.destroy());break;case(c&&u):F=new Date(k.timestamp),K=new Date(l),re=new Date(f),F>=K&&F<=re&&A<_?A++:F>=K&&F<=re&&(Ra(k,h,E),A++,A===p&&g.destroy());break;case i:k.level===o&&A<_?A++:k.level===o&&(Ra(k,h,E),A++,A===p&&g.destroy());break;case c:F=new Date(k.timestamp),K=new Date(l),F>=K&&A<_?A++:F>=K&&A>=_&&(Ra(k,h,E),A++,A===p&&g.destroy());break;case u:F=new Date(k.timestamp),re=new Date(f),F<=re&&A<_?A++:F<=re&&A>=_&&(Ra(k,h,E),A++,A===p&&g.destroy());break;default:A<_?A++:(Ra(k,h,E),A++,A===p&&g.destroy())}}return a(v,"onLogMessage"),await Dse(g,"close"),E}a(Hse,"readLog");function Ra(e,t,r){t==="desc"?kse(e,r):t==="asc"?Fse(e,r):r.push(e)}a(Ra,"pushLineToResult");function kse(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(kse,"insertDescending");function Fse(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(Fse,"insertAscending")});var ng=I((bIe,Xk)=>{"use strict";var IO=require("joi"),{string:Fu,boolean:Qk,date:Gse}=IO.types(),qse=lt(),{validateSchemaExists:TIe,validateTableExists:AIe,validateSchemaName:RIe}=Ti(),$se=(H(),P($)),Vse=Ot(),jk=le();jk.initSync();var yIe=Fu.invalid(jk.get($se.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Vse.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),Jk={operation:Fu.valid("add_node","update_node","set_node_replication"),node_name:Fu.optional(),subscriptions:IO.array().items({table:Fu.optional(),schema:Fu.optional(),database:Fu.optional(),subscribe:Qk.required(),publish:Qk.required().custom(Yse),start_time:Gse.iso()})};function Kse(e){return qse.validateBySchema(e,IO.object(Jk))}a(Kse,"addUpdateNodeValidator");function Yse(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Yse,"checkForFalsy");Xk.exports={addUpdateNodeValidator:Kse,validation_schema:Jk}});var Gu=I((NIe,Zk)=>{"use strict";var CO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},PO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Zk.exports={Node:CO,NodeSubscription:PO}});var tF=I((IIe,eF)=>{"use strict";var Wse=(H(),P($)).OPERATIONS_ENUM,DO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Wse.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};eF.exports=DO});var k_=I((PIe,rF)=>{"use strict";var LO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},MO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};rF.exports={RemotePayloadObject:LO,RemotePayloadSubscription:MO}});var sF=I((LIe,nF)=>{"use strict";var vO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};nF.exports=vO});var oF=I((HIe,iF)=>{"use strict";var zse=sF(),vIe=vt(),UIe=ut(),Qse=Q(),{getSchemaPath:xIe,getTransactionAuditStorePath:BIe}=Et(),{getDatabases:jse}=(Me(),P(st));iF.exports=Jse;async function Jse(e){let t=new zse;try{let r=jse()[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){Qse.warn(`unable to stat table dbi due to ${r}`)}return t}a(Jse,"lmdbGetTableSize")});var cF=I((FIe,aF)=>{"use strict";var UO=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};aF.exports=UO});var $u=I((YIe,fF)=>{"use strict";var Xse=require("fs-extra"),Zse=require("path"),jr=require("systeminformation"),ya=Q(),lF=hr(),qIe=Ot(),qu=(H(),P($)),eie=oF(),tie=no(),{getThreadInfo:uF}=tt(),F_=le();F_.initSync();var rie=cF(),{openEnvironment:$Ie}=ut(),{getSchemaPath:VIe}=Et(),{database:KIe,databases:xO}=(Me(),P(st)),sg;fF.exports={getHDBProcessInfo:FO,getNetworkInfo:qO,getDiskInfo:GO,getMemoryInfo:kO,getCPUInfo:HO,getTimeInfo:BO,getSystemInformation:$O,systemInformation:nie,getTableSize:VO,getMetrics:KO};function BO(){return jr.time()}a(BO,"getTimeInfo");async function HO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await jr.cpu();f.cpu_speed=await jr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:p,raw_currentload_system:S,raw_currentload_user:g,cpus:A,...E}=await jr.currentLoad();return E.cpus=[],A.forEach(R=>{let{raw_load:N,raw_load_idle:v,raw_load_irq:k,raw_load_nice:F,raw_load_system:K,raw_load_user:re,...oe}=R;E.cpus.push(oe)}),f.current_load=E,f}catch(e){return ya.error(`error in getCPUInfo: ${e}`),{}}}a(HO,"getCPUInfo");async function kO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ya.error(`error in getMemoryInfo: ${e}`),{}}}a(kO,"getMemoryInfo");async function FO(){let e={core:[],clustering:[]};try{let t=await jr.processes(),r;try{r=Number.parseInt(await Xse.readFile(Zse.join(F_.get(qu.CONFIG_PARAMS.ROOTPATH),qu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===qu.NODE_ERROR_CODES.ENOENT)ya.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 ya.error(`error in getHDBProcessInfo: ${t}`),e}}a(FO,"getHDBProcessInfo");async function GO(){let e={};try{if(!F_.get(qu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await jr.fsStats();return e.read_write=u,e.size=await jr.fsSize(),e}catch(t){return ya.error(`error in getDiskInfo: ${t}`),e}}a(GO,"getDiskInfo");async function qO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return F_.get(qu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await jr.networkInterfaceDefault(),e.latency=await jr.inetChecksite("google.com"),(await jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return ya.error(`error in getNetworkInfo: ${t}`),e}}a(qO,"getNetworkInfo");async function $O(){if(sg!==void 0)return sg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await jr.osInfo();e=c;let l=await jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,sg=e,sg}catch(t){return ya.error(`error in getSystemInformation: ${t}`),e}}a($O,"getSystemInformation");async function VO(){let e=[],t=await tie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await eie(n));return e}a(VO,"getTableSize");async function KO(){let e={};for(let t in xO){let r=e[t]={},n=r.tables={};for(let s in xO[t])try{let i=xO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){ya.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(KO,"getMetrics");async function dF(){if(F_.get(qu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await lF.getNATSReferences(),t=await lF.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(dF,"getNatsStreamInfo");async function nie(e){let t=new rie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $O(),t.time=BO(),t.cpu=await HO(),t.memory=await kO(),t.disk=await GO(),t.network=await qO(),t.harperdb_processes=await FO(),t.table_size=await VO(),t.metrics=await KO(),t.threads=await uF(),t.replication=await dF(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $O();break;case"time":t.time=BO();break;case"cpu":t.cpu=await HO();break;case"memory":t.memory=await kO();break;case"disk":t.disk=await GO();break;case"network":t.network=await qO();break;case"harperdb_processes":t.harperdb_processes=await FO();break;case"table_size":t.table_size=await VO();break;case"database_metrics":case"metrics":t.metrics=await KO();break;case"threads":t.threads=await uF();break;case"replication":t.replication=await dF();break;default:break}return t}a(nie,"systemInformation")});var _o=I((jIe,mF)=>{"use strict";var sie=pn(),YO=ae(),iie=require("util"),zc=(H(),P($)),_F=le();_F.initSync();var oie=yb(),hF=Vr(),{Node:zIe,NodeSubscription:QIe}=Gu(),aie=uu(),cie=tF(),{RemotePayloadObject:lie,RemotePayloadSubscription:uie}=k_(),{handleHDBError:die,hdb_errors:fie}=he(),{HTTP_STATUS_CODES:_ie,HDB_ERROR_MSGS:hie}=fie,pie=$s(),mie=$u(),{packageJson:Eie}=mt(),{getDatabases:gie}=(Me(),P(st)),Sie=iie.promisify(oie.authorize),Tie=hF.searchByHash,Aie=hF.searchByValue;mF.exports={authHeaderToUser:Rie,isEmpty:yie,getNodeRecord:bie,upsertNodeRecord:Oie,buildNodePayloads:Nie,checkClusteringEnabled:wie,getAllNodeRecords:Iie,getSystemInfo:Cie,reverseSubscription:pF};async function Rie(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Sie(t,null),e}a(Rie,"authHeaderToUser");function yie(e){return e==null}a(yie,"isEmpty");async function bie(e){let t=new aie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Tie(t)}a(bie,"getNodeRecord");async function Oie(e){let t=new cie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return sie.upsert(t)}a(Oie,"upsertNodeRecord");function pF(e){if(YO.isEmpty(e.subscribe)||YO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(pF,"reverseSubscription");function Nie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=YO.getTableHashAttribute(l,u),{subscribe:d,publish:h}=pF(c),_=gie()[l]?.[u],p=new uie(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(p)}return new lie(r,t,s,n)}a(Nie,"buildNodePayloads");function wie(){if(!_F.get(zc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw die(new Error,hie.CLUSTERING_NOT_ENABLED,_ie.BAD_REQUEST,void 0,void 0,!0)}a(wie,"checkClusteringEnabled");async function Iie(){let e=new pie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Aie(e))}a(Iie,"getAllNodeRecords");async function Cie(){let e=await mie.getSystemInformation();return{hdb_version:Eie.version,node_version:e.node_version,platform:e.platform}}a(Cie,"getSystemInfo")});var WO=I((XIe,bF)=>{"use strict";var ig=hr(),EF=ae(),gF=Ot(),SF=(H(),P($)),og=Q(),TF=ZE(),Pie=t_(),{RemotePayloadObject:Die}=k_(),{handleHDBError:AF,hdb_errors:Lie}=he(),{HTTP_STATUS_CODES:RF}=Lie,{NodeSubscription:yF}=Gu();bF.exports=Mie;async function Mie(e,t){let r;try{r=await ig.request(`${t}.${gF.REQUEST_SUFFIX}`,new Die(SF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),og.trace("Response from remote describe all request:",r)}catch(o){og.error(`addNode received error from describe all request to remote node: ${o}`);let c=ig.requestErrorHandler(o,"add_node",t);throw AF(new Error,c,RF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===gF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw AF(new Error,o,RF.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===SF.SYSTEM_SCHEMA_NAME){await ig.createLocalTableStream(l,c);let p=new yF(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p);continue}let u=EF.doesSchemaExist(l),f=n[l]!==void 0,d=c?EF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(og.trace(`addNode creating schema: ${l}`),await TF.createSchema({operation:"create_schema",schema:l})),!d&&h){og.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Pie(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await TF.createTable(p)}await ig.createLocalTableStream(l,c);let _=new yF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(Mie,"reviewSubscriptions")});var jc={};ve(jc,{addNodeBack:()=>Hie,removeNodeBack:()=>kie,setNode:()=>Bie});async function Bie(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=Ws(t)):t=QE(r);let n=(0,NF.validateBySchema)(e,xie);if(n)throw(0,ho.handleHDBError)(n,n.message,Uie.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ho.ClientError("url or hostname is required for remove_node operation");let _=r,p=pr(),S=await p.get(_);if(!S)throw new ho.ClientError(_+" does not exist");try{await B_({url:S.url},{operation:qt.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?Xe():_},void 0)}catch(g){zn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new ho.ClientError("url required for this operation");let s=fa();if(s==null)throw new ho.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Es.getReplicationCert)();let _=await(0,Es.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Es.createCsr)(),zn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,zn.info("Sending CA named",_.name,"to target node",t))}let l={operation:qt.ADD_NODE_BACK,hostname:(0,wF.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(OF):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=OF(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await B_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,zn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(zn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Es.setCertTable)({name:vie.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Es.setCertTable)({name:Xe(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await uo(Xe(),_)}await uo(u?u.nodeName:d.name??Ws(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function Hie(e){zn.trace("addNodeBack received request:",e);let t=await(0,Es.signCertificate)(e),r;e.csr?(r=t.signingCA,zn.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,zn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization);let s=await(0,Es.getReplicationCertAuth)();if(n.replicates){let i={url:fa(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await uo(Xe(),i)}return await uo(e.hostname,n),t.nodeName=Xe(),t.usingCA=s?.certificate,zn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function kie(e){zn.trace("removeNodeBack received request:",e),await pr().delete(e.name)}function OF(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Es,NF,Qc,wF,zn,ho,vie,Uie,xie,Jc=be(()=>{Es=M(js()),NF=M(lt()),Qc=M(require("joi")),wF=M(le());H();P_();Fc();_s();zn=M(Q()),ho=M(he()),{pki:vie}=require("node-forge"),{HTTP_STATUS_CODES:Uie}=ho.hdb_errors,xie=Qc.default.object({hostname:Qc.default.string(),verify_tls:Qc.default.boolean(),replicates:Qc.default.boolean(),subscriptions:Qc.default.array(),revoked_certificates:Qc.default.array()});a(Bie,"setNode");a(Hie,"addNodeBack");a(kie,"removeNodeBack");a(OF,"reverseSubscription")});var dg=I((aCe,CF)=>{"use strict";var{handleHDBError:ag,hdb_errors:Fie}=he(),{HTTP_STATUS_CODES:cg}=Fie,{addUpdateNodeValidator:Gie}=ng(),lg=Q(),ug=(H(),P($)),IF=Ot(),qie=ae(),G_=hr(),q_=_o(),zO=le(),$ie=WO(),{Node:Vie,NodeSubscription:Kie}=Gu(),{broadcast:Yie}=tt(),{setNode:Wie}=(Jc(),P(jc)),iCe=le(),oCe=(H(),P($)),zie="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Qie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",jie=zO.get(ug.CONFIG_PARAMS.CLUSTERING_NODENAME);CF.exports=Jie;async function Jie(e,t=!1){if(lg.trace("addNode called with:",e),zO.get(ug.CONFIG_PARAMS.REPLICATION_URL)||zO.get(ug.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Wie(e);q_.checkClusteringEnabled();let r=Gie(e);if(r)throw ag(r,r.message,cg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await q_.getNodeRecord(n);if(!qie.isEmptyOrZeroLength(d))throw ag(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,cg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await $ie(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=zie,o;let c=q_.buildNodePayloads(s,jie,ug.OPERATIONS_ENUM.ADD_NODE,await q_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new Kie(_.schema,_.table,_.publish,_.subscribe))}lg.trace("addNode sending remote payload:",c);let u;try{u=await G_.request(`${n}.${IF.REQUEST_SUFFIX}`,c)}catch(d){lg.error(`addNode received error from request: ${d}`);for(let _=0,p=s.length;_<p;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await G_.updateRemoteConsumer(S,n)}let h=G_.requestErrorHandler(d,"add_node",n);throw ag(new Error,h,cg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===IF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw ag(new Error,d,cg.INTERNAL_SERVER_ERROR,"error",d)}lg.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await G_.updateRemoteConsumer(_,n),_.subscribe===!0&&await G_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new Vie(n,l,u.system_info);return await q_.upsertNodeRecord(f),Yie({type:"nats_update"}),i.length>0?o.message=Qie:o.message=`Successfully added '${n}' to manifest`,o}a(Jie,"addNode")});var XO=I((uCe,DF)=>{"use strict";var{handleHDBError:QO,hdb_errors:Xie}=he(),{HTTP_STATUS_CODES:jO}=Xie,{addUpdateNodeValidator:Zie}=ng(),$_=Q(),fg=(H(),P($)),PF=Ot(),lCe=ae(),V_=hr(),K_=_o(),JO=le(),{cloneDeep:eoe}=require("lodash"),toe=WO(),{Node:roe,NodeSubscription:noe}=Gu(),{broadcast:soe}=tt(),{setNode:ioe}=(Jc(),P(jc)),ooe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",aoe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",coe=JO.get(fg.CONFIG_PARAMS.CLUSTERING_NODENAME);DF.exports=loe;async function loe(e){if($_.trace("updateNode called with:",e),JO.get(fg.CONFIG_PARAMS.REPLICATION_URL)??JO.get(fg.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ioe(e);K_.checkClusteringEnabled();let t=Zie(e);if(t)throw QO(t,t.message,jO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await K_.getNodeRecord(r);s.length>0&&(n=eoe(s));let{added:i,skipped:o}=await toe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=ooe,c;let l=K_.buildNodePayloads(i,coe,fg.OPERATIONS_ENUM.UPDATE_NODE,await K_.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];$_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}$_.trace("updateNode sending remote payload:",l);let u;try{u=await V_.request(`${r}.${PF.REQUEST_SUFFIX}`,l)}catch(f){$_.error(`updateNode received error from request: ${f}`);let d=V_.requestErrorHandler(f,"update_node",r);throw QO(new Error,d,jO.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===PF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw QO(new Error,f,jO.INTERNAL_SERVER_ERROR,"error",f)}$_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await V_.updateRemoteConsumer(h,r),h.subscribe===!0?await V_.updateConsumerIterator(h.schema,h.table,r,"start"):await V_.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new roe(r,[],u.system_info)]),await uoe(n[0],i,u.system_info),o.length>0?c.message=aoe:c.message=`Successfully updated '${r}'`,c}a(loe,"updateNode");async function uoe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new noe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await K_.upsertNodeRecord(n),soe({type:"nats_update"})}a(uoe,"updateNodeTable")});var xF=I((fCe,UF)=>{"use strict";var vF=require("joi"),{string:LF}=vF.types(),doe=lt(),MF=(H(),P($)),foe=le(),_oe=Ot();UF.exports=hoe;function hoe(e){let t=LF.invalid(foe.get(MF.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(_oe.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=vF.object({operation:LF.valid(MF.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return doe.validateBySchema(e,r)}a(hoe,"removeNodeValidator")});var _g=I((hCe,GF)=>{"use strict";var{handleHDBError:BF,hdb_errors:poe}=he(),{HTTP_STATUS_CODES:HF}=poe,moe=xF(),Y_=Q(),kF=_o(),Eoe=ae(),Vu=(H(),P($)),FF=Ot(),ZO=hr(),eN=le(),{RemotePayloadObject:goe}=k_(),{NodeSubscription:Soe}=Gu(),Toe=e_(),Aoe=Tc(),{broadcast:Roe}=tt(),{setNode:yoe}=(Jc(),P(jc)),boe=eN.get(Vu.CONFIG_PARAMS.CLUSTERING_NODENAME);GF.exports=Ooe;async function Ooe(e){if(Y_.trace("removeNode called with:",e),eN.get(Vu.CONFIG_PARAMS.REPLICATION_URL)??eN.get(Vu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return yoe(e);kF.checkClusteringEnabled();let t=moe(e);if(t)throw BF(t,t.message,HF.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await kF.getNodeRecord(r);if(Eoe.isEmptyOrZeroLength(n))throw BF(new Error,`Node '${r}' was not found.`,HF.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new goe(Vu.OPERATIONS_ENUM.REMOVE_NODE,boe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await ZO.updateConsumerIterator(f.schema,f.table,r,"stop");try{await ZO.updateRemoteConsumer(new Soe(f.schema,f.table,!1,!1),r)}catch(d){Y_.error(d)}}try{i=await ZO.request(`${r}.${FF.REQUEST_SUFFIX}`,s),Y_.trace("Remove node reply from remote node:",r,i)}catch(l){Y_.error("removeNode received error from request:",l),o=!0}let c=new Toe(Vu.SYSTEM_SCHEMA_NAME,Vu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Aoe.deleteRecord(c),Roe({type:"nats_update"}),i?.status===FF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Y_.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Ooe,"removeNode")});var VF=I((mCe,$F)=>{"use strict";var qF=require("joi"),{string:Noe,array:woe}=qF.types(),Ioe=lt(),Coe=ng();$F.exports=Poe;function Poe(e){let t=qF.object({operation:Noe.valid("configure_cluster").required(),connections:woe.items(Coe.validation_schema).required()});return Ioe.validateBySchema(e,t)}a(Poe,"configureClusterValidator")});var tN=I((gCe,QF)=>{"use strict";var KF=(H(),P($)),hg=Q(),Doe=ae(),Loe=le(),Moe=_g(),voe=dg(),Uoe=_o(),xoe=VF(),{handleHDBError:YF,hdb_errors:Boe}=he(),{HTTP_STATUS_CODES:WF}=Boe,Hoe="Configure cluster complete.",koe="Failed to configure the cluster. Check the logs for more details.",Foe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";QF.exports=Goe;async function Goe(e){hg.trace("configure cluster called with:",e);let t=xoe(e);if(t)throw YF(t,t.message,WF.BAD_REQUEST,void 0,void 0,!0);let r=await Uoe.getAllNodeRecords(),n=[];if(Loe.get(KF.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await zF(Moe,{operation:KF.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}hg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await zF(voe,d,d.node_name);s.push(h)}hg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(hg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(Doe.isEmptyOrZeroLength(o))return{message:Hoe,connections:c};if(l)return{message:Foe,failed_nodes:o,connections:c};throw YF(new Error,koe,WF.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Goe,"configureCluster");async function zF(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(zF,"functionWrapper")});var ZF=I((TCe,XF)=>{"use strict";var W_=require("joi"),qoe=lt(),{validateSchemaExists:jF,validateTableExists:$oe,validateSchemaName:JF}=Ti(),Voe=W_.object({operation:W_.string().valid("purge_stream"),schema:W_.string().custom(jF).custom(JF).optional(),database:W_.string().custom(jF).custom(JF).optional(),table:W_.string().custom($oe).required()});function Koe(e){return qoe.validateBySchema(e,Voe)}a(Koe,"purgeStreamValidator");XF.exports=Koe});var rN=I((RCe,eG)=>{"use strict";var{handleHDBError:Yoe,hdb_errors:Woe}=he(),{HTTP_STATUS_CODES:zoe}=Woe,Qoe=ZF(),joe=hr(),Joe=_o();eG.exports=Xoe;async function Xoe(e){e.schema=e.schema??e.database;let t=Qoe(e);if(t)throw Yoe(t,t.message,zoe.BAD_REQUEST,void 0,void 0,!0);Joe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await joe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Xoe,"purgeStream")});var iN=I((bCe,aG)=>{"use strict";var sN=_o(),Zoe=hr(),mg=le(),Ku=(H(),P($)),Xc=Ot(),eae=ae(),nN=Q(),{RemotePayloadObject:tae}=k_(),{ErrorCode:tG}=require("nats"),{parentPort:rG}=require("worker_threads"),{onMessageByType:rae}=tt(),{getThisNodeName:nae}=(_s(),P(Ea)),{requestClusterStatus:sae}=(P_(),P(OH)),{getReplicationSharedStatus:iae}=(Fc(),P(Kb)),{CONFIRMATION_STATUS_POSITION:oae,RECEIVED_VERSION_POSITION:aae,RECEIVED_TIME_POSITION:cae,SENDING_TIME_POSITION:lae}=(pO(),P(_k)),nG=mg.get(Ku.CONFIG_PARAMS.CLUSTERING_ENABLED),sG=mg.get(Ku.CONFIG_PARAMS.CLUSTERING_NODENAME);aG.exports={clusterStatus:uae,buildNodeStatus:oG};var iG;rae("cluster-status",async e=>{iG(e)});async function uae(){if(mg.get(Ku.CONFIG_PARAMS.REPLICATION_URL)||mg.get(Ku.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(rG){rG.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{iG=s});for(let s of n.connections){let i=s.name;for(let o of s.database_sockets){let c=o.database,l;for(let f of Object.values(databases[c]||{}))if(l=f.auditStore,l)break;if(!l)continue;let u=iae(l,c,i);o.lastCommitConfirmed=pg(u[oae]),o.lastReceivedRemoteTime=pg(u[aae]),o.lastReceivedLocalTime=pg(u[cae]),o.sendingMessage=pg(u[lae])}}}else n=sae();return n.node_name=nae(),n.is_enabled=!0,n}let e={node_name:sG,is_enabled:nG,connections:[]};if(!nG)return e;let t=await sN.getAllNodeRecords();if(eae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(oG(t[n],e.connections));return await Promise.allSettled(r),e}a(uae,"clusterStatus");function pg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(pg,"asDate");async function oG(e,t){let r=e.name,n=new tae(Ku.OPERATIONS_ENUM.CLUSTER_STATUS,sG,void 0,await sN.getSystemInfo()),s,i,o=Xc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Zoe.request(Xc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Xc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Xc.CLUSTER_STATUS_STATUSES.CLOSED,nN.error(`Error getting node status from ${r} `,s))}catch(l){nN.warn(`Error getting node status from ${r}`,l),l.code===tG.NoResponders?o=Xc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===tG.Timeout?o=Xc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Xc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new dae(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Ku.PRE_4_0_0_VERSION&&await sN.upsertNodeRecord(l)}catch(l){nN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(oG,"buildNodeStatus");function dae(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(dae,"NodeStatusObject")});var aN=I((NCe,cG)=>{"use strict";var{handleHDBError:fae,hdb_errors:_ae}=he(),{HTTP_STATUS_CODES:hae}=_ae,pae=hr(),mae=_o(),oN=ae(),Eg=require("joi"),Eae=lt(),gae=2e3,Sae=Eg.object({timeout:Eg.number().min(1),connected_nodes:Eg.boolean(),routes:Eg.boolean()});cG.exports=Tae;async function Tae(e){mae.checkClusteringEnabled();let t=Eae.validateBySchema(e,Sae);if(t)throw fae(t,t.message,hae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||oN.autoCastBoolean(n),o=s===void 0||oN.autoCastBoolean(s),c={nodes:[]},l=await pae.getServerList(r??gae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let p={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(p.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{p.connected_nodes.includes(S.name.slice(0,-4))||p.connected_nodes.push(S.name.slice(0,-4))})),o&&(p.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:oN.autoCast(S.split(":")[1])})):[]),c.nodes.push(p)}}return c}a(Tae,"clusterNetwork")});var fG=I((ICe,dG)=>{"use strict";var cN=require("joi"),lG=lt(),{route_constraints:uG}=qR();dG.exports={setRoutesValidator:Aae,deleteRoutesValidator:Rae};function Aae(e){let t=cN.object({server:cN.valid("hub","leaf"),routes:uG.required()});return lG.validateBySchema(e,t)}a(Aae,"setRoutesValidator");function Rae(e){let t=cN.object({routes:uG.required()});return lG.validateBySchema(e,t)}a(Rae,"deleteRoutesValidator")});var gg=I((PCe,SG)=>{"use strict";var po=wt(),lN=ae(),gs=(H(),P($)),Yu=le(),_G=fG(),{handleHDBError:hG,hdb_errors:yae}=he(),{HTTP_STATUS_CODES:pG}=yae,mG="cluster routes successfully set",EG="cluster routes successfully deleted";SG.exports={setRoutes:Oae,getRoutes:Nae,deleteRoutes:wae};function bae(e){let t=po.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=lN.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:mG,set:i,skipped:s}}a(bae,"setRoutesNats");function Oae(e){let t=_G.setRoutesValidator(e);if(t)throw hG(t,t.message,pG.BAD_REQUEST,void 0,void 0,!0);if(Yu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return bae(e);let r=[],n=[],s=Yu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{gG(s,i)?n.push(i):(s.push(i),r.push(i))}),po.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:mG,set:r,skipped:n}}a(Oae,"setRoutes");function gG(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(gG,"existsInArray");function Nae(){if(Yu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=po.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Yu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Nae,"getRoutes");function wae(e){let t=_G.deleteRoutesValidator(e);if(t)throw hG(t,t.message,pG.BAD_REQUEST,void 0,void 0,!0);if(Yu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Iae(e);let r=[],n=[],s=Yu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{gG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),po.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:EG,deleted:r,skipped:n}}a(wae,"deleteRoutes");function Iae(e){let t=po.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let p=r[h];if(f.host===p.host&&f.port===p.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,p=n.length;_<p;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=lN.isEmptyOrZeroLength(r)?null:r,po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=lN.isEmptyOrZeroLength(n)?null:n,po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:EG,deleted:s,skipped:i}}a(Iae,"deleteRoutesNats")});var AG=I((LCe,TG)=>{"use strict";var z_=require("alasql"),Zc=require("recursive-iterator"),Js=Q(),Cae=ae(),Q_=(H(),P($)),uN=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Dae(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=>Q_.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=>!Q_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Q_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Pae(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!Q_.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new z_.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Pae(e){return e.filter(t=>t[Q_.PERMS_CRUD_ENUM.READ])}a(Pae,"filterReadRestrictedAttrs");function Dae(e,t,r,n,s){Lae(e,t,r,n,s)}a(Dae,"interpretAST");function j_(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(j_,"addSchemaTableToMap");function Lae(e,t,r,n,s){if(!e){Js.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof z_.yy.Insert?xae(e,t,r):e instanceof z_.yy.Select?Mae(e,t,r,n,s):e instanceof z_.yy.Update?vae(e,t,r):e instanceof z_.yy.Delete?Uae(e,t,r):Js.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Lae,"getRecordAttributesAST");function Mae(e,t,r,n,s){if(!e){Js.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Cae.isEmptyOrZeroLength(i)){Js.error("No schema specified");return}e.from.forEach(c=>{j_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),j_(c.table,t,r,n,s)});let o=new Zc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Js.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 Zc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{Js.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Zc(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{Js.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new Zc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{Js.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(Mae,"getSelectAttributes");function vae(e,t,r){if(!e){Js.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Zc(e.columns),s=e.table.databaseid;j_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&dN(e.table.tableid,s,i.columnid,t,r)}a(vae,"getUpdateAttributes");function Uae(e,t,r){if(!e){Js.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Zc(e.where),s=e.table.databaseid;j_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&dN(e.table.tableid,s,i.columnid,t,r)}a(Uae,"getDeleteAttributes");function xae(e,t,r){if(!e){Js.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Zc(e.columns),s=e.into.databaseid;j_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&dN(e.into.tableid,s,i.columnid,t,r)}a(xae,"getInsertAttributes");function dN(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(dN,"pushAttribute");TG.exports=uN});var yG=I((vCe,RG)=>{"use strict";var Sg=(H(),P($)),Tg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Sg.RAM_ALLOCATION_ENUM.DEFAULT,n=Sg.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},fN=class extends Tg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Sg.RAM_ALLOCATION_ENUM.DEFAULT,n=Sg.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};RG.exports={BaseLicense:Tg,ExtendedLicense:fN}});var Qu=I((xCe,CG)=>{"use strict";var zu=require("fs-extra"),Ag=(Rm(),P(Am)),OG=require("crypto"),Bae=require("moment"),Hae=require("uuid").v4,Jr=Q(),hN=require("path"),kae=ae(),el=(H(),P($)),{totalmem:bG}=require("os"),Fae=yG().ExtendedLicense,Wu="invalid license key format",Gae="061183",qae="mofi25",$ae="aes-256-cbc",Vae=16,Kae=32,NG=le(),{resolvePath:wG}=wt();NG.initSync();var _N;CG.exports={validateLicense:IG,generateFingerPrint:Wae,licenseSearch:EN,getLicense:jae,checkMemoryLimit:Jae};function pN(){return hN.join(NG.getHdbBasePath(),el.LICENSE_KEY_DIR_NAME,el.LICENSE_FILE_NAME)}a(pN,"getLicenseDirPath");function Yae(){let e=pN();return wG(hN.join(e,el.LICENSE_FILE_NAME))}a(Yae,"getLicenseFilePath");function mN(){let e=pN();return wG(hN.join(e,el.REG_KEY_FILE_NAME))}a(mN,"getFingerPrintFilePath");async function Wae(){let e=mN();try{return await zu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await zae();throw Jr.error(`Error writing fingerprint file to ${e}`),Jr.error(t),new Error("There was an error generating the fingerprint")}}a(Wae,"generateFingerPrint");async function zae(){let e=Hae(),t=Ag.hash(e,Ag.HASH_FUNCTION.MD5),r=mN();try{await zu.mkdirp(pN()),await zu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Jr.error(`Error writing fingerprint file to ${r}`),Jr.error(n),new Error("There was an error generating the fingerprint")}return t}a(zae,"writeFingerprint");function IG(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:el.RAM_ALLOCATION_ENUM.DEFAULT,version:el.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Jr.error("empty license key passed to validate."),r;let n=mN(),s=!1;try{s=zu.statSync(n)}catch(i){Jr.error(i)}if(s){let i;try{i=zu.readFileSync(n,"utf8")}catch{Jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(qae),c=o[1];c=Buffer.concat([Buffer.from(c)],Vae);let l=Buffer.concat([Buffer.from(i)],Kae),u=OG.createDecipheriv($ae,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=Qae(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Wu),Jr.error(Wu),new Error(Wu)}let d;if(isNaN(f))try{d=JSON.parse(f),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Wu),Jr.error(Wu),new Error(Wu)}else r.exp_date=f;r.exp_date<Bae().valueOf()&&(r.valid_date=!1),Ag.validate(o[1],`${Gae}${i}${t}`,Ag.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Jr.error("Invalid licence"),r}a(IG,"validateLicense");function Qae(e,t){try{let r=OG.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Jr.warn("Check old license failed")}}a(Qae,"checkOldLicense");function EN(){let e=new Fae,t=[];try{t=zu.readFileSync(Yae(),"utf-8").split(`\r
24
- `)}catch(r){r.code==="ENOENT"?Jr.debug("no license file found"):Jr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(kae.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=IG(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Jr.error("There was an error parsing the license string."),Jr.error(s),e.ram_allocation=el.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return _N=e,e}a(EN,"licenseSearch");async function jae(){return _N||await EN(),_N}a(jae,"getLicense");function Jae(){let e=EN().ram_allocation,t=process.constrainedMemory?.()||bG();if(t=Math.round(Math.min(t,bG())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(Jae,"checkMemoryLimit")});var TN=I((HCe,MG)=>{var Rg=Qu(),PG=require("chalk"),Qn=Q(),DG=require("prompt"),{promisify:Xae}=require("util"),gN=(H(),P($)),Zae=require("fs-extra"),ece=require("path"),tce=ae(),{packageJson:rce}=mt(),LG=le();LG.initSync();var nce=require("moment"),sce=Xae(DG.get),ice=ece.join(LG.getHdbBasePath(),gN.LICENSE_KEY_DIR_NAME,gN.LICENSE_FILE_NAME,gN.LICENSE_FILE_NAME);MG.exports={getFingerprint:ace,setLicense:oce,parseLicense:SN,register:cce,getRegistrationInfo:uce};async function oce(e){if(e&&e.key&&e.company){try{Qn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await SN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qn.error(r),Qn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(oce,"setLicense");async function ace(){let e={};try{e=await Rg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qn.error(r),Qn.error(t),new Error(r)}return e}a(ace,"getFingerprint");async function SN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qn.info("Validating license input...");let r=Rg.validateLicense(e,t);if(Qn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qn.info("writing license to disk"),await Zae.writeFile(ice,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qn.error("Failed to write License"),n}return"Registration successful."}a(SN,"parseLicense");async function cce(){let e=await lce();return SN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(cce,"register");async function lce(){let e=await Rg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:PG.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:PG.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{DG.start()}catch(n){Qn.error(n)}let r;try{r=await sce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(lce,"promptForRegistration");async function uce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Rg.getLicense()}catch(r){throw Qn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(tce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=rce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=nce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(uce,"getRegistrationInfo")});var UG=I((FCe,vG)=>{"use strict";var dce=Ot(),AN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,p){this.port=t,o===null&&(o=void 0),this.server_name=r+dce.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:p}},this.system_account="SYS"}};vG.exports=AN});var HG=I((qCe,BG)=>{"use strict";var xG=Ot(),RN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+xG.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+xG.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};BG.exports=RN});var FG=I((VCe,kG)=>{"use strict";var yN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};kG.exports=yN});var qG=I((YCe,GG)=>{"use strict";var fce=Ot(),bN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+fce.SERVER_SUFFIX.ADMIN,this.password=r}};GG.exports=bN});var Ng=I((zCe,KG)=>{"use strict";var tl=require("path"),rl=require("fs-extra"),_ce=UG(),hce=HG(),pce=FG(),mce=qG(),ON=qn(),Ju=ae(),An=wt(),bg=(H(),P($)),J_=Ot(),{CONFIG_PARAMS:Yt}=bg,Xu=Q(),X_=le(),$G=ro(),NN=hr(),Ece=js(),ju="clustering",gce=1e4,VG=50;KG.exports={generateNatsConfig:Tce,removeNatsConfig:Ace,getHubConfigPath:Sce};function Sce(){let e=X_.get(Yt.ROOTPATH);return tl.join(e,ju,J_.NATS_CONFIG_FILES.HUB_SERVER)}a(Sce,"getHubConfigPath");async function Tce(e=!1,t=void 0){let r=X_.get(Yt.ROOTPATH);rl.ensureDirSync(tl.join(r,"clustering","leaf")),X_.initSync();let n=An.getConfigFromFile(Yt.CLUSTERING_TLS_CERT_AUTH),s=An.getConfigFromFile(Yt.CLUSTERING_TLS_PRIVATEKEY),i=An.getConfigFromFile(Yt.CLUSTERING_TLS_CERTIFICATE);!await rl.exists(i)&&!await rl.exists(!n)&&await Ece.createNatsCerts();let o=tl.join(r,ju,J_.PID_FILES.HUB),c=tl.join(r,ju,J_.PID_FILES.LEAF),l=An.getConfigFromFile(Yt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=tl.join(r,ju,J_.NATS_CONFIG_FILES.HUB_SERVER),f=tl.join(r,ju,J_.NATS_CONFIG_FILES.LEAF_SERVER),d=An.getConfigFromFile(Yt.CLUSTERING_TLS_INSECURE),h=An.getConfigFromFile(Yt.CLUSTERING_TLS_VERIFY),_=An.getConfigFromFile(Yt.CLUSTERING_NODENAME),p=An.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await NN.checkNATSServerInstalled()||Og("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await ON.listUsers(),g=An.getConfigFromFile(Yt.CLUSTERING_USER),A=await ON.getClusterUser();(Ju.isEmpty(A)||A.active!==!0)&&Og(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yg(Yt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yg(Yt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yg(Yt.CLUSTERING_HUBSERVER_NETWORK_PORT),await yg(Yt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],R=[];for(let[oe,Z]of S.entries())Z.role?.role===bg.ROLE_TYPES_ENUM.CLUSTER_USER&&Z.active&&(E.push(new mce(Z.username,$G.decrypt(Z.hash))),R.push(new pce(Z.username,$G.decrypt(Z.hash))));let N=[],{hub_routes:v}=An.getClusteringRoutes();if(!Ju.isEmptyOrZeroLength(v))for(let oe of v)N.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${oe.host}:${oe.port}`);let k=new _ce(An.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,p,An.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_CLUSTER_NAME),An.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,E,R);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=Ju.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===bg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await rl.writeJson(u,k),Xu.trace(`Hub server config written to ${u}`));let F=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${p}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${p}`,re=new hce(An.getConfigFromFile(Yt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[F],[K],E,R,i,s,n,d);n==null&&delete re.tls.ca_file,(t===void 0||t===bg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await rl.writeJson(f,re),Xu.trace(`Leaf server config written to ${f}`))}a(Tce,"generateNatsConfig");async function yg(e){let t=X_.get(e);return Ju.isEmpty(t)&&Og(`port undefined for '${e}'`),await Ju.isPortTaken(t)&&Og(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(yg,"isPortAvailable");function Og(e){let t=`Error generating clustering config: ${e}`;Xu.error(t),console.error(t),process.exit(1)}a(Og,"generateNatsConfigError");async function Ace(e){let{port:t,config_file:r}=NN.getServerConfig(e),{username:n,decrypt_hash:s}=await ON.getClusterUser(),i=0,o=2e3;for(;i<VG;){try{let f=await NN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){Xu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=VG)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Xu.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Ju.async_set_timeout(u)}let c="0".repeat(gce),l=tl.join(X_.get(Yt.ROOTPATH),ju,r);await rl.writeFile(l,c),await rl.remove(l),Xu.notify(e,"started.")}a(Ace,"removeNatsConfig")});var JG=I((jCe,jG)=>{"use strict";var jn=le(),Rce=Qu(),Ge=(H(),P($)),Z_=Ot(),mo=require("path"),{PACKAGE_ROOT:Ig}=mt(),YG=le(),wg=ae(),Zu="/dev/null",yce=mo.join(Ig,"launchServiceScripts"),WG=mo.join(Ig,"utility/scripts"),bce=mo.join(WG,Ge.HDB_RESTART_SCRIPT),zG=mo.resolve(Ig,"dependencies",`${process.platform}-${process.arch}`,Z_.NATS_BINARY_NAME);function QG(){let t=Rce.licenseSearch().ram_allocation||Ge.RAM_ALLOCATION_ENUM.DEFAULT,r=Ge.MEM_SETTING_KEY+t,n={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return wg.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wg.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Ig}}a(QG,"generateMainServerConfig");var Oce=9930;function Nce(){jn.initSync(!0);let e=jn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=mo.join(e,"clustering",Z_.NATS_CONFIG_FILES.HUB_SERVER),r=mo.join(jn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=YG.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Z_.LOG_LEVEL_FLAGS[jn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Oce?"-"+n:""),script:zG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zu,i.error_file=Zu),i}a(Nce,"generateNatsHubServerConfig");var wce=9940;function Ice(){jn.initSync(!0);let e=jn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=mo.join(e,"clustering",Z_.NATS_CONFIG_FILES.LEAF_SERVER),r=mo.join(jn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=YG.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Z_.LOG_LEVEL_FLAGS[jn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==wce?"-"+n:""),script:zG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zu,i.error_file=Zu),i}a(Ice,"generateNatsLeafServerConfig");function Cce(){jn.initSync();let e=mo.join(jn.get(Ge.CONFIG_PARAMS.LOGGING_ROOT),Ge.LOG_NAMES.HDB),t={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:yce,autorestart:!1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Zu,t.error_file=Zu),t}a(Cce,"generateClusteringUpgradeV4ServiceConfig");function Pce(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return wg.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wg.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:WG},script:bce}}a(Pce,"generateRestart");function Dce(){return{apps:[QG()]}}a(Dce,"generateAllServiceConfigs");jG.exports={generateAllServiceConfigs:Dce,generateMainServerConfig:QG,generateRestart:Pce,generateNatsHubServerConfig:Nce,generateNatsLeafServerConfig:Ice,generateClusteringUpgradeV4ServiceConfig:Cce}});var th=I((ZCe,dq)=>{"use strict";var Ze=(H(),P($)),Lce=ae(),go=Ng(),Cg=hr(),Eo=Ot(),ba=JG(),Pg=le(),nl=Q(),Mce=_o(),{startWorker:XG,onMessageFromWorkers:vce}=tt(),Uce=$u(),XCe=require("util"),xce=require("child_process"),Bce=require("fs"),{execFile:Hce}=xce,Ke;dq.exports={enterPM2Mode:kce,start:Oa,stop:wN,reload:eq,restart:tq,list:IN,describe:sq,connect:So,kill:Vce,startAllServices:Kce,startService:CN,getUniqueServicesList:iq,restartAllServices:Yce,isServiceRegistered:oq,reloadStopStart:aq,restartHdb:nq,deleteProcess:qce,startClusteringProcesses:lq,startClusteringThreads:uq,isHdbRestartRunning:$ce,isClusteringRunning:zce,stopClustering:Wce,reloadClustering:Qce,expectedRestartOfChildren:rq};var eh=!1;vce(e=>{e.type==="restart"&&Pg.initSync(!0)});function kce(){eh=!0}a(kce,"enterPM2Mode");function So(){return Ke||(Ke=require("pm2")),new Promise((e,t)=>{Ke.connect((r,n)=>{r&&t(r),e(n)})})}a(So,"connect");var Xr,Fce=10,ZG;function Oa(e,t=!1){if(eh)return Gce(e);let r=Hce(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Xr.indexOf(r);o>-1&&Xr.splice(o,1),!ZG&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Fce&&(Bce.existsSync(go.getHubConfigPath())?Oa(e):(await go.generateNatsConfig(!0),Oa(e),await new Promise(c=>setTimeout(c,3e3)),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Pg.get(Ze.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&Eo.LOG_LEVEL_HIERARCHY[o]>=Eo.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===Eo.LOG_LEVELS.ERR||f===Eo.LOG_LEVELS.WRN?nl.OUTPUTS.STDERR:nl.OUTPUTS.STDOUT;nl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=Eo.LOG_LEVELS[h]}if(Eo.LOG_LEVEL_HIERARCHY[o]>=Eo.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===Eo.LOG_LEVELS.ERR||f===Eo.LOG_LEVELS.WRN?nl.OUTPUTS.STDERR:nl.OUTPUTS.STDOUT;nl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Xr&&(Xr=[],!t)){let i=a(()=>{ZG=!0,Xr&&(Xr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Xr.push(r)}a(Oa,"start");function Gce(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ke.start(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(Gce,"startWithPM2");function wN(e){if(!eh){for(let t of Xr||[])t.name===e&&(Xr.splice(Xr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ke.stop(e,async(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.delete(e,(i,o)=>{i&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(o)})})})}a(wN,"stop");function eq(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ke.reload(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(eq,"reload");function tq(e){if(!eh){rq();for(let t of Xr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ke.restart(e,(n,s)=>{Ke.disconnect(),t(s)})})}a(tq,"restart");function rq(){for(let e of Xr||[])e.config&&(e.config.restarts=0)}a(rq,"expectedRestartOfChildren");function qce(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ke.delete(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(qce,"deleteProcess");async function nq(){await Oa(ba.generateRestart())}a(nq,"restartHdb");async function $ce(){let e=await IN();for(let t in e)if(e[t].name===Ze.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a($ce,"isHdbRestartRunning");function IN(){return new Promise(async(e,t)=>{try{await So()}catch(r){t(r)}Ke.list((r,n)=>{r&&(Ke.disconnect(),t(r)),Ke.disconnect(),e(n)})})}a(IN,"list");function sq(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ke.describe(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(sq,"describe");function Vce(){if(!eh){for(let e of Xr||[])e.kill();Xr=[];return}return new Promise(async(e,t)=>{try{await So()}catch(r){t(r)}Ke.killDaemon((r,n)=>{r&&(Ke.disconnect(),t(r)),Ke.disconnect(),e(n)})})}a(Vce,"kill");async function Kce(){try{await lq(),await uq(),await Oa(ba.generateAllServiceConfigs())}catch(e){throw Ke?.disconnect(),e}}a(Kce,"startAllServices");async function CN(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ze.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ba.generateMainServerConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ba.generateNatsIngestServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ba.generateNatsReplyServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ba.generateNatsHubServerConfig(),await Oa(r,t),await go.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ba.generateNatsLeafServerConfig(),await Oa(r,t),await go.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ba.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oa(r)}catch(r){throw Ke?.disconnect(),r}}a(CN,"startService");async function iq(){try{let e=await IN(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ke?.disconnect(),e}}a(iq,"getUniqueServicesList");async function Yce(e=[]){try{let t=!1,r=await iq();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ze.PROCESS_DESCRIPTORS.HDB?t=!0:await tq(o))}t&&await aq(Ze.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ke?.disconnect(),t}}a(Yce,"restartAllServices");async function oq(e){if(Xr?.find(r=>r.name===e))return!0;let t=await Uce.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(oq,"isServiceRegistered");async function aq(e){let t=Pg.get(Ze.CONFIG_PARAMS.THREADS_COUNT)??Pg.get(Ze.CONFIG_PARAMS.THREADS),r=await sq(e),n=Lce.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await wN(e),await CN(e)):e===Ze.PROCESS_DESCRIPTORS.HDB?await nq():await eq(e)}a(aq,"reloadStopStart");var cq;async function lq(e=!1){for(let t in Ze.CLUSTERING_PROCESSES){let r=Ze.CLUSTERING_PROCESSES[t];await CN(r,e)}}a(lq,"startClusteringProcesses");async function uq(){cq=XG(Ze.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Cg.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Cg.updateLocalStreams();let e=await Mce.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ze.PRE_4_0_0_VERSION){nl.info("Starting clustering upgrade 4.0.0 process"),XG(Ze.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(uq,"startClusteringThreads");async function Wce(){for(let e in Ze.CLUSTERING_PROCESSES)if(e!==Ze.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ze.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await cq.terminate();else{let t=Ze.CLUSTERING_PROCESSES[e];await wN(t)}}a(Wce,"stopClustering");async function zce(){for(let e in Ze.CLUSTERING_PROCESSES){let t=Ze.CLUSTERING_PROCESSES[e];if(await oq(t)===!1)return!1}return!0}a(zce,"isClusteringRunning");async function Qce(){await go.generateNatsConfig(!0),await Cg.reloadNATSHub(),await Cg.reloadNATSLeaf(),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Qce,"reloadClustering")});var LN={};ve(LN,{compactOnStart:()=>jce,copyDb:()=>Eq});async function jce(){Na.notify("Running compact on start"),console.log("Running compact on start");let e=(0,PN.get)(x.ROOTPATH),t=new Map,r=Je();(0,DN.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Dg.join)(e,"backup",n+".mdb"),o=(0,Dg.join)(e,Za,n+"-copy.mdb"),c=0;try{c=await fq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Na.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Eq(n,o),console.log("Backing up",n,"to",i),await(0,sl.move)(s,i,{overwrite:!0})}try{ed()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,sl.move)(i,s,{overwrite:!0}),await(0,sl.remove)((0,Dg.join)(e,Za,`${n}-copy.mdb-lock`));try{ed()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Na.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,DN.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,sl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw ed(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await fq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
22
+ `,"")}a(aH,"runCommand");async function $re(){try{await Sre.access(xb)}catch{return!1}let e=await aH(`${xb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Tre.eq(t,Gre)}a($re,"checkNATSServerInstalled");async function Gb(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await iH.getClusterUser();if(kc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ks.trace("create nats connection called");let i=await Lre({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:br.get($e.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:br.get($e.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:br.get($e.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ks.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ks.error("Error with Nats client connection, connection closed",o),i===zr&&cH()}),i}a(Gb,"createConnection");function cH(){zr=void 0,xc=void 0,Bc=void 0,Hc=void 0}a(cH,"clearClientCache");async function Vre(){zr&&(await zr.drain(),zr=void 0,xc=void 0,Bc=void 0,Hc=void 0)}a(Vre,"closeConnection");var zr,Hc;async function b_(){return Hc||(Hc=Gb(br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await Hc),zr||Hc}a(b_,"getConnection");async function O_(){if(xc)return xc;kc(zr)&&await b_();let{domain:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xc=await zr.jetstreamManager({domain:e,timeout:6e4}),xc}a(O_,"getJetStreamManager");async function lH(){if(Bc)return Bc;kc(zr)&&await b_();let{domain:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Bc=zr.jetstream({domain:e,timeout:6e4}),Bc}a(lH,"getJetStream");async function Di(){let e=zr||await b_(),t=xc||await O_(),r=Bc||await lH();return{connection:e,jsm:t,js:r}}a(Di,"getNATSReferences");async function Kre(e){let t=br.get($e.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await iH.getClusterUser(),s=await Gb(t,r,n),i=Fb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=oH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await OE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Kre,"getServerList");async function qb(e,t){let{jsm:r}=await Di(),n=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Mre.File,retention:vre.Limits,subjects:t,discard:Ure.Old,max_msgs:s,max_bytes:i,max_age:n})}a(qb,"createLocalStream");async function uH(){let{jsm:e}=await Di(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(uH,"listStreams");async function Yre(e){let{jsm:t}=await Di();await t.streams.delete(e)}a(Yre,"deleteLocalStream");async function Wre(e){let{connection:t}=await Di(),r=[],n=Fb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(oH.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Wre,"listRemoteStreams");async function zre(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Di(),i=tH(),o={durable_name:i,ack_policy:Hb.Explicit};t&&(o.deliver_policy=kb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=Bb(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Pr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(zre,"viewStream");async function*Qre(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Di(),i=tH(),o={durable_name:i,ack_policy:Hb.Explicit};t&&(o.deliver_policy=kb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=Bb(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Pr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Qre,"viewStreamIterator");async function jre(e,t,r,n){Ks.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=dH(n,r);let{js:s}=await Di(),i=await wE(),o=`${e}.${i}`,c=await kre(()=>n instanceof Uint8Array?n:sH.encode(n));try{Ks.trace(`publishToStream publishing to subject: ${o}`),Hre(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return _H(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ks.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await qb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(jre,"publishToStream");function dH(e,t){t===void 0&&(t=Bre());let r=br.get($e.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Pr.MSG_HEADERS.ORIGIN)&&r&&t.append(Pr.MSG_HEADERS.ORIGIN,r),t}a(dH,"addNatsMsgHeader");function bu(e){e=e.toLowerCase();let t=y_.join(br.get($e.CONFIG_PARAMS.ROOTPATH),Fre);if(e===$e.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return kc(Ub)&&(Ub={port:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:y_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),Ub;if(e===$e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return kc(vb)&&(vb={port:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:y_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),vb;Ks.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(bu,"getServerConfig");async function fH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Hb.Explicit,durable_name:r,deliver_policy:kb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(fH,"createConsumer");async function Jre(e,t,r){await e.consumers.delete(t,r)}a(Jre,"removeConsumer");function Xre(e){return e.split(".")[1]}a(Xre,"extractServerName");async function Zre(e,t,r=6e4,n=Fb()){if(!OE.isObject(t))throw new Error("data param must be an object");let s=sH.encode(t),{connection:i}=await Di(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Bb(c.data)}a(Zre,"request");function $b(e){return new Promise(async(t,r)=>{let n=bre(xb,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a($b,"reloadNATS");async function ene(){let{pid_file_path:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await $b(e)}a(ene,"reloadNATSHub");async function tne(){let{pid_file_path:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await $b(e)}a(tne,"reloadNATSLeaf");function rne(e,t,r){let n;switch(e.code){case eH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case eH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(rne,"requestErrorHandler");async function nne(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await Di(),{jsm:s}=await dne(r),{schema:i,table:o}=e,c=NE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await _H(async()=>{if(e.subscribe===!0)await fH(s,c,n.info.server_name,l);else try{await Jre(s,c,n.info.server_name)}catch(u){Ks.trace(u)}})}a(nne,"updateRemoteConsumer");async function sne(e,t,r,n){let s=NE.createNatsTableStreamName(e,t),i=r+Pr.SERVER_SUFFIX.LEAF,o={type:$e.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!nH&&Pre()<br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Mb();await c(o)}await Ire(o),n==="stop"&&await OE.async_set_timeout(1e3)}a(sne,"updateConsumerIterator");function _H(e){return wre.writeTransaction($e.SYSTEM_SCHEMA_NAME,$e.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(_H,"exclusiveLock");async function hH(e,t){let r=NE.createNatsTableStreamName(e,t),n=await wE(),s=cne(e,t,n);await qb(r,[s])}a(hH,"createLocalTableStream");async function ine(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await hH(n,s)}}a(ine,"createTableStreams");async function pH(e,t,r=void 0){if(br.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=NE.createNatsTableStreamName(e,t),{domain:s}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await b_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ks.warn(n);else throw n}}a(pH,"purgeTableStream");async function one(e,t){if(br.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await pH(e,t[r])}a(one,"purgeSchemaTableStreams");async function ane(e){return(await O_()).streams.info(e)}a(ane,"getStreamInfo");function cne(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(cne,"createSubjectName");async function wE(){if(R_)return R_;if(R_=(await O_())?.nc?.info?.server_name,R_===void 0)throw new Error("Unable to get jetstream manager server name");return R_}a(wE,"getJsmServerName");async function lne(){let e=await O_(),t=await wE(),r=await uH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=une(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");Ks.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(lne,"updateLocalStreams");function une(e){let{config:t}=e,r=!1,n=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(une,"updateStreamLimits");async function dne(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ks.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(dne,"connectToRemoteJS")});function Vb(e){let t=e.get(IE),r=t?(0,Ou.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Xe(),s=!1;r.nodeName=Xe();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:w_(e)??1,nodes:[]})})}i[n]=0,e.putSync(IE,(0,Ou.pack)(r))}return r}function N_(e){return Vb(e).remoteNameToId}function gH(e,t){let r=Vb(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(IE,(0,Ou.pack)(r)),s}function CE(e,t){let r=Vb(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(IE,(0,Ou.pack)(r))}return EH.trace?.("The remote node name map",e,n,s),s}var EH,Ou,IE,Kb=be(()=>{EH=M(hi());fs();Ou=require("msgpackr"),IE=Symbol.for("remote-ids");a(Vb,"getIdMappingRecord");a(N_,"exportIdMapping");a(gH,"remoteToLocalNodeId");a(CE,"getIdOfRemoteNode")});var Yb={};ve(Yb,{commits_awaiting_replication:()=>wu,getHDBNodeTable:()=>sr,getReplicationSharedStatus:()=>PE,iterateRoutes:()=>C_,shouldReplicateToNode:()=>I_,subscribeToNodeUpdates:()=>Iu});function sr(){return SH||(SH=ut({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 PE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Iu(e){sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;yH.debug?.("adding node",n,"on node",Xe()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Xe()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of sr().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function I_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&sr().primaryStore.get(Xe())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function fne(){Iu(e=>{ua({},(t,r)=>{let n=e.name,s=TH.get(n);if(s||TH.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=PE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of wu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*C_(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=Nu.default.get(B.REPLICATION_SECUREPORT)??(!Nu.default.get(B.REPLICATION_PORT)&&Nu.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Nu.default.get(B.REPLICATION_PORT)||Nu.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){AH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates,shard:t.shard}}}var AH,RH,Nu,yH,SH,TH,wu,Fc=be(()=>{Me();fs();Bp();AH=require("worker_threads"),RH=M(he()),Nu=M(ce());H();yH=M(hi());server.nodes=[];a(sr,"getHDBNodeTable");a(PE,"getReplicationSharedStatus");a(Iu,"subscribeToNodeUpdates");a(I_,"shouldReplicateToNode");TH=new Map;uD((e,t,r)=>{if(r>server.nodes.length)throw new RH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);wu||(wu=new Map,fne());let n=wu.get(e);return n||(n=[],wu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(fne,"startSubscriptionToReplications");a(C_,"iterateRoutes")});var wH={};ve(wH,{connectedToNode:()=>Gc,disconnectedFromNode:()=>Du,ensureNode:()=>uo,requestClusterStatus:()=>NH,startOnMainThread:()=>zb});async function zb(e){let t=0,r=Je();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){DE.set(i,w_(l.auditStore));break}}}Li.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of C_(e))try{let c=!o.subscriptions;if(c){let u=Xe();sr().primaryStore.get(u)===void 0&&await uo(u,{name:u,url:e.url??da(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Iu(s)});let n;function s(i,o=i?.name){let c=Xe()&&o===Xe()||da()&&i?.url===da();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of sr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(it.trace("Setting up node replication for",i),!i){for(let[d,h]of lo){let _;for(let[p,{worker:S,nodes:g}]of h){let R=g[0];if(R&&R.name==o){_=!0;for(let[E,{worker:A}]of h)h.delete(E),it.warn("Node was deleted, unsubscribing from node",o,E,d),A?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){lo.get(d).iterator.remove(),lo.delete(d);return}}return}if(c)return;if(!i.url){it.info(`Node ${i.name} is missing url`);return}let l=lo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(it.info(`Added node ${i.name} at ${i.url} for process ${Xe()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Cu)if(i.url===h.url){Cu.delete(d);break}Cu.set(i.name,i)}let u=Je();if(l||(l=new Map,lo.set(i.url,l)),l.iterator=ua(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(it.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){it.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),p,S=[{replicateByDefault:h,...i}];DE.has(d)&&(S.push({replicateByDefault:h,name:Xe(),start_time:DE.get(d),end_time:Date.now(),replicates:!0}),DE.delete(d));let g=I_(i,d),R=Li.workers.filter(E=>E.name==="http");if(_?(p=_.worker,_.nodes=S):g&&(t=t%R.length,p=R[t++],l.set(d,{worker:p,nodes:S,url:i.url}),p?.on("exit",()=>{l.get(d)?.worker===p&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};p?p.postMessage(E):Pu(E)},_ne);else{it.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],sr().primaryStore.get(Xe())?.replicates),sr().primaryStore.get(Xe())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};p?p.postMessage(E):ME(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Du=a(function(i){try{it.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Cu.keys()),c=o.sort(),l=c.indexOf(i.name||Ys(i.url));if(l===-1){it.warn("Disconnected node not found in node map",i.name,o);return}let u=lo.get(i.url),f=u?.get(i.database);if(!f){it.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],p=Cu.get(_);u=lo.get(p.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:R}=S,E=!1;for(let A of f.nodes){if(R.some(O=>O.name===A.name)){it.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}R.push(A),E=!0}if(!E){it.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,it.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:R}):Pu({database:i.database,nodes:R});return}it.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){it.error("Error failing over node",o)}},"disconnectedFromNode"),Gc=a(function(i){let o=lo.get(i.url),c=o?.get(i.database);if(!c){it.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):Pu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Li.onMessageByType)("disconnected-from-node",Du),(0,Li.onMessageByType)("connected-to-node",Gc),(0,Li.onMessageByType)("request-cluster-status",NH)}function NH(e,t){let r=[];for(let[n,s]of Cu)try{let i=lo.get(s.url);it.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,Wb.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){it.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function uo(e,t){let r=sr();e=e??Ys(t.url),t.name=e;try{if(t.ca){let s=new OH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){it.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(it.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!bH.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Wb.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}it.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Li,LE,it,Wb,bH,OH,_ne,lo,Du,Gc,Cu,DE,P_=be(()=>{Me();Li=M(rt());fs();LE=require("worker_threads");Fc();it=M(j()),Wb=require("lodash"),bH=M(ce());H();OH=require("crypto"),_ne=200,lo=new Map,Cu=new Map,DE=new Map;a(zb,"startOnMainThread");a(NH,"requestClusterStatus");LE.parentPort&&(Du=a(e=>{LE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Gc=a(e=>{LE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Li.onMessageByType)("subscribe-to-node",e=>{Pu(e)}),(0,Li.onMessageByType)("unsubscribe-from-node",e=>{ME(e)}));a(uo,"ensureNode")});var Qs=I(jH=>{"use strict";var ir=require("path"),En=require("fs-extra"),Lu=require("node-forge"),MH=require("net"),{generateKeyPair:jb,X509Certificate:fo,createPrivateKey:vH}=require("crypto"),hne=require("util");jb=hne.promisify(jb);var Rt=Lu.pki,Ws=require("joi"),{v4:UH}=require("uuid"),{validateBySchema:eO}=dt(),_t=j(),_s=ce(),hs=(H(),D(q)),{CONFIG_PARAMS:Mu}=hs,zs=GR(),{ClientError:_a}=he(),vE=require("node:tls"),{relative:xH,join:pne}=require("node:path"),{CERT_PREFERENCE_APP:Cwe,CERTIFICATE_VALUES:IH}=zs,mne=ec(),Jb=It(),{table:Ene,getDatabases:gne,databases:Qb}=(Me(),D(st)),{getJWTRSAKeys:CH}=(Tu(),D(S_));Object.assign(jH,{generateKeys:nO,updateConfigCert:VH,createCsr:Nne,signCertificate:wne,setCertTable:vu,loadCertificates:GH,reviewSelfSignedCert:iO,createTLSSelector:YH,listCertificates:zH,addCertificate:Mne,removeCertificate:Une,createNatsCerts:Pne,generateCertsKeys:Cne,getReplicationCert:L_,getReplicationCertAuth:One,renewSelfSigned:Dne,hostnamesFromCert:QH,getKey:xne});var{urlToNodeName:BH,getThisNodeUrl:Sne,getThisNodeName:xE,clearThisNodeName:Tne}=(fs(),D(ma)),{readFileSync:Ane,watchFile:Rne,statSync:HH}=require("node:fs"),Pwe=ce(),{getTicketKeys:yne,onMessageFromWorkers:bne}=rt(),fa=j(),{isMainThread:kH}=require("worker_threads"),{TLSSocket:FH,createSecureContext:Dwe}=require("node:tls"),tO=3650,D_=["127.0.0.1","localhost","::1"],rO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];bne(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await iO())});var Dr;function pa(){return Dr||(Dr=gne().system.hdb_certificate,Dr||(Dr=Ene({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__"}]}))),Dr}a(pa,"getCertTable");async function L_(){let e=YH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(xE());if(!r)return;let n=new fo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(L_,"getReplicationCert");async function One(){pa();let e=(await L_()).options.cert,r=new fo(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(One,"getReplicationCertAuth");var PH,ha=new Map;function GH(){if(PH)return;PH=!0;let e=[{configKey:Mu.TLS},{configKey:Mu.OPERATIONSAPI_TLS}];pa();let t=ir.dirname(Jb.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Jb.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&xH(pne(t,"keys"),o);c&&DH(o,l=>{ha.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&kH){let f;DH(u,d=>{if(IH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=KH(u),p=new fo(_),S;try{S=oO(p)}catch(A){_t.error("error extracting common name from certificate",A);return}if(S==null){_t.error("error extracting common name from certificate");return}if(p.checkIssued(new fo(IH.cert)))return;let g=Dr.primaryStore.get(S),R=HH(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=E){R<E&&_t.info(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=Dr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:R,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(GH,"loadCertificates");function DH(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&kH&&_t.warn(`Reloading ${r}:`,e),n=c,t(KH(e)))}catch(c){_t.error(`Error loading ${r}:`,e,c)}},"loadFile");En.existsSync(e)?s(HH(e)):_t.error(`${r} file not found:`,e),Rne(e,{persistent:!1},s)}a(DH,"loadAndWatch");function Xb(){let e=Sne();if(e==null){let t=D_[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return BH(e)}a(Xb,"getHost");function UE(){let e=xE();if(e==null){let t=D_[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(UE,"getCommonName");async function Nne(){let e=await L_(),t=Rt.certificateFromPem(e.options.cert),r=Rt.privateKeyFromPem(e.options.key);_t.info("Creating CSR with cert named:",e.name);let n=Rt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:UE()},...rO];_t.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:qH()}];return _t.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Lu.pki.certificationRequestToPem(n)}a(Nne,"createCsr");function qH(){let e=D_.includes(UE())?D_:[...D_,UE()];return e.includes(Xb())||e.push(Xb()),[{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=>MH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(qH,"certExtensions");async function wne(e){let t={},r=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;pa();for await(let f of Dr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(ha.has(f.private_key_name)){n=ha.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await En.exists(ir.join(r,f.private_key_name))){n=En.readFile(ir.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await Zb();s=f.ca,n=f.private_key}n=Rt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Rt.certificateFromPem(s.certificate);_t.info("Signing CSR with cert named",s.name);let o=Rt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return _t.error(f),new Error("Error verifying CSR: "+f.message)}let c=Lu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+tO),_t.info("sign cert setting validity:",c.validity),_t.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),_t.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;_t.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Lu.md.sha256.create()),t.certificate=Rt.certificateToPem(c)}else _t.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(wne,"signCertificate");async function Ine(e,t){await vu({name:xE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await vu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Rt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Ine,"createCertificateTable");async function vu(e){let t=new fo(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},pa(),await Dr.patch(e)}a(vu,"setCertTable");async function nO(){let e=await jb("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:Rt.publicKeyFromPem(e.publicKey),private_key:Rt.privateKeyFromPem(e.privateKey)}}a(nO,"generateKeys");async function sO(e,t,r){let n=Rt.createCertificate();if(!t){let o=await L_();t=Rt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+tO);let i=[{name:"commonName",value:UE()},...rO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(qH()),n.sign(e,Lu.md.sha256.create()),Rt.certificateToPem(n)}a(sO,"generateCertificates");async function Zb(){let e=await zH(),t;for(let r of e){if(!r.is_authority)continue;let n=await WH(r.private_key_name);if(r.private_key_name&&n&&new fo(r.certificate).checkPrivateKey(vH(n))){_t.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;_t.trace("No CA found with matching private key")}a(Zb,"getCertAuthority");async function $H(e,t,r=!0){let n=Rt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+tO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(Mu.REPLICATION_HOSTNAME)??BH(_s.get(Mu.REPLICATION_URL))??UH().split("-")[0]}`},...rO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Lu.md.sha256.create());let o=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=ir.join(o,zs.PRIVATEKEY_PEM_NAME);return r&&await En.writeFile(c,Rt.privateKeyToPem(e)),n}a($H,"generateCertAuthority");async function Cne(){let{private_key:e,public_key:t}=await nO(),r=await $H(e,t),n=await sO(e,t,r);await Ine(n,r),VH()}a(Cne,"generateCertsKeys");async function Pne(){let e=await sO(Rt.privateKeyFromPem(zs.CERTIFICATE_VALUES.key),void 0,Rt.certificateFromPem(zs.CERTIFICATE_VALUES.cert)),t=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,zs.NATS_CERTIFICATE_PEM_NAME);await En.exists(r)||await En.writeFile(r,e);let n=ir.join(t,zs.NATS_CA_PEM_NAME);await En.exists(n)||await En.writeFile(n,zs.CERTIFICATE_VALUES.cert)}a(Pne,"createNatsCerts");async function Dne(){pa();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await iO()}a(Dne,"renewSelfSigned");async function iO(){Tne(),await GH(),pa();let e=await Zb();if(!e){_t.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=_s.get(Mu.TLS_PRIVATEKEY),n=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=xH(n,r);try{s=Rt.privateKeyFromPem(await En.readFile(r))}catch(c){_t.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await nO(),await En.exists(ir.join(n,zs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${UH().split("-")[0]}.pem`),await En.writeFile(ir.join(n,i),Rt.privateKeyToPem(s))}let o=await $H(s,Rt.setRsaPublicKey(s.n,s.e),!1);await vu({name:o.subject.getField("CN").value,uses:["https"],certificate:Rt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await L_()){let r=xE();_t.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Zb();let n=Rt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await sO(Rt.privateKeyFromPem(e.private_key),s,n);await vu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(iO,"reviewSelfSignedCert");function VH(){let e=mne(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,zs.PRIVATEKEY_PEM_NAME),n=ir.join(t,zs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,zs.NATS_CA_PEM_NAME),i=hs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),Jb.updateConfigValue(void 0,void 0,o,!1,!0)}a(VH,"updateConfigCert");function KH(e){return e.startsWith("-----BEGIN")?e:Ane(e,"utf8")}a(KH,"readPEM");var LH=vE.createSecureContext;vE.createSecureContext=function(e){if(!e.cert||!e.key)return LH(e);let t={...e};delete t.key,delete t.cert;let r=LH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Lne=FH.prototype._init;FH.prototype._init=function(e,t){Lne.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var qc=new Map;function YH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),qc.clear();let f=0;for await(let d of Qb.system.hdb_certificate.search([])){let h=d.certificate,_=new fo(h);d.is_authority&&(_.asString=h,qc.set(_.subject,h))}for await(let d of Qb.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let p=await WH(d.private_key_name),S=d.certificate,g=new fo(S);if(qc.has(g.issuer)&&(S+=`
23
+ `+qc.get(g.issuer)),!p||!S)throw new Error("Missing private key or certificate for secure server");let R={ciphers:d.ciphers,ticketKeys:yne(),availableCAs:qc,ca:t&&Array.from(qc.values()),cert:S,key:p,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let E=vE.createSecureContext(R);E.name=d.name,E.options=R,E.quality=_,E.certificateAuthorities=Array.from(qc),E.certStart=S.toString().slice(0,100);let A=d.hostnames??QH(g);Array.isArray(A)||(A=[A]);let O;for(let v of A)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===Xb()&&(_+=2),MH.isIP(v)&&(O=!0);let F=r.get(v)?.quality??0;_>F&&r.set(v,E)}else fa.error("No hostname found for certificate at",vE.certificate);fa.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",A,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){fa.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),Qb.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){fa.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return fa.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?fa.debug("No certificate found to match",o,"using the default certificate"):fa.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):fa.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(YH,"createTLSSelector");async function WH(e){let t=ha.get(e);return!t&&e?await En.readFile(ir.join(_s.get(Mu.ROOTPATH),hs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(WH,"getPrivateKeyByName");async function zH(){pa();let e=[];for await(let t of Dr.search([]))e.push(t);return e}a(zH,"listCertificates");async function Mne(e){let t=eO(e,Ws.object({name:Ws.string().required(),certificate:Ws.string().required(),is_authority:Ws.boolean().required(),private_key:Ws.string(),hosts:Ws.array(),uses:Ws.array()}));if(t)throw new _a(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new fo(n),c=!1,l=!1,u;for(let[_,p]of ha)!s&&!c&&o.checkPrivateKey(vH(p))&&(c=!0,u=_),s&&s===p&&(l=!0,u=_);if(!i&&!s&&!c)throw new _a("A suitable private key was not found for this certificate");let f;if(!r){try{f=oO(o)}catch(_){_t.error(_)}if(f==null)throw new _a("Error extracting certificate common name, please provide a name parameter")}let d=vne(r??f);s&&!c&&!l&&(await En.writeFile(ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,d+".pem"),s),ha.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),await vu(h),"Successfully added certificate: "+d}a(Mne,"addCertificate");function vne(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(vne,"sanitizeName");async function Une(e){let t=eO(e,Ws.object({name:Ws.string().required()}));if(t)throw new _a(t.message);let{name:r}=e;pa();let n=await Dr.get(r);if(!n)throw new _a(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Dr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(_t.info("Removing private key named",s),await En.remove(ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,s)))}return await Dr.delete(r),"Successfully removed "+r}a(Une,"removeCertificate");function oO(e){return e.subject.match(/CN=(.*)/)?.[1]}a(oO,"extractCommonName");function QH(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[oO(e)]}a(QH,"hostnamesFromCert");async function xne(e){if(e.bypass_auth!==!0)throw new _a("Unauthorized","401");let t=eO(e,Ws.object({name:Ws.string().required()}));if(t)throw new _a(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await CH()).privateKey;if(r===".jwtPublic")return(await CH()).publicKey;if(ha.get(r))return ha.get(e.name);throw new _a("Key not found")}a(xne,"getKey")});var pk={};ve(pk,{CONFIRMATION_STATUS_POSITION:()=>hk,NodeReplicationConnection:()=>M_,OPERATION_REQUEST:()=>dO,RECEIVED_TIME_POSITION:()=>_O,RECEIVED_VERSION_POSITION:()=>fO,SENDING_TIME_POSITION:()=>GE,createWebSocket:()=>VE,database_subscriptions:()=>ga,replicateOverWS:()=>v_,table_update_listeners:()=>pO});async function VE(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Xe(),i;if(e.includes("wss://")){if(!cO){let l=(0,dk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),cO=u.secureContexts}if(i=cO.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,_k.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=fk.createSecureContext({...i.options,ca:Array.from(Vc)})),new lk.WebSocket(e,"harperdb-replication-v1",c)}function v_(e,t,r){let n=t.port||t.securePort,s=$c.pid%1e3+"-"+uk.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||ga,d,h,_=!1,p=t.subscription;p?.then&&p.then(m=>p=m);let S=t.tables||u&&Je()[u];if(!r){le.error?.("No authorization provided"),nn(1008,"Unauthorized");return}let g=new Map,R=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let A,O,v,F,G,Y,te,se=1e3,X,ne=0,Q=0,pe=0,Re=new Map,Ce=[],me=0,Jt;if(t.url){let m=a(()=>{G&&Q===e._socket?.bytesRead&&pe===e._socket?.bytesWritten?e.terminate():(G=performance.now(),e.ping(),Q=e._socket?.bytesRead,pe=e._socket?.bytesWritten)},"send_ping");v=setInterval(m,ok).unref(),m()}else ct();e._socket?.setMaxListeners(200);function ct(){clearTimeout(F),Q=e._socket?.bytesRead,pe=e._socket?.bytesWritten,F=setTimeout(()=>{Q===e._socket?.bytesRead&&pe===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},ok*2).unref()}a(ct,"resetPingTimer");function Ar(){return h||(h=PE(d,u,E)),h}a(Ar,"getSharedStatus"),u&&Fo(u);let is,In,Pl=[],Dl=[],kT,FT=[],Lt=[],Hd=[],fp=150,_p=25,kd=0,hp=0,Pe=!1,Fd,rn,Nr,Ll;e.on("message",m=>{ne=performance.now();try{let T=m.dataView=new Kc(m.buffer,m.byteOffset,m.byteLength);if(m[0]>127){let C=(0,ze.decode)(m),[N,L,k]=C;switch(N){case XH:{if(L){if(E){if(E!==L){le.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${L}, disconnecting`),e.send((0,ze.encode)([Uu])),nn(1008,"Node name mismatch");return}}else if(E=L,t.connection?.tentativeNode){let U=t.connection.tentativeNode;U.name=E,t.connection.tentativeNode=null,uo(E,U)}if(t.connection&&(t.connection.nodeName=E),le.debug?.(s,"received node name:",E,"db:",u),!u)try{Fo(u=C[2]),u==="system"&&(is=ua(t,(U,ue)=>{vl(ue)&&Go(ue)}),e.on("close",()=>{is?.remove()}))}catch(U){le.warn?.(s,"Error setting database",U),e.send((0,ze.encode)([Uu])),nn(1008,U.message);return}Br()}break}case sk:{le.debug?.(s,"Received table definitions for",L.map(U=>U.table));for(let U of L){let ue=C[2];U.database=ue;let ae;vl(ue)&&(ue==="system"?qe[ue]?.[U.table]||(ae=lO(U,qe[ue]?.[U.table])):ae=lO(U,qe[ue]?.[U.table]),d||(d=ae?.auditStore),S||(S=Je()?.[ue]))}break}case Uu:nn();break;case dO:try{let U=r?.replicates||r?.subscribers||r?.name;server.operation(L,{user:r},!U).then(ue=>{Array.isArray(ue)&&(ue={results:ue}),ue.requestId=L.requestId,e.send((0,ze.encode)([HE,ue]))},ue=>{e.send((0,ze.encode)([HE,{requestId:L.requestId,error:ue instanceof Error?ue.toString():ue}]))})}catch(U){e.send((0,ze.encode)([HE,{requestId:L.requestId,error:U instanceof Error?U.toString():U}]))}break;case HE:let{resolve:P,reject:x}=g.get(L.requestId);L.error?x(new Error(L.error)):P(L),g.delete(L.requestId);break;case aO:let $=C[3];S||(u?le.error?.(s,"No tables found for",u):le.error?.(s,"Database name never received"));let z=S[$];z=lO({table:$,database:u,attributes:L.attributes,schemaDefined:L.schemaDefined},z),Pl[k]={name:$,decoder:new ze.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:L.typedStructs,structures:L.structures}),getEntry(U){return z.primaryStore.getEntry(U)},rootStore:z.primaryStore.rootStore};break;case ZH:Ll=d?gH(L,d):new Map,kT=C[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${kT}`);break;case ek:let ie=k;Hd[ie]=L;break;case nk:Ar()[hk]=L,le.trace?.(s,"received and broadcasting committed update",L),Ar().buffer.notify();break;case rk:A=L,p.send({type:"end_txn",localTime:A,remoteNodeIds:R});break;case kE:{let U=C[1],{fileId:ue,size:ae,finished:fe,error:ee}=U,W=Re.get(ue);le.debug?.("Received blob",ue,"has stream",!!W,"connectedToBlob",!!W?.connectedToBlob,"length",C[2].length,"finished",fe),W||(W=new uO.PassThrough,W.expectedSize=ae,Re.set(ue,W)),W.lastChunk=Date.now(),fe?(ee?(W.on("error",()=>{}),W.destroy(new Error("Blob error: "+ee))):W.end(C[2]),W.connectedToBlob&&Re.delete(ue)):W.write(C[2]);break}case tk:{let U=L,ue;try{let ae=C[3],fe=Dl[k]||(Dl[k]=S[C[4]]);if(!fe)return le.warn?.("Unknown table id trying to handle record request",k);let ee=fe.primaryStore.getBinaryFast(Symbol.for("structures")),W=ee.length;if(W!==hp){hp=W;let Ae=(0,ze.decode)(ee);e.send((0,ze.encode)([aO,{typedStructs:Ae.typed,structures:Ae.named},k,fe.tableName]))}let _e=fe.primaryStore.getBinaryFast(ae);if(_e){let Ae=fe.primaryStore.decoder.decode(_e,{valueAsBuffer:!0});ue=(0,ze.encode)([BE,U,{value:Ae.value,expiresAt:Ae.expiresAt,version:Ae.version,residencyId:Ae.residencyId,nodeId:Ae.nodeId,user:Ae.user}])}else ue=(0,ze.encode)([BE,U])}catch(ae){ue=(0,ze.encode)([BE,U,{error:ae.message}])}e.send(ue);break}case BE:{let{resolve:U,reject:ue,tableId:ae,key:fe}=g.get(C[1]),ee=C[2];if(ee?.error)ue(new Error(ee.error));else if(ee){let W=Pl[ae].decoder.decode(ee.value);ee.value=W,ee.key=fe,U(ee)}else U();g.delete(C[1]);break}case JH:{Nr=L;let U,ue,ae=!1;if(p){if(u!==p.databaseName&&!p.then){le.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=f.get(u);if(le.debug?.(s,"received subscription request for",u,"at",Nr),!p){let Ee;p=new Promise(je=>{le.debug?.("Waiting for subscription to database "+u),Ee=je}),p.ready=Ee,ga.set(u,p)}if(r.name)ue=sr().subscribe(r.name),ue.then(async Ee=>{U=Ee;for await(let je of U){let tt=je.value;if(!(tt?.replicates===!0||tt?.replicates?.receives||tt?.subscriptions?.some(Gt=>(Gt.database||Gt.schema)===u&&Gt.publish!==!1))){ae=!0,e.send((0,ze.encode)([Uu])),nn(1008,`Unauthorized database subscription to ${u}`);return}}},Ee=>{le.error?.(s,"Error subscribing to HDB nodes",Ee)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ze.encode)([Uu])),nn(1008,`Unauthorized database subscription to ${u}`);return}if(rn&&(le.debug?.(s,"stopping previous subscription",u),rn.emit("close")),Nr.length===0)return;let fe=Nr[0],ee=a(Ee=>{if(Ee&&(fe.replicateByDefault?!fe.tables.includes(Ee.tableName):fe.tables.includes(Ee.tableName)))return{table:Ee}},"tableToTableEntry"),W={txnTime:0},_e,Ae,ye=1/0,lt,et=a((Ee,je)=>{if(Ee.type==="end_txn"){W.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),Ul(9),Ul(qE),Bl(lt=je),Hr()),i=c,W.txnTime=0;return}let tt=Ee.nodeId,Gt=Ee.tableId,qt=Ae[Gt];if(!qt&&(qt=Ae[Gt]=ee(p.tableById[Gt]),!qt))return le.debug?.("Not subscribed to table",Gt);let kr=qt.table,ja=kr.primaryStore,Mt=ja.encoder;(Ee.extendedType&tm||!Mt.typedStructs)&&(Mt._mergeStructures(Mt.getStructures()),Mt.typedStructs&&(Mt.lastTypedStructuresLength=Mt.typedStructs.length));let mp=_e[tt];if(!(mp&&mp.startTime<je&&(!mp.endTime||mp.endTime>je)))return FE&&le.trace?.(s,"skipping replication update",Ee.recordId,"to:",E,"from:",tt,"subscribed:",_e),zC();FE&&le.trace?.(s,"sending replication update",Ee.recordId,"to:",E,"from:",tt,"subscribed:",_e);let GT=Ee.version;W.txnTime!==GT&&(W.txnTime&&(FE&&le.trace?.(s,"new txn time, sending queued txn",W.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),Hr()),W.txnTime=GT,i=c,Bl(GT));let Ja=Ee.residencyId,qT=Ml(Ja,kr),Ep;if(qT&&!qT.includes(E)){let Xa=Ml(Ee.previousResidencyId,kr);if(Xa&&!Xa.includes(E)&&(Ee.type==="put"||Ee.type==="patch")||kr.getResidencyById)return zC();let $d=Ee.recordId;le.trace?.(s,"sending invalidation",$d,E,"from",tt);let $o=0;Ja&&($o|=fc),Ee.previousResidencyId&&($o|=_c);let Ds,sn=null;for(let gp in kr.indices){if(!sn){if(Ds=Ee.getValue(ja,!0),!Ds)break;sn={}}sn[gp]=Ds[gp]}Ep=jl(Ee.version,Gt,$d,null,tt,Ee.user,Ee.type==="put"||Ee.type==="patch"?"invalidate":Ee.type,Mt.encode(sn),$o,Ja,Ee.previousResidencyId,Ee.expiresAt)}function zC(){le.trace?.(s,"skipping audit record",Ee.recordId),Y||(Y=setTimeout(()=>{Y=null,(lt||0)+ik/2<ye&&(FE&&le.trace?.(s,"sending skipped sequence update",ye),e.send((0,ze.encode)([rk,ye])))},ik).unref())}a(zC,"skipAuditRecord");let $T=Mt.typedStructs,VT=Mt.structures;if(($T?.length!=qt.typed_length||VT?.length!=qt.structure_length)&&(qt.typed_length=$T?.length,qt.structure_length=VT.length,le.debug?.(s,"send table struct",qt.typed_length,qt.structure_length),qt.sentName||(qt.sentName=!0),e.send((0,ze.encode)([aO,{typedStructs:$T,structures:VT,attributes:kr.attributes,schemaDefined:kr.schemaDefined},Gt,qt.table.tableName]))),Ja&&!Lt[Ja]&&(e.send((0,ze.encode)([ek,qT,Ja])),Lt[Ja]=!0),Ep)Ul(Ep.length),xl(Ep);else{let Xa=Ee.encoded;Ee.extendedType&vn&&TO(()=>Ee.getValue(ja),async $o=>{let Ds=$E($o);try{let sn;me++;for await(let gp of $o.stream()){if(sn&&(le.debug?.("Sending blob chunk",Ds,"length",sn.length),e.send((0,ze.encode)([kE,{fileId:Ds,size:$o.size},sn]))),sn=gp,ae)return;e._socket.writableNeedDrain&&(le.debug?.("draining",Ds),await new Promise(NQ=>e._socket.once("drain",NQ)),le.debug?.("drained",Ds))}le.debug?.("Sending final blob chunk",Ds,"length",sn.length),e.send((0,ze.encode)([kE,{fileId:Ds,size:$o.size,finished:!0},sn]))}catch(sn){le.debug?.("Error sending blob",sn),e.send((0,ze.encode)([kE,{fileId:Ds,finished:!0,error:sn.toString()},Buffer.alloc(0)]))}finally{me--,me<_p&&Jt?.()}});let $d=Xa[0]===66?8:0;Ul(Xa.length-$d),xl(Xa,$d),le.trace?.("wrote record",Ee.recordId,"length:",Xa.length)}},"sendAuditRecord"),Hr=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i)):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");rn=new hO.EventEmitter,rn.once("close",()=>{ae=!0,U?.end()});for(let{startTime:Ee}of Nr)Ee<ye&&(ye=Ee);(ue||Promise.resolve()).then(async()=>{p=await p,d=p.auditStore,Ae=p.tableById.map(ee),_e=[];for(let{name:je,startTime:tt,endTime:Gt}of Nr){let qt=CE(je,d);le.debug?.("subscription to",je,"using local id",qt,"starting",tt),_e[qt]={startTime:tt,endTime:Gt}}Go(u),is||(is=Yc(je=>{je.databaseName===u&&Go(u)}),In=U_(je=>{je===u&&(e.send((0,ze.encode)([Uu])),nn())}),e.on("close",()=>{is?.remove(),In?.remove()})),e.send((0,ze.encode)([ZH,N_(p.auditStore),Nr.map(({name:je})=>je)]));let Ee=!0;do{isFinite(ye)||(le.warn?.("Invalid sequence id "+ye),nn(1008,"Invalid sequence id"+ye));let je;if(Ee&&!ae&&(Ee=!1,!(EO(d)<=ye)&&(ck.default.get(B.REPLICATION_COPYTABLESTOCATCHUP)??Bne)&&server.nodes[0]?.name===E)){le.info?.("Replicating all tables to",E);let Gt=ye,qt=KE(d);for(let kr in S){if(!ee(kr))continue;let ja=S[kr];for(let Mt of ja.primaryStore.getRange({snapshot:!1})){if(ae)return;Mt.localTime>=ye&&(le.trace?.(s,"Copying record from",u,kr,Mt.key,Mt.localTime),Gt=Math.max(Mt.localTime,Gt),je=!0,Ar()[GE]=1,et({recordId:Mt.key,tableId:ja.tableId,type:"put",getValue(){return Mt.value},encoded:ja.primaryStore.getBinary(Mt.key),version:Mt.version,residencyId:Mt.residencyId,nodeId:qt,extendedType:Mt.metadataFlags},Mt.localTime))}}ye=Gt}for(let{key:tt,value:Gt}of d.getRange({start:ye||1,exclusiveStart:!0,snapshot:!1})){if(ae)return;let qt=Ot(Gt);le.debug?.("sending audit record",new Date(tt)),Ar()[GE]=tt,ye=tt,et(qt,tt),e._socket.writableNeedDrain?await new Promise(kr=>{le.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",kr)}):me>_p?await new Promise(kr=>{Jt=kr}):await new Promise(setImmediate),rn.startTime=tt,je=!0}je&&et({type:"end_txn"},ye),Ar()[GE]=0,await mk(d)}while(!ae)}).catch(Ee=>{le.error?.(s,"Error handling subscription to node",Ee),nn(1008,"Error handling subscription to node")});break}}return}T.position=8;let w=!0,y,b;do{Ar();let C=T.readInt();if(C===9&&T.getUint8(T.position)==qE){T.position++,A=b=T.readFloat64(),h[fO]=A,h[_O]=Date.now(),le.trace?.("received remote sequence update",A,u);break}let N=T.position,L=Ot(m,N,N+C),k=Pl[L.tableId];k||le.error?.(`No table found with an id of ${L.tableId}`);let P;L.residencyId&&(P=Hd[L.residencyId],le.trace?.(s,"received residency list",P,L.type,L.recordId));try{SO(()=>{y={table:k.name,id:L.recordId,type:L.type,nodeId:Ll.get(L.nodeId),residencyList:P,timestamp:L.version,value:L.getValue(k),user:L.user,beginTxn:w,expiresAt:L.expiresAt}},x=>{let $=$E(x),z=Re.get($);le.debug?.("Received transaction with blob",$,"has stream",!!z,"ended",!!z?.writableEnded),z?z.writableEnded&&Re.delete($):(z=new uO.PassThrough,Re.set($,z)),z.connectedToBlob=!0,z.lastChunk=Date.now(),x.size===void 0&&z.expectedSize&&(x.size=z.expectedSize);let ie=createBlob(z,x),U=ie.save({primaryStore:p.auditStore});return U&&(U.blobId=$,Ce.push(U),U.finally(()=>{le.debug?.(`Finished receiving blob stream ${$}`),Ce.splice(Ce.indexOf(U),1)})),ie})}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(k.decoder.typedStructs),x}w=!1,le.trace?.(s,"received replication message",L.type,"id",y.id,"version",new Date(L.version),"nodeId",y.nodeId),h[fO]=L.version,h[_O]=Date.now(),p.send(y),T.position=N+C}while(T.position<m.byteLength);kd++,nr(m.byteLength,"bytes-received",`${E}.${u}.${y?.table||"unknown_table"}`,"replication","ingest"),kd>fp&&!Pe&&(Pe=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),p.send({type:"end_txn",localTime:A,remoteNodeIds:R,async onCommit(){if(y){let C=Date.now()-y.timestamp;nr(C,"replication-latency",E+"."+u+"."+y.table,y.type,"ingest")}kd--,Pe&&(Pe=!1,e.resume(),le.debug?.(`Replication resuming ${E}`)),Ce.length>0&&await Promise.all(Ce),le.trace?.("All blobs finished"),!O&&b&&(le.trace?.(s,"queuing confirmation of a commit at",b),setTimeout(()=>{e.send((0,ze.encode)([nk,O])),le.trace?.(s,"sent confirmation of a commit at",O),O=null},Hne)),O=b,le.debug?.("last sequence committed",new Date(b),u)}})}catch(T){le.error?.(s,"Error handling incoming replication message",T)}}),e.on("ping",ct),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-G,Gc({name:E,database:u,url:t.url,latency:t.connection.latency})),G=null}),e.on("close",(m,T)=>{clearInterval(v),clearTimeout(F),clearInterval(te),rn&&rn.emit("close"),Fd&&Fd.end();for(let[w,{reject:y}]of g)y(new Error(`Connection closed ${T?.toString()} ${m}`));le.debug?.(s,"closed",m,T?.toString())});function Gd(){}a(Gd,"recordRemoteNodeSequence");function nn(m,T){e.isFinished=!0,e.close(m,T)}a(nn,"close");function Br(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Br)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let m=new Map;try{for(let y of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let b of y.value.nodes||[])b.lastTxnTime>(m.get(b.id)??0)&&m.set(b.id,b.lastTxnTime)}catch(y){if(!y.message.includes("Can not re"))throw y}let T=t.connection?.nodeSubscriptions?.[0];R=[];let w=t.connection?.nodeSubscriptions.map((y,b)=>{let C=[],{replicateByDefault:N}=y;if(y.subscriptions){for(let x of y.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let $=x.table;S?.[$]?.replicate!==!1&&C.push($)}N=!1}else for(let x in S)(N?S[x].replicate===!1:S[x].replicate)&&C.push(x);let L=d&&CE(y.name,d),k=p?.dbisDB?.get([Symbol.for("seq"),L])??1,P=Math.max(k?.seqId??1,(typeof y.start_time=="string"?new Date(y.start_time).getTime():y.start_time)??1);if(le.debug?.("Starting time recorded in db",y.name,L,u,k?.seqId,"start time:",P,new Date(P)),T!==y){let x=d&&CE(T.name,d),$=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let z of $?.nodes||[])z.name===y.name&&(P=z.seqId,le.debug?.("Using sequence id from proxy node",T.name,P))}return R.push(L),m.get(L)>P&&(P=m.get(L),le.debug?.("Updating start time from more recent txn recorded",T.name,P)),{name:y.name,replicateByDefault:N,tables:C,startTime:P,endTime:y.end_time}});if(w)if(le.debug?.(s,"sending subscription request",w,p?.dbisDB?.path),clearTimeout(X),w.length>0)e.send((0,ze.encode)([JH,w]));else{let y=a(()=>{let b=performance.now();X=setTimeout(()=>{ne<=b?nn(1008,"No nodes to subscribe to"):y()},se)},"schedule_close");y()}}a(Br,"sendSubscriptionRequestUpdate");function Ml(m,T){if(!m)return;let w=FT[m];return w||(w=T.getResidencyRecord(m),FT[m]=w),w}a(Ml,"getResidence");function vl(m){return!(Ea&&Ea!="*"&&!Ea[m]&&!Ea.includes?.(m)&&!Ea.some?.(T=>T.name===m))}a(vl,"checkDatabaseAccess");function Fo(m){if(p=p||f.get(m),!vl(m))throw new Error(`Access to database "${m}" is not permitted`);p||le.warn?.(`No database named "${m}" was declared and registered`),d=p?.auditStore,S||(S=Je()?.[m]);let T=Xe();if(T===E)throw T?new Error("Should not connect to self",T):new Error("Node name not defined");return pp(T,m),!0}a(Fo,"setDatabase");function pp(m,T){let w=Je()?.[T],y=[];for(let b in w){let C=w[b];y.push({table:b,schemaDefined:C.schemaDefined,attributes:C.attributes.map(N=>({name:N.name,type:N.type,isPrimaryKey:N.isPrimaryKey}))})}le.trace?.("Sending database info for node",m,"database name",T),e.send((0,ze.encode)([XH,m,T,y]))}a(pp,"sendNodeDBName");function Go(m){let T=Je()?.[m],w=[];for(let y in T){if(Nr&&!Nr.some(C=>C.replicateByDefault?!C.tables.includes(y):C.tables.includes(y)))continue;let b=T[y];w.push({table:y,schemaDefined:b.schemaDefined,attributes:b.attributes.map(C=>({name:C.name,type:C.type,isPrimaryKey:C.isPrimaryKey}))})}e.send((0,ze.encode)([sk,w,m]))}a(Go,"sendDBSchema"),te=setInterval(()=>{for(let[m,T]of Re)T.lastChunk+3e4<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${m} from ${E}`),Re.delete(m),T.end())},3e4).unref();let qo=1,qd=[];return{end(){Fd&&Fd.end(),rn&&rn.emit("close")},getRecord(m){let T=qo++;return new Promise((w,y)=>{let b=[tk,T,m.table.tableId,m.id];qd[m.table.tableId]||(b.push(m.table.tableName),qd[m.table.tableId]=!0),e.send((0,ze.encode)(b)),g.set(T,{tableId:m.table.tableId,key:m.id,resolve(C){let{table:N,entry:L}=m;w(C),C&&N._recordRelocate(L,C)},reject:y})})},sendOperation(m){let T=qo++;return m.requestId=T,e.send((0,ze.encode)([dO,m])),new Promise((w,y)=>{g.set(T,{resolve:w,reject:y})})}};function Ul(m){K(5),m<128?o[c++]=m:m<16384?(l.setUint16(c,m|32768),c+=2):m<1056964608?(l.setUint32(c,m|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,m),c+=5)}function xl(m,T=0,w=m.length){let y=w-T;K(y),m.copy(o,c,T,w),c+=y}function Bl(m){K(8),l.setFloat64(c,m),c+=8}function K(m){if(m+16>o.length-c){let T=Buffer.allocUnsafeSlow(c+m-i+65536>>10<<11);o.copy(T,0,i,c),c=c-i,i=0,o=T,l=new DataView(o.buffer,0,o.length)}}}function lO(e,t){let r=e.database??"data";if(r!=="data"&&!qe[r]){le.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(le.debug?.("(Re)creating",e),ut({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var ck,ze,lk,uk,le,hO,dk,fk,$c,_k,uO,JH,XH,ZH,Uu,ek,aO,tk,BE,dO,HE,rk,nk,sk,kE,hk,fO,_O,GE,Bne,pO,ga,FE,ik,Hne,ok,cO,ak,M_,mO=be(()=>{Me();Ji();Kb();gO();fs();ck=M(ce());H();Jl();ze=require("msgpackr"),lk=require("ws"),uk=require("worker_threads"),le=M(hi());P_();hO=require("events"),dk=M(Qs()),fk=M(require("node:tls"));Fc();$c=M(require("node:process")),_k=require("node:net");Ii();cs();uO=require("node:stream"),JH=129,XH=140,ZH=141,Uu=142,ek=130,aO=132,tk=133,BE=134,dO=136,HE=137,rk=143,nk=144,sk=145,kE=146,hk=0,fO=1,_O=2,GE=3,Bne=$c.env.HDB_LEADER_URL||$c.argv.includes("--HDB_LEADER_URL"),pO=new Map,ga=new Map,FE=!0,ik=300,Hne=2,ok=3e4;a(VE,"createWebSocket");ak=1e3,M_=class extends hO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Ys(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=ak;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await VE(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${$c.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=ak,Gc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=v_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(Du({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();le.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(v_,"replicateOverWS");a(lO,"ensureTableIfChanged")});var ma={};ve(ma,{clearThisNodeName:()=>Yne,disableReplication:()=>qne,enabled_databases:()=>Ea,forEachReplicatedDatabase:()=>ua,getThisNodeId:()=>KE,getThisNodeName:()=>Xe,getThisNodeUrl:()=>da,hostnameToUrl:()=>QE,lastTimeInAuditStore:()=>w_,monitorNodeCAs:()=>bk,replicateOperation:()=>zne,replication_certificate_authorities:()=>Vc,sendOperationToNode:()=>B_,servers:()=>Fne,setReplicator:()=>Nk,start:()=>Gne,startOnMainThread:()=>zb,subscribeToNode:()=>Pu,unsubscribeFromNode:()=>ME,urlToNodeName:()=>Ys});function Gne(e){if(e.port||(e.port=ps.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=ps.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!Xe())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of C_(e))t.set(Ys(n.url),n);$ne(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ye.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),v_(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&or.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,Ye.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&or.error(`Incoming client connection from ${n.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`,n._nodeRequest.socket.authorizationError);let i=sr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));if(c)if(c?.revoked_certificates?.includes(n.peerCertificate.serialNumber)){or.warn("Revoked certificate used in attempt to connect to node",c.name,"certificate serial number",n.peerCertificate.serialNumber);return}else n.user=c;else or.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:or.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Vc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=zE.createSecureContext(l)}catch(c){or.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),bk(s),ps.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function bk(e){let t=0;Iu(r=>{r?.ca&&(Vc.add(r.ca),Vc.size!==t&&(t=Vc.size,e?.()))})}function qne(e=!0){yk=e}function $ne(e){yk||(Je(),Ea=e.databases,ua(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ga;for(let[s,i]of x_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];Nk(r,s,e),pO.get(s)?.forEach(i=>i(s))}}))}function Nk(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 Ok extends Fr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ga,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(or.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Pn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=Vne(h,Ok.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Ak.ServerError("No connection to any other nodes are available",502);let d={requestId:kne++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;or.warn("Error in load from node",WE,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function wk(e,t,r,n,s){let i=x_.get(e);i||x_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new M_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function Vne(e,t,r){let n=Ek.get(e)?.get(r);if(n)return n;let s=sr().primaryStore.get(e);return s?.url&&(n=wk(s.url,t,r,e,s.authorization),Ek.set(e,x_.get(s.url))),n}async function B_(e,t,r){r||(r={}),r.serverName=e.name;let n=await VE(e.url,r),s=v_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{or.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Pu(e){try{Rk.isMainThread&&or.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ga.get(e.database);if(!t){let n;t=new Promise(s=>{or.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ga.set(e.database,t)}let r=wk(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=>I_(n,e.database)),e.replicateByDefault)}catch(t){or.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function ME({name:e,url:t,database:r}){or.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(sr().primaryStore.getRange({})));let n=x_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Kne(){if(AO!==void 0)return AO;let e=ps.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||ps.default.get(B.TLS_CERTIFICATE);if(e)return AO=new Sk.X509Certificate((0,Tk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Xe(){return WE||(WE=ps.default.get("replication_hostname")??Ys(ps.default.get("replication_url"))??Kne()??gk("operationsapi_network_secureport")??gk("operationsapi_network_port")??"127.0.0.1")}function Yne(){WE=void 0}function gk(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function YE(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function KE(e){return N_(e)?.[Xe()]}function da(){let e=ps.default.get("replication_url");return e||QE(Xe())}function QE(e){let t=YE("replication_port");if(t)return`ws://${e}:${t}`;if(t=YE("replication_secureport"),t)return`wss://${e}:${t}`;if(t=YE("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=YE("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ys(e){if(e)return new URL(e).hostname}function ua(e,t){for(let n of Object.getOwnPropertyNames(qe))r(n);return U_(n=>{r(n)}),Yc((n,s)=>{r(n.databaseName)});function r(n){let s=qe[n];or.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Wne(n)&&t(s,n,!1)}a(r,"forDatabase")}function Wne(e){let t=qe[e];for(let r in t)if(t[r].replicate)return!0}function w_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function zne(e){let t={message:""};if(e.replicated){e.replicated=!1,or.trace?.("Replicating operation",e.operation,"to nodes",Ye.nodes.map(n=>n.name));let r=await Promise.allSettled(Ye.nodes.map(n=>B_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ye.nodes[s]?.name,i})}return t}var ps,or,Sk,Tk,zE,Ak,Rk,yk,kne,Fne,Vc,Ea,x_,Ek,AO,WE,fs=be(()=>{Me();Jo();Fl();mO();Gr();ps=M(ce()),or=M(j()),Sk=require("crypto"),Tk=require("fs");P_();Fc();H();Kb();zE=M(require("node:tls")),Ak=M(he()),Rk=require("worker_threads"),kne=1,Fne=[],Vc=ps.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(zE.rootCertificates):new Set;a(Gne,"start");a(bk,"monitorNodeCAs");a(qne,"disableReplication");a($ne,"assignReplicationSource");a(Nk,"setReplicator");x_=new Map;a(wk,"getConnection");Ek=new Map;a(Vne,"getConnectionByName");a(B_,"sendOperationToNode");a(Pu,"subscribeToNode");a(ME,"unsubscribeFromNode");a(Kne,"getCommonNameFromCert");a(Xe,"getThisNodeName");a(Yne,"clearThisNodeName");Object.defineProperty(Ye,"hostname",{get(){return Xe()}});a(gk,"getHostFromListeningPort");a(YE,"getPortFromListeningPort");a(KE,"getThisNodeId");Ye.replication={getThisNodeId:KE,exportIdMapping:N_};a(da,"getThisNodeUrl");a(QE,"hostnameToUrl");a(Ys,"urlToNodeName");a(ua,"forEachReplicatedDatabase");a(Wne,"hasExplicitlyReplicatedTable");a(w_,"lastTimeInAuditStore");a(zne,"replicateOperation")});var ZE=I((sIe,Lk)=>{"use strict";var xu=um(),Bu=GB(),Qne=j(),jne=require("uuid").v4,nIe=require("clone"),JE=io(),Hu=(H(),D(q)),Jne=require("util"),Sa=Hn(),{handleHDBError:gn,hdb_errors:Xne}=he(),{HDB_ERROR_MSGS:jE,HTTP_STATUS_CODES:Sn}=Xne,{SchemaEventMsg:XE}=Gs(),Ik=pr(),{getDatabases:Zne}=(Me(),D(st)),{transformReq:ku}=oe(),{replicateOperation:Ck}=(fs(),D(ma));Lk.exports={createSchema:ese,createSchemaStructure:Pk,createTable:tse,createTableStructure:Dk,createAttribute:ose,dropSchema:rse,dropTable:nse,dropAttribute:sse,getBackup:ase};async function ese(e){let t=await Pk(e);return JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema)),t}a(ese,"createSchema");async function Pk(e){let t=xu.schema_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(ku(e),!await Bu.checkSchemaExists(e.schema))throw gn(new Error,jE.SCHEMA_EXISTS_ERR(e.schema),Sn.BAD_REQUEST,Hu.LOG_LEVELS.ERROR,jE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Sa.createSchema(e),`database '${e.schema}' successfully created`}a(Pk,"createSchemaStructure");async function tse(e){return ku(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Dk(e)}a(tse,"createTable");async function Dk(e){let t=xu.create_table_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(xu.validateTableResidence(e.residence),!await Bu.checkSchemaTableExists(e.schema,e.table))throw gn(new Error,jE.TABLE_EXISTS_ERR(e.schema,e.table),Sn.BAD_REQUEST,Hu.LOG_LEVELS.ERROR,jE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:jne(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Sa.createTable(n,e);else throw gn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sn.BAD_REQUEST);else await Sa.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(Dk,"createTableStructure");async function rse(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=xu.schema_object(e),n=t??r;if(n)throw gn(n,n.message,Sn.BAD_REQUEST,void 0,void 0,!0);ku(e);let s=await Bu.checkSchemaExists(e.schema);if(s)throw gn(new Error,s,Sn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,s,!0);let i=await Bu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await Sa.dropSchema(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema)),await Ik.purgeSchemaTableStreams(e.schema,o);let c=await Ck(e);return c.message=`successfully deleted '${e.schema}'`,c}a(rse,"dropSchema");async function nse(e){let t=xu.table_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);ku(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw gn(new Error,r,Sn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,r,!0);await Sa.dropTable(e),await Ik.purgeTableStream(e.schema,e.table);let n=await Ck(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(nse,"dropTable");async function sse(e){let t=xu.attribute_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);ku(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw gn(new Error,r,Sn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gn(new Error,"You cannot drop a hash attribute",Sn.BAD_REQUEST,void 0,void 0,!0);if(Hu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sn.BAD_REQUEST,void 0,void 0,!0);try{return await Sa.dropAttribute(e),ise(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Qne.error(`Got an error deleting attribute ${Jne.inspect(e)}.`),n}}a(sse,"dropAttribute");function ise(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(ise,"dropAttributeFromGlobal");async function ose(e){ku(e);let t=Zne()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sn.BAD_REQUEST,void 0,void 0,!0);return await Sa.createAttribute(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(ose,"createAttribute");function ase(e){return Sa.getBackup(e)}a(ase,"getBackup")});var vk=I((oIe,Mk)=>{"use strict";var{OPERATIONS_ENUM:cse}=(H(),D(q)),RO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=cse.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};Mk.exports=RO});var yO=I((lIe,kk)=>{"use strict";var lse=Hn(),cIe=vk(),eg=oe(),tg=(H(),D(q)),use=ce(),{handleHDBError:Uk,hdb_errors:dse}=he(),{HDB_ERROR_MSGS:xk,HTTP_STATUS_CODES:Bk}=dse,fse=Object.values(tg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Hk="To use this operation audit log must be enabled in harperdb-config.yaml";kk.exports=_se;async function _se(e){if(eg.isEmpty(e.schema))throw new Error(xk.SCHEMA_REQUIRED_ERR);if(eg.isEmpty(e.table))throw new Error(xk.TABLE_REQUIRED_ERR);if(!use.get(tg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Uk(new Error,Hk,Bk.BAD_REQUEST,tg.LOG_LEVELS.ERROR,Hk,!0);let t=eg.checkSchemaTableExist(e.schema,e.table);if(t)throw Uk(new Error,t,Bk.NOT_FOUND,tg.LOG_LEVELS.ERROR,t,!0);if(!eg.isEmpty(e.search_type)&&fse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await lse.readAuditLog(e)}a(_se,"readAuditLog")});var Gk=I((dIe,Fk)=>{"use strict";var{OPERATIONS_ENUM:hse}=(H(),D(q)),bO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=hse.GET_BACKUP,this.schema=t,this.table=r}};Fk.exports=bO});var Vk=I((pIe,$k)=>{"use strict";var pse=Hn(),_Ie=Gk(),OO=oe(),mse=(H(),D(q)),hIe=ce(),{handleHDBError:Ese,hdb_errors:gse}=he(),{HDB_ERROR_MSGS:qk,HTTP_STATUS_CODES:Sse}=gse;$k.exports=Tse;async function Tse(e){if(OO.isEmpty(e.schema))throw new Error(qk.SCHEMA_REQUIRED_ERR);if(OO.isEmpty(e.table))throw new Error(qk.TABLE_REQUIRED_ERR);let t=OO.checkSchemaTableExist(e.schema,e.table);if(t)throw Ese(new Error,t,Sse.NOT_FOUND,mse.LOG_LEVELS.ERROR,t,!0);return await pse.getBackup(read_audit_log_object)}a(Tse,"getBackup")});var zk=I((EIe,Wk)=>{"use strict";var Ase=ce(),Ta=require("joi"),Rse=dt(),Kk=require("moment"),yse=require("fs-extra"),NO=require("path"),bse=require("lodash"),H_=(H(),D(q)),{LOG_LEVELS:Wc}=(H(),D(q)),Ose="YYYY-MM-DD hh:mm:ss",Nse=NO.resolve(__dirname,"../logs");Wk.exports=function(e){return Rse.validateBySchema(e,wse)};var wse=Ta.object({from:Ta.custom(Yk),until:Ta.custom(Yk),level:Ta.valid(Wc.NOTIFY,Wc.FATAL,Wc.ERROR,Wc.WARN,Wc.INFO,Wc.DEBUG,Wc.TRACE),order:Ta.valid("asc","desc"),limit:Ta.number().min(1),start:Ta.number().min(0),log_name:Ta.custom(Ise)});function Yk(e,t){if(Kk(e,Kk.ISO_8601).format(Ose)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Yk,"validateDatetime");function Ise(e,t){if(bse.invert(H_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Ase.get(H_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?H_.LOG_NAMES.HDB:e,i=s===H_.LOG_NAMES.INSTALL?NO.join(Nse,H_.LOG_NAMES.INSTALL):NO.join(n,s);return yse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Ise,"validateReadLogPath")});var IO=I((SIe,jk)=>{"use strict";var rg=(H(),D(q)),Cse=j(),Pse=ce(),Dse=zk(),wO=require("path"),Qk=require("fs-extra"),{once:Lse}=require("events"),{handleHDBError:Mse,hdb_errors:vse}=he(),{PACKAGE_ROOT:Use}=Et(),xse=wO.join(Use,"logs"),Bse=1e3,Hse=200;jk.exports=kse;async function kse(e){let t=Dse(e);if(t)throw Mse(t,t.message,vse.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Pse.get(rg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?rg.LOG_NAMES.HDB:e.log_name,s=n===rg.LOG_NAMES.INSTALL?wO.join(xse,rg.LOG_NAMES.INSTALL):wO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?Bse:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,p=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(Qk.statSync(s).size-(p+5)*Hse,0));let g=Qk.createReadStream(s,{start:S});g.on("error",F=>{Cse.error(F)});let R=0,E=[],A="",O;g.on("data",F=>{let G=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=A+F;let Y=0,te;for(;(te=G.exec(F))&&!g.destroyed;){O&&(O.message=F.slice(Y,te.index),v(O));let[se,X,ne]=te,Q=ne.split("] ["),pe=Q[0],Re=Q[1];Q.splice(0,2),O={timestamp:X,thread:pe,level:Re,tags:Q,message:""},Y=te.index+se.length}A=F.slice(Y)}),g.on("end",F=>{g.destroyed||O&&(O.message=A.trim(),v(O))}),g.resume();function v(F){let G,Y,te;switch(!0){case(i&&c&&u):G=new Date(F.timestamp),Y=new Date(l),te=new Date(f),F.level===o&&G>=Y&&G<=te&&R<_?R++:F.level===o&&G>=Y&&G<=te&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case(i&&c):G=new Date(F.timestamp),Y=new Date(l),F.level===o&&G>=Y&&R<_?R++:F.level===o&&G>=Y&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case(i&&u):G=new Date(F.timestamp),te=new Date(f),F.level===o&&G<=te&&R<_?R++:F.level===o&&G<=te&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case(c&&u):G=new Date(F.timestamp),Y=new Date(l),te=new Date(f),G>=Y&&G<=te&&R<_?R++:G>=Y&&G<=te&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case i:F.level===o&&R<_?R++:F.level===o&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case c:G=new Date(F.timestamp),Y=new Date(l),G>=Y&&R<_?R++:G>=Y&&R>=_&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case u:G=new Date(F.timestamp),te=new Date(f),G<=te&&R<_?R++:G<=te&&R>=_&&(Aa(F,h,E),R++,R===p&&g.destroy());break;default:R<_?R++:(Aa(F,h,E),R++,R===p&&g.destroy())}}return a(v,"onLogMessage"),await Lse(g,"close"),E}a(kse,"readLog");function Aa(e,t,r){t==="desc"?Fse(e,r):t==="asc"?Gse(e,r):r.push(e)}a(Aa,"pushLineToResult");function Fse(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(Fse,"insertDescending");function Gse(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(Gse,"insertAscending")});var ng=I((OIe,eF)=>{"use strict";var CO=require("joi"),{string:Fu,boolean:Jk,date:qse}=CO.types(),$se=dt(),{validateSchemaExists:AIe,validateTableExists:RIe,validateSchemaName:yIe}=Si(),Vse=(H(),D(q)),Kse=Nt(),Xk=ce();Xk.initSync();var bIe=Fu.invalid(Xk.get(Vse.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Kse.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),Zk={operation:Fu.valid("add_node","update_node","set_node_replication"),node_name:Fu.optional(),subscriptions:CO.array().items({table:Fu.optional(),schema:Fu.optional(),database:Fu.optional(),subscribe:Jk.required(),publish:Jk.required().custom(Wse),start_time:qse.iso()})};function Yse(e){return $se.validateBySchema(e,CO.object(Zk))}a(Yse,"addUpdateNodeValidator");function Wse(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Wse,"checkForFalsy");eF.exports={addUpdateNodeValidator:Yse,validation_schema:Zk}});var Gu=I((wIe,tF)=>{"use strict";var PO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},DO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};tF.exports={Node:PO,NodeSubscription:DO}});var nF=I((CIe,rF)=>{"use strict";var zse=(H(),D(q)).OPERATIONS_ENUM,LO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=zse.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rF.exports=LO});var k_=I((DIe,sF)=>{"use strict";var MO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},vO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};sF.exports={RemotePayloadObject:MO,RemotePayloadSubscription:vO}});var oF=I((MIe,iF)=>{"use strict";var UO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};iF.exports=UO});var cF=I((kIe,aF)=>{"use strict";var Qse=oF(),UIe=vt(),xIe=ft(),jse=j(),{getSchemaPath:BIe,getTransactionAuditStorePath:HIe}=gt(),{getDatabases:Jse}=(Me(),D(st));aF.exports=Xse;async function Xse(e){let t=new Qse;try{let r=Jse()[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){jse.warn(`unable to stat table dbi due to ${r}`)}return t}a(Xse,"lmdbGetTableSize")});var uF=I((GIe,lF)=>{"use strict";var xO=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};lF.exports=xO});var $u=I((WIe,hF)=>{"use strict";var Zse=require("fs-extra"),eie=require("path"),Qr=require("systeminformation"),Ra=j(),dF=pr(),$Ie=Nt(),qu=(H(),D(q)),tie=cF(),rie=no(),{getThreadInfo:fF}=rt(),F_=ce();F_.initSync();var nie=uF(),{openEnvironment:VIe}=ft(),{getSchemaPath:KIe}=gt(),{database:YIe,databases:BO}=(Me(),D(st)),sg;hF.exports={getHDBProcessInfo:GO,getNetworkInfo:$O,getDiskInfo:qO,getMemoryInfo:FO,getCPUInfo:kO,getTimeInfo:HO,getSystemInformation:VO,systemInformation:sie,getTableSize:KO,getMetrics:YO};function HO(){return Qr.time()}a(HO,"getTimeInfo");async function kO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await Qr.cpu();f.cpu_speed=await Qr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:p,raw_currentload_system:S,raw_currentload_user:g,cpus:R,...E}=await Qr.currentLoad();return E.cpus=[],R.forEach(A=>{let{raw_load:O,raw_load_idle:v,raw_load_irq:F,raw_load_nice:G,raw_load_system:Y,raw_load_user:te,...se}=A;E.cpus.push(se)}),f.current_load=E,f}catch(e){return Ra.error(`error in getCPUInfo: ${e}`),{}}}a(kO,"getCPUInfo");async function FO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Qr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Ra.error(`error in getMemoryInfo: ${e}`),{}}}a(FO,"getMemoryInfo");async function GO(){let e={core:[],clustering:[]};try{let t=await Qr.processes(),r;try{r=Number.parseInt(await Zse.readFile(eie.join(F_.get(qu.CONFIG_PARAMS.ROOTPATH),qu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===qu.NODE_ERROR_CODES.ENOENT)Ra.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 Ra.error(`error in getHDBProcessInfo: ${t}`),e}}a(GO,"getHDBProcessInfo");async function qO(){let e={};try{if(!F_.get(qu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Qr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Qr.fsStats();return e.read_write=u,e.size=await Qr.fsSize(),e}catch(t){return Ra.error(`error in getDiskInfo: ${t}`),e}}a(qO,"getDiskInfo");async function $O(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return F_.get(qu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Qr.networkInterfaceDefault(),e.latency=await Qr.inetChecksite("google.com"),(await Qr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await Qr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Ra.error(`error in getNetworkInfo: ${t}`),e}}a($O,"getNetworkInfo");async function VO(){if(sg!==void 0)return sg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Qr.osInfo();e=c;let l=await Qr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,sg=e,sg}catch(t){return Ra.error(`error in getSystemInformation: ${t}`),e}}a(VO,"getSystemInformation");async function KO(){let e=[],t=await rie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await tie(n));return e}a(KO,"getTableSize");async function YO(){let e={};for(let t in BO){let r=e[t]={},n=r.tables={};for(let s in BO[t])try{let i=BO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Ra.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(YO,"getMetrics");async function _F(){if(F_.get(qu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await dF.getNATSReferences(),t=await dF.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(_F,"getNatsStreamInfo");async function sie(e){let t=new nie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await VO(),t.time=HO(),t.cpu=await kO(),t.memory=await FO(),t.disk=await qO(),t.network=await $O(),t.harperdb_processes=await GO(),t.table_size=await KO(),t.metrics=await YO(),t.threads=await fF(),t.replication=await _F(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await VO();break;case"time":t.time=HO();break;case"cpu":t.cpu=await kO();break;case"memory":t.memory=await FO();break;case"disk":t.disk=await qO();break;case"network":t.network=await $O();break;case"harperdb_processes":t.harperdb_processes=await GO();break;case"table_size":t.table_size=await KO();break;case"database_metrics":case"metrics":t.metrics=await YO();break;case"threads":t.threads=await fF();break;case"replication":t.replication=await _F();break;default:break}return t}a(sie,"systemInformation")});var _o=I((JIe,gF)=>{"use strict";var iie=hn(),WO=oe(),oie=require("util"),zc=(H(),D(q)),pF=ce();pF.initSync();var aie=bb(),mF=$r(),{Node:QIe,NodeSubscription:jIe}=Gu(),cie=uu(),lie=nF(),{RemotePayloadObject:uie,RemotePayloadSubscription:die}=k_(),{handleHDBError:fie,hdb_errors:_ie}=he(),{HTTP_STATUS_CODES:hie,HDB_ERROR_MSGS:pie}=_ie,mie=qs(),Eie=$u(),{packageJson:gie}=Et(),{getDatabases:Sie}=(Me(),D(st)),Tie=oie.promisify(aie.authorize),Aie=mF.searchByHash,Rie=mF.searchByValue;gF.exports={authHeaderToUser:yie,isEmpty:bie,getNodeRecord:Oie,upsertNodeRecord:Nie,buildNodePayloads:wie,checkClusteringEnabled:Iie,getAllNodeRecords:Cie,getSystemInfo:Pie,reverseSubscription:EF};async function yie(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Tie(t,null),e}a(yie,"authHeaderToUser");function bie(e){return e==null}a(bie,"isEmpty");async function Oie(e){let t=new cie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Aie(t)}a(Oie,"getNodeRecord");async function Nie(e){let t=new lie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return iie.upsert(t)}a(Nie,"upsertNodeRecord");function EF(e){if(WO.isEmpty(e.subscribe)||WO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(EF,"reverseSubscription");function wie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=WO.getTableHashAttribute(l,u),{subscribe:d,publish:h}=EF(c),_=Sie()[l]?.[u],p=new die(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(p)}return new uie(r,t,s,n)}a(wie,"buildNodePayloads");function Iie(){if(!pF.get(zc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw fie(new Error,pie.CLUSTERING_NOT_ENABLED,hie.BAD_REQUEST,void 0,void 0,!0)}a(Iie,"checkClusteringEnabled");async function Cie(){let e=new mie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Rie(e))}a(Cie,"getAllNodeRecords");async function Pie(){let e=await Eie.getSystemInformation();return{hdb_version:gie.version,node_version:e.node_version,platform:e.platform}}a(Pie,"getSystemInfo")});var zO=I((ZIe,NF)=>{"use strict";var ig=pr(),SF=oe(),TF=Nt(),AF=(H(),D(q)),og=j(),RF=ZE(),Die=t_(),{RemotePayloadObject:Lie}=k_(),{handleHDBError:yF,hdb_errors:Mie}=he(),{HTTP_STATUS_CODES:bF}=Mie,{NodeSubscription:OF}=Gu();NF.exports=vie;async function vie(e,t){let r;try{r=await ig.request(`${t}.${TF.REQUEST_SUFFIX}`,new Lie(AF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),og.trace("Response from remote describe all request:",r)}catch(o){og.error(`addNode received error from describe all request to remote node: ${o}`);let c=ig.requestErrorHandler(o,"add_node",t);throw yF(new Error,c,bF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===TF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw yF(new Error,o,bF.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===AF.SYSTEM_SCHEMA_NAME){await ig.createLocalTableStream(l,c);let p=new OF(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p);continue}let u=SF.doesSchemaExist(l),f=n[l]!==void 0,d=c?SF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(og.trace(`addNode creating schema: ${l}`),await RF.createSchema({operation:"create_schema",schema:l})),!d&&h){og.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Die(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await RF.createTable(p)}await ig.createLocalTableStream(l,c);let _=new OF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(vie,"reviewSubscriptions")});var Qc={};ve(Qc,{addNodeBack:()=>kie,removeNodeBack:()=>Fie,setNode:()=>Hie});async function Hie(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=Ys(t)):t=QE(r);let n=(0,IF.validateBySchema)(e,Bie);if(n)throw(0,ho.handleHDBError)(n,n.message,xie.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ho.ClientError("url or hostname is required for remove_node operation");let _=r,p=sr(),S=await p.get(_);if(!S)throw new ho.ClientError(_+" does not exist");try{await B_({url:S.url},{operation:$t.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?Xe():_},void 0)}catch(g){Wn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new ho.ClientError("url required for this operation");let s=da();if(s==null)throw new ho.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ms.getReplicationCert)();let _=await(0,ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,ms.createCsr)(),Wn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,Wn.info("Sending CA named",_.name,"to target node",t))}let l={operation:$t.ADD_NODE_BACK,hostname:(0,CF.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(wF):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=wF(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await B_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,Wn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Wn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ms.setCertTable)({name:Uie.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ms.setCertTable)({name:Xe(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),e.shard&&(d.shard=e.shard),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await uo(Xe(),_)}await uo(u?u.nodeName:d.name??Ys(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function kie(e){Wn.trace("addNodeBack received request:",e);let t=await(0,ms.signCertificate)(e),r;e.csr?(r=t.signingCA,Wn.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,Wn.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);let s=await(0,ms.getReplicationCertAuth)();if(n.replicates){let i={url:da(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await uo(Xe(),i)}return await uo(e.hostname,n),t.nodeName=Xe(),t.usingCA=s?.certificate,Wn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function Fie(e){Wn.trace("removeNodeBack received request:",e),await sr().delete(e.name)}function wF(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ms,IF,ya,CF,Wn,ho,Uie,xie,Bie,jc=be(()=>{ms=M(Qs()),IF=M(dt()),ya=M(require("joi")),CF=M(ce());H();P_();Fc();fs();Wn=M(j()),ho=M(he()),{pki:Uie}=require("node-forge"),{HTTP_STATUS_CODES:xie}=ho.hdb_errors,Bie=ya.default.object({hostname:ya.default.string(),verify_tls:ya.default.boolean(),replicates:ya.default.boolean(),subscriptions:ya.default.array(),revoked_certificates:ya.default.array(),shard:ya.default.number()});a(Hie,"setNode");a(kie,"addNodeBack");a(Fie,"removeNodeBack");a(wF,"reverseSubscription")});var dg=I((cCe,DF)=>{"use strict";var{handleHDBError:ag,hdb_errors:Gie}=he(),{HTTP_STATUS_CODES:cg}=Gie,{addUpdateNodeValidator:qie}=ng(),lg=j(),ug=(H(),D(q)),PF=Nt(),$ie=oe(),G_=pr(),q_=_o(),QO=ce(),Vie=zO(),{Node:Kie,NodeSubscription:Yie}=Gu(),{broadcast:Wie}=rt(),{setNode:zie}=(jc(),D(Qc)),oCe=ce(),aCe=(H(),D(q)),Qie="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",jie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Jie=QO.get(ug.CONFIG_PARAMS.CLUSTERING_NODENAME);DF.exports=Xie;async function Xie(e,t=!1){if(lg.trace("addNode called with:",e),QO.get(ug.CONFIG_PARAMS.REPLICATION_URL)||QO.get(ug.CONFIG_PARAMS.REPLICATION_HOSTNAME))return zie(e);q_.checkClusteringEnabled();let r=qie(e);if(r)throw ag(r,r.message,cg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await q_.getNodeRecord(n);if(!$ie.isEmptyOrZeroLength(d))throw ag(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,cg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Vie(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Qie,o;let c=q_.buildNodePayloads(s,Jie,ug.OPERATIONS_ENUM.ADD_NODE,await q_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new Yie(_.schema,_.table,_.publish,_.subscribe))}lg.trace("addNode sending remote payload:",c);let u;try{u=await G_.request(`${n}.${PF.REQUEST_SUFFIX}`,c)}catch(d){lg.error(`addNode received error from request: ${d}`);for(let _=0,p=s.length;_<p;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await G_.updateRemoteConsumer(S,n)}let h=G_.requestErrorHandler(d,"add_node",n);throw ag(new Error,h,cg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===PF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw ag(new Error,d,cg.INTERNAL_SERVER_ERROR,"error",d)}lg.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await G_.updateRemoteConsumer(_,n),_.subscribe===!0&&await G_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new Kie(n,l,u.system_info);return await q_.upsertNodeRecord(f),Wie({type:"nats_update"}),i.length>0?o.message=jie:o.message=`Successfully added '${n}' to manifest`,o}a(Xie,"addNode")});var ZO=I((dCe,MF)=>{"use strict";var{handleHDBError:jO,hdb_errors:Zie}=he(),{HTTP_STATUS_CODES:JO}=Zie,{addUpdateNodeValidator:eoe}=ng(),$_=j(),fg=(H(),D(q)),LF=Nt(),uCe=oe(),V_=pr(),K_=_o(),XO=ce(),{cloneDeep:toe}=require("lodash"),roe=zO(),{Node:noe,NodeSubscription:soe}=Gu(),{broadcast:ioe}=rt(),{setNode:ooe}=(jc(),D(Qc)),aoe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",coe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",loe=XO.get(fg.CONFIG_PARAMS.CLUSTERING_NODENAME);MF.exports=uoe;async function uoe(e){if($_.trace("updateNode called with:",e),XO.get(fg.CONFIG_PARAMS.REPLICATION_URL)??XO.get(fg.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ooe(e);K_.checkClusteringEnabled();let t=eoe(e);if(t)throw jO(t,t.message,JO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await K_.getNodeRecord(r);s.length>0&&(n=toe(s));let{added:i,skipped:o}=await roe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=aoe,c;let l=K_.buildNodePayloads(i,loe,fg.OPERATIONS_ENUM.UPDATE_NODE,await K_.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];$_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}$_.trace("updateNode sending remote payload:",l);let u;try{u=await V_.request(`${r}.${LF.REQUEST_SUFFIX}`,l)}catch(f){$_.error(`updateNode received error from request: ${f}`);let d=V_.requestErrorHandler(f,"update_node",r);throw jO(new Error,d,JO.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===LF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw jO(new Error,f,JO.INTERNAL_SERVER_ERROR,"error",f)}$_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await V_.updateRemoteConsumer(h,r),h.subscribe===!0?await V_.updateConsumerIterator(h.schema,h.table,r,"start"):await V_.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new noe(r,[],u.system_info)]),await doe(n[0],i,u.system_info),o.length>0?c.message=coe:c.message=`Successfully updated '${r}'`,c}a(uoe,"updateNode");async function doe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new soe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await K_.upsertNodeRecord(n),ioe({type:"nats_update"})}a(doe,"updateNodeTable")});var HF=I((_Ce,BF)=>{"use strict";var xF=require("joi"),{string:vF}=xF.types(),foe=dt(),UF=(H(),D(q)),_oe=ce(),hoe=Nt();BF.exports=poe;function poe(e){let t=vF.invalid(_oe.get(UF.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(hoe.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=xF.object({operation:vF.valid(UF.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return foe.validateBySchema(e,r)}a(poe,"removeNodeValidator")});var _g=I((pCe,$F)=>{"use strict";var{handleHDBError:kF,hdb_errors:moe}=he(),{HTTP_STATUS_CODES:FF}=moe,Eoe=HF(),Y_=j(),GF=_o(),goe=oe(),Vu=(H(),D(q)),qF=Nt(),eN=pr(),tN=ce(),{RemotePayloadObject:Soe}=k_(),{NodeSubscription:Toe}=Gu(),Aoe=e_(),Roe=Tc(),{broadcast:yoe}=rt(),{setNode:boe}=(jc(),D(Qc)),Ooe=tN.get(Vu.CONFIG_PARAMS.CLUSTERING_NODENAME);$F.exports=Noe;async function Noe(e){if(Y_.trace("removeNode called with:",e),tN.get(Vu.CONFIG_PARAMS.REPLICATION_URL)??tN.get(Vu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return boe(e);GF.checkClusteringEnabled();let t=Eoe(e);if(t)throw kF(t,t.message,FF.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await GF.getNodeRecord(r);if(goe.isEmptyOrZeroLength(n))throw kF(new Error,`Node '${r}' was not found.`,FF.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Soe(Vu.OPERATIONS_ENUM.REMOVE_NODE,Ooe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await eN.updateConsumerIterator(f.schema,f.table,r,"stop");try{await eN.updateRemoteConsumer(new Toe(f.schema,f.table,!1,!1),r)}catch(d){Y_.error(d)}}try{i=await eN.request(`${r}.${qF.REQUEST_SUFFIX}`,s),Y_.trace("Remove node reply from remote node:",r,i)}catch(l){Y_.error("removeNode received error from request:",l),o=!0}let c=new Aoe(Vu.SYSTEM_SCHEMA_NAME,Vu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Roe.deleteRecord(c),yoe({type:"nats_update"}),i?.status===qF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Y_.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Noe,"removeNode")});var YF=I((ECe,KF)=>{"use strict";var VF=require("joi"),{string:woe,array:Ioe}=VF.types(),Coe=dt(),Poe=ng();KF.exports=Doe;function Doe(e){let t=VF.object({operation:woe.valid("configure_cluster").required(),connections:Ioe.items(Poe.validation_schema).required()});return Coe.validateBySchema(e,t)}a(Doe,"configureClusterValidator")});var rN=I((SCe,JF)=>{"use strict";var WF=(H(),D(q)),hg=j(),Loe=oe(),Moe=ce(),voe=_g(),Uoe=dg(),xoe=_o(),Boe=YF(),{handleHDBError:zF,hdb_errors:Hoe}=he(),{HTTP_STATUS_CODES:QF}=Hoe,koe="Configure cluster complete.",Foe="Failed to configure the cluster. Check the logs for more details.",Goe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";JF.exports=qoe;async function qoe(e){hg.trace("configure cluster called with:",e);let t=Boe(e);if(t)throw zF(t,t.message,QF.BAD_REQUEST,void 0,void 0,!0);let r=await xoe.getAllNodeRecords(),n=[];if(Moe.get(WF.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await jF(voe,{operation:WF.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}hg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await jF(Uoe,d,d.node_name);s.push(h)}hg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(hg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(Loe.isEmptyOrZeroLength(o))return{message:koe,connections:c};if(l)return{message:Goe,failed_nodes:o,connections:c};throw zF(new Error,Foe,QF.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(qoe,"configureCluster");async function jF(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(jF,"functionWrapper")});var tG=I((ACe,eG)=>{"use strict";var W_=require("joi"),$oe=dt(),{validateSchemaExists:XF,validateTableExists:Voe,validateSchemaName:ZF}=Si(),Koe=W_.object({operation:W_.string().valid("purge_stream"),schema:W_.string().custom(XF).custom(ZF).optional(),database:W_.string().custom(XF).custom(ZF).optional(),table:W_.string().custom(Voe).required()});function Yoe(e){return $oe.validateBySchema(e,Koe)}a(Yoe,"purgeStreamValidator");eG.exports=Yoe});var nN=I((yCe,rG)=>{"use strict";var{handleHDBError:Woe,hdb_errors:zoe}=he(),{HTTP_STATUS_CODES:Qoe}=zoe,joe=tG(),Joe=pr(),Xoe=_o();rG.exports=Zoe;async function Zoe(e){e.schema=e.schema??e.database;let t=joe(e);if(t)throw Woe(t,t.message,Qoe.BAD_REQUEST,void 0,void 0,!0);Xoe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Joe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Zoe,"purgeStream")});var oN=I((OCe,lG)=>{"use strict";var iN=_o(),eae=pr(),mg=ce(),Ku=(H(),D(q)),Jc=Nt(),tae=oe(),sN=j(),{RemotePayloadObject:rae}=k_(),{ErrorCode:nG}=require("nats"),{parentPort:sG}=require("worker_threads"),{onMessageByType:nae}=rt(),{getThisNodeName:sae}=(fs(),D(ma)),{requestClusterStatus:iae}=(P_(),D(wH)),{getReplicationSharedStatus:oae}=(Fc(),D(Yb)),{CONFIRMATION_STATUS_POSITION:aae,RECEIVED_VERSION_POSITION:cae,RECEIVED_TIME_POSITION:lae,SENDING_TIME_POSITION:uae}=(mO(),D(pk)),iG=mg.get(Ku.CONFIG_PARAMS.CLUSTERING_ENABLED),oG=mg.get(Ku.CONFIG_PARAMS.CLUSTERING_NODENAME);lG.exports={clusterStatus:dae,buildNodeStatus:cG};var aG;nae("cluster-status",async e=>{aG(e)});async function dae(){if(mg.get(Ku.CONFIG_PARAMS.REPLICATION_URL)||mg.get(Ku.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(sG){sG.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{aG=s});for(let s of n.connections){let i=s.name;for(let o of s.database_sockets){let c=o.database,l;for(let f of Object.values(databases[c]||{}))if(l=f.auditStore,l)break;if(!l)continue;let u=oae(l,c,i);o.lastCommitConfirmed=pg(u[aae]),o.lastReceivedRemoteTime=pg(u[cae]),o.lastReceivedLocalTime=pg(u[lae]),o.sendingMessage=pg(u[uae])}}}else n=iae();return n.node_name=sae(),n.is_enabled=!0,n}let e={node_name:oG,is_enabled:iG,connections:[]};if(!iG)return e;let t=await iN.getAllNodeRecords();if(tae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(cG(t[n],e.connections));return await Promise.allSettled(r),e}a(dae,"clusterStatus");function pg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(pg,"asDate");async function cG(e,t){let r=e.name,n=new rae(Ku.OPERATIONS_ENUM.CLUSTER_STATUS,oG,void 0,await iN.getSystemInfo()),s,i,o=Jc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await eae.request(Jc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Jc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Jc.CLUSTER_STATUS_STATUSES.CLOSED,sN.error(`Error getting node status from ${r} `,s))}catch(l){sN.warn(`Error getting node status from ${r}`,l),l.code===nG.NoResponders?o=Jc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===nG.Timeout?o=Jc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Jc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new fae(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Ku.PRE_4_0_0_VERSION&&await iN.upsertNodeRecord(l)}catch(l){sN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(cG,"buildNodeStatus");function fae(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(fae,"NodeStatusObject")});var cN=I((wCe,uG)=>{"use strict";var{handleHDBError:_ae,hdb_errors:hae}=he(),{HTTP_STATUS_CODES:pae}=hae,mae=pr(),Eae=_o(),aN=oe(),Eg=require("joi"),gae=dt(),Sae=2e3,Tae=Eg.object({timeout:Eg.number().min(1),connected_nodes:Eg.boolean(),routes:Eg.boolean()});uG.exports=Aae;async function Aae(e){Eae.checkClusteringEnabled();let t=gae.validateBySchema(e,Tae);if(t)throw _ae(t,t.message,pae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||aN.autoCastBoolean(n),o=s===void 0||aN.autoCastBoolean(s),c={nodes:[]},l=await mae.getServerList(r??Sae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let p={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(p.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{p.connected_nodes.includes(S.name.slice(0,-4))||p.connected_nodes.push(S.name.slice(0,-4))})),o&&(p.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:aN.autoCast(S.split(":")[1])})):[]),c.nodes.push(p)}}return c}a(Aae,"clusterNetwork")});var hG=I((CCe,_G)=>{"use strict";var lN=require("joi"),dG=dt(),{route_constraints:fG}=$R();_G.exports={setRoutesValidator:Rae,deleteRoutesValidator:yae};function Rae(e){let t=lN.object({server:lN.valid("hub","leaf"),routes:fG.required()});return dG.validateBySchema(e,t)}a(Rae,"setRoutesValidator");function yae(e){let t=lN.object({routes:fG.required()});return dG.validateBySchema(e,t)}a(yae,"deleteRoutesValidator")});var gg=I((DCe,AG)=>{"use strict";var po=It(),uN=oe(),Es=(H(),D(q)),Yu=ce(),pG=hG(),{handleHDBError:mG,hdb_errors:bae}=he(),{HTTP_STATUS_CODES:EG}=bae,gG="cluster routes successfully set",SG="cluster routes successfully deleted";AG.exports={setRoutes:Nae,getRoutes:wae,deleteRoutes:Iae};function Oae(e){let t=po.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=uN.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:gG,set:i,skipped:s}}a(Oae,"setRoutesNats");function Nae(e){let t=pG.setRoutesValidator(e);if(t)throw mG(t,t.message,EG.BAD_REQUEST,void 0,void 0,!0);if(Yu.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED))return Oae(e);let r=[],n=[],s=Yu.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{TG(s,i)?n.push(i):(s.push(i),r.push(i))}),po.updateConfigValue(Es.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:gG,set:r,skipped:n}}a(Nae,"setRoutes");function TG(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(TG,"existsInArray");function wae(){if(Yu.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=po.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Yu.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(wae,"getRoutes");function Iae(e){let t=pG.deleteRoutesValidator(e);if(t)throw mG(t,t.message,EG.BAD_REQUEST,void 0,void 0,!0);if(Yu.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED))return Cae(e);let r=[],n=[],s=Yu.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{TG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),po.updateConfigValue(Es.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:SG,deleted:r,skipped:n}}a(Iae,"deleteRoutes");function Cae(e){let t=po.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let p=r[h];if(f.host===p.host&&f.port===p.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,p=n.length;_<p;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=uN.isEmptyOrZeroLength(r)?null:r,po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=uN.isEmptyOrZeroLength(n)?null:n,po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:SG,deleted:s,skipped:i}}a(Cae,"deleteRoutesNats")});var yG=I((MCe,RG)=>{"use strict";var z_=require("alasql"),Xc=require("recursive-iterator"),js=j(),Pae=oe(),Q_=(H(),D(q)),dN=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Lae(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=>Q_.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=>!Q_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Q_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Dae(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!Q_.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new z_.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Dae(e){return e.filter(t=>t[Q_.PERMS_CRUD_ENUM.READ])}a(Dae,"filterReadRestrictedAttrs");function Lae(e,t,r,n,s){Mae(e,t,r,n,s)}a(Lae,"interpretAST");function j_(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(j_,"addSchemaTableToMap");function Mae(e,t,r,n,s){if(!e){js.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof z_.yy.Insert?Bae(e,t,r):e instanceof z_.yy.Select?vae(e,t,r,n,s):e instanceof z_.yy.Update?Uae(e,t,r):e instanceof z_.yy.Delete?xae(e,t,r):js.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Mae,"getRecordAttributesAST");function vae(e,t,r,n,s){if(!e){js.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Pae.isEmptyOrZeroLength(i)){js.error("No schema specified");return}e.from.forEach(c=>{j_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),j_(c.table,t,r,n,s)});let o=new Xc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{js.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 Xc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{js.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Xc(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{js.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new Xc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{js.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(vae,"getSelectAttributes");function Uae(e,t,r){if(!e){js.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Xc(e.columns),s=e.table.databaseid;j_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fN(e.table.tableid,s,i.columnid,t,r)}a(Uae,"getUpdateAttributes");function xae(e,t,r){if(!e){js.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Xc(e.where),s=e.table.databaseid;j_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fN(e.table.tableid,s,i.columnid,t,r)}a(xae,"getDeleteAttributes");function Bae(e,t,r){if(!e){js.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Xc(e.columns),s=e.into.databaseid;j_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fN(e.into.tableid,s,i.columnid,t,r)}a(Bae,"getInsertAttributes");function fN(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(fN,"pushAttribute");RG.exports=dN});var OG=I((UCe,bG)=>{"use strict";var Sg=(H(),D(q)),Tg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Sg.RAM_ALLOCATION_ENUM.DEFAULT,n=Sg.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_N=class extends Tg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Sg.RAM_ALLOCATION_ENUM.DEFAULT,n=Sg.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};bG.exports={BaseLicense:Tg,ExtendedLicense:_N}});var Qu=I((BCe,DG)=>{"use strict";var zu=require("fs-extra"),Ag=(Rm(),D(Am)),wG=require("crypto"),Hae=require("moment"),kae=require("uuid").v4,jr=j(),pN=require("path"),Fae=oe(),Zc=(H(),D(q)),{totalmem:NG}=require("os"),Gae=OG().ExtendedLicense,Wu="invalid license key format",qae="061183",$ae="mofi25",Vae="aes-256-cbc",Kae=16,Yae=32,IG=ce(),{resolvePath:CG}=It();IG.initSync();var hN;DG.exports={validateLicense:PG,generateFingerPrint:zae,licenseSearch:gN,getLicense:Jae,checkMemoryLimit:Xae};function mN(){return pN.join(IG.getHdbBasePath(),Zc.LICENSE_KEY_DIR_NAME,Zc.LICENSE_FILE_NAME)}a(mN,"getLicenseDirPath");function Wae(){let e=mN();return CG(pN.join(e,Zc.LICENSE_FILE_NAME))}a(Wae,"getLicenseFilePath");function EN(){let e=mN();return CG(pN.join(e,Zc.REG_KEY_FILE_NAME))}a(EN,"getFingerPrintFilePath");async function zae(){let e=EN();try{return await zu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Qae();throw jr.error(`Error writing fingerprint file to ${e}`),jr.error(t),new Error("There was an error generating the fingerprint")}}a(zae,"generateFingerPrint");async function Qae(){let e=kae(),t=Ag.hash(e,Ag.HASH_FUNCTION.MD5),r=EN();try{await zu.mkdirp(mN()),await zu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw jr.error(`Error writing fingerprint file to ${r}`),jr.error(n),new Error("There was an error generating the fingerprint")}return t}a(Qae,"writeFingerprint");function PG(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zc.RAM_ALLOCATION_ENUM.DEFAULT,version:Zc.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jr.error("empty license key passed to validate."),r;let n=EN(),s=!1;try{s=zu.statSync(n)}catch(i){jr.error(i)}if(s){let i;try{i=zu.readFileSync(n,"utf8")}catch{jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split($ae),c=o[1];c=Buffer.concat([Buffer.from(c)],Kae);let l=Buffer.concat([Buffer.from(i)],Yae),u=wG.createDecipheriv(Vae,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=jae(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Wu),jr.error(Wu),new Error(Wu)}let d;if(isNaN(f))try{d=JSON.parse(f),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Wu),jr.error(Wu),new Error(Wu)}else r.exp_date=f;r.exp_date<Hae().valueOf()&&(r.valid_date=!1),Ag.validate(o[1],`${qae}${i}${t}`,Ag.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||jr.error("Invalid licence"),r}a(PG,"validateLicense");function jae(e,t){try{let r=wG.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{jr.warn("Check old license failed")}}a(jae,"checkOldLicense");function gN(){let e=new Gae,t=[];try{t=zu.readFileSync(Wae(),"utf-8").split(`\r
24
+ `)}catch(r){r.code==="ENOENT"?jr.debug("no license file found"):jr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Fae.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=PG(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){jr.error("There was an error parsing the license string."),jr.error(s),e.ram_allocation=Zc.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return hN=e,e}a(gN,"licenseSearch");async function Jae(){return hN||await gN(),hN}a(Jae,"getLicense");function Xae(){let e=gN().ram_allocation,t=process.constrainedMemory?.()||NG();if(t=Math.round(Math.min(t,NG())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(Xae,"checkMemoryLimit")});var AN=I((kCe,UG)=>{var Rg=Qu(),LG=require("chalk"),zn=j(),MG=require("prompt"),{promisify:Zae}=require("util"),SN=(H(),D(q)),ece=require("fs-extra"),tce=require("path"),rce=oe(),{packageJson:nce}=Et(),vG=ce();vG.initSync();var sce=require("moment"),ice=Zae(MG.get),oce=tce.join(vG.getHdbBasePath(),SN.LICENSE_KEY_DIR_NAME,SN.LICENSE_FILE_NAME,SN.LICENSE_FILE_NAME);UG.exports={getFingerprint:cce,setLicense:ace,parseLicense:TN,register:lce,getRegistrationInfo:dce};async function ace(e){if(e&&e.key&&e.company){try{zn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await TN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw zn.error(r),zn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(ace,"setLicense");async function cce(){let e={};try{e=await Rg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw zn.error(r),zn.error(t),new Error(r)}return e}a(cce,"getFingerprint");async function TN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");zn.info("Validating license input...");let r=Rg.validateLicense(e,t);if(zn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(zn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(zn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{zn.info("writing license to disk"),await ece.writeFile(oce,JSON.stringify({license_key:e,company:t}))}catch(n){throw zn.error("Failed to write License"),n}return"Registration successful."}a(TN,"parseLicense");async function lce(){let e=await uce();return TN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(lce,"register");async function uce(){let e=await Rg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LG.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LG.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{MG.start()}catch(n){zn.error(n)}let r;try{r=await ice(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(uce,"promptForRegistration");async function dce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Rg.getLicense()}catch(r){throw zn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(rce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=nce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=sce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(dce,"getRegistrationInfo")});var BG=I((GCe,xG)=>{"use strict";var fce=Nt(),RN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,p){this.port=t,o===null&&(o=void 0),this.server_name=r+fce.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:p}},this.system_account="SYS"}};xG.exports=RN});var FG=I(($Ce,kG)=>{"use strict";var HG=Nt(),yN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+HG.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+HG.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};kG.exports=yN});var qG=I((KCe,GG)=>{"use strict";var bN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};GG.exports=bN});var VG=I((WCe,$G)=>{"use strict";var _ce=Nt(),ON=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+_ce.SERVER_SUFFIX.ADMIN,this.password=r}};$G.exports=ON});var Ng=I((QCe,WG)=>{"use strict";var el=require("path"),tl=require("fs-extra"),hce=BG(),pce=FG(),mce=qG(),Ece=VG(),NN=Gn(),Ju=oe(),Tn=It(),bg=(H(),D(q)),J_=Nt(),{CONFIG_PARAMS:Wt}=bg,Xu=j(),X_=ce(),KG=ro(),wN=pr(),gce=Qs(),ju="clustering",Sce=1e4,YG=50;WG.exports={generateNatsConfig:Ace,removeNatsConfig:Rce,getHubConfigPath:Tce};function Tce(){let e=X_.get(Wt.ROOTPATH);return el.join(e,ju,J_.NATS_CONFIG_FILES.HUB_SERVER)}a(Tce,"getHubConfigPath");async function Ace(e=!1,t=void 0){let r=X_.get(Wt.ROOTPATH);tl.ensureDirSync(el.join(r,"clustering","leaf")),X_.initSync();let n=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_CERT_AUTH),s=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_PRIVATEKEY),i=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_CERTIFICATE);!await tl.exists(i)&&!await tl.exists(!n)&&await gce.createNatsCerts();let o=el.join(r,ju,J_.PID_FILES.HUB),c=el.join(r,ju,J_.PID_FILES.LEAF),l=Tn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=el.join(r,ju,J_.NATS_CONFIG_FILES.HUB_SERVER),f=el.join(r,ju,J_.NATS_CONFIG_FILES.LEAF_SERVER),d=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_INSECURE),h=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_VERIFY),_=Tn.getConfigFromFile(Wt.CLUSTERING_NODENAME),p=Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wN.checkNATSServerInstalled()||Og("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await NN.listUsers(),g=Tn.getConfigFromFile(Wt.CLUSTERING_USER),R=await NN.getClusterUser();(Ju.isEmpty(R)||R.active!==!0)&&Og(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yg(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yg(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yg(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),await yg(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],A=[];for(let[se,X]of S.entries())X.role?.role===bg.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(E.push(new Ece(X.username,KG.decrypt(X.hash))),A.push(new mce(X.username,KG.decrypt(X.hash))));let O=[],{hub_routes:v}=Tn.getClusteringRoutes();if(!Ju.isEmptyOrZeroLength(v))for(let se of v)O.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${se.host}:${se.port}`);let F=new hce(Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,p,Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),O,E,A);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Ju.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===bg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await tl.writeJson(u,F),Xu.trace(`Hub server config written to ${u}`));let G=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,Y=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,te=new pce(Tn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[G],[Y],E,A,i,s,n,d);n==null&&delete te.tls.ca_file,(t===void 0||t===bg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await tl.writeJson(f,te),Xu.trace(`Leaf server config written to ${f}`))}a(Ace,"generateNatsConfig");async function yg(e){let t=X_.get(e);return Ju.isEmpty(t)&&Og(`port undefined for '${e}'`),await Ju.isPortTaken(t)&&Og(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(yg,"isPortAvailable");function Og(e){let t=`Error generating clustering config: ${e}`;Xu.error(t),console.error(t),process.exit(1)}a(Og,"generateNatsConfigError");async function Rce(e){let{port:t,config_file:r}=wN.getServerConfig(e),{username:n,decrypt_hash:s}=await NN.getClusterUser(),i=0,o=2e3;for(;i<YG;){try{let f=await wN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){Xu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=YG)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Xu.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Ju.async_set_timeout(u)}let c="0".repeat(Sce),l=el.join(X_.get(Wt.ROOTPATH),ju,r);await tl.writeFile(l,c),await tl.remove(l),Xu.notify(e,"started.")}a(Rce,"removeNatsConfig")});var ZG=I((JCe,XG)=>{"use strict";var Qn=ce(),yce=Qu(),Fe=(H(),D(q)),Z_=Nt(),mo=require("path"),{PACKAGE_ROOT:Ig}=Et(),zG=ce(),wg=oe(),Zu="/dev/null",bce=mo.join(Ig,"launchServiceScripts"),QG=mo.join(Ig,"utility/scripts"),Oce=mo.join(QG,Fe.HDB_RESTART_SCRIPT),jG=mo.resolve(Ig,"dependencies",`${process.platform}-${process.arch}`,Z_.NATS_BINARY_NAME);function JG(){let t=yce.licenseSearch().ram_allocation||Fe.RAM_ALLOCATION_ENUM.DEFAULT,r=Fe.MEM_SETTING_KEY+t,n={[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return wg.noBootFile()&&(n[Fe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wg.getEnvCliRootPath()),{name:Fe.PROCESS_DESCRIPTORS.HDB,script:Fe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Ig}}a(JG,"generateMainServerConfig");var Nce=9930;function wce(){Qn.initSync(!0);let e=Qn.get(Fe.CONFIG_PARAMS.ROOTPATH),t=mo.join(e,"clustering",Z_.NATS_CONFIG_FILES.HUB_SERVER),r=mo.join(Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Fe.LOG_NAMES.HDB),n=zG.get(Fe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Z_.LOG_LEVEL_FLAGS[Qn.get(Fe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Nce?"-"+n:""),script:jG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zu,i.error_file=Zu),i}a(wce,"generateNatsHubServerConfig");var Ice=9940;function Cce(){Qn.initSync(!0);let e=Qn.get(Fe.CONFIG_PARAMS.ROOTPATH),t=mo.join(e,"clustering",Z_.NATS_CONFIG_FILES.LEAF_SERVER),r=mo.join(Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Fe.LOG_NAMES.HDB),n=zG.get(Fe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Z_.LOG_LEVEL_FLAGS[Qn.get(Fe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ice?"-"+n:""),script:jG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zu,i.error_file=Zu),i}a(Cce,"generateNatsLeafServerConfig");function Pce(){Qn.initSync();let e=mo.join(Qn.get(Fe.CONFIG_PARAMS.LOGGING_ROOT),Fe.LOG_NAMES.HDB),t={name:Fe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Fe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:bce,autorestart:!1};return Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Zu,t.error_file=Zu),t}a(Pce,"generateClusteringUpgradeV4ServiceConfig");function Dce(){let e={[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.RESTART_HDB};return wg.noBootFile()&&(e[Fe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wg.getEnvCliRootPath()),{...{name:Fe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:QG},script:Oce}}a(Dce,"generateRestart");function Lce(){return{apps:[JG()]}}a(Lce,"generateAllServiceConfigs");XG.exports={generateAllServiceConfigs:Lce,generateMainServerConfig:JG,generateRestart:Dce,generateNatsHubServerConfig:wce,generateNatsLeafServerConfig:Cce,generateClusteringUpgradeV4ServiceConfig:Pce}});var th=I((ePe,_q)=>{"use strict";var Ze=(H(),D(q)),Mce=oe(),go=Ng(),Cg=pr(),Eo=Nt(),ba=ZG(),Pg=ce(),rl=j(),vce=_o(),{startWorker:eq,onMessageFromWorkers:Uce}=rt(),xce=$u(),ZCe=require("util"),Bce=require("child_process"),Hce=require("fs"),{execFile:kce}=Bce,Ve;_q.exports={enterPM2Mode:Fce,start:Oa,stop:IN,reload:rq,restart:nq,list:CN,describe:oq,connect:So,kill:Kce,startAllServices:Yce,startService:PN,getUniqueServicesList:aq,restartAllServices:Wce,isServiceRegistered:cq,reloadStopStart:lq,restartHdb:iq,deleteProcess:$ce,startClusteringProcesses:dq,startClusteringThreads:fq,isHdbRestartRunning:Vce,isClusteringRunning:Qce,stopClustering:zce,reloadClustering:jce,expectedRestartOfChildren:sq};var eh=!1;Uce(e=>{e.type==="restart"&&Pg.initSync(!0)});function Fce(){eh=!0}a(Fce,"enterPM2Mode");function So(){return Ve||(Ve=require("pm2")),new Promise((e,t)=>{Ve.connect((r,n)=>{r&&t(r),e(n)})})}a(So,"connect");var Jr,Gce=10,tq;function Oa(e,t=!1){if(eh)return qce(e);let r=kce(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Jr.indexOf(r);o>-1&&Jr.splice(o,1),!tq&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Gce&&(Hce.existsSync(go.getHubConfigPath())?Oa(e):(await go.generateNatsConfig(!0),Oa(e),await new Promise(c=>setTimeout(c,3e3)),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Pg.get(Ze.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&Eo.LOG_LEVEL_HIERARCHY[o]>=Eo.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===Eo.LOG_LEVELS.ERR||f===Eo.LOG_LEVELS.WRN?rl.OUTPUTS.STDERR:rl.OUTPUTS.STDOUT;rl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=Eo.LOG_LEVELS[h]}if(Eo.LOG_LEVEL_HIERARCHY[o]>=Eo.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===Eo.LOG_LEVELS.ERR||f===Eo.LOG_LEVELS.WRN?rl.OUTPUTS.STDERR:rl.OUTPUTS.STDOUT;rl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Jr&&(Jr=[],!t)){let i=a(()=>{tq=!0,Jr&&(Jr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Jr.push(r)}a(Oa,"start");function qce(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.start(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(qce,"startWithPM2");function IN(e){if(!eh){for(let t of Jr||[])t.name===e&&(Jr.splice(Jr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.stop(e,async(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.delete(e,(i,o)=>{i&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(o)})})})}a(IN,"stop");function rq(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.reload(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(rq,"reload");function nq(e){if(!eh){sq();for(let t of Jr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.restart(e,(n,s)=>{Ve.disconnect(),t(s)})})}a(nq,"restart");function sq(){for(let e of Jr||[])e.config&&(e.config.restarts=0)}a(sq,"expectedRestartOfChildren");function $ce(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.delete(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a($ce,"deleteProcess");async function iq(){await Oa(ba.generateRestart())}a(iq,"restartHdb");async function Vce(){let e=await CN();for(let t in e)if(e[t].name===Ze.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Vce,"isHdbRestartRunning");function CN(){return new Promise(async(e,t)=>{try{await So()}catch(r){t(r)}Ve.list((r,n)=>{r&&(Ve.disconnect(),t(r)),Ve.disconnect(),e(n)})})}a(CN,"list");function oq(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.describe(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(oq,"describe");function Kce(){if(!eh){for(let e of Jr||[])e.kill();Jr=[];return}return new Promise(async(e,t)=>{try{await So()}catch(r){t(r)}Ve.killDaemon((r,n)=>{r&&(Ve.disconnect(),t(r)),Ve.disconnect(),e(n)})})}a(Kce,"kill");async function Yce(){try{await dq(),await fq(),await Oa(ba.generateAllServiceConfigs())}catch(e){throw Ve?.disconnect(),e}}a(Yce,"startAllServices");async function PN(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ze.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ba.generateMainServerConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ba.generateNatsIngestServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ba.generateNatsReplyServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ba.generateNatsHubServerConfig(),await Oa(r,t),await go.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ba.generateNatsLeafServerConfig(),await Oa(r,t),await go.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ba.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oa(r)}catch(r){throw Ve?.disconnect(),r}}a(PN,"startService");async function aq(){try{let e=await CN(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ve?.disconnect(),e}}a(aq,"getUniqueServicesList");async function Wce(e=[]){try{let t=!1,r=await aq();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ze.PROCESS_DESCRIPTORS.HDB?t=!0:await nq(o))}t&&await lq(Ze.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ve?.disconnect(),t}}a(Wce,"restartAllServices");async function cq(e){if(Jr?.find(r=>r.name===e))return!0;let t=await xce.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(cq,"isServiceRegistered");async function lq(e){let t=Pg.get(Ze.CONFIG_PARAMS.THREADS_COUNT)??Pg.get(Ze.CONFIG_PARAMS.THREADS),r=await oq(e),n=Mce.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await IN(e),await PN(e)):e===Ze.PROCESS_DESCRIPTORS.HDB?await iq():await rq(e)}a(lq,"reloadStopStart");var uq;async function dq(e=!1){for(let t in Ze.CLUSTERING_PROCESSES){let r=Ze.CLUSTERING_PROCESSES[t];await PN(r,e)}}a(dq,"startClusteringProcesses");async function fq(){uq=eq(Ze.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Cg.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Cg.updateLocalStreams();let e=await vce.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ze.PRE_4_0_0_VERSION){rl.info("Starting clustering upgrade 4.0.0 process"),eq(Ze.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(fq,"startClusteringThreads");async function zce(){for(let e in Ze.CLUSTERING_PROCESSES)if(e!==Ze.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ze.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await uq.terminate();else{let t=Ze.CLUSTERING_PROCESSES[e];await IN(t)}}a(zce,"stopClustering");async function Qce(){for(let e in Ze.CLUSTERING_PROCESSES){let t=Ze.CLUSTERING_PROCESSES[e];if(await cq(t)===!1)return!1}return!0}a(Qce,"isClusteringRunning");async function jce(){await go.generateNatsConfig(!0),await Cg.reloadNATSHub(),await Cg.reloadNATSLeaf(),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(jce,"reloadClustering")});var MN={};ve(MN,{compactOnStart:()=>Jce,copyDb:()=>Sq});async function Jce(){Na.notify("Running compact on start"),console.log("Running compact on start");let e=(0,DN.get)(B.ROOTPATH),t=new Map,r=Je();(0,LN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Dg.join)(e,"backup",n+".mdb"),o=(0,Dg.join)(e,Za,n+"-copy.mdb"),c=0;try{c=await hq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Na.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Sq(n,o),console.log("Backing up",n,"to",i),await(0,nl.move)(s,i,{overwrite:!0})}try{ed()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,nl.move)(i,s,{overwrite:!0}),await(0,nl.remove)((0,Dg.join)(e,Za,`${n}-copy.mdb-lock`));try{ed()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Na.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,LN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,nl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw ed(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await hq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
25
25
  Total record count before compaction: ${i}, total after: ${c}.
26
- Database backup has not been removed and can be found here: ${s}`;Na.error(l),console.error(l)}(0,PN.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,sl.remove)(s))}}async function fq(e){let t=await(0,mq.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Eq(e,t){console.log("copyDb start");let r=Je()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,_q.open)(new hq.default(t)),c=o.openDB(Lg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let p=_.is_hash_attribute||_.isPrimaryKey,S,g;if(p&&(S=_.compression,g=Mg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(p||_.indexed))continue;let A=new pq.default(!p,p);A.encoding="binary",A.compression=S;let E=n.openDB(h,A);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",A.compression=g;let R=o.openDB(h,A);R.encoder=null,console.log("copying",h,"from",e,"to",t),await d(E,R,p,f)}if(i){let h=n.openDB(Lg.AUDIT_STORE_NAME,rh);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,p,S){let g=0,A=0,E=1e7,R=null;for(;E-- >0;)try{for(let N of h.getKeys({start:R,transaction:S}))try{R=N;let{value:v,version:k}=h.getEntry(N,{transaction:S});l=_.put(N,v,p?k:void 0),g++,S.openTimer&&(S.openTimer=0),A+=(N?.length||10)+v.length,u++>5e3&&(await l,console.log("copied",g,"entries",A,"bytes"),u=0)}catch(v){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,v)}console.log("finish copying, copied",g,"entries",A,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var _q,Dg,sl,PN,hq,pq,Lg,mq,DN,Na,MN=be(()=>{Me();_q=require("lmdb"),Dg=require("path"),sl=require("fs-extra"),PN=M(le()),hq=M(bf()),pq=M(yf()),Lg=M(vt());H();Ji();mq=M(no()),DN=M(wt()),Na=M(Q());a(jce,"compactOnStart");a(fq,"getTotalDBRecordCount");a(Eq,"copyDb")});var rd=I((cPe,bq)=>{"use strict";var Jce=require("minimist"),{isMainThread:UN,parentPort:sh,threadId:iPe}=require("worker_threads"),rt=(H(),P($)),vi=Q(),xN=ae(),Ug=Ng(),vg=hr(),oPe=Ot(),Aq=wt(),Xs=th(),gq=$u(),{compactOnStart:Xce}=(MN(),P(LN)),Zce=ec(),{restartWorkers:xg,onMessageByType:ele}=tt(),{handleHDBError:tle,hdb_errors:rle}=he(),{HTTP_STATUS_CODES:nle}=rle,ih=le(),{sendOperationToNode:Sq,getThisNodeName:sle,monitorNodeCAs:ile}=(_s(),P(Ea)),{getHDBNodeTable:aPe}=(Fc(),P(Kb));ih.initSync();var nh=`Restarting HarperDB. This may take up to ${rt.RESTART_TIMEOUT_MS/1e3} seconds.`,ole="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Tq="Clustering is not enabled so cannot be restarted",ale="Invalid service",td,Ss;bq.exports={restart:Rq,restartService:BN};UN&&ele(rt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await BN({service:e.workerType}):Rq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Rq(e){Ss=Object.keys(e).length===0,td=await Xs.isServiceRegistered(rt.PROCESS_DESCRIPTORS.HDB);let t=Jce(process.argv);if(t.service){await BN(t);return}if(Ss&&!td){console.error(ole);return}if(Ss&&console.log(nh),td){Xs.enterPM2Mode(),vi.notify(nh);let r=Zce(Object.keys(rt.CONFIG_PARAM_MAP),!0);return xN.isEmptyOrZeroLength(Object.keys(r))||Aq.updateConfigValue(void 0,void 0,r,!0,!0),cle(),nh}return UN?(vi.notify(nh),ih.get(rt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xce(),setTimeout(()=>{xg()},50)):sh.postMessage({type:rt.ITC_EVENT_TYPES.RESTART}),nh}a(Rq,"restart");async function BN(e){let{service:t}=e;if(rt.HDB_PROCESS_SERVICES[t]===void 0)throw tle(new Error,ale,nle.BAD_REQUEST,void 0,void 0,!0);if(Xs.expectedRestartOfChildren(),td=await Xs.isServiceRegistered(rt.PROCESS_DESCRIPTORS.HDB),!UN){e.replicated&&ile(),sh.postMessage({type:rt.ITC_EVENT_TYPES.RESTART,workerType:t}),sh.ref(),await new Promise(s=>{sh.on("message",i=>{i.type==="restart-complete"&&(s(),sh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===sle())continue;let{job_id:i}=await Sq(s,e);n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await Sq(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case rt.HDB_PROCESS_SERVICES.clustering:if(!ih.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Tq;break}Ss&&console.log("Restarting clustering"),vi.notify("Restarting clustering"),await yq();break;case rt.HDB_PROCESS_SERVICES.clustering_config:case rt.HDB_PROCESS_SERVICES["clustering config"]:if(!ih.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Tq;break}Ss&&console.log("Restarting clustering_config"),vi.notify("Restarting clustering_config"),await Xs.reloadClustering();break;case"custom_functions":case"custom functions":case rt.HDB_PROCESS_SERVICES.harperdb:case rt.HDB_PROCESS_SERVICES.http_workers:case rt.HDB_PROCESS_SERVICES.http:if(Ss&&!td){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Ss&&console.log("Restarting http_workers"),vi.notify("Restarting http_workers"),Ss?await Xs.restart(rt.PROCESS_DESCRIPTORS.HDB):await xg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(vi.error(r),Ss&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(BN,"restartService");async function cle(){await yq(),await Xs.restart(rt.PROCESS_DESCRIPTORS.HDB),await xN.async_set_timeout(2e3),ih.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await vN(),Ss&&(await vg.closeConnection(),process.exit(0))}a(cle,"restartPM2Mode");async function yq(){if(!Aq.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await gq.getHDBProcessInfo()).clustering.length===0)vi.trace("Clustering not running, restart will start clustering services"),await Ug.generateNatsConfig(!0),await Xs.startClusteringProcesses(),await Xs.startClusteringThreads(),await vN(),Ss&&await vg.closeConnection();else{await Ug.generateNatsConfig(!0),td?(vi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Xs.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Xs.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await gq.getHDBProcessInfo()).clustering.forEach(s=>{vi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await xN.async_set_timeout(3e3),await vN(),await vg.updateLocalStreams(),Ss&&await vg.closeConnection(),vi.trace("Restart clustering restarting ingest and reply service threads");let t=xg(rt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xg(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(yq,"restartClustering");async function vN(){await Ug.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ug.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(vN,"removeNatsConfig")});var Uq=I((dPe,vq)=>{"use strict";var uPe=require("lodash"),Rn=(H(),P($)),{handleHDBError:Oq,hdb_errors:lle}=he(),{HDB_ERROR_MSGS:ule,HTTP_STATUS_CODES:dle}=lle,HN=Q();vq.exports={getRolePermissions:_le};var il=Object.create(null),fle=a(e=>({key:e,perms:{}}),"perms_template_obj"),Cq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),Pq=a((e=!1,t=!1,r=!1,n=!1)=>({[Rn.PERMS_CRUD_ENUM.READ]:e,[Rn.PERMS_CRUD_ENUM.INSERT]:t,[Rn.PERMS_CRUD_ENUM.UPDATE]:r,[Rn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),kN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Pq(t,r,n,s)}),"table_perms_template"),Nq=a((e,t=Pq())=>({attribute_name:e,describe:Mq(t),[oh]:t[oh],[FN]:t[FN],[GN]:t[GN]}),"attr_perms_template"),wq=a((e,t=!1)=>({attribute_name:e,describe:t,[oh]:t}),"timestamp_attr_perms_template"),{READ:oh,INSERT:FN,UPDATE:GN}=Rn.PERMS_CRUD_ENUM,Dq=Object.values(Rn.PERMS_CRUD_ENUM),Lq=[oh,FN,GN];function _le(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Rn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(il[t]&&il[t].key===n)return il[t].perms;let s=hle(e,r);return il[t]?il[t].key=n:il[t]=fle(n),il[t].perms=s,s}catch(r){if(!e[Rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Rn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw HN.error(n),HN.debug(r),Oq(new Error,ule.OUTDATED_PERMS_TRANSLATION_ERROR,dle.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
- ${r.stack}`;throw HN.error(n),Oq(new Error)}}}a(_le,"getRolePermissions");function hle(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Rn.SYSTEM_SCHEMA_NAME]=n[Rn.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]=ple(t[i]);return}r[i]=Cq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=mle(c,l);r[i].describe||Dq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=kN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=kN()})}),r}a(hle,"translateRolePermissions");function ple(e){let t=Cq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=kN(!0,!0,!0,!0,!0)}),t}a(ple,"createStructureUserPermissions");function mle(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return Rn.TIME_STAMP_NAMES.includes(d)&&(h=wq(d,f[oh])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Nq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=Mq(f),s.attribute_permissions.push(f),c||Ele(f,l)}else if(u!==o){let f;Rn.TIME_STAMP_NAMES.includes(u)?f=wq(u):f=Nq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Iq(s),s}else return e.describe=Iq(e),e}a(mle,"getTableAttrPerms");function Iq(e){return Dq.filter(t=>e[t]).length>0}a(Iq,"getSchemaTableDescribePerm");function Mq(e){return Lq.filter(t=>e[t]).length>0}a(Mq,"getAttributeDescribePerm");function Ele(e,t){Lq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Ele,"checkForHashPerms")});var ah={};ve(ah,{authentication:()=>qq,bypassAuth:()=>ble,login:()=>Nle,logout:()=>wle,start:()=>Ole});function ble(){Gq=!0}async function qq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Ale?Tle:[]:Sle?gle:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let p=Jn.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new co([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return Bg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),Bg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Bg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let S of p)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await xq.get(l);break}e.session=u||(u={})}let f=a((_,p,S)=>{let g=new nd.AuthAuditLog(_,p,Vo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Ms.SUCCESS?qN.notify(g):qN.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&qN.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await We.getUser(_,null,e),f(_,Ms.SUCCESS,"mTLS")):(0,nd.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=ol.get(n),!d){let _=n.indexOf(" "),p=n.slice(0,_),S=n.slice(_+1),g,A;try{switch(p){case"Basic":let E=atob(S),R=E.indexOf(":");g=E.slice(0,R),A=E.slice(R+1),d=g||A?await We.getUser(g,A,e):null;break;case"Bearer":try{d=await Rb(S)}catch(N){if(N.message==="invalid token")try{return await mE(S),c({status:-1})}catch{throw N}}break}}catch(E){return yle&&(ol.get(S)||(ol.set(S,S),f(g,Ms.FAILURE,p))),c({status:401,body:ea({error:E.message},e)})}ol.set(n,d),Rle&&f(d.username,Ms.SUCCESS,p)}e.user=d}else u?.user?e.user=await We.getUser(u.user,null,e):(Gq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Hq.getSuperUser)());Bg&&(e.session.update=function(_){if(!l){l=(0,kq.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):h?.headers?.set&&h.headers.set("Set-Cookie",S)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,xq.put(_)},e.login=async function(_,p){let S=e.user=await We.authenticateUser(_,p,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&hi.loginPath?(h.status=302,h.headers.set("Location",hi.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new co);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Ole({server:e,port:t,securePort:r}){e.http(qq,t||r?{port:t,securePort:r}:{port:"all"}),Bq||(Bq=!0,setInterval(()=>{ol=new Map},Jn.get(x.AUTHENTICATION_CACHETTL)).unref(),Fq.user.addListener(()=>{ol=new Map}))}async function Nle(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 wle(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Hq,kq,Jn,nd,Fq,qN,gle,Sle,Tle,Ale,xq,Bg,Gq,Rle,yle,ol,Bq,Hg=be(()=>{Hq=M(qn());qr();Yl();Tu();Me();kq=require("uuid"),Jn=M(le());H();nd=M(Q()),Fq=M(Kf());p_();ji();qN=(0,nd.loggerWithTag)("auth-event");Jn.initSync();gle=Jn.get(x.HTTP_CORSACCESSLIST),Sle=Jn.get(x.HTTP_CORS),Tle=Jn.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Ale=Jn.get(x.OPERATIONSAPI_NETWORK_CORS),xq=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Bg=Jn.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,Gq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Jn.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Rle=Jn.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,yle=Jn.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ol=new Map;We.onInvalidatedUser(()=>{ol=new Map});a(ble,"bypassAuth");a(qq,"authentication");a(Ole,"start");a(Nle,"login");a(wle,"logout")});var Qq=I((APe,zq)=>{"use strict";var Ne=require("joi"),$q=require("fs-extra"),Vq=require("path"),Xn=lt(),Kq=le(),Yq=(H(),P($)),Wq=Q(),{hdb_errors:Ile}=he(),{HDB_ERROR_MSGS:Zr}=Ile,To=/^[a-zA-Z0-9-_]+$/,Cle=/^[a-zA-Z0-9-_]+$/;zq.exports={getDropCustomFunctionValidator:Dle,setCustomFunctionValidator:Lle,addComponentValidator:xle,dropCustomFunctionProjectValidator:Ble,packageComponentValidator:Hle,deployComponentValidator:kle,setComponentFileValidator:Mle,getComponentFileValidator:Ule,dropComponentFileValidator:vle,addSSHKeyValidator:Fle,updateSSHKeyValidator:Gle,deleteSSHKeyValidator:qle,setSSHKnownHostsValidator:$le};function kg(e,t,r){try{let n=Kq.get(Yq.CONFIG_PARAMS.COMPONENTSROOT),s=Vq.join(n,t);return $q.existsSync(s)?e?t:r.message(Zr.PROJECT_EXISTS):e?r.message(Zr.NO_PROJECT):t}catch(n){return Wq.error(n),r.message(Zr.VALIDATION_ERR)}}a(kg,"checkProjectExists");function ch(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(ch,"checkFilePath");function Ple(e,t,r,n){try{let s=Kq.get(Yq.CONFIG_PARAMS.COMPONENTSROOT),i=Vq.join(s,e,t,r+".js");return $q.existsSync(i)?r:n.message(Zr.NO_FILE)}catch(s){return Wq.error(s),n.message(Zr.VALIDATION_ERR)}}a(Ple,"checkFileExists");function Dle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(To).custom(Ple.bind(null,e.project,e.type)).custom(ch).required().messages({"string.pattern.base":Zr.BAD_FILE_NAME})});return Xn.validateBySchema(e,t)}a(Dle,"getDropCustomFunctionValidator");function Lle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(ch).required(),function_content:Ne.string().required()});return Xn.validateBySchema(e,t)}a(Lle,"setCustomFunctionValidator");function Mle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),file:Ne.string().custom(ch).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xn.validateBySchema(e,t)}a(Mle,"setComponentFileValidator");function vle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),file:Ne.string().custom(ch).optional()});return Xn.validateBySchema(e,t)}a(vle,"dropComponentFileValidator");function Ule(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(ch).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xn.validateBySchema(e,t)}a(Ule,"getComponentFileValidator");function xle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!1)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME})});return Xn.validateBySchema(e,t)}a(xle,"addComponentValidator");function Ble(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME})});return Xn.validateBySchema(e,t)}a(Ble,"dropCustomFunctionProjectValidator");function Hle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Xn.validateBySchema(e,t)}a(Hle,"packageComponentValidator");function kle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Xn.validateBySchema(e,t)}a(kle,"deployComponentValidator");function Fle(e){let t=Ne.object({name:Ne.string().pattern(Cle).required().messages({"string.pattern.base":Zr.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Xn.validateBySchema(e,t)}a(Fle,"addSSHKeyValidator");function Gle(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Xn.validateBySchema(e,t)}a(Gle,"updateSSHKeyValidator");function qle(e){let t=Ne.object({name:Ne.string().required()});return Xn.validateBySchema(e,t)}a(qle,"deleteSSHKeyValidator");function $le(e){let t=Ne.object({known_hosts:Ne.string().required()});return Xn.validateBySchema(e,t)}a($le,"setSSHKnownHostsValidator")});var dh=I((yPe,t$)=>{"use strict";var Fg=require("joi"),wa=require("path"),sd=require("fs-extra"),{exec:Vle}=require("child_process"),Kle=require("util"),jq=Kle.promisify(Vle),id=(H(),P($)),{PACKAGE_ROOT:Yle}=mt(),{handleHDBError:lh,hdb_errors:Wle}=he(),{HTTP_STATUS_CODES:uh}=Wle,al=le(),zle=lt(),cl=Q();al.initSync();var $N=al.get(id.CONFIG_PARAMS.COMPONENTSROOT),Jq="npm install --force --omit=dev --json",Qle=`${Jq} --dry-run`,jle=al.get(id.CONFIG_PARAMS.ROOTPATH),Gg=wa.join(jle,"ssh");t$.exports={installModules:eue,auditModules:tue,installAllRootModules:Jle,uninstallRootModule:Xle,linkHarperdb:Zle,runCommand:od};async function Jle(e=!1,t=al.get(id.CONFIG_PARAMS.ROOTPATH)){await qg();let r=!1,n=process.env;sd.pathExistsSync(Gg)&&sd.readdirSync(Gg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+wa.join(Gg,"config")+" -o UserKnownHostsFile="+wa.join(Gg,"known_hosts"),...process.env},r=!0)});try{let s=al.get(id.CONFIG_PARAMS.ROOTPATH),i=wa.join(s,"node_modules","harperdb");sd.lstatSync(i).isSymbolicLink()&&sd.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&cl.error("Error removing symlink:",s)}await od(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Jle,"installAllRootModules");async function Xle(e){await od(`npm uninstall ${e}`,al.get(id.CONFIG_PARAMS.ROOTPATH))}a(Xle,"uninstallRootModule");async function Zle(){await qg(),await od(`npm link ${Yle}`,al.get(id.CONFIG_PARAMS.ROOTPATH))}a(Zle,"linkHarperdb");async function od(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await jq(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
28
- `,""))}return s&&!s.includes("Debugger listening")&&!s.includes("warn using --force")&&cl.error("Error running NPM command:",e,s),cl.trace(n,s),n?.replace(`
29
- `,"")}a(od,"runCommand");async function eue(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";cl.warn(t,e);let r=e$(e);if(r)throw lh(r,r.message,uh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?Qle:Jq;await qg(),await Zq(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=wa.join($N,u),d,h=null;try{let{stdout:_,stderr:p}=await jq(i,{cwd:f});d=_?_.replace(`
26
+ Database backup has not been removed and can be found here: ${s}`;Na.error(l),console.error(l)}(0,DN.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,nl.remove)(s))}}async function hq(e){let t=await(0,gq.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Sq(e,t){console.log("copyDb start");let r=Je()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,pq.open)(new mq.default(t)),c=o.openDB(Lg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let p=_.is_hash_attribute||_.isPrimaryKey,S,g;if(p&&(S=_.compression,g=Mg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(p||_.indexed))continue;let R=new Eq.default(!p,p);R.encoding="binary",R.compression=S;let E=n.openDB(h,R);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",R.compression=g;let A=o.openDB(h,R);A.encoder=null,console.log("copying",h,"from",e,"to",t),await d(E,A,p,f)}if(i){let h=n.openDB(Lg.AUDIT_STORE_NAME,rh);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,p,S){let g=0,R=0,E=1e7,A=null;for(;E-- >0;)try{for(let O of h.getKeys({start:A,transaction:S}))try{A=O;let{value:v,version:F}=h.getEntry(O,{transaction:S});l=_.put(O,v,p?F:void 0),g++,S.openTimer&&(S.openTimer=0),R+=(O?.length||10)+v.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(v){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,v)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof A=="string"){if(A==="z")return console.error("Reached end of dbi",A,"for",e,"to",t);A=A.slice(0,-2)+"z"}else if(typeof A=="number")A++;else return console.error("Unknown key type",A,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var pq,Dg,nl,DN,mq,Eq,Lg,gq,LN,Na,vN=be(()=>{Me();pq=require("lmdb"),Dg=require("path"),nl=require("fs-extra"),DN=M(ce()),mq=M(bf()),Eq=M(yf()),Lg=M(vt());H();Ji();gq=M(no()),LN=M(It()),Na=M(j());a(Jce,"compactOnStart");a(hq,"getTotalDBRecordCount");a(Sq,"copyDb")});var rd=I((lPe,Nq)=>{"use strict";var Xce=require("minimist"),{isMainThread:xN,parentPort:sh,threadId:oPe}=require("worker_threads"),nt=(H(),D(q)),Mi=j(),BN=oe(),Ug=Ng(),vg=pr(),aPe=Nt(),yq=It(),Js=th(),Tq=$u(),{compactOnStart:Zce}=(vN(),D(MN)),ele=ec(),{restartWorkers:xg,onMessageByType:tle}=rt(),{handleHDBError:rle,hdb_errors:nle}=he(),{HTTP_STATUS_CODES:sle}=nle,ih=ce(),{sendOperationToNode:Aq,getThisNodeName:ile,monitorNodeCAs:ole}=(fs(),D(ma)),{getHDBNodeTable:cPe}=(Fc(),D(Yb));ih.initSync();var nh=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,ale="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Rq="Clustering is not enabled so cannot be restarted",cle="Invalid service",td,gs;Nq.exports={restart:bq,restartService:HN};xN&&tle(nt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await HN({service:e.workerType}):bq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function bq(e){gs=Object.keys(e).length===0,td=await Js.isServiceRegistered(nt.PROCESS_DESCRIPTORS.HDB);let t=Xce(process.argv);if(t.service){await HN(t);return}if(gs&&!td){console.error(ale);return}if(gs&&console.log(nh),td){Js.enterPM2Mode(),Mi.notify(nh);let r=ele(Object.keys(nt.CONFIG_PARAM_MAP),!0);return BN.isEmptyOrZeroLength(Object.keys(r))||yq.updateConfigValue(void 0,void 0,r,!0,!0),lle(),nh}return xN?(Mi.notify(nh),ih.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Zce(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{xg()},50)):sh.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),nh}a(bq,"restart");async function HN(e){let{service:t}=e;if(nt.HDB_PROCESS_SERVICES[t]===void 0)throw rle(new Error,cle,sle.BAD_REQUEST,void 0,void 0,!0);if(Js.expectedRestartOfChildren(),td=await Js.isServiceRegistered(nt.PROCESS_DESCRIPTORS.HDB),!xN){e.replicated&&ole(),sh.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),sh.ref(),await new Promise(s=>{sh.on("message",i=>{i.type==="restart-complete"&&(s(),sh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===ile())continue;let{job_id:i}=await Aq(s,e);n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await Aq(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case nt.HDB_PROCESS_SERVICES.clustering:if(!ih.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Rq;break}gs&&console.log("Restarting clustering"),Mi.notify("Restarting clustering"),await Oq();break;case nt.HDB_PROCESS_SERVICES.clustering_config:case nt.HDB_PROCESS_SERVICES["clustering config"]:if(!ih.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Rq;break}gs&&console.log("Restarting clustering_config"),Mi.notify("Restarting clustering_config"),await Js.reloadClustering();break;case"custom_functions":case"custom functions":case nt.HDB_PROCESS_SERVICES.harperdb:case nt.HDB_PROCESS_SERVICES.http_workers:case nt.HDB_PROCESS_SERVICES.http:if(gs&&!td){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}gs&&console.log("Restarting http_workers"),Mi.notify("Restarting http_workers"),gs?await Js.restart(nt.PROCESS_DESCRIPTORS.HDB):await xg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Mi.error(r),gs&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(HN,"restartService");async function lle(){await Oq(),await Js.restart(nt.PROCESS_DESCRIPTORS.HDB),await BN.async_set_timeout(2e3),ih.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await UN(),gs&&(await vg.closeConnection(),process.exit(0))}a(lle,"restartPM2Mode");async function Oq(){if(!yq.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await Tq.getHDBProcessInfo()).clustering.length===0)Mi.trace("Clustering not running, restart will start clustering services"),await Ug.generateNatsConfig(!0),await Js.startClusteringProcesses(),await Js.startClusteringThreads(),await UN(),gs&&await vg.closeConnection();else{await Ug.generateNatsConfig(!0),td?(Mi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Js.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Js.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await Tq.getHDBProcessInfo()).clustering.forEach(s=>{Mi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await BN.async_set_timeout(3e3),await UN(),await vg.updateLocalStreams(),gs&&await vg.closeConnection(),Mi.trace("Restart clustering restarting ingest and reply service threads");let t=xg(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xg(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Oq,"restartClustering");async function UN(){await Ug.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ug.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(UN,"removeNatsConfig")});var Bq=I((fPe,xq)=>{"use strict";var dPe=require("lodash"),An=(H(),D(q)),{handleHDBError:wq,hdb_errors:ule}=he(),{HDB_ERROR_MSGS:dle,HTTP_STATUS_CODES:fle}=ule,kN=j();xq.exports={getRolePermissions:hle};var sl=Object.create(null),_le=a(e=>({key:e,perms:{}}),"perms_template_obj"),Dq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),Lq=a((e=!1,t=!1,r=!1,n=!1)=>({[An.PERMS_CRUD_ENUM.READ]:e,[An.PERMS_CRUD_ENUM.INSERT]:t,[An.PERMS_CRUD_ENUM.UPDATE]:r,[An.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),FN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Lq(t,r,n,s)}),"table_perms_template"),Iq=a((e,t=Lq())=>({attribute_name:e,describe:Uq(t),[oh]:t[oh],[GN]:t[GN],[qN]:t[qN]}),"attr_perms_template"),Cq=a((e,t=!1)=>({attribute_name:e,describe:t,[oh]:t}),"timestamp_attr_perms_template"),{READ:oh,INSERT:GN,UPDATE:qN}=An.PERMS_CRUD_ENUM,Mq=Object.values(An.PERMS_CRUD_ENUM),vq=[oh,GN,qN];function hle(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[An.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(sl[t]&&sl[t].key===n)return sl[t].perms;let s=ple(e,r);return sl[t]?sl[t].key=n:sl[t]=_le(n),sl[t].perms=s,s}catch(r){if(!e[An.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[An.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<An.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw kN.error(n),kN.debug(r),wq(new Error,dle.OUTDATED_PERMS_TRANSLATION_ERROR,fle.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
+ ${r.stack}`;throw kN.error(n),wq(new Error)}}}a(hle,"getRolePermissions");function ple(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[An.SYSTEM_SCHEMA_NAME]=n[An.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=mle(t[i]);return}r[i]=Dq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=Ele(c,l);r[i].describe||Mq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=FN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=FN()})}),r}a(ple,"translateRolePermissions");function mle(e){let t=Dq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=FN(!0,!0,!0,!0,!0)}),t}a(mle,"createStructureUserPermissions");function Ele(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return An.TIME_STAMP_NAMES.includes(d)&&(h=Cq(d,f[oh])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Iq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=Uq(f),s.attribute_permissions.push(f),c||gle(f,l)}else if(u!==o){let f;An.TIME_STAMP_NAMES.includes(u)?f=Cq(u):f=Iq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Pq(s),s}else return e.describe=Pq(e),e}a(Ele,"getTableAttrPerms");function Pq(e){return Mq.filter(t=>e[t]).length>0}a(Pq,"getSchemaTableDescribePerm");function Uq(e){return vq.filter(t=>e[t]).length>0}a(Uq,"getAttributeDescribePerm");function gle(e,t){vq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(gle,"checkForHashPerms")});var ah={};ve(ah,{authentication:()=>Vq,bypassAuth:()=>Ole,login:()=>wle,logout:()=>Ile,start:()=>Nle});function Ole(){$q=!0}async function Vq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Rle?Ale:[]:Tle?Sle:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let p=jn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new co([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return Bg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),Bg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Bg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let S of p)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await Hq.get(l);break}e.session=u||(u={})}let f=a((_,p,S)=>{let g=new nd.AuthAuditLog(_,p,Vo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Ls.SUCCESS?$N.notify(g):$N.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&$N.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await Ye.getUser(_,null,e),f(_,Ls.SUCCESS,"mTLS")):(0,nd.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=il.get(n),!d){let _=n.indexOf(" "),p=n.slice(0,_),S=n.slice(_+1),g,R;try{switch(p){case"Basic":let E=atob(S),A=E.indexOf(":");g=E.slice(0,A),R=E.slice(A+1),d=g||R?await Ye.getUser(g,R,e):null;break;case"Bearer":try{d=await yb(S)}catch(O){if(O.message==="invalid token")try{return await mE(S),c({status:-1})}catch{throw O}}break}}catch(E){return ble&&(il.get(S)||(il.set(S,S),f(g,Ls.FAILURE,p))),c({status:401,body:Zo({error:E.message},e)})}il.set(n,d),yle&&f(d.username,Ls.SUCCESS,p)}e.user=d}else u?.user?e.user=await Ye.getUser(u.user,null,e):($q&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Fq.getSuperUser)());Bg&&(e.session.update=function(_){if(!l){l=(0,Gq.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):h?.headers?.set&&h.headers.set("Set-Cookie",S)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,Hq.put(_)},e.login=async function(_,p){let S=e.user=await Ye.authenticateUser(_,p,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&_i.loginPath?(h.status=302,h.headers.set("Location",_i.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new co);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Nle({server:e,port:t,securePort:r}){e.http(Vq,t||r?{port:t,securePort:r}:{port:"all"}),kq||(kq=!0,setInterval(()=>{il=new Map},jn.get(B.AUTHENTICATION_CACHETTL)).unref(),qq.user.addListener(()=>{il=new Map}))}async function wle(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 Ile(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Fq,Gq,jn,nd,qq,$N,Sle,Tle,Ale,Rle,Hq,Bg,$q,yle,ble,il,kq,Hg=be(()=>{Fq=M(Gn());Gr();Yl();Tu();Me();Gq=require("uuid"),jn=M(ce());H();nd=M(j()),qq=M(Kf());p_();ji();$N=(0,nd.loggerWithTag)("auth-event");jn.initSync();Sle=jn.get(B.HTTP_CORSACCESSLIST),Tle=jn.get(B.HTTP_CORS),Ale=jn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Rle=jn.get(B.OPERATIONSAPI_NETWORK_CORS),Hq=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Bg=jn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,$q=process.env.AUTHENTICATION_AUTHORIZELOCAL??jn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,yle=jn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,ble=jn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,il=new Map;Ye.onInvalidatedUser(()=>{il=new Map});a(Ole,"bypassAuth");a(Vq,"authentication");a(Nle,"start");a(wle,"login");a(Ile,"logout")});var Jq=I((RPe,jq)=>{"use strict";var Ne=require("joi"),Kq=require("fs-extra"),Yq=require("path"),Jn=dt(),Wq=ce(),zq=(H(),D(q)),Qq=j(),{hdb_errors:Cle}=he(),{HDB_ERROR_MSGS:Xr}=Cle,To=/^[a-zA-Z0-9-_]+$/,Ple=/^[a-zA-Z0-9-_]+$/;jq.exports={getDropCustomFunctionValidator:Lle,setCustomFunctionValidator:Mle,addComponentValidator:Ble,dropCustomFunctionProjectValidator:Hle,packageComponentValidator:kle,deployComponentValidator:Fle,setComponentFileValidator:vle,getComponentFileValidator:xle,dropComponentFileValidator:Ule,addSSHKeyValidator:Gle,updateSSHKeyValidator:qle,deleteSSHKeyValidator:$le,setSSHKnownHostsValidator:Vle};function kg(e,t,r){try{let n=Wq.get(zq.CONFIG_PARAMS.COMPONENTSROOT),s=Yq.join(n,t);return Kq.existsSync(s)?e?t:r.message(Xr.PROJECT_EXISTS):e?r.message(Xr.NO_PROJECT):t}catch(n){return Qq.error(n),r.message(Xr.VALIDATION_ERR)}}a(kg,"checkProjectExists");function ch(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(ch,"checkFilePath");function Dle(e,t,r,n){try{let s=Wq.get(zq.CONFIG_PARAMS.COMPONENTSROOT),i=Yq.join(s,e,t,r+".js");return Kq.existsSync(i)?r:n.message(Xr.NO_FILE)}catch(s){return Qq.error(s),n.message(Xr.VALIDATION_ERR)}}a(Dle,"checkFileExists");function Lle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(To).custom(Dle.bind(null,e.project,e.type)).custom(ch).required().messages({"string.pattern.base":Xr.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(Lle,"getDropCustomFunctionValidator");function Mle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(ch).required(),function_content:Ne.string().required()});return Jn.validateBySchema(e,t)}a(Mle,"setCustomFunctionValidator");function vle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(ch).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(vle,"setComponentFileValidator");function Ule(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(ch).optional()});return Jn.validateBySchema(e,t)}a(Ule,"dropComponentFileValidator");function xle(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(ch).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(xle,"getComponentFileValidator");function Ble(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!1)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Ble,"addComponentValidator");function Hle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Hle,"dropCustomFunctionProjectValidator");function kle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Jn.validateBySchema(e,t)}a(kle,"packageComponentValidator");function Fle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Jn.validateBySchema(e,t)}a(Fle,"deployComponentValidator");function Gle(e){let t=Ne.object({name:Ne.string().pattern(Ple).required().messages({"string.pattern.base":Xr.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Jn.validateBySchema(e,t)}a(Gle,"addSSHKeyValidator");function qle(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Jn.validateBySchema(e,t)}a(qle,"updateSSHKeyValidator");function $le(e){let t=Ne.object({name:Ne.string().required()});return Jn.validateBySchema(e,t)}a($le,"deleteSSHKeyValidator");function Vle(e){let t=Ne.object({known_hosts:Ne.string().required()});return Jn.validateBySchema(e,t)}a(Vle,"setSSHKnownHostsValidator")});var dh=I((bPe,n$)=>{"use strict";var Fg=require("joi"),wa=require("path"),sd=require("fs-extra"),{exec:Kle}=require("child_process"),Yle=require("util"),Xq=Yle.promisify(Kle),id=(H(),D(q)),{PACKAGE_ROOT:Wle}=Et(),{handleHDBError:lh,hdb_errors:zle}=he(),{HTTP_STATUS_CODES:uh}=zle,ol=ce(),Qle=dt(),al=j();ol.initSync();var VN=ol.get(id.CONFIG_PARAMS.COMPONENTSROOT),Zq="npm install --force --omit=dev --json",jle=`${Zq} --dry-run`,Jle=ol.get(id.CONFIG_PARAMS.ROOTPATH),Gg=wa.join(Jle,"ssh");n$.exports={installModules:tue,auditModules:rue,installAllRootModules:Xle,uninstallRootModule:Zle,linkHarperdb:eue,runCommand:od};async function Xle(e=!1,t=ol.get(id.CONFIG_PARAMS.ROOTPATH)){await qg();let r=!1,n=process.env;sd.pathExistsSync(Gg)&&sd.readdirSync(Gg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+wa.join(Gg,"config")+" -o UserKnownHostsFile="+wa.join(Gg,"known_hosts"),...process.env},r=!0)});try{let s=ol.get(id.CONFIG_PARAMS.ROOTPATH),i=wa.join(s,"node_modules","harperdb");sd.lstatSync(i).isSymbolicLink()&&sd.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&al.error("Error removing symlink:",s)}await od(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Xle,"installAllRootModules");async function Zle(e){await od(`npm uninstall ${e}`,ol.get(id.CONFIG_PARAMS.ROOTPATH))}a(Zle,"uninstallRootModule");async function eue(){await qg(),await od(`npm link ${Wle}`,ol.get(id.CONFIG_PARAMS.ROOTPATH))}a(eue,"linkHarperdb");async function od(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await Xq(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
28
+ `,""))}return s&&!s.includes("Debugger listening")&&!s.includes("warn using --force")&&al.error("Error running NPM command:",e,s),al.trace(n,s),n?.replace(`
29
+ `,"")}a(od,"runCommand");async function tue(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";al.warn(t,e);let r=r$(e);if(r)throw lh(r,r.message,uh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?jle:Zq;await qg(),await t$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=wa.join(VN,u),d,h=null;try{let{stdout:_,stderr:p}=await Xq(i,{cwd:f});d=_?_.replace(`
30
30
  `,""):null,h=p?p.replace(`
31
- `,""):null}catch(_){_.stderr?o[u].npm_error=Xq(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return cl.info(`finished installModules with response ${o}`),o.warning=t,o}a(eue,"installModules");function Xq(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
32
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(Xq,"parseNPMStdErr");async function tue(e){cl.info(`starting auditModules for request: ${e}`);let t=e$(e);if(t)throw lh(t,t.message,uh.BAD_REQUEST);let{projects:r}=e;await qg(),await Zq(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=wa.join($N,o);n[o]={npm_output:null,npm_error:null};try{let l=await od("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=Xq(l.stderr)}}return cl.info(`finished auditModules with response ${n}`),n}a(tue,"auditModules");async function qg(){return await od("npm -v"),!0}a(qg,"checkNPMInstalled");async function Zq(e){if(!Array.isArray(e)||e.length===0)throw lh(new Error,"projects argument must be an array with at least 1 element",uh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=wa.join($N,i.toString());if(!await sd.pathExists(o)){t.push(i);continue}let l=wa.join(o,"package.json");await sd.pathExists(l)||r.push(i)}if(t.length>0)throw lh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,uh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw lh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,uh.BAD_REQUEST,void 0,void 0,!0)}a(Zq,"checkProjectPaths");function e$(e){let t=Fg.object({projects:Fg.array().min(1).items(Fg.string()).required(),dry_run:Fg.boolean().default(!1)});return zle.validateBySchema(e,t)}a(e$,"modulesValidator")});var KN=I((OPe,a$)=>{"use strict";var Ts=require("fs-extra"),_h=require("path"),fh=Q(),r$=ae(),{PACKAGE_ROOT:rue}=mt(),VN=(H(),P($)),o$=le(),nue=wt();a$.exports=sue;async function sue(){let e=iue(),t=o$.get(VN.CONFIG_PARAMS.ROOTPATH),r=_h.join(t,"package.json"),n={dependencies:{harperdb:"file:"+rue}},s=_h.join(t,"node_modules");Ts.ensureDirSync(s);let i,o=!0,c=!1;try{i=Ts.readJsonSync(r)}catch(l){if(r$.isEmptyOrZeroLength(e))return;if(l.code!==VN.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!r$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=s$(u);n.dependencies[l]=f+u}if(!o){fh.notify("Installing components"),await i$(r,n,null),await n$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=s$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(Ts.statSync(new URL(u+"/package.json")).mtimeMs>Ts.statSync(r).mtimeMs){c=!0;break}}catch(h){fh.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(fh.notify("Removing component",l),c=!0);c&&(fh.notify("Updating components."),await i$(r,n,i),await n$(t,e))}a(sue,"installComponents");function n$(e,t){return Promise.all(t.map(({name:r})=>{let n=_h.join(e,"node_modules",r),s=_h.join(e,"components",r);if(Ts.existsSync(n)&&Ts.lstatSync(n).isDirectory())return Ts.move(n,s,{overwrite:!0}).then(()=>{Ts.symlink(s,n)})}))}a(n$,"moveModuleToComponents");function iue(){let e=nue.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(iue,"getComponentsConfig");function s$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":_h.extname(e)||Ts.existsSync(e)?"file:":"github:"}a(s$,"getPkgPrefix");async function i$(e,t,r){fh.trace("npm installing components package.json",t),Ts.writeFileSync(e,JSON.stringify(t,null," "));try{await dh().installAllRootModules(o$.get(VN.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ts.writeFileSync(e,JSON.stringify(r,null," ")):Ts.unlinkSync(e),n}}a(i$,"installPackages")});var d$={};ve(d$,{packageDirectory:()=>oue});function oue(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];l$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,c$.join)("cache","webpack")):void 0}).pipe((0,u$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var c$,l$,u$,f$=be(()=>{c$=require("path"),l$=M(require("tar-fs")),u$=require("node:zlib");a(oue,"packageDirectory")});var zN=I(m$=>{"use strict";var Oe=require("fs-extra"),YN=require("fast-glob"),we=require("path"),aue=require("tar-fs"),cue=require("gunzip-maybe"),WN=require("normalize-path"),yn=Qq(),Ut=Q(),ot=(H(),P($)),Wt=le(),$g=wt(),lue=ae(),{PACKAGE_ROOT:uue}=mt(),{handleHDBError:xt,hdb_errors:due}=he(),{basename:fue}=require("path"),_ue=KN(),h$=le(),{Readable:hue}=require("stream"),{isMainThread:pue}=require("worker_threads"),{HDB_ERROR_MSGS:ll,HTTP_STATUS_CODES:Bt}=due,p$=tt(),{replicateOperation:Zs}=(_s(),P(Ea)),{packageDirectory:mue}=(f$(),P(d$)),_$=dh(),Eue=we.join(uue,"application-template"),gue=Wt.get(ot.CONFIG_PARAMS.ROOTPATH),Ia=we.join(gue,"ssh"),Ao=we.join(Ia,"known_hosts");function Sue(){Ut.trace("getting custom api status");let e={};try{e={port:Wt.get(ot.CONFIG_PARAMS.HTTP_PORT),directory:Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw xt(new Error,ll.FUNCTION_STATUS,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,t)}return e}a(Sue,"customFunctionsStatus");function Tue(){Ut.trace("getting custom api endpoints");let e={},t=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT);try{YN.sync(WN(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:YN.sync(WN(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:YN.sync(WN(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw xt(new Error,ll.GET_FUNCTIONS,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,r)}return e}a(Tue,"getCustomFunctions");function Aue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=yn.getDropCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("getting custom api endpoint file content");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=we.join(r,n,s,i+".js");try{return Oe.readFileSync(o,{encoding:"utf8"})}catch(c){throw xt(new Error,ll.GET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,c)}}a(Aue,"getCustomFunction");async function Rue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=yn.setCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("setting custom function file content");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Oe.outputFileSync(we.join(r,n,s,i+".js"),o);let c=await Zs(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw xt(new Error,ll.SET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,c)}}a(Rue,"setCustomFunction");async function yue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=yn.getDropCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("dropping custom function file");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Oe.unlinkSync(we.join(r,n,s,i+".js"));let o=await Zs(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw xt(new Error,ll.DROP_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,o)}}a(yue,"dropCustomFunction");async function bue(e){e.project&&(e.project=we.parse(e.project).name);let t=yn.addComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("adding component");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=we.join(r,n);Oe.mkdirSync(s,{recursive:!0}),Oe.copySync(Eue,s);let i=await Zs(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw xt(new Error,ll.ADD_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,s)}}a(bue,"addComponent");async function Oue(e){e.project&&(e.project=we.parse(e.project).name);let t=yn.dropCustomFunctionProjectValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("dropping custom function project");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Wt.get(ot.CONFIG_PARAMS.APPS);if(!lue.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return $g.updateConfigValue(ot.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=we.join(r,n);Oe.rmSync(i,{recursive:!0});let o=await Zs(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw xt(new Error,ll.DROP_FUNCTION_PROJECT,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,i)}}a(Oue,"dropCustomFunctionProject");async function Nue(e){e.project&&(e.project=we.parse(e.project).name);let t=yn.packageComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ut.trace("packaging component",n);let s;try{s=await Oe.realpath(we.join(r,n))}catch(o){if(o.code!==ot.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Oe.realpath(we.join(Wt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ot.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await mue(s,e)).toString("base64");return{project:n,payload:i}}a(Nue,"packageComponent");async function wue(e){e.project?e.project=we.parse(e.project).name:e.package&&(e.project=Iue(e.package));let t=yn.deployComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Ut.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=we.join(r,n),i="file:"+c,await Oe.emptyDir(c);let S=hue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,R)=>{S.pipe(cue()).pipe(aue.extract(c,{finish:E})).on("error",R)});let g=await Oe.readdir(c);g.length===1&&g[0]==="package"&&(await Oe.copy(we.join(c,"package"),c),await Oe.remove(we.join(c,"package")));let A=we.join(c,"node_modules");o?await _$.runCommand(o,c):Oe.existsSync(A)||await _$.installAllRootModules(!1,c)}else{await $g.addConfig(n,{package:i}),await _ue();let S=h$.get(ot.CONFIG_PARAMS.ROOTPATH);c=we.join(S,"node_modules",n)}if(pue)return;let l=new Map;l.isWorker=!0;let u=(ph(),P(hh)),f;u.setErrorReporter(S=>f=S);let d=fue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;Ut.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let p=await Zs(e);if(e.restart===!0)p$.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await QN().executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}a(wue,"deployComponent");function Iue(e){if(e.startsWith("git+ssh://"))return we.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return we.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Oe.readFileSync(we.join(e,"package.json"),"utf8"));return we.basename(t)}catch{}return we.basename(e)}a(Iue,"getProjectNameFromPackage");async function Cue(){let e=a(async(s,i)=>{try{let o=await Oe.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=we.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Oe.stat(u),d={name:we.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return Ut.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{name:Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT).split(we.sep).slice(-1).pop(),entries:[]}),n=(ph(),P(hh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Cue,"getComponents");async function Pue(e){let t=yn.getComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let n=$g.getConfigObj()[e.project]||e.project==="harperdb"?we.join(h$.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules"):Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Oe.stat(we.join(n,e.project,e.file));return{message:await Oe.readFile(we.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ot.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${we.join(e.project,e.file)}'`):i}}a(Pue,"getComponentFile");async function Due(e){let t=yn.setComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=we.join(Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Oe.ensureFile(n),await Oe.outputFile(n,e.payload,r)):await Oe.ensureDir(n);let s=await Zs(e);return s.message="Successfully set component: "+e.file,s}a(Due,"setComponentFile");async function Lue(e){let t=yn.dropComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?we.join(r,n):r,i=we.join(Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s),o=we.join(Wt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Oe.pathExists(o)&&await Oe.unlink(o),await Oe.pathExists(i)&&await Oe.remove(i);let c=we.join(Wt.get(ot.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Oe.pathExists(c)){let u=JSON.parse(await Oe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Oe.writeFile(c,JSON.stringify(u,null,2),"utf8")}$g.deleteConfigFromFile([r]);let l=await Zs(e);return e.restart===!0?(p$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Lue,"dropComponent");async function Mue(e){let t=yn.addSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Ut.trace("adding ssh key",r);let c=we.join(Ia,r+".key"),l=we.join(Ia,"config");if(await Oe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Oe.outputFile(c,n),await Oe.chmod(c,"0600");let u=`#${r}
31
+ `,""):null}catch(_){_.stderr?o[u].npm_error=e$(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return al.info(`finished installModules with response ${o}`),o.warning=t,o}a(tue,"installModules");function e$(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
32
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(e$,"parseNPMStdErr");async function rue(e){al.info(`starting auditModules for request: ${e}`);let t=r$(e);if(t)throw lh(t,t.message,uh.BAD_REQUEST);let{projects:r}=e;await qg(),await t$(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=wa.join(VN,o);n[o]={npm_output:null,npm_error:null};try{let l=await od("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=e$(l.stderr)}}return al.info(`finished auditModules with response ${n}`),n}a(rue,"auditModules");async function qg(){return await od("npm -v"),!0}a(qg,"checkNPMInstalled");async function t$(e){if(!Array.isArray(e)||e.length===0)throw lh(new Error,"projects argument must be an array with at least 1 element",uh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=wa.join(VN,i.toString());if(!await sd.pathExists(o)){t.push(i);continue}let l=wa.join(o,"package.json");await sd.pathExists(l)||r.push(i)}if(t.length>0)throw lh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,uh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw lh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,uh.BAD_REQUEST,void 0,void 0,!0)}a(t$,"checkProjectPaths");function r$(e){let t=Fg.object({projects:Fg.array().min(1).items(Fg.string()).required(),dry_run:Fg.boolean().default(!1)});return Qle.validateBySchema(e,t)}a(r$,"modulesValidator")});var YN=I((NPe,l$)=>{"use strict";var Ss=require("fs-extra"),_h=require("path"),fh=j(),s$=oe(),{PACKAGE_ROOT:nue}=Et(),KN=(H(),D(q)),c$=ce(),sue=It();l$.exports=iue;async function iue(){let e=oue(),t=c$.get(KN.CONFIG_PARAMS.ROOTPATH),r=_h.join(t,"package.json"),n={dependencies:{harperdb:"file:"+nue}},s=_h.join(t,"node_modules");Ss.ensureDirSync(s);let i,o=!0,c=!1;try{i=Ss.readJsonSync(r)}catch(l){if(s$.isEmptyOrZeroLength(e))return;if(l.code!==KN.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!s$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=o$(u);n.dependencies[l]=f+u}if(!o){fh.notify("Installing components"),await a$(r,n,null),await i$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=o$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(Ss.statSync(new URL(u+"/package.json")).mtimeMs>Ss.statSync(r).mtimeMs){c=!0;break}}catch(h){fh.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(fh.notify("Removing component",l),c=!0);c&&(fh.notify("Updating components."),await a$(r,n,i),await i$(t,e))}a(iue,"installComponents");function i$(e,t){return Promise.all(t.map(({name:r})=>{let n=_h.join(e,"node_modules",r),s=_h.join(e,"components",r);if(Ss.existsSync(n)&&Ss.lstatSync(n).isDirectory())return Ss.move(n,s,{overwrite:!0}).then(()=>{Ss.symlink(s,n)})}))}a(i$,"moveModuleToComponents");function oue(){let e=sue.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(oue,"getComponentsConfig");function o$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":_h.extname(e)||Ss.existsSync(e)?"file:":"github:"}a(o$,"getPkgPrefix");async function a$(e,t,r){fh.trace("npm installing components package.json",t),Ss.writeFileSync(e,JSON.stringify(t,null," "));try{await dh().installAllRootModules(c$.get(KN.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ss.writeFileSync(e,JSON.stringify(r,null," ")):Ss.unlinkSync(e),n}}a(a$,"installPackages")});var _$={};ve(_$,{packageDirectory:()=>aue});function aue(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];d$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,u$.join)("cache","webpack")):void 0}).pipe((0,f$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var u$,d$,f$,h$=be(()=>{u$=require("path"),d$=M(require("tar-fs")),f$=require("node:zlib");a(aue,"packageDirectory")});var QN=I(g$=>{"use strict";var Oe=require("fs-extra"),WN=require("fast-glob"),we=require("path"),cue=require("tar-fs"),lue=require("gunzip-maybe"),zN=require("normalize-path"),Rn=Jq(),Ut=j(),ot=(H(),D(q)),zt=ce(),$g=It(),uue=oe(),{PACKAGE_ROOT:due}=Et(),{handleHDBError:xt,hdb_errors:fue}=he(),{basename:_ue}=require("path"),hue=YN(),m$=ce(),{Readable:pue}=require("stream"),{isMainThread:mue}=require("worker_threads"),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:Bt}=fue,E$=rt(),{replicateOperation:Xs}=(fs(),D(ma)),{packageDirectory:Eue}=(h$(),D(_$)),p$=dh(),gue=we.join(due,"application-template"),Sue=zt.get(ot.CONFIG_PARAMS.ROOTPATH),Ia=we.join(Sue,"ssh"),Ao=we.join(Ia,"known_hosts");function Tue(){Ut.trace("getting custom api status");let e={};try{e={port:zt.get(ot.CONFIG_PARAMS.HTTP_PORT),directory:zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw xt(new Error,cl.FUNCTION_STATUS,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,t)}return e}a(Tue,"customFunctionsStatus");function Aue(){Ut.trace("getting custom api endpoints");let e={},t=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT);try{WN.sync(zN(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:WN.sync(zN(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WN.sync(zN(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw xt(new Error,cl.GET_FUNCTIONS,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,r)}return e}a(Aue,"getCustomFunctions");function Rue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=Rn.getDropCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("getting custom api endpoint file content");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=we.join(r,n,s,i+".js");try{return Oe.readFileSync(o,{encoding:"utf8"})}catch(c){throw xt(new Error,cl.GET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,c)}}a(Rue,"getCustomFunction");async function yue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=Rn.setCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("setting custom function file content");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Oe.outputFileSync(we.join(r,n,s,i+".js"),o);let c=await Xs(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw xt(new Error,cl.SET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,c)}}a(yue,"setCustomFunction");async function bue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=Rn.getDropCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("dropping custom function file");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Oe.unlinkSync(we.join(r,n,s,i+".js"));let o=await Xs(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw xt(new Error,cl.DROP_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,o)}}a(bue,"dropCustomFunction");async function Oue(e){e.project&&(e.project=we.parse(e.project).name);let t=Rn.addComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("adding component");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=we.join(r,n);Oe.mkdirSync(s,{recursive:!0}),Oe.copySync(gue,s);let i=await Xs(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw xt(new Error,cl.ADD_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,s)}}a(Oue,"addComponent");async function Nue(e){e.project&&(e.project=we.parse(e.project).name);let t=Rn.dropCustomFunctionProjectValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("dropping custom function project");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=zt.get(ot.CONFIG_PARAMS.APPS);if(!uue.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return $g.updateConfigValue(ot.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=we.join(r,n);Oe.rmSync(i,{recursive:!0});let o=await Xs(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw xt(new Error,cl.DROP_FUNCTION_PROJECT,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,i)}}a(Nue,"dropCustomFunctionProject");async function wue(e){e.project&&(e.project=we.parse(e.project).name);let t=Rn.packageComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ut.trace("packaging component",n);let s;try{s=await Oe.realpath(we.join(r,n))}catch(o){if(o.code!==ot.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Oe.realpath(we.join(zt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ot.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Eue(s,e)).toString("base64");return{project:n,payload:i}}a(wue,"packageComponent");async function Iue(e){e.project?e.project=we.parse(e.project).name:e.package&&(e.project=Cue(e.package));let t=Rn.deployComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Ut.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=we.join(r,n),i="file:"+c,await Oe.emptyDir(c);let S=pue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,A)=>{S.pipe(lue()).pipe(cue.extract(c,{finish:E})).on("error",A)});let g=await Oe.readdir(c);g.length===1&&g[0]==="package"&&(await Oe.copy(we.join(c,"package"),c),await Oe.remove(we.join(c,"package")));let R=we.join(c,"node_modules");o?await p$.runCommand(o,c):Oe.existsSync(R)||await p$.installAllRootModules(!1,c)}else{await $g.addConfig(n,{package:i}),await hue();let S=m$.get(ot.CONFIG_PARAMS.ROOTPATH);c=we.join(S,"node_modules",n)}if(mue)return;let l=new Map;l.isWorker=!0;let u=(ph(),D(hh)),f;u.setErrorReporter(S=>f=S);let d=_ue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;Ut.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let p=await Xs(e);if(e.restart===!0)E$.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await jN().executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}a(Iue,"deployComponent");function Cue(e){if(e.startsWith("git+ssh://"))return we.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return we.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Oe.readFileSync(we.join(e,"package.json"),"utf8"));return we.basename(t)}catch{}return we.basename(e)}a(Cue,"getProjectNameFromPackage");async function Pue(){let e=a(async(s,i)=>{try{let o=await Oe.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=we.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Oe.stat(u),d={name:we.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return Ut.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{name:zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT).split(we.sep).slice(-1).pop(),entries:[]}),n=(ph(),D(hh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Pue,"getComponents");async function Due(e){let t=Rn.getComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let n=$g.getConfigObj()[e.project]||e.project==="harperdb"?we.join(m$.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules"):zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Oe.stat(we.join(n,e.project,e.file));return{message:await Oe.readFile(we.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ot.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${we.join(e.project,e.file)}'`):i}}a(Due,"getComponentFile");async function Lue(e){let t=Rn.setComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=we.join(zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Oe.ensureFile(n),await Oe.outputFile(n,e.payload,r)):await Oe.ensureDir(n);let s=await Xs(e);return s.message="Successfully set component: "+e.file,s}a(Lue,"setComponentFile");async function Mue(e){let t=Rn.dropComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?we.join(r,n):r,i=we.join(zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s),o=we.join(zt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Oe.pathExists(o)&&await Oe.unlink(o),await Oe.pathExists(i)&&await Oe.remove(i);let c=we.join(zt.get(ot.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Oe.pathExists(c)){let u=JSON.parse(await Oe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Oe.writeFile(c,JSON.stringify(u,null,2),"utf8")}$g.deleteConfigFromFile([r]);let l=await Xs(e);return e.restart===!0?(E$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Mue,"dropComponent");async function vue(e){let t=Rn.addSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Ut.trace("adding ssh key",r);let c=we.join(Ia,r+".key"),l=we.join(Ia,"config");if(await Oe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Oe.outputFile(c,n),await Oe.chmod(c,"0600");let u=`#${r}
33
33
  Host ${s}
34
34
  HostName ${i}
35
35
  User git
36
36
  IdentityFile ${c}
37
37
  IdentitiesOnly yes`;await Oe.pathExists(l)?await Oe.appendFile(l,`
38
38
  `+u):await Oe.outputFile(l,u);let f="";if(await Oe.pathExists(Ao)||(await Oe.writeFile(Ao,""),await Oe.chmod(Ao,"0600")),i=="github.com"&&!(await Oe.readFile(Ao,"utf8")).includes("github.com"))try{let S=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of S)Oe.appendFile(Ao,"github.com "+g+`
39
- `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Oe.appendFile(Ao,o);let d=await Zs(e);return d.message=`Added ssh key: ${r}${f}`,d}a(Mue,"addSSHKey");async function vue(e){let t=yn.updateSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n}=e;Ut.trace("updating ssh key",r);let s=we.join(Ia,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await Zs(e);return i.message=`Updated ssh key: ${r}`,i}a(vue,"updateSSHKey");async function Uue(e){let t=yn.deleteSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r}=e;Ut.trace("deleting ssh key",r);let n=we.join(Ia,r+".key"),s=we.join(Ia,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await Zs(e);return c.message=`Deleted ssh key: ${r}`,c}a(Uue,"deleteSSHKey");async function xue(e){let t=[];return await Oe.pathExists(Ia)&&(await Oe.readdir(Ia)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(xue,"listSSHKeys");async function Bue(e){let t=yn.setSSHKnownHostsValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(Ao,r);let n=await Zs(e);return n.message="Known hosts successfully set",n}a(Bue,"setSSHKnownHosts");async function Hue(e){return await Oe.pathExists(Ao)?{known_hosts:await Oe.readFile(Ao,"utf8")}:{known_hosts:null}}a(Hue,"getSSHKnownHosts");Object.assign(m$,{customFunctionsStatus:Sue,getCustomFunctions:Tue,getCustomFunction:Aue,setCustomFunction:Rue,dropCustomFunction:yue,addComponent:bue,dropCustomFunctionProject:Oue,packageComponent:Nue,deployComponent:wue,getComponents:Cue,getComponentFile:Pue,setComponentFile:Due,dropComponent:Lue,addSSHKey:Mue,updateSSHKey:vue,deleteSSHKey:Uue,listSSHKeys:xue,setSSHKnownHosts:Bue,getSSHKnownHosts:Hue})});var jN=I((PPe,g$)=>{"use strict";var As=require("joi"),E$=lt();g$.exports={readTransactionLogValidator:kue,deleteTransactionLogsBeforeValidator:Fue};function kue(e){let t=As.object({schema:As.string(),database:As.string(),table:As.string().required(),from:As.date().timestamp(),to:As.date().timestamp(),limit:As.number().min(1)});return E$.validateBySchema(e,t)}a(kue,"readTransactionLogValidator");function Fue(e){let t=As.object({schema:As.string(),database:As.string(),table:As.string().required(),timestamp:As.date().timestamp().required()});return E$.validateBySchema(e,t)}a(Fue,"deleteTransactionLogsBeforeValidator")});var Yg=I((LPe,b$)=>{"use strict";var JN=(H(),P($)),mh=hr(),S$=ae(),T$=le(),A$=ro(),R$=Q(),{handleHDBError:Vg,hdb_errors:Gue}=he(),{HTTP_STATUS_CODES:Kg}=Gue,{readTransactionLogValidator:que,deleteTransactionLogsBeforeValidator:$ue}=jN(),y$=kn(),Vue="Logs successfully deleted from transaction log.",Kue="All logs successfully deleted from transaction log.";b$.exports={readTransactionLog:Yue,deleteTransactionLogsBefore:zue};async function Yue(e){let t=que(e);if(t)throw Vg(t,t.message,Kg.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=S$.checkSchemaTableExist(e.database,e.table);if(r)throw Vg(new Error,r,Kg.NOT_FOUND,void 0,void 0,!0);return T$.get(JN.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Wue(e):(R$.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)),y$.readAuditLog(e))}a(Yue,"readTransactionLog");async function*Wue(e){let t=A$.createNatsTableStreamName(e.database,e.table),r=await mh.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===JN.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Wue,"readTransactionLogNats");async function zue(e){let t=$ue(e);if(t)throw Vg(t,t.message,Kg.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!T$.get(JN.CONFIG_PARAMS.CLUSTERING_ENABLED))return R$.info("Delete transaction logs called for Plexus"),y$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=S$.checkSchemaTableExist(r,n);if(i)throw Vg(new Error,i,Kg.NOT_FOUND,void 0,void 0,!0);let o=A$.createNatsTableStreamName(r,n),{jsm:c}=await mh.getNATSReferences(),l=await mh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=Vue,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Kue):d=(await mh.viewStream(o,parseInt(s),1))[0].nats_sequence,await mh.purgeTableStream(r,n,{seq:d}),f}a(zue,"deleteTransactionLogsBefore")});var N$=I((vPe,O$)=>{"use strict";var XN=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};O$.exports=XN});var I$=I((xPe,w$)=>{"use strict";var ZN=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};w$.exports=ZN});var tw=I((HPe,P$)=>{"use strict";var C$=N$(),Que=I$(),{HDB_ERROR_MSGS:jue}=Pn(),ew=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=jue.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 C$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Que(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new C$(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};P$.exports=ew});var jg=I((qPe,W$)=>{"use strict";var rw=pn(),Wg=Vr(),Rs=ZE(),Sh=no(),nw=Tc(),Jue=RO(),Xue=qk(),Th=qn(),zg=a_(),mr=Q(),Zue=wO(),ede=dg(),tde=XO(),rde=_g(),nde=tN(),sde=rN(),ide=iN(),ode=aN(),sw=gg(),Ro=ae(),ade=AG(),iw=TN(),M$=rd(),en=(H(),P($)),v$=Uq(),cde=$u(),U$=(Tu(),P(S_)),x$=(Hg(),P(ah)),B$=wt(),ir=zN(),lde=require("alasql"),H$=Yg(),k$=dh(),ad=js(),F$=(Jc(),P(jc)),G$=tw(),{handleHDBError:bn,hdb_errors:q$}=he(),{addNodeBack:FPe,removeNodeBack:GPe}=(Jc(),P(jc)),{HDB_ERROR_MSGS:Mr,HTTP_STATUS_CODES:Eh}=q$,X=new Map,$$="delete",Ca="insert",yo="read",ul="update",gh="describe",D$=Sh.describeSchema.name,L$=Sh.describeTable.name,V$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},ude={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},dde="catchup",fde="handleGetJob",_de="handleGetJobsByStartDate",Qg={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},hde=[Rs.createTable.name,Rs.createAttribute.name,Rs.dropTable.name,Rs.dropAttribute.name],K$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},ne=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};X.set(rw.insert.name,new ne(!1,[Ca]));X.set(rw.update.name,new ne(!1,[ul]));X.set(rw.upsert.name,new ne(!1,[Ca,ul]));X.set(Wg.searchByConditions.name,new ne(!1,[yo]));X.set(Wg.searchByHash.name,new ne(!1,[yo]));X.set(Wg.searchByValue.name,new ne(!1,[yo]));X.set(Wg.search.name,new ne(!1,[yo]));X.set(Rs.createSchema.name,new ne(!0,[]));X.set(Rs.createTable.name,new ne(!0,[]));X.set(Rs.createAttribute.name,new ne(!1,[Ca]));X.set(Rs.dropSchema.name,new ne(!0,[]));X.set(Rs.dropTable.name,new ne(!0,[]));X.set(Rs.dropAttribute.name,new ne(!0,[]));X.set(Sh.describeSchema.name,new ne(!1,[yo]));X.set(Sh.describeTable.name,new ne(!1,[yo]));X.set(nw.deleteRecord.name,new ne(!1,[$$]));X.set(Th.addUser.name,new ne(!0,[]));X.set(Th.alterUser.name,new ne(!0,[]));X.set(Th.dropUser.name,new ne(!0,[]));X.set(Th.listUsersExternal.name,new ne(!0,[]));X.set(zg.listRoles.name,new ne(!0,[]));X.set(zg.addRole.name,new ne(!0,[]));X.set(zg.alterRole.name,new ne(!0,[]));X.set(zg.dropRole.name,new ne(!0,[]));X.set(Zue.name,new ne(!0,[]));X.set(ede.name,new ne(!0,[]));X.set(tde.name,new ne(!0,[]));X.set(rde.name,new ne(!0,[]));X.set(nde.name,new ne(!0,[]));X.set(sde.name,new ne(!0,[]));X.set(sw.setRoutes.name,new ne(!0,[]));X.set(sw.getRoutes.name,new ne(!0,[]));X.set(sw.deleteRoutes.name,new ne(!0,[]));X.set(B$.setConfiguration.name,new ne(!0,[]));X.set(ide.clusterStatus.name,new ne(!0,[]));X.set(ode.name,new ne(!0,[]));X.set(iw.getFingerprint.name,new ne(!0,[]));X.set(iw.setLicense.name,new ne(!0,[]));X.set(nw.deleteFilesBefore.name,new ne(!0,[]));X.set(nw.deleteAuditLogsBefore.name,new ne(!0,[]));X.set(M$.restart.name,new ne(!0,[]));X.set(M$.restartService.name,new ne(!0,[]));X.set(Jue.name,new ne(!0,[]));X.set(Xue.name,new ne(!0,[yo]));X.set(cde.systemInformation.name,new ne(!0,[]));X.set(B$.getConfiguration.name,new ne(!0,[]));X.set(H$.readTransactionLog.name,new ne(!0,[]));X.set(H$.deleteTransactionLogsBefore.name,new ne(!0,[]));X.set(k$.installModules.name,new ne(!0,[]));X.set(k$.auditModules.name,new ne(!0,[]));X.set(ad.createCsr.name,new ne(!0,[]));X.set(ad.signCertificate.name,new ne(!0,[]));X.set(ad.listCertificates.name,new ne(!0,[]));X.set(ad.addCertificate.name,new ne(!0,[]));X.set(ad.removeCertificate.name,new ne(!0,[]));X.set(ad.getKey.name,new ne(!0,[]));X.set(F$.addNodeBack.name,new ne(!0,[]));X.set(F$.removeNodeBack.name,new ne(!0,[]));X.set(U$.createTokens.name,new ne(!1,[]));X.set(U$.refreshOperationToken.name,new ne(!1,[]));X.set(x$.login.name,new ne(!1,[]));X.set(x$.logout.name,new ne(!1,[]));X.set(ir.customFunctionsStatus.name,new ne(!0,[]));X.set(ir.getCustomFunctions.name,new ne(!0,[]));X.set(ir.getComponents.name,new ne(!0,[]));X.set(ir.getComponentFile.name,new ne(!0,[]));X.set(ir.setComponentFile.name,new ne(!0,[]));X.set(ir.dropComponent.name,new ne(!0,[]));X.set(ir.getCustomFunction.name,new ne(!0,[]));X.set(ir.setCustomFunction.name,new ne(!0,[]));X.set(ir.dropCustomFunction.name,new ne(!0,[]));X.set(ir.addComponent.name,new ne(!0,[]));X.set(ir.dropCustomFunctionProject.name,new ne(!0,[]));X.set(ir.packageComponent.name,new ne(!0,[]));X.set(ir.deployComponent.name,new ne(!0,[]));X.set(ir.addSSHKey.name,new ne(!0,[]));X.set(ir.updateSSHKey.name,new ne(!0,[]));X.set(ir.deleteSSHKey.name,new ne(!0,[]));X.set(ir.listSSHKeys.name,new ne(!0,[]));X.set(ir.setSSHKnownHosts.name,new ne(!0,[]));X.set(ir.getSSHKnownHosts.name,new ne(!0,[]));X.set(iw.getRegistrationInfo.name,new ne(!1,[]));X.set(Th.userInfo.name,new ne(!1,[]));X.set(Sh.describeAll.name,new ne(!1,[]));X.set(fde,new ne(!1,[]));X.set(_de,new ne(!0,[]));X.set(dde,new ne(!0,[]));X.set(Qg.CSV_DATA_LOAD,new ne(!1,[Ca,ul]));X.set(Qg.CSV_URL_LOAD,new ne(!1,[Ca,ul]));X.set(Qg.CSV_FILE_LOAD,new ne(!1,[Ca,ul]));X.set(Qg.IMPORT_FROM_S3,new ne(!1,[Ca,ul]));X.set(K$.EXPORT_TO_S3,new ne(!0,[]));X.set(K$.EXPORT_LOCAL,new ne(!0,[]));X.set(en.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[$$]));X.set(en.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[yo]));X.set(en.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[Ca]));X.set(en.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[ul]));W$.exports={verifyPerms:mde,verifyPermsAst:pde,verifyBulkLoadAttributePerms:gde};function pde(e,t,r){if(Ro.isEmptyOrZeroLength(e))throw mr.info("verify_perms_ast has an empty user parameter"),bn(new Error);if(Ro.isEmptyOrZeroLength(t))throw mr.info("verify_perms_ast has an empty user parameter"),bn(new Error);if(Ro.isEmptyOrZeroLength(r))throw mr.info("verify_perms_ast has a null operation parameter"),bn(new Error);try{let n=new G$,s=new ade(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw mr.info("No schemas defined in verifyPermsAst(), will not continue."),bn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&V$[r])throw bn(new Error,Mr.DROP_SYSTEM,Eh.FORBIDDEN);if(c&&!l)return null;let u=v$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof lde.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=Y$(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let p=s.getAttributesBySchemaTableName(h,d[_]),S=aw(t.role.permission,h,d[_]);ow(p,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw bn(n)}}a(pde,"verifyPermsAst");function mde(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw mr.info("null required parameter in verifyPerms"),bn(new Error,Mr.DEFAULT_INVALID_REQUEST,Eh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new G$;if(Ro.isEmptyOrZeroLength(e.hdb_user?.role)||Ro.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return mr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Mr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(en.SYSTEM_SCHEMA_NAME)||s===en.SYSTEM_SCHEMA_NAME;if(l&&f&&ude[e.operation]&&(i===en.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===en.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===en.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&V$[r])throw bn(new Error,Mr.DROP_SYSTEM,Eh.FORBIDDEN);if(l&&!f||u===!0&&(r===Rs.createSchema.name||r===Rs.dropSchema.name))return null;if(hde.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=v$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===D$||r===L$)&&!d.super_user){if(s===en.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Mr.SCHEMA_PERM_ERROR(s));if(r===D$&&(!d[s]||!d[s][gh]))return c.handleInvalidItem(Mr.SCHEMA_NOT_FOUND(s));if(r===L$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][gh]))return c.handleInvalidItem(Mr.TABLE_NOT_FOUND(s,i))}let h=Y$(e.hdb_user,r,o,c,n);if(h)return h;if(X.get(r)&&X.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&en.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[en.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[en.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=S)}let _=Ede(e),p=aw(e.hdb_user?.role?.permission,s,i);return ow(_,p,r,i,s,c,n),c.getPermsResponse()}a(mde,"verifyPerms");function Y$(e,t,r,n,s){if(Ro.arrayHasEmptyValues([e,t,r]))throw mr.info("hasPermissions has an invalid parameter"),bn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||X.get(t).requires_su))return null;if(!X.get(t))throw mr.info(`operation ${t} not found.`),bn(new Error,Mr.OP_NOT_FOUND(t),Eh.BAD_REQUEST);if(X.get(t)&&X.get(t).requires_su)return mr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Mr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][gh]===!1){n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[gh]===!1)n.addInvalidItem(Mr.TABLE_NOT_FOUND(l,f));else try{let h=[],_=X.get(t).perms;!Ro.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let p=0;p<_.length;p++){let S=_[p],g=d[S];(g==null||g===!1)&&(mr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Mr.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw mr.error(_),mr.error(h),bn(q$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(Y$,"hasPermissions");function ow(e,t,r,n,s,i,o){if(!e||!t)throw mr.info("no attributes specified in checkAttributePerms."),bn(new Error);let c=X.get(r).perms;if(!c||c==="")throw mr.info(`no permissions found for ${r} in checkAttributePerms().`),bn(new Error);if(Ro.isEmptyOrZeroLength(t))return mr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[gh]===!1){i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(en.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==yo)throw bn(new Error,Mr.SYSTEM_TIMESTAMP_PERMS_ERR,Eh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(ow,"checkAttributePerms");function Ede(e){let t=new Set;try{if(e.action)return t;if(e.operation===en.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){mr.info(r)}return t}a(Ede,"getRecordAttributes");function aw(e,t,r){let n=new Map;if(Ro.isEmpty(e))return mr.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{mr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(aw,"getAttributePermissions");function gde(e,t,r,n,s,i,o){let c=new Set(i),l=aw(e,n,s);ow(c,l,t,s,n,o,r)}a(gde,"verifyBulkLoadAttributePerms")});var Xg=I((VPe,X$)=>{"use strict";X$.exports={evaluateSQL:Dde,processAST:J$,convertSQLToAST:j$,checkASTPermissions:Q$};var Sde=pn(),z$=require("util"),Tde=z$.callbackify(Sde.insert),Ade=Vr().search,Rde=LB().update,yde=z$.callbackify(Rde),bde=vB().convertDelete,Pa=require("alasql"),Ode=jg(),Jg=Q(),Nde=hm(),wde=ae(),Ah=(H(),P($)),{hdb_errors:Ide,handleHDBError:cw}=he(),{HTTP_STATUS_CODES:lw}=Ide;Nde(Pa);var Cde=403,Pde="There was a problem performing this insert. Please check the logs and try again.",uw=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Dde(e,t){let r=e.parsed_sql_object;if(!r){r=j$(e.sql);let n,s=r.ast.statements[0];if(s instanceof Pa.yy.Insert?n=s.into.databaseid:s instanceof Pa.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Pa.yy.Update||s instanceof Pa.yy.Delete?n=s.table.databaseid:Jg.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Pa.yy.Select)&&wde.isEmptyOrZeroLength(n))return t("No schema specified",null)}J$(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Dde,"evaluateSQL");function Q$(e,t){let r;try{r=Ode.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(Q$,"checkASTPermissions");function j$(e){let t=new uw;if(!e)throw cw(new Error,"The 'sql' parameter is missing from the request body",lw.BAD_REQUEST);try{let r=e.trim(),n=Pa.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
40
- `);throw n[1]?cw(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,lw.BAD_REQUEST):cw(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",lw.BAD_REQUEST)}return t}a(j$,"convertSQLToAST");function J$(e,t,r){try{let n=Lde;if(!e.bypass_auth&&!t.permissions_checked){let i=Q$(e,t);if(i&&i.length>0)return r(Cde,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ah.VALID_SQL_OPS_ENUM.SELECT:n=Ade,s=t.ast.statements[0];break;case Ah.VALID_SQL_OPS_ENUM.INSERT:n=Mde;break;case Ah.VALID_SQL_OPS_ENUM.UPDATE:n=yde;break;case Ah.VALID_SQL_OPS_ENUM.DELETE:n=bde;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(J$,"processAST");function Lde(e,t){Jg.info(e),t("unknown sql statement")}a(Lde,"nullFunction");function Mde({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=vde(i,e.values)}catch(o){return r(o)}Tde(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Jg.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Mde,"convertInsert");function vde(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]]=Pa.compile(`SELECT ${s.toString()} AS [${Ah.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Jg.error(r),new Error(Pde)}}a(vde,"createDataObjects")});var mw=I((zPe,rV)=>{var rS=require("clone"),nS=lt(),Ude=ae(),eS=(H(),P($)),YPe=Q(),dw=require("fs"),_w=require("joi"),{string:tS}=_w.types(),{hdb_errors:xde,handleHDBError:Zg}=he(),{HDB_ERROR_MSGS:WPe,HTTP_STATUS_CODES:fw}=xde,{common_validators:cd}=Ti(),Z$=" is required",Bde=["insert","update","upsert"],hw={database:{presence:!1,format:cd.schema_format,length:cd.schema_length},schema:{presence:!1,format:cd.schema_format,length:cd.schema_length},table:{presence:!0,format:cd.schema_format,length:cd.schema_length},action:{inclusion:{within:Bde,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Hde={schema:tS.required(),table:tS.required(),action:tS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:kde,AWS_SECRET:Fde,AWS_BUCKET:Gde,AWS_FILE_KEY:qde,REGION:$de}=eS.S3_BUCKET_AUTH_KEYS,Vde={s3:{presence:!0},[`s3.${kde}`]:{presence:!0,type:"String"},[`s3.${Fde}`]:{presence:!0,type:"String"},[`s3.${Gde}`]:{presence:!0,type:"String"},[`s3.${qde}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${$de}`]:{presence:!0,type:"String"}},eV=rS(hw);eV.data.presence={message:Z$};var tV=rS(hw);tV.file_path.presence={message:Z$};var Kde=Object.assign(rS(hw),Vde),pw=rS(Hde);pw.csv_url=tS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();pw.passthrough_headers=_w.object();function Yde(e){let t=nS.validateObject(e,eV);return sS(e,t)}a(Yde,"dataObject");function Wde(e){let t=nS.validateBySchema(e,_w.object(pw));return sS(e,t)}a(Wde,"urlObject");function zde(e){let t=nS.validateObject(e,tV);return sS(e,t)}a(zde,"fileObject");function Qde(e){let t=nS.validateObject(e,Kde);return sS(e,t)}a(Qde,"s3FileObject");function sS(e,t){if(!t){let r=Ude.checkGlobalSchemaTable(e.schema,e.table);if(r)return Zg(new Error,r,fw.BAD_REQUEST);if(e.operation===eS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{dw.accessSync(e.file_path,dw.constants.R_OK|dw.constants.F_OK)}catch(n){return n.code===eS.NODE_ERROR_CODES.ENOENT?Zg(n,`No such file or directory ${n.path}`,fw.BAD_REQUEST):n.code===eS.NODE_ERROR_CODES.EACCES?Zg(n,`Permission denied ${n.path}`,fw.BAD_REQUEST):Zg(n)}}return t}a(sS,"postValidateChecks");rV.exports={dataObject:Yde,urlObject:Wde,fileObject:zde,s3FileObject:Qde}});var Ew=I((jPe,nV)=>{"use strict";var Rh=Q(),iS=(H(),P($));async function jde(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===iS.OPERATIONS_ENUM.INSERT||t.operation===iS.OPERATIONS_ENUM.UPDATE||t.operation===iS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rh.info(i.message),i):i.http_resp_msg?(Rh.error(`Error calling operation: ${e.name}`),Rh.error(i.http_resp_msg),i):(Rh.error(`Error calling operation: ${e.name}`),Rh.error(i),i)}}a(jde,"callOperationFunctionAsAwait");nV.exports={callOperationFunctionAsAwait:jde}});var gw=I((XPe,iV)=>{"use strict";var{S3:Jde,GetObjectCommand:Xde}=require("@aws-sdk/client-s3");iV.exports={getFileStreamFromS3:Zde,getS3AuthObj:sV};async function Zde(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await sV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Xde(r))).Body}a(Zde,"getFileStreamFromS3");function sV(e,t,r){return new Jde({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(sV,"getS3AuthObj")});var aV=I((eDe,oV)=>{"use strict";var Sw=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},Tw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};oV.exports={BulkLoadFileObject:Sw,BulkLoadDataObject:Tw}});var lV=I((rDe,cV)=>{"use strict";var Aw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};cV.exports=Aw});var ww=I((cDe,NV)=>{"use strict";var oS=pn(),cS=mw(),efe=require("needle"),ei=(H(),P($)),sDe=Ot(),ld=ae(),{handleHDBError:Ht,hdb_errors:gV}=he(),{HTTP_STATUS_CODES:vr,HDB_ERROR_MSGS:Er,CHECK_LOGS_WRAPPER:fl}=gV,ud=Q(),Rw=require("papaparse");ld.promisifyPapaParse();var ti=require("fs-extra"),tfe=require("path"),{chain:uV}=require("stream-chain"),dV=require("stream-json/streamers/StreamArray"),fV=require("stream-json/utils/Batch"),_V=require("stream-chain/utils/comp"),{finished:hV}=require("stream"),rfe=le(),SV=Ew(),nfe=gw(),{BulkLoadFileObject:bw,BulkLoadDataObject:sfe}=aV(),Ow=tw(),{verifyBulkLoadAttributePerms:TV}=jg(),iDe=lV(),oDe=hr(),aDe=ro(),{databases:ife}=(Me(),P(st)),{coerceType:ofe}=(uf(),P(Iw)),pV="No records parsed from csv file.",dl=`${rfe.get("HDB_ROOT")}/tmp`,{schema_regex:afe}=Ti(),mV=1024*1024*2,EV=5e3,cfe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};NV.exports={csvDataLoad:lfe,csvURLLoad:ufe,csvFileLoad:dfe,importFromS3:ffe};async function lfe(e,t){let r=cS.dataObject(e);if(r)throw Ht(r,r.message,vr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=yV(e.schema,e.table),i=Rw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:yw.bind(null,s),dynamicTyping:!1}),o=new Ow;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&TV(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Ht(new Error,c,vr.BAD_REQUEST,void 0,void 0,!0);let l=new sfe(e.action,e.schema,e.table,i.data);return n=await SV.callOperationFunctionAsAwait(bV,l,null),n.message===pV?pV:OV(n.records,n.number_written)}catch(s){throw _l(s)}}a(lfe,"csvDataLoad");async function ufe(e){let t=cS.urlObject(e);if(t)throw Ht(t,t.message,vr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${dl}/${r}`;try{await _fe(e,r)}catch(s){throw ud.error(Er.DOWNLOAD_FILE_ERR(r)+" - "+s),Ht(s,fl(Er.DOWNLOAD_FILE_ERR(r)))}try{let s=new bw(this.job_operation_function.name,e.action,e.schema,e.table,n,ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await Nw(s);return await aS(n),i}catch(s){throw await aS(n),_l(s)}}a(ufe,"csvURLLoad");async function dfe(e){let t=cS.fileObject(e);if(t)throw Ht(t,t.message,vr.BAD_REQUEST,void 0,void 0,!0);let r=new bw(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await Nw(r)}catch(n){throw _l(n)}}a(dfe,"csvFileLoad");async function ffe(e){let t=cS.s3FileObject(e);if(t)throw Ht(t,t.message,vr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=tfe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${dl}/${s}`;let i=new bw(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await hfe(s,e);let o=await Nw(i);return await aS(r),o}catch(n){throw await aS(r),_l(n)}}a(ffe,"importFromS3");async function _fe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await efe("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 Ht(n,s,n.statusCode,ei.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}mfe(r,e.csv_url),await pfe(t,r.raw)}a(_fe,"downloadCSVFile");async function hfe(e,t){try{let r=`${dl}/${e}`;await ti.mkdirp(dl),await ti.writeFile(`${dl}/${e}`,"",{flag:"a+"});let n=await ti.createWriteStream(r),s=await nfe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){ud.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ud.error(Er.S3_DOWNLOAD_ERR+" - "+r),Ht(r,fl(Er.S3_DOWNLOAD_ERR))}}a(hfe,"downloadFileFromS3");async function pfe(e,t){try{await ti.mkdirp(dl),await ti.writeFile(`${dl}/${e}`,t)}catch(r){throw ud.error(Er.WRITE_TEMP_FILE_ERR),Ht(r,fl(Er.DEFAULT_BULK_LOAD_ERR))}}a(pfe,"writeFileToTempFolder");async function aS(e){if(e)try{await ti.access(e),await ti.unlink(e)}catch{ud.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(aS,"deleteTempFile");function mfe(e,t){if(e.statusCode!==gV.HTTP_STATUS_CODES.OK)throw Ht(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,vr.BAD_REQUEST);if(!cfe[e.headers["content-type"]])throw Ht(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,vr.BAD_REQUEST);if(!e.raw)throw Ht(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,vr.BAD_REQUEST)}a(mfe,"validateURLResponse");async function Nw(e){try{let t;switch(e.file_type){case ei.VALID_S3_FILE_TYPES.CSV:t=await Efe(e);break;case ei.VALID_S3_FILE_TYPES.JSON:t=await gfe(e);break;default:throw Ht(new Error,Er.DEFAULT_BULK_LOAD_ERR,vr.BAD_REQUEST,ei.LOG_LEVELS.ERROR,Er.INVALID_FILE_EXT_ERR(e))}return OV(t.records,t.number_written)}catch(t){throw _l(t)}}a(Nw,"fileLoad");async function AV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await oS.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&TV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Ht(c);r(l)}}a(AV,"validateChunk");async function RV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ld.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ld.isEmpty(c)&&!ld.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await SV.callOperationFunctionAsAwait(bV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Ht(c,fl(Er.INSERT_CSV_ERR),vr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Er.INSERT_CSV_ERR+" - "+c);r(l)}}a(RV,"insertChunk");async function Efe(e){let t={records:0,number_written:0},r=yV(e.schema,e.table);try{let n=new Ow,s=ti.createReadStream(e.file_path,{highWaterMark:mV});s.setEncoding("utf8"),await Rw.parsePromise(s,AV.bind(null,e,n),yw.bind(null,r));let i=n.getPermsResponse();if(i)throw Ht(new Error,i,vr.BAD_REQUEST);return s=ti.createReadStream(e.file_path,{highWaterMark:mV}),s.setEncoding("utf8"),await Rw.parsePromise(s,RV.bind(null,e,t),yw.bind(null,r)),s.destroy(),t}catch(n){throw Ht(n,fl(Er.PAPA_PARSE_ERR),vr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Er.PAPA_PARSE_ERR+n)}}a(Efe,"callPapaParse");function yV(e,t){let r=ife[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>ofe(i,s));return n}a(yV,"createTransformMap");function yw(e,t,r){let n=e.get(r);return n?n(t):ld.autoCast(t)}a(yw,"typeFunction");async function gfe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Ow,s=uV([ti.createReadStream(e.file_path,{encoding:"utf-8"}),dV.withParser(),c=>c.value,new fV({batchSize:EV}),_V(async c=>{await AV(e,n,r,c)})]);await new Promise((c,l)=>{hV(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Ht(new Error,i,vr.BAD_REQUEST);let o=uV([ti.createReadStream(e.file_path,{encoding:"utf-8"}),dV.withParser(),c=>c.value,new fV({batchSize:EV}),_V(async c=>{await RV(e,t,r,c)})]);return await new Promise((c,l)=>{hV(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Ht(n,fl(Er.INSERT_JSON_ERR),vr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Er.INSERT_JSON_ERR+n)}}a(gfe,"insertJson");async function bV(e){let t={};try{e.data&&e.data.length>0&&Sfe(e.data[0])?t=await Tfe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ud.info(t.message))}catch(r){throw _l(r)}return t}a(bV,"callBulkFileLoad");function Sfe(e){let t=Object.keys(e);for(let r of t)if(!afe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Sfe,"validateColumnNames");async function Tfe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=oS.insert;break;case"update":i=oS.update;break;case"upsert":i=oS.upsert;break;default:throw Ht(new Error,Er.INVALID_ACTION_PARAM_ERR(n),vr.BAD_REQUEST,ei.LOG_LEVELS.ERROR,Er.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=ld.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw _l(o)}}a(Tfe,"bulkFileLoad");function OV(e,t){return`successfully loaded ${t} of ${e} records`}a(OV,"buildResponseMsg");function _l(e){return Ht(e,fl(Er.DEFAULT_BULK_LOAD_ERR),vr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Er.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(_l,"buildTopLevelErrMsg")});var Dw=I((uDe,vV)=>{"use strict";var Pw=Vr(),Afe=gw(),{AsyncParser:Rfe}=require("json2csv"),lS=require("stream"),Zn=ae(),Cw=require("fs-extra"),yfe=require("path"),ys=Q(),{promisify:CV}=require("util"),yh=ae(),{handleHDBError:or,hdb_errors:bfe}=he(),{HDB_ERROR_MSGS:On,HTTP_STATUS_CODES:ar}=bfe,{streamAsJSON:Ofe}=(wA(),P(DD)),{Upload:Nfe}=require("@aws-sdk/lib-storage"),{toCsvStream:wfe}=(ji(),P(kD)),wV=["search_by_value","search_by_hash","sql","search_by_conditions"],IV=["json","csv"],PV="json",DV="csv",Ife="Successfully exported JSON locally.",Cfe="Successfully exported CSV locally.",Pfe=1e3,Dfe=Pw.searchByHash,Lfe=Pw.searchByValue,Mfe=CV(lS.finished);vV.exports={export_to_s3:Bfe,export_local:vfe};async function vfe(e){ys.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=LV(e);if(!Zn.isEmpty(t))throw ys.error(t),or(new Error,t,ar.BAD_REQUEST,void 0,void 0,!0);if(Zn.isEmpty(e.path))throw ys.error(On.MISSING_VALUE("path")),or(new Error,On.MISSING_VALUE("path"),ar.BAD_REQUEST,void 0,void 0,!0);let r=(Zn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(yfe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Zn.buildFolderPath(e.path,r);await Ufe(e.path);let s=await MV(e);return await xfe(n,e.format,s)}a(vfe,"export_local");async function Ufe(e){if(ys.trace("in confirmPath"),Zn.isEmptyOrZeroLength(e))throw or(new Error,`Invalid path: ${e}`,ar.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Cw.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,ys.error(n),or(new Error,n,ar.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ys.error(r),or(new Error,r,ar.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Ufe,"confirmPath");async function xfe(e,t,r){if(ys.trace("in saveToLocal"),yh.isEmptyOrZeroLength(e))throw or(new Error,On.INVALID_VALUE("file_path"),ar.BAD_REQUEST,void 0,void 0,!0);if(yh.isEmptyOrZeroLength(t))throw or(new Error,On.INVALID_VALUE("Source format"),ar.BAD_REQUEST,void 0,void 0,!0);if(yh.isEmpty(r))throw or(new Error,On.NOT_FOUND("Data"),ar.BAD_REQUEST,void 0,void 0,!0);if(t===PV){let n=Cw.createWriteStream(e);return Ofe(r).pipe(n),await Mfe(n),{message:Ife,path:e}}else if(t===DV){let n=Cw.createWriteStream(e),s=lS.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new Rfe(i,c).fromInput(s).toOutput(n).promise(!1),{message:Cfe,path:e}}throw or(new Error,On.INVALID_VALUE("format"),ar.BAD_REQUEST)}a(xfe,"saveToLocal");async function Bfe(e){if(!e.s3||Object.keys(e.s3).length===0)throw or(new Error,On.MISSING_VALUE("S3 object"),ar.BAD_REQUEST);if(Zn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw or(new Error,On.MISSING_VALUE("aws_access_key_id"),ar.BAD_REQUEST);if(Zn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw or(new Error,On.MISSING_VALUE("aws_secret_access_key"),ar.BAD_REQUEST);if(Zn.isEmptyOrZeroLength(e.s3.bucket))throw or(new Error,On.MISSING_VALUE("bucket"),ar.BAD_REQUEST);if(Zn.isEmptyOrZeroLength(e.s3.key))throw or(new Error,On.MISSING_VALUE("key"),ar.BAD_REQUEST);if(Zn.isEmptyOrZeroLength(e.s3.region))throw or(new Error,On.MISSING_VALUE("region"),ar.BAD_REQUEST);let t=LV(e);if(!Zn.isEmpty(t))throw or(new Error,t,ar.BAD_REQUEST);ys.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await MV(e)}catch(l){throw ys.error(l),l}let n,s=await Afe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new lS.PassThrough;if(e.format===DV){i=e.s3.key+".csv";let l=wfe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===PV){i=e.s3.key+".json";let l=new lS.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%Pfe===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw or(new Error,On.INVALID_VALUE("format"),ar.BAD_REQUEST);return new Nfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Bfe,"export_to_s3");function LV(e){if(ys.trace("in exportCoreValidation"),Zn.isEmpty(e.format))return"format missing";if(IV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${IV.join(", ")}`;let t=e.search_operation.operation;if(Zn.isEmpty(t))return"search_operation.operation missing";if(wV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${wV.join(", ")}`}a(LV,"exportCoreValidation");async function MV(e){ys.trace("in getRecords");let t,r;if(yh.isEmpty(e.search_operation)||yh.isEmptyOrZeroLength(e.search_operation.operation))throw or(new Error,On.INVALID_VALUE("Search operation"),ar.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Lfe;break;case"search_by_hash":t=Dfe;break;case"search_by_conditions":t=Pw.searchByConditions;break;case"sql":{let n=Xg();t=CV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ys.error(r),or(new Error,r,ar.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(MV,"getRecords")});var xV=I((fDe,UV)=>{"use strict";var Lw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};UV.exports=Lw});var kV=I((hDe,HV)=>{"use strict";var Hfe=(H(),P($)),BV=require("moment"),kfe=require("uuid").v4,Mw=class{static{a(this,"JobObject")}constructor(){this.id=kfe(),this.type=void 0,this.start_datetime=BV().valueOf(),this.created_datetime=BV().valueOf(),this.end_datetime=void 0,this.status=Hfe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};HV.exports=Mw});var vw=I((mDe,WV)=>{"use strict";var Ffe=require("uuid").v4,VV=pn(),KV=Vr(),Gfe=$s(),qfe=uu(),$fe=xV(),Rt=(H(),P($)),Vfe=kV(),Kfe=uE(),ri=Q(),Yfe=rf(),dd=ae(),{promisify:Wfe}=require("util"),hl=require("moment"),zfe=Xg(),uS=mw(),FV=NR(),{deleteTransactionLogsBeforeValidator:Qfe}=jN(),{handleHDBError:GV,hdb_errors:jfe,ClientError:Jfe}=he(),{HTTP_STATUS_CODES:qV}=jfe,$V=KV.searchByValue,Xfe=KV.searchByHash,Zfe=VV.insert,e_e=Wfe(zfe.evaluateSQL),t_e=VV.update;WV.exports={addJob:s_e,updateJob:o_e,handleGetJob:r_e,handleGetJobsByStartDate:n_e,getJobById:YV};async function r_e(e){if(e.id===void 0)throw new Jfe("'id' is required");let t=await YV(e.id);return dd.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(r_e,"handleGetJob");async function n_e(e){try{let t=await i_e(e);if(ri.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=hl(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=hl(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 ri.error(r),new Error(r)}}a(n_e,"handleGetJobsByStartDate");async function s_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||dd.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return ri.info(f),t.error=f,t}if(!Rt.JOB_TYPE_ENUM[e.operation])return ri.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Rt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=uS.fileObject(e);break;case Rt.OPERATIONS_ENUM.CSV_URL_LOAD:n=uS.urlObject(e);break;case Rt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=uS.dataObject(e);break;case Rt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=uS.s3FileObject(e);break;case Rt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Rt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=FV(e,"date");break;case Rt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=FV(e,"timestamp");break;case Rt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Qfe(e);break;case Rt.OPERATIONS_ENUM.RESTART_SERVICE:if(Rt.HDB_PROCESS_SERVICES[e.service]===void 0)throw GV(new Error,"Invalid service",qV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw GV(n,n.message,qV.BAD_REQUEST,void 0,void 0,!0);let s=new Vfe;s.type=e.operation===Rt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Rt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Gfe(Rt.SYSTEM_SCHEMA_NAME,Rt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await $V(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return ri.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Ffe();try{o=await $V(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return ri.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ri.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Yfe(Rt.SYSTEM_SCHEMA_NAME,Rt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await Zfe(l)}catch(f){return ri.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,ri.trace(f)}return t}a(s_e,"addJob");async function i_e(e){let t=hl(e.from_date,hl.ISO_8601),r=hl(e.to_date,hl.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 $fe(n,e.hdb_user);try{return await e_e(s)}catch(i){throw ri.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(i_e,"getJobsInDateRange");async function YV(e){if(dd.isEmptyOrZeroLength(e))return dd.errorizeMessage("Invalid job ID specified.");let t=new qfe(Rt.SYSTEM_SCHEMA_NAME,Rt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Xfe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ri.error(n),dd.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(YV,"getJobById");async function o_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(dd.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Rt.JOB_STATUS_ENUM.COMPLETE||e.status===Rt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=hl().valueOf());let t=new Kfe(Rt.SYSTEM_SCHEMA_NAME,Rt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await t_e(t),r}a(o_e,"updateJob")});var t1=I((gDe,e1)=>{"use strict";var zV=ae(),gr=(H(),P($)),a_e=require("moment"),dS=ww(),bh=Q(),QV=vw(),jV=Dw(),JV=Tc(),XV=tt(),c_e=Yg(),l_e=rd(),{parentPort:u_e,isMainThread:ZV}=require("worker_threads"),{onMessageByType:d_e}=tt(),Uw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function f_e(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(zV.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(zV.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gr.JOB_TYPE_ENUM.csv_file_load:await Ui(e,dS.csvFileLoad);break;case gr.JOB_TYPE_ENUM.csv_url_load:await Ui(e,dS.csvURLLoad);break;case gr.JOB_TYPE_ENUM.csv_data_load:await Ui(e,dS.csvDataLoad);break;case gr.JOB_TYPE_ENUM.import_from_s3:await Ui(e,dS.importFromS3);break;case gr.JOB_TYPE_ENUM.empty_trash:break;case gr.JOB_TYPE_ENUM.export_local:await Ui(e,jV.export_local);break;case gr.JOB_TYPE_ENUM.export_to_s3:await Ui(e,jV.export_to_s3);break;case gr.JOB_TYPE_ENUM.delete_files_before:case gr.JOB_TYPE_ENUM.delete_records_before:await Ui(e,JV.deleteFilesBefore);break;case gr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ui(e,JV.deleteAuditLogsBefore);break;case gr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ui(e,c_e.deleteTransactionLogsBefore);break;case gr.JOB_TYPE_ENUM.restart_service:return await Ui(e,l_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(f_e,"parseMessage");async function Ui(e,t){try{e.job.status=gr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=a_e().valueOf(),await QV.updateJob(e.job),await __e(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):bh.error(`There was an error running ${t.name} job with id ${e.job.id}`),bh.error(n),e.job.message=n,e.job.status=gr.JOB_STATUS_ENUM.ERROR;try{await QV.updateJob(e.job)}catch(s){throw bh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ui,"runJob");async function __e(e){bh.trace("launching job thread:",e),ZV?XV.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):u_e.postMessage({type:gr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(__e,"launchJobThread");ZV&&d_e(gr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{XV.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){bh.error(r)}});e1.exports={parseMessage:f_e,RunnerMessage:Uw}});var n1=I((TDe,r1)=>{"use strict";var xw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};r1.exports=xw});var QN=I((yDe,qw)=>{"use strict";var mS=Vr(),kw=Xg(),fS=ww(),bo=ZE(),_S=no(),Nh=Tc(),h_e=RO(),Oh=qn(),hS=a_(),It=zN(),pS=Q(),p_e=wO(),m_e=dg(),s1=XO(),E_e=_g(),g_e=tN(),S_e=rN(),T_e=iN(),A_e=aN(),Bw=gg(),i1=Dw(),R_e=jg(),Fw=vw(),V=(H(),P($)),{hdb_errors:Ih,handleHDBError:wh}=he(),{HTTP_STATUS_CODES:o1}=Ih,Hw=TN(),a1=rd(),E1=require("util"),_d=pn(),y_e=ks(),b_e=$u(),c1=t1(),l1=(Tu(),P(S_)),u1=(Hg(),P(ah)),d1=wt(),f1=Yg(),_1=dh(),{setServerUtilities:O_e}=(uf(),P(Iw)),{CONTEXT:RDe}=(Jo(),P(TA)),{_assignPackageExport:N_e}=li(),{transformReq:w_e}=ae(),{server:I_e}=(qr(),P(Wl)),tn=pS.loggerWithTag("operation"),fd=js(),h1=(Jc(),P(jc)),C_e=Ew(),p1=mS.searchByHash,P_e=mS.searchByValue,D_e=E1.promisify(mS.search),L_e=E1.promisify(kw.evaluateSQL),M_e={[V.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.CREATE_TABLE]:!0,[V.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[V.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.DROP_TABLE]:!0,[V.OPERATIONS_ENUM.DROP_SCHEMA]:!0},ee=n1();async function g1(e,t){try{if(e.body.operation!=="read_log"&&(pS.log_level===V.LOG_LEVELS.INFO||pS.log_level===V.LOG_LEVELS.DEBUG||pS.log_level===V.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;tn.info(c)}}catch(n){tn.error(n)}let r=await C_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return M_e[e.body.operation]&&y_e.setSchemaDataToGlobal(n=>{n&&tn.error(n)}),r}a(g1,"processLocalTransaction");var m1=U_e();qw.exports={chooseOperation:S1,getOperationFunction:T1,operation:Gw,processLocalTransaction:g1,executeJob:bs};O_e(qw.exports);I_e.operation=Gw;function S1(e){let t;try{t=T1(e)}catch(s){throw tn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=kw.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=kw.checkASTPermissions(e,i);if(o)throw tn.error(`${o1.FORBIDDEN} from operation ${e.operation}`),tn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),wh(new Error,o,Ih.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.OPERATIONS_ENUM.LOGIN&&e.operation!==V.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=R_e.verifyPerms(i,s);if(o)throw tn.error(`${o1.FORBIDDEN} from operation ${e.operation}`),tn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),wh(new Error,o,Ih.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw wh(s,"There was an error when trying to choose an operation path")}return r}a(S1,"chooseOperation");function T1(e){if(tn.trace(`getOperationFunction with operation: ${e.operation}`),m1.has(e.operation))return m1.get(e.operation);throw wh(new Error,Ih.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ih.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(T1,"getOperationFunction");N_e("operation",Gw);function Gw(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=S1(e);return g1({body:e},n)}a(Gw,"operation");async function v_e(e){tn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[V.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case V.OPERATIONS_ENUM.INSERT:o=await _d.insert(i);break;case V.OPERATIONS_ENUM.UPDATE:o=await _d.update(i);break;case V.OPERATIONS_ENUM.UPSERT:o=await _d.upsert(i);break;case V.OPERATIONS_ENUM.DELETE:o=await Nh.deleteRecord(i);break;default:tn.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){tn.info("Invalid operation in transaction"),tn.error(o)}}a(v_e,"catchup");async function bs(e){w_e(e);let t,r;try{r=await Fw.addJob(e),t=r.createdJob,tn.info("addJob result",r);let n=new c1.RunnerMessage(t,e);return{message:await c1.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw tn.error(s),wh(n,s)}}a(bs,"executeJob");function U_e(){let e=new Map;return e.set(V.OPERATIONS_ENUM.INSERT,new ee(_d.insert)),e.set(V.OPERATIONS_ENUM.UPDATE,new ee(_d.update)),e.set(V.OPERATIONS_ENUM.UPSERT,new ee(_d.upsert)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new ee(mS.searchByConditions)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_HASH,new ee(p1)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_ID,new ee(p1)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_VALUE,new ee(P_e)),e.set(V.OPERATIONS_ENUM.SEARCH,new ee(D_e)),e.set(V.OPERATIONS_ENUM.SQL,new ee(L_e)),e.set(V.OPERATIONS_ENUM.CSV_DATA_LOAD,new ee(bs,fS.csvDataLoad)),e.set(V.OPERATIONS_ENUM.CSV_FILE_LOAD,new ee(bs,fS.csvFileLoad)),e.set(V.OPERATIONS_ENUM.CSV_URL_LOAD,new ee(bs,fS.csvURLLoad)),e.set(V.OPERATIONS_ENUM.IMPORT_FROM_S3,new ee(bs,fS.importFromS3)),e.set(V.OPERATIONS_ENUM.CREATE_SCHEMA,new ee(bo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_DATABASE,new ee(bo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_TABLE,new ee(bo.createTable)),e.set(V.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new ee(bo.createAttribute)),e.set(V.OPERATIONS_ENUM.DROP_SCHEMA,new ee(bo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_DATABASE,new ee(bo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_TABLE,new ee(bo.dropTable)),e.set(V.OPERATIONS_ENUM.DROP_ATTRIBUTE,new ee(bo.dropAttribute)),e.set(V.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new ee(_S.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_DATABASE,new ee(_S.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_TABLE,new ee(_S.describeTable)),e.set(V.OPERATIONS_ENUM.DESCRIBE_ALL,new ee(_S.describeAll)),e.set(V.OPERATIONS_ENUM.DELETE,new ee(Nh.deleteRecord)),e.set(V.OPERATIONS_ENUM.ADD_USER,new ee(Oh.addUser)),e.set(V.OPERATIONS_ENUM.ALTER_USER,new ee(Oh.alterUser)),e.set(V.OPERATIONS_ENUM.DROP_USER,new ee(Oh.dropUser)),e.set(V.OPERATIONS_ENUM.LIST_USERS,new ee(Oh.listUsersExternal)),e.set(V.OPERATIONS_ENUM.LIST_ROLES,new ee(hS.listRoles)),e.set(V.OPERATIONS_ENUM.ADD_ROLE,new ee(hS.addRole)),e.set(V.OPERATIONS_ENUM.ALTER_ROLE,new ee(hS.alterRole)),e.set(V.OPERATIONS_ENUM.DROP_ROLE,new ee(hS.dropRole)),e.set(V.OPERATIONS_ENUM.USER_INFO,new ee(Oh.userInfo)),e.set(V.OPERATIONS_ENUM.READ_LOG,new ee(p_e)),e.set(V.OPERATIONS_ENUM.ADD_NODE,new ee(m_e)),e.set(V.OPERATIONS_ENUM.UPDATE_NODE,new ee(s1)),e.set(V.OPERATIONS_ENUM.SET_NODE_REPLICATION,new ee(s1)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE,new ee(E_e)),e.set(V.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new ee(g_e)),e.set(V.OPERATIONS_ENUM.PURGE_STREAM,new ee(S_e)),e.set(V.OPERATIONS_ENUM.SET_CONFIGURATION,new ee(d1.setConfiguration)),e.set(V.OPERATIONS_ENUM.CLUSTER_STATUS,new ee(T_e.clusterStatus)),e.set(V.OPERATIONS_ENUM.CLUSTER_NETWORK,new ee(A_e)),e.set(V.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new ee(Bw.setRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new ee(Bw.getRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new ee(Bw.deleteRoutes)),e.set(V.OPERATIONS_ENUM.EXPORT_TO_S3,new ee(bs,i1.export_to_s3)),e.set(V.OPERATIONS_ENUM.CREATE_CSR,new ee(fd.createCsr)),e.set(V.OPERATIONS_ENUM.SIGN_CERTIFICATE,new ee(fd.signCertificate)),e.set(V.OPERATIONS_ENUM.LIST_CERTIFICATES,new ee(fd.listCertificates)),e.set(V.OPERATIONS_ENUM.ADD_CERTIFICATES,new ee(fd.addCertificate)),e.set(V.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new ee(fd.removeCertificate)),e.set(V.OPERATIONS_ENUM.GET_KEY,new ee(fd.getKey)),e.set(V.OPERATIONS_ENUM.ADD_NODE_BACK,new ee(h1.addNodeBack)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE_BACK,new ee(h1.removeNodeBack)),e.set(V.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new ee(bs,Nh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new ee(bs,Nh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.EXPORT_LOCAL,new ee(bs,i1.export_local)),e.set(V.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new ee(Fw.handleGetJobsByStartDate)),e.set(V.OPERATIONS_ENUM.GET_JOB,new ee(Fw.handleGetJob)),e.set(V.OPERATIONS_ENUM.GET_FINGERPRINT,new ee(Hw.getFingerprint)),e.set(V.OPERATIONS_ENUM.SET_LICENSE,new ee(Hw.setLicense)),e.set(V.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new ee(Hw.getRegistrationInfo)),e.set(V.OPERATIONS_ENUM.RESTART,new ee(a1.restart)),e.set(V.OPERATIONS_ENUM.RESTART_SERVICE,new ee(bs,a1.restartService)),e.set(V.OPERATIONS_ENUM.CATCHUP,new ee(v_e)),e.set(V.OPERATIONS_ENUM.SYSTEM_INFORMATION,new ee(b_e.systemInformation)),e.set(V.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new ee(bs,Nh.deleteAuditLogsBefore)),e.set(V.OPERATIONS_ENUM.READ_AUDIT_LOG,new ee(h_e)),e.set(V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new ee(l1.createTokens)),e.set(V.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new ee(l1.refreshOperationToken)),e.set(V.OPERATIONS_ENUM.LOGIN,new ee(u1.login)),e.set(V.OPERATIONS_ENUM.LOGOUT,new ee(u1.logout)),e.set(V.OPERATIONS_ENUM.GET_CONFIGURATION,new ee(d1.getConfiguration)),e.set(V.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new ee(It.customFunctionsStatus)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new ee(It.getCustomFunctions)),e.set(V.OPERATIONS_ENUM.GET_COMPONENT_FILE,new ee(It.getComponentFile)),e.set(V.OPERATIONS_ENUM.GET_COMPONENTS,new ee(It.getComponents)),e.set(V.OPERATIONS_ENUM.SET_COMPONENT_FILE,new ee(It.setComponentFile)),e.set(V.OPERATIONS_ENUM.DROP_COMPONENT,new ee(It.dropComponent)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new ee(It.getCustomFunction)),e.set(V.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new ee(It.setCustomFunction)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new ee(It.dropCustomFunction)),e.set(V.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new ee(It.addComponent)),e.set(V.OPERATIONS_ENUM.ADD_COMPONENT,new ee(It.addComponent)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new ee(It.dropCustomFunctionProject)),e.set(V.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new ee(It.packageComponent)),e.set(V.OPERATIONS_ENUM.PACKAGE_COMPONENT,new ee(It.packageComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new ee(It.deployComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_COMPONENT,new ee(It.deployComponent)),e.set(V.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new ee(f1.readTransactionLog)),e.set(V.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new ee(bs,f1.deleteTransactionLogsBefore)),e.set(V.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new ee(_1.installModules)),e.set(V.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new ee(_1.auditModules)),e.set(V.OPERATIONS_ENUM.GET_BACKUP,new ee(bo.getBackup)),e.set(V.OPERATIONS_ENUM.ADD_SSH_KEY,new ee(It.addSSHKey)),e.set(V.OPERATIONS_ENUM.UPDATE_SSH_KEY,new ee(It.updateSSHKey)),e.set(V.OPERATIONS_ENUM.DELETE_SSH_KEY,new ee(It.deleteSSHKey)),e.set(V.OPERATIONS_ENUM.LIST_SSH_KEYS,new ee(It.listSSHKeys)),e.set(V.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new ee(It.setSSHKnownHosts)),e.set(V.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new ee(It.getSSHKnownHosts)),e}a(U_e,"initializeOperationFunctionMap")});var SS=I((ODe,y1)=>{"use strict";var ES=(H(),P($)),x_e=ae(),Ch=Q(),{handleHDBError:$w,hdb_errors:gS}=he(),{isMainThread:B_e}=require("worker_threads"),{Readable:H_e}=require("stream"),A1=require("os"),k_e=require("util"),F_e=yb(),G_e=k_e.promisify(F_e.authorize),R1=QN(),{createGzip:q_e,constants:$_e}=require("zlib"),V_e=[ES.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,ES.OPERATIONS_ENUM.LOGIN,ES.OPERATIONS_ENUM.LOGOUT];function K_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${A1.EOL}Stack: ${e.stack} ${A1.EOL}Terminating ${B_e?"HDB":"thread"}.`;console.error(t),Ch.fatal(t),process.exit(1)}a(K_e,"handleServerUncaughtException");function Y_e(e,t,r){if(Ch[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:gS.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Y_e,"serverErrorHandler");function W_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=$w(new Error,"Invalid JSON.",gS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(x_e.isEmpty(e.body.operation)){let n=$w(new Error,"Request body must include an 'operation' property.",gS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(W_e,"reqBodyValidationHandler");function z_e(e,t,r){let n;!V_e.includes(e.body.operation)||e.body.operation===ES.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?G_e(e,t).then(i=>{n=i,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(i=>{Ch.warn(i),Ch.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r($w(i,o,gS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(z_e,"authHandler");async function Q_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=R1.chooseOperation(e.body);let s=await R1.processLocalTransaction(e,n);if(s instanceof H_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(q_e({level:$_e.Z_BEST_SPEED})))}return s}catch(s){throw Ch.error(s),s}}a(Q_e,"handlePostRequest");y1.exports={authHandler:z_e,handlePostRequest:Q_e,handleServerUncaughtException:K_e,serverErrorHandler:Y_e,reqBodyValidationHandler:W_e}});var w1=I((wDe,N1)=>{"use strict";var j_e=require("fastify-plugin"),{handlePostRequest:b1,authHandler:J_e,reqBodyValidationHandler:X_e}=SS();async function Z_e(e){e.decorate("hdbCore",{preValidation:[X_e,J_e],request:a(t=>O1(b1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>O1(b1(t,r,!0)),"requestWithoutAuthentication")})}a(Z_e,"hdbCore");async function O1(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(O1,"convertAsyncIterators");N1.exports=j_e(Z_e)});var C1=I((PDe,I1)=>{"use strict";var CDe=require("fs"),TS=le();TS.initSync();var{CONFIG_PARAMS:Vw}=(H(),P($)),ehe=1024*1024*1024;function the(e){let t=TS.get(Vw.HTTP_TIMEOUT),r=TS.get(Vw.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:ehe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:TS.get(Vw.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(the,"getServerOptions");I1.exports=the});var L1=I((LDe,D1)=>{"use strict";var Kw=le();Kw.initSync();var{CONFIG_PARAMS:P1}=(H(),P($));function rhe(){let e=Kw.get(P1.HTTP_CORSACCESSLIST),t=Kw.get(P1.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(rhe,"getCORSOptions");D1.exports=rhe});var U1=I((vDe,v1)=>{"use strict";var M1=le();M1.initSync();var nhe=(H(),P($));function she(){return M1.get(nhe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(she,"getHeaderTimeoutConfig");v1.exports=she});var Ww={};ve(Ww,{customFunctionsServer:()=>ahe,ready:()=>Q1,start:()=>ohe});function ohe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Oo||(Oo=z1(t),We.http((await Oo).server));let o=await Oo,c=(0,Yw.dirname)(s),l=(0,Yw.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!x1.has(c)){x1.add(c);try{o.register(lhe(c,l))}catch(u){if(u.message==="Root plugin has already booted")ft.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Q1}}async function ahe(){try{ft.info("In Custom Functions Fastify server"+process.cwd()),ft.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ft.debug(`Custom Functions server process ${process.pid} starting up.`),await che();let e=q1.get(x.HTTP_SECUREPORT)>0,t;try{t=Oo=await z1(e)}catch(r){throw ft.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw ft.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){ft.error(`Custom Functions ${process.pid} Error: ${e}`),ft.error(e),process.exit(1)}}async function che(){try{ft.info("Custom Functions starting configuration."),await $1.setUsersWithRolesCache(),ft.info("Custom Functions completed configuration.")}catch(e){ft.error(e)}}function lhe(e,t){return async function(r){try{ft.info("Custom Functions starting buildRoutes"),ft.trace("Loading fastify routes folder "+e),(0,B1.existsSync)(e)&&r.register(G1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:ft.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?ft.error(s.message):s&&ft.error(s),o()})}catch(n){ft.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function z1(e){ft.info("Custom Functions starting buildServer.");let t=(0,V1.default)(e),r=(0,H1.default)(t);r.server.headersTimeout=(0,Y1.default)(),r.setErrorHandler(W1.serverErrorHandler);let n=(0,K1.default)();return n&&r.register(k1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(F1.default),await r.register(ihe),await r.after(),hf(r),ft.info("Custom Functions completed buildServer."),r}function Q1(){if(Oo)return Oo.then?Oo.then(e=>e.ready()):Oo.ready()}var Yw,B1,H1,k1,F1,G1,q1,ft,ihe,$1,V1,K1,Y1,W1,Oo,x1,j1=be(()=>{Yw=require("path"),B1=require("fs"),H1=M(require("fastify")),k1=M(require("@fastify/cors")),F1=M(gb()),G1=M(require("@fastify/autoload")),q1=M(le());H();ft=M(Q()),ihe=M(w1()),$1=M(qn()),V1=M(C1()),K1=M(L1()),Y1=M(U1()),W1=M(SS());ji();qr();x1=new Set;a(ohe,"start");a(ahe,"customFunctionsServer");a(che,"setUp");a(lhe,"buildRouteFolder");a(z1,"buildServer");a(Q1,"ready")});var zw={};ve(zw,{start:()=>uhe});function uhe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,tK.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){X1||(X1=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=J1.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Z1.default)(s,(0,eK.realpathSync)(o))}}return i(s)},{runFirst:!0})),J1.set(r,n)}}}var Z1,eK,tK,J1,X1,rK=be(()=>{Z1=M(require("send")),eK=require("fs"),tK=M(require("serve-static")),J1=new Map;a(uhe,"start")});var Qw={};ve(Qw,{start:()=>dhe});function dhe({override:e}){return{handleFile:a((t,r,n)=>{AS.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,nK.parse)(t))){if(process.env[s]!==void 0)if(AS.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)AS.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var nK,AS,sK=be(()=>{nK=require("dotenv"),AS=M(Q());a(dhe,"start")});var hK={};ve(hK,{startHTTPThreads:()=>_he,startSocketServer:()=>eI,updateWorkerIdleness:()=>_K});async function _he(e=2,t){try{if(t)Xw(0,1,!0);else{let{loadRootComponents:r}=NS();if(e===0)return(0,Os.setMainIsWorker)(!0),await nI().startServers(),Promise.resolve([]);await r()}fK();for(let r=0;r<e;r++)Xw(r,e);return Promise.all(dK)}finally{(0,Os.threadsHaveStarted)()}}function fK(){let e=(0,cK.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),Jw=setInterval(()=>{bS.notify(e)},fhe).unref())}function Xw(e,t=1,r){if(jw++,(0,Os.startWorker)("server/threads/threadServer.js",{name:tA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===XT.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});dK.push(s),await s,hd.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=yS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=hd.indexOf(n);o>-1&&hd.splice(o,1)}if(a(i,"removeWorker"),pd){let o=pd;pd=[];for(let c of o)uK[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Zw?Zw=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Os.shutdownWorkers)(),jw=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function eI(e=0,t){if(typeof e=="string")try{(0,OS.existsSync)(e)&&(0,OS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=hhe:r=phe(t):r=tI;let n=(0,md.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=uK[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),Zw=!0,r(i,(o,c)=>{if(!o){if(iK){let u=i._socket||new md.Socket({handle:i,writable:!0,readable:!0});iK.deliverSocket(u,e,c),u.resume()}else jw>0?(pd.length===0&&setTimeout(()=>{pd.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,pd.push(i)):(console.log("start up a dynamic thread to handle request"),Xw(0));rr(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new md.Socket({handle:i,writable:!0,readable:!0});ghe(u,o,e)}rr(!0,"socket-routed")})},bS.info(`HarperDB ${lK.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 tI(e,t){let r,n=0;for(let s of hd){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=RS)return RS=i,t(r);n=i}RS=0,t(r)}function hhe(e,t){let r={};e.getpeername(r);let n=r.address,s=Ed.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);tI(e,o=>{Ed.set(n,{worker:o,lastUsed:i}),t(o)})}function phe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new md.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Ed.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);tI(n,d=>{Ed.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function _K(){RS=0;for(let e of hd)e.expectedIdle=e.recentELU.idle+mhe,e.requests=1;hd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function ghe(e,t,r){let n=Ehe++;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(),yS.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")),yS.delete(n)),s.event=="destroy"&&(e.destroy(),yS.delete(n))})}var Os,md,bS,OS,aK,cK,lK,hd,pd,uK,iK,jw,dK,Jw,fhe,Zw,RS,oK,Ed,mhe,yS,Ehe,rI=be(()=>{Os=M(tt()),md=require("net");H();bS=M(Q()),OS=require("fs");Ci();aK=require("worker_threads"),cK=M(Qu()),lK=M(mt()),hd=[],pd=[],uK=[],jw=0,dK=[];aK.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Os.onMessageFromWorkers)(e=>{e.type===eA.RESTART&&Jw&&(clearInterval(Jw),fK())}));fhe=6e5;a(_he,"startHTTPThreads");a(fK,"licenseWarning");a(Xw,"startHTTPWorker");a(eI,"startSocketServer");RS=0;a(tI,"findMostIdleWorker");oK=36e5,Ed=new Map;a(hhe,"findByRemoteAddressAffinity");a(phe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ed)r.lastUsed+oK<e&&Ed.delete(t)},oK).unref();mhe=1e3;a(_K,"updateWorkerIdleness");(0,Os.setMonitorListener)(_K);yS=new Map,Ehe=1;a(ghe,"proxySocket")});var CK=I((WDe,IK)=>{var mK=M(require("cluster")),Da=M(le());H();var xi=M(Q()),EK=M(require("fastify")),gK=M(require("@fastify/cors")),SK=M(require("@fastify/compress")),TK=M(require("@fastify/static")),AK=M(gb()),RK=M(require("path")),yK=M(mt()),bK=M(ks()),OK=M(ae()),NK=M(qn()),wK=M(Qu());qr();var La=M(SS());ji();Da.default.initSync();var She=6e4,The=1024*1024*1024,Ahe="TRUE",{CONFIG_PARAMS:Ph}=$,gd;IK.exports={hdbServer:pK,start:pK};async function pK(e){try{xi.default.debug("In Fastify server"+process.cwd()),xi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),xi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=mK.default.isMaster,await Rhe();let t=e.securePort>0;gd=yhe(t),await gd.ready(),e||(e={}),e.isOperationsServer=!0;try{We.http(gd.server,e),gd.server.closeIdleConnections||await gd.listen({port:0,host:"::"})}catch(r){throw gd.close(),xi.default.error(r),xi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),xi.default.fatal(t),process.exit(1)}}a(pK,"operationsServer");async function Rhe(){xi.default.trace("Configuring HarperDB process."),bK.default.setSchemaDataToGlobal(),await NK.default.setUsersWithRolesCache(),await wK.default.getLicense()}a(Rhe,"setUp");function yhe(e){xi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=bhe(e),r=(0,EK.default)(t);r.server.headersTimeout=Nhe(),r.setErrorHandler(La.serverErrorHandler);let n=Ohe();n&&r.register(gK.default,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(AK.default),r.register(SK.default),r.register(TK.default,{root:RK.default.join(yK.PACKAGE_ROOT,"studio/build-local")}),hf(r);let s=Da.default.get(JT.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!OK.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[La.reqBodyValidationHandler,La.authHandler],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),(0,La.handlePostRequest)(i,o)}),r.get("/health",()=>"HarperDB is running."),xi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(yhe,"buildServer");function bhe(e){let t=Da.default.get(Ph.OPERATIONSAPI_NETWORK_TIMEOUT),r=Da.default.get(Ph.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:The,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(bhe,"getServerOptions");function Ohe(){let e=Da.default.get(Ph.OPERATIONSAPI_NETWORK_CORS),t=Da.default.get(Ph.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Ahe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Ohe,"getCORSOpts");function Nhe(){return Da.default.get(Ph.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??She}a(Nhe,"getHeaderTimeoutConfig")});var lI={};ve(lI,{disableNATS:()=>Ihe,publishToStream:()=>CS,setNATSReplicator:()=>sI,setPublishToStream:()=>Che,setSubscription:()=>cI,start:()=>whe});function whe(){Dh.default.get(x.CLUSTERING_ENABLED)&&Dhe()}function Ihe(e=!0){vK=e}function Che(e,t){CS=e,cI=t}function Dhe(){if(vK||process.env._DISABLE_NATS)return;let e=Je(),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];sI(s,r,i)}}Yc((r,n)=>{sI(r.tableName,r.databaseName,r),n&&xK(r)}),!PK&&(PK=!0)}function sI(e,t,r){if(t==="system"&&Lhe.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 Gr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){xK(i)}static subscribe(){let i=new Dn;return cI(t,e,i),i}static subscribeOnThisThread(i){return i<(Dh.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Phe)}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 wS(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=UK;return i}a(n,"getNATSTransaction")}function xK(e){let t=Dh.default.get(x.CLUSTERING_NODENAME);CS(`${oI.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,aI.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 DK,oI,aI,LK,MK,Dh,IS,vK,CS,cI,Phe,UK,PK,Lhe,wS,iI,BK=be(()=>{Me();Jo();DK=M(hr()),oI=M(Ot()),aI=M(ro());Fl();LK=M(Lb()),MK=M(cn()),Dh=M(le());H();IS=M(Q());a(whe,"start");a(Ihe,"disableNATS");CS=DK.publishToStream,cI=LK.setSubscription;a(Che,"setPublishToStream");Phe=2;a(Dhe,"assignReplicationSource");Lhe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(sI,"setNATSReplicator");a(xK,"publishSchema");wS=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Dh.default.get(x.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(IS.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(CS(`${oI.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,aI.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw IS.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},iI=class extends wS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,MK.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};UK=new iI});async function qK({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await uI.get(e,{returnNonexistent:!0});i=new _I(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await uI.get(e);o&&o.delete()}i=new DS(e,t)}return n&&(n.id=e,n.user={username:t?.username},Lh.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function dI(){return PS++,PS>65500&&(PS=1),PS}function fI(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=hi.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return yt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var kK,Ma,FK,GK,HK,uI,Lh,PS,DS,_I,$K=be(()=>{Me();Yl();kK=M(cn()),Ma=M(Q());rc();FK=M(tt()),GK=M(nI());qr();HK=100,uI=ct({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"}]}}]}),Lh=ct({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,FK.getWorkerIndex)()===0&&(async()=>{await GK.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Lh.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await We.getUser(r.user.username));try{await fI(r,t,r)}catch{(0,Ma.warn)("Failed to publish will",t)}Lh.delete(e.id)}})();a(qK,"getSession");PS=1;a(dI,"getNextMessageId");DS=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(A=>A.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ma.trace)("Resuming subscription from",s,"from",o);let _=hi.getMatch(u,"mqtt");if(!_){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let A=h.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,A.indexOf("+")===A.length-1)h.onlyChildren=!0,h.url="/"+A.slice(0,A.length-1);else{let E=A.split("/"),R;for(let k=0;k<E.length;k++)if(E[k].indexOf("+")>-1)if(E[k]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&R)throw new Error("Filters can not be combined");let N=!0;E[E.length-1]==="#"&&(E.length--,N=!1),R&&(n=a(k=>{let F=k.id;if(!Array.isArray(F))if(F?.indexOf?.("/")>-1)F=F.split("/");else return!1;if(N&&F.length!==E.length)return!1;for(let K=0;K<E.length;K++)if(E[K]!=="+"&&E[K]!==F[K])return!1;return!0},"filter"));let v=E.indexOf("+");h.url="/"+(v>-1?E.slice(0,v):E).concat("").join("/")}}let p=_.path,S=_.Resource,g=await yt(h,async()=>{let A=this.createContext();A.topic=s,A.retainHandling=i;let E=await S.subscribe(h,A);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let R=(async()=>{for await(let N of E)try{let v;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"&&N.type!=="patch"||n&&!n(N))continue;r?(N.topic=s,v=this.needsAcknowledge(N)):(N.acknowledge?.(),v=dI());let k=N.id;if(Array.isArray(k)&&(k=Kl(k)),k==null&&(k=""),await this.listener(p+"/"+k,N.value,v,t)===!1)break;this.awaitingAcks?.size>HK?await new Promise(K=>setTimeout(K,this.awaitingAcks.size-HK)):await new Promise(setImmediate)}catch(v){(0,Ma.warn)(v)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=dI();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 fI(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();yt(r,async()=>{try{if(!t){let n=await Lh.get(this.sessionId);n?.doesExist()&&await fI(n,n.data,r)}}finally{await Lh.delete(this.sessionId)}}).catch(n=>{(0,Ma.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(fI,"publish");_I=class extends DS{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=dI(),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,Ma.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,kK.getNextMonotonicTime)()),(0,Ma.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),uI.put(this.sessionRecord)}}});var pI={};ve(pI,{bypassAuth:()=>Mhe,start:()=>vhe});function Mhe(){zK=!0}function vhe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new WK.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),cr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:p}=KK(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",p),u.on("error",S=>{cr.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),cr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Sd.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&MS.notify?.({username:f?.username,status:Ms.SUCCESS,type:Vo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(p){throw(0,Sd.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&MS.error?.({username:_,status:Ms.FAILURE,type:Vo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),p}}else cr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),cr.error?.(_)}else if(l.required)return cr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&zK&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,YK.getSuperUser)(),cr.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=KK(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{cr.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function KK(e,t,r,n,s){VK||(VK=!0,__(d=>{LS>0&&d.push({metric:"mqtt-connections",connections:LS,byThread:!0})}));let i;LS++;let o,c={protocolVersion:4},l=(0,vS.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){LS--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!1,"connection","mqtt","disconnect"),cr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){cr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,p=_?.indexOf("/",1),S=p>0?_.slice(0,p):_;rr(d.length,"bytes-received",S,A(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await We.getUser(d.username,d.password.toString(),r),(0,Sd.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&MS.notify?.({username:n?.username,status:Ms.SUCCESS,type:Vo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(oe){return(0,Sd.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&MS.error?.({username:d.username,status:Ms.FAILURE,type:Vo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,oe),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let oe=e.deserialize||(e.deserialize=Qi(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?oe(d.will.payload):void 0,delete d.will.payload}o=qK({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(oe){return cr.error?.(oe),s.events.emit("auth-failed",d,e,oe),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:oe.code||5,returnCode:oe.code||128})}s.events.emit("connected",o,e),Wn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let R=a(async(oe,Z,se,Y)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",oe);let pe=oe.indexOf("/",1),Te=pe>0?oe.slice(0,pe):oe;g({cmd:"publish",topic:oe,payload:await E(Z),messageId:se||Math.floor(Math.random()*1e8),qos:Y.qos},Te);let Ce=e._socket??e;return Ce.writableNeedDrain?new Promise(me=>Ce.once("drain",me)):!Ce.closed}catch(pe){return cr.error?.(pe),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(R),o.sessionWasPresent&&await o.resume();break;case"subscribe":let N=[];for(let oe of d.subscriptions){let Z;try{let se=await o.addSubscription(oe,oe.qos>=1);Z=se?se.qos||0:c.protocolVersion<5?128:143}catch(se){s.events.emit("error",se,e,oe,o),se.statusCode?se.statusCode===500?cr.warn?.(se):cr.info?.(se):cr.error?.(se),Z=c.protocolVersion<5?128:se.statusCode===403?135:se.statusCode===404?143:128}N.push(Z)}await o.committed,g({cmd:"suback",granted:N,messageId:d.messageId});break;case"unsubscribe":{let oe=[];for(let Z of d.unsubscriptions)oe.push(o.removeSubscription(Z)?0:17);g({cmd:"unsuback",granted:oe,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let v=d.qos===2?"pubrec":"puback",k=e.deserialize||(e.deserialize=Qi(r?.headers.get?.("content-type"))),K=(d.payload?.length||0)>0?k(d.payload):void 0,re;try{re=await o.publish(d,K)}catch(oe){s.events.emit("error",oe,e,d,o),cr.warn?.(oe),d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:re===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!0,"connection","mqtt","disconnect"),cr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,d,o),cr.error?.(R),g({cmd:"disconnect"})}function g(R,N){let v=(0,vS.generate)(R,c);t(v),rr(v.length,"bytes-sent",N,A(R),"mqtt")}a(g,"sendPacket");function A(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}a(A,"packetMethodName");function E(R){return ea(R,r)}a(E,"serialize")}),l.on("error",d=>{cr.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var vS,YK,Sd,hI,WK,MS,cr,zK,VK,LS,QK=be(()=>{vS=require("mqtt-packet");$K();YK=M(qn());ji();Ci();qr();Sd=M(le());H();hI=M(pi()),WK=require("events"),MS=(0,hI.loggerWithTag)("auth-event"),cr=(0,hI.loggerWithTag)("mqtt"),zK=(0,Sd.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Mhe,"bypassAuth");a(vhe,"start");LS=0;a(KK,"onSocket")});var JK={};ve(JK,{Request:()=>mI,createReuseportFd:()=>US});var jK,mI,EI,gI,US,SI=be(()=>{jK=require("os"),mI=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new gI(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new EI(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},EI=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},gI=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,jK.platform)()!="win32"&&(US=require("node-unix-socket").createReuseportFd)});var hh={};ve(hh,{component_errors:()=>Ad,getComponentName:()=>khe,loadComponent:()=>HS,loadComponentDirectories:()=>nY,setErrorReporter:()=>Hhe});function nY(e,t){t&&(AI=t),e&&(bI=e);let r=[];if((0,_t.existsSync)(TI)){let s=(0,_t.readdirSync)(TI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(TI,o);r.push(HS(c,AI,WT,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(HS(n,AI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{rY=!0})}function Hhe(e){Mh=e}async function HS(e,t,r,n,s,i){let o=(0,_t.realpathSync)(e);if(xS.has(o))return xS.get(o);xS.set(o,!0),s&&(bI=s);try{let c;n&&(Ad=new Map);let l=(0,gt.join)(e,"harperdb-config.yaml");(0,_t.existsSync)(l)?c=n?(0,kS.getConfigObj)():(0,RI.parseDocument)((0,_t.readFileSync)(l,"utf8")).toJSON():!n&&(0,_t.existsSync)(l=(0,gt.join)(e,"config.yaml"))?c=(0,RI.parseDocument)((0,_t.readFileSync)(l,"utf8")).toJSON():c=OI;let u=(0,gt.join)(e,"node_modules","harperdb");try{pl.isMainThread&&(n||(0,_t.existsSync)(u)&&(0,_t.realpathSync)(yI.PACKAGE_ROOT)!==(0,_t.realpathSync)(u))&&((0,_t.rmSync)(u,{recursive:!0,force:!0}),(0,_t.existsSync)((0,gt.join)(e,"node_modules"))||(0,_t.mkdirSync)((0,gt.join)(e,"node_modules")),(0,_t.symlinkSync)(yI.PACKAGE_ROOT,u,"dir"))}catch(h){Td.default.error("Error symlinking harperdb module",h)}let f=BS,d=n;for(let h in c){BS=h;let _=c[h];if(Ad.set(n?h:(0,gt.basename)(e),!1),!_)continue;let p,S=_.package;try{if(S){let N=e,v;for(;!(0,_t.existsSync)(v=(0,gt.join)(N,"node_modules",h));)if(N=(0,gt.dirname)(N),N.length<(0,tY.getHdbBasePath)().length){v=null;break}if(v)p=await HS(v,t,r,!1),d=!0;else throw new Error(`Unable to find package ${h}:${S}`)}else p=Bhe[h];if(!p)continue;let g=a(N=>(N.origin=r,ct(N)),"ensureTable"),A=_.network||(_.port||_.securePort)&&_,E=A?.securePort||A?.https&&A.port,R=!A?.https&&A?.port;if(pl.isMainThread&&(p=await p.startOnMainThread?.({server:We,ensureTable:g,port:R,securePort:E,resources:t,..._})||p,n&&A))for(let N of[R,E])try{if(+N&&!XK.includes(N)){let v=NI.get(x.HTTP_SESSIONAFFINITY);v&&Td.default.warn("Session affinity is not recommended and may cause memory leaks"),(v||!US)&&(XK.push(N),eI(N,v))}}catch(v){console.error("Error listening on socket",N,v,h)}if(t.isWorker&&(p=await p.start?.({server:We,ensureTable:g,port:R,securePort:E,resources:t,..._})||p),bI.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&_.files!=null){if(_.files.includes(".."))throw(0,eY.handleHDBError)("Can not reference parent directories");let N=(0,gt.join)(e,_.files).replace(/\\/g,"/"),v=N.indexOf("/*");if(v>-1&&_.files!==OI[h]?.files&&!(0,_t.existsSync)(N.slice(0,v)))throw new Error(`The path '${N.slice(0,v)}' does not exist and cannot be used as the base of the resolved 'files' path value '${_.files}'`);let k=(0,gt.basename)(e),F=_.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+k+F.slice(2):F==="."?"/"+k:"/"+k+"/"+F;let K,re,oe;if(_.root){let se=_.root;se.startsWith("/")&&(se=se.slice(1)),se.endsWith("/")&&(se=se.slice(0,-1)),se+="/",re=(0,gt.join)(e,se)}else(oe=N.indexOf("/*"))>-1?(re=N.slice(0,oe+1),K=(0,gt.relative)(e,re)):_.files.indexOf("/")>-1&&(re=N.slice(0,N.lastIndexOf("/")+1),K=(0,gt.relative)(e,re));let Z=!1;if(pl.isMainThread&&p.setupDirectory&&(Z=await p.setupDirectory?.(F,re,t)),t.isWorker&&p.handleDirectory&&(Z=await p.handleDirectory?.(F,re,t)),Z){d=!0;continue}for(let se of await(0,ZK.default)(N,{onlyFiles:!1,objectMode:!0})){let{path:Y,dirent:pe}=se;d=!0;let Te=(0,gt.relative)(e,Y).replace(/\\/g,"/");if(K)if(Te.startsWith(K))Te=Te.slice(K.length+1);else throw new Error(`The root path '${_.root}' does not reference a valid part of the file path '${Te}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ce=F+(F.endsWith("/")?"":"/")+Te;try{if(pe.isFile()){let me=await xhe(Y);pl.isMainThread&&await p.setupFile?.(me,Ce,Y,t),t.isWorker&&await p.handleFile?.(me,Ce,Y,t)}else pl.isMainThread&&await p.setupDirectory?.(Ce,Y,t),t.isWorker&&await p.handleDirectory?.(Ce,Y,t)}catch(me){me.message=`Could not load ${pe.isFile()?"file":"directory"} '${Y}'${_.module?" using '"+_.module+"'":""} for application '${e}' due to: ${me.message}`,Mh?.(me),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(me),t.set(_.path||"/",new Xo(me)),Ad.set(n?h:(0,gt.basename)(e),me.message)}}}}catch(g){g.message=`Could not load component '${h}' for application '${(0,gt.basename)(e)}' due to: ${g.message}`,Mh?.(g),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(g),t.set(_.path||"/",new Xo(g),null,!0),Ad.set(n?h:(0,gt.basename)(e),g.message)}}if(BS=f,pl.isMainThread&&!rY&&i&&(0,Rd.watchDir)(e,async()=>nY()),c.extensionModule){let h=await rE((0,gt.join)(e,c.extensionModule));return xS.set(o,h),h}if(!d&&t.isWorker){let h=`${e} did not load any modules, resources, or files, is this a valid component?`;Mh?.(new Error(h)),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(h),Ad.set((0,gt.basename)(e),h)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,Mh?.(c),t.set("",new Xo(c))}}var _t,gt,pl,RI,NI,yI,ZK,Rd,Td,eY,tY,Uhe,kS,xhe,TI,bI,rY,AI,Ad,Bhe,OI,XK,xS,Mh,BS,khe,ph=be(()=>{_t=require("fs"),gt=require("path"),pl=require("worker_threads"),RI=require("yaml"),NI=M(le()),yI=M(mt());H();bD();QD();Nx();Px();Dx();_B();j1();rK();sK();ZK=M(require("fast-glob")),Rd=M(tt()),Td=M(Q());rb();qr();eY=M(he());Me();rI();tY=M(le()),Uhe=M(CK());Hg();BK();_s();QK();kS=M(wt());SI();AA();({readFile:xhe}=_t.promises),TI=(0,kS.resolvePath)(NI.get(x.COMPONENTSROOT)),bI=new Map,Ad=new Map;a(nY,"loadComponentDirectories");Bhe={REST:cE,rest:cE,graphql:vA,graphqlSchema:bA,roles:tb,jsResource:sb,fastifyRoutes:Ww,login:ob,static:zw,operationsApi:Uhe,customFunctions:{},http:{},clustering:lI,replication:Ea,authentication:ah,mqtt:pI,loadEnv:Qw},OI={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(OI,"static",{value:{files:"web/**"}});XK=[],xS=new Map;a(Hhe,"setErrorReporter");khe=a(()=>BS,"getComponentName");a(HS,"loadComponent")});var NS=I((bLe,iY)=>{var{isMainThread:sY}=require("worker_threads"),{getTables:Fhe,getDatabases:RLe,table:yLe}=(Me(),P(st)),{loadComponentDirectories:Ghe,loadComponent:qhe}=(ph(),P(hh)),{resetResources:$he}=(Yl(),P(TD)),Vhe=KN(),Khe=wt(),{dirname:Yhe}=require("path"),{getConnection:Whe}=hr(),zhe=le(),{CONFIG_PARAMS:Qhe}=(H(),P($)),{loadCertificates:jhe}=js(),wI=new Map;async function Jhe(e=!1){!sY&&zhe.get(Qhe.CLUSTERING_ENABLED)&&Whe();try{sY&&await Vhe()}catch(n){console.error(n)}let t=$he();Fhe(),t.isWorker=e,await jhe(),await qhe(Yhe(Khe.getConfigFilePath()),t,"hdb",!0,wI),await Ghe(wI,t);let r=[];for(let[n]of wI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Jhe,"loadRootComponents");iY.exports.loadRootComponents=Jhe});var tt=I((NLe,si)=>{"use strict";KT();var{Worker:Xhe,MessageChannel:Zhe,parentPort:Bi,isMainThread:LI,threadId:epe,workerData:Hi}=require("worker_threads"),{PACKAGE_ROOT:tpe}=mt(),{join:lY,isAbsolute:rpe,extname:npe}=require("path"),{server:uY}=(qr(),P(Wl)),{watch:spe,readdir:ipe}=require("fs/promises"),{totalmem:oY}=require("os"),yd=(H(),P($)),dY=le(),ni=Q(),{randomBytes:ope}=require("crypto"),{_assignPackageExport:ape}=li(),aY=1024*1024,va=[],Ns=[],cpe=50,MI=1e4,lpe="restart",fY="request_thread_info",_Y="resource_report",hY="thread_info",pY="added-port",upe="ack",II;ape("threads",Ns);si.exports={startWorker:CI,restartWorkers:UI,shutdownWorkers:ppe,workers:va,setMonitorListener:ype,onMessageFromWorkers:mpe,onMessageByType:RY,broadcast:gpe,broadcastWithAcknowledgement:Tpe,setChildListenerByType:hpe,getWorkerIndex:mY,getWorkerCount:EY,getTicketKeys:SY,setMainIsWorker:fpe,setTerminateTimeout:dpe,restartNumber:Hi?.restartNumber||1};Ns.onMessageByType=RY;Ns.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ns.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};si.exports.whenThreadsStarted=new Promise(e=>{si.exports.threadsHaveStarted=e});var vI;function dpe(e){MI=e}a(dpe,"setTerminateTimeout");function mY(){return Hi?Hi.workerIndex:vI?0:void 0}a(mY,"getWorkerIndex");function EY(){return Hi?Hi.workerCount:vI?1:void 0}a(EY,"getWorkerCount");function fpe(e){vI=e,si.exports.threadsHaveStarted()}a(fpe,"setMainIsWorker");var gY=1,FS;function SY(){return FS||(FS=LI?ope(48):Hi.ticketKeys,FS)}a(SY,"getTicketKeys");Object.defineProperty(uY,"workerIndex",{get(){return mY()}});Object.defineProperty(uY,"workerCount",{get(){return EY()}});var TY={[fY](e,t){Ape(t)},[_Y](e,t){Rpe(t,e)}};function CI(e,t={}){let r=process.constrainedMemory?.()||oY();r=Math.min(r,oY(),2e4*aY);let n=dY.get(yd.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/aY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ns){let u=new Zhe;u.existingPort=l,i.push(u),o.push(u.port2)}npe(e)||(e+=".js");let c=new Xhe(rpe(e)?e:lY(tpe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:gY=t.threadCount,name:t.name,restartNumber:si.exports.restartNumber,ticketKeys:SY()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:pY,port:l,threadId:c.threadId},[l]);return qS(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>CI(e,t),c.on("error",l=>{ni.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{va.splice(va.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<cpe?(t.unexpectedRestarts=c.unexpectedRestarts+1,CI(e,t)):ni.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{TY[l.type]?.(l,c)}),va.push(c),Ope(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(CI,"startWorker");var _pe=[yd.THREAD_TYPES.HTTP];async function UI(e=null,t=Math.max(gY>3,1),r=!0){if(LI){try{process.chdir(process.cwd())}catch(o){ni.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=NS();await o()}si.exports.restartNumber++,t<1&&(t=t*va.length);let n=[],s=[];for(let o of va.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ni.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:si.exports.restartNumber,type:yd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=_pe.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{ni.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},MI*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===yd.ITC_EVENT_TYPES.CHILD_STARTED&&(ni.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");ni.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=rd();r&&(e==="http"||!e)&&dY.get(yd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Bi.postMessage({type:lpe,workerType:e})}a(UI,"restartWorkers");function hpe(e,t){TY[e]=t}a(hpe,"setChildListenerByType");function ppe(e){return UI(e,1/0,!1)}a(ppe,"shutdownWorkers");var AY=[];function mpe(e){AY.push(e)}a(mpe,"onMessageFromWorkers");var PI=new Map;function RY(e,t){let r=PI.get(e);r||PI.set(e,r=[]),r.push(t)}a(RY,"onMessageByType");var Epe=10;async function gpe(e,t){let r=0;for(let n of Ns)try{n.postMessage(e),r++>Epe&&(r=0,await new Promise(setImmediate))}catch(s){ni.error("Unable to send message to worker",s)}t&&bY(e,null)}a(gpe,"broadcast");var GS=new Map,Spe=1;function Tpe(e){return new Promise(t=>{let r=0;for(let n of Ns)try{let s=Spe++,i=a(()=>{GS.delete(s),--r===0&&t(),n!==Bi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,GS.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of GS)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ni.error("Unable to send message to worker",s)}r===0&&t()})}a(Tpe,"broadcastWithAcknowledgement");function Ape(e){e.postMessage({type:hY,workers:yY()})}a(Ape,"sendThreadInfo");function yY(){let e=Date.now();return va.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(yY,"getChildWorkerInfo");function Rpe(e,t){e.resources=t,e.resources.updated=Date.now()}a(Rpe,"recordResourceReport");var DI;function ype(e){DI=e}a(ype,"setMonitorListener");var bpe=1e3,cY=!1;function Ope(){cY||(cY=!0,setInterval(()=>{for(let e of va){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DI&&DI()},bpe).unref())}a(Ope,"startMonitoring");var Npe=1e3;if(Bi&&Hi?.addPorts){qS(Bi);for(let e=0,t=Hi.addPorts.length;e<t;e++){let r=Hi.addPorts[e];r.threadId=Hi.addThreadIds[e],qS(r)}setInterval(()=>{let e=process.memoryUsage();Bi.postMessage({type:_Y,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Npe).unref(),II=a(()=>new Promise((e,t)=>{Bi.on("message",r),Bi.postMessage({type:fY});function r(n){n.type===hY&&(Bi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else II=yY;si.exports.getThreadInfo=II;function qS(e,t){Ns.push(e),e.on("message",r=>{if(r.type===pY)r.port.threadId=r.threadId,qS(r.port);else if(r.type===upe){let n=GS.get(r.id);n&&n()}else bY(r,e)}).on("close",()=>{Ns.splice(Ns.indexOf(e),1)}).on("exit",()=>{Ns.splice(Ns.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(qS,"addPort");function bY(e,t){for(let n of AY)n(e,t);let r=PI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ni.error(s)}}a(bY,"notifyMessageListeners");if(LI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await ipe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(lY(s,o.name));try{for await(let{filename:o}of spe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await UI(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");si.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Bi.on("message",async e=>{let{type:t}=e;t===yd.ITC_EVENT_TYPES.SHUTDOWN&&(si.exports.restartNumber=e.restartNumber,Bi.unref(),setTimeout(()=>{ni.warn("Thread did not voluntarily terminate",epe),process.exit(0)},MI).unref())})});var CY={};ve(CY,{onStorageReclamation:()=>vh,runReclamationHandlers:()=>kI,setAvailableSpaceRatioGetter:()=>Ipe});function vh(e,t,r){(r||(0,VS.getWorkerIndex)()===(0,VS.getWorkerCount)()-1)&&($S.has(e)||$S.set(e,[]),$S.get(e).push({priority:0,handler:t}),HI||(HI=setTimeout(kI,NY).unref()))}async function kI(){for(let[e,t]of $S)try{let r=await IY(e),n=wpe/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(BI.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){BI.default.error?.("Error running storage reclamation handlers",r)}HI=setTimeout(kI,NY).unref()}function Ipe(e){IY=e??wY}var xI,VS,BI,KS,OY,$S,wpe,NY,HI,wY,IY,YS=be(()=>{xI=require("node:fs/promises"),VS=M(tt()),BI=M(pi());H();KS=M(le()),OY=M(ae());KS.default.initSync();$S=new Map,wpe=KS.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,NY=(0,OY.convertToMS)(KS.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;a(vh,"onStorageReclamation");wY=a(async e=>{if(xI.statfs){let t=await(0,xI.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"),IY=wY;a(kI,"runReclamationHandlers");a(Ipe,"setAvailableSpaceRatioGetter")});var K0={};ve(K0,{ACTION_32_BIT:()=>Zp,ACTION_64_BIT:()=>Dpe,AUDIT_STORE_OPTIONS:()=>rh,Decoder:()=>Kc,HAS_BLOBS:()=>Un,HAS_CURRENT_RESIDENCY_ID:()=>fc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Rf,HAS_ORIGINATING_OPERATION:()=>Af,HAS_PREVIOUS_RESIDENCY_ID:()=>_c,REMOTE_SEQUENCE_UPDATE:()=>qE,createAuditEntry:()=>jl,getLastRemoved:()=>mO,openAuditStore:()=>QS,readAuditEntry:()=>bt,removeAuditEntry:()=>jS,setAuditRetention:()=>Ppe,transactionKeyEncoder:()=>HY});function QS(e){let t=e.auditStore=e.openDB(FI.AUDIT_STORE_NAME,{create:!1,...rh});t||(t=e.auditStore=e.openDB(FI.AUDIT_STORE_NAME,rh),DY(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,f){return r[l]=f,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=qI;vh(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(f=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let d=0,h,_;try{for(let{key:p,value:S}of t.getRange({start:1,snapshot:!1,end:Date.now()-GI/(1+i*i)})){try{h=jS(t,p,S)}catch(g){bd.warn("Error removing audit entry",g)}if(_=p,await new Promise(setImmediate),++d>=Cpe){o=10;break}}await h}finally{d===0?o=Math.min(o<<1,GI/10):(DY(t,_),o>100&&(o=o>>1)),f(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,xh.getWorkerIndex)()===(0,xh.getWorkerCount)()-1&&c(),(0,xh.getWorkerIndex)()===0&&!PY)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(PY=!0,bd.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 jS(e,t,r){let n=Lpe(r),s;if(n&Un){s=bt(r);let i=e.tableStores[s.tableId],o=i.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&uc(()=>ra(s.getValue(i)),i.rootStore)}if((n&15)===$I){s=s||bt(r);let i=s.tableId;e.tableStores[s.tableId].getEntry(s.recordId).version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function DY(e,t){VI[0]=t,e.put(Symbol.for("last-removed"),kY)}function mO(e){let t=e.get(Symbol.for("last-removed"));if(t)return kY.set(t),VI[0]}function Ppe(e,t=qI){GI=e,qI=t}function jl(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=FY[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let p=1;if(n&&(n>1?Ua.setFloat64(0,n):ws.set(VA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}A(s),A(t),g(r),Ua.setFloat64(p,e),p+=8,l&fc&&A(u),l&_c&&A(f),l&Rf&&(Ua.setFloat64(p,d),p+=8),l&Af&&A(GY[h]),i?g(i):ws[p++]=0,l?Ua.setUint32(n?8:0,_|l|3221225472):ws[n?8:0]=_;let S=ws.subarray(0,p);if(c)return Buffer.concat([S,c]);return S;function g(E){let R=p;p+=1,p=(0,ml.writeKey)(E,ws,p);let N=p-R-1;N>127?N>16383?(bd.error("Key or username was too large for audit entry",E),p=R+1,ws[R]=0):(ws.copyWithin(R+2,R+1,p),Ua.setUint16(R,N|32768),p++):ws[R]=N}function A(E){E<128?ws[p++]=E:E<16384?(Ua.setUint16(p,E|32768),p+=2):E<1056964608?(Ua.setUint32(p,E|3221225472),p+=4):(ws[p]=255,Ua.setUint32(p+1,E),p+=5)}}function Lpe(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 Kc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function bt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Kc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,p,S;if(i&fc&&(h=n.readInt()),i&_c&&(_=n.readInt()),i&Rf&&(p=n.readFloat64()),i&Af){let E=n.readInt();S=GY[E]}l=n.readInt();let g=n.position,A=n.position+=l;return{type:FY[i&7],tableId:c,nodeId:o,get recordId(){return(0,ml.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return A>g?(0,ml.readKey)(e,g,A):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(E,R,N){if(i&WS||i&Uh&&!R)return uc(()=>E.decoder.decode(e.subarray(n.position,r)),E.rootStore);if(i&Uh&&N)return Fy(E.getEntry(this.recordId),N,E)},getBinaryValue(){return i&(WS|Uh)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:p,originatingOperation:S}}catch(n){return bd.error("Reading audit entry error",n,e),{}}}var ml,zS,FI,xh,BY,bd,ws,Ua,HY,rh,GI,Cpe,VI,kY,qI,PY,WS,Uh,LY,$I,MY,vY,UY,xY,Zp,Dpe,qE,fc,_c,Af,Rf,Un,FY,GY,Kc,Ji=be(()=>{ml=require("ordered-binary"),zS=M(le()),FI=M(vt());H();xh=M(tt()),BY=M(ae());Jl();bd=M(Q());$m();ls();YS();(0,zS.initSync)();ws=Buffer.alloc(2816),Ua=new DataView(ws.buffer,ws.byteOffset,2816),HY={writeKey(e,t,r){return e===Tf?(t.set(Tf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ml.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,ml.readKey)(e,t,r)}},rh={encoding:"binary",keyEncoder:HY},GI=(0,BY.convertToMS)((0,zS.get)(x.LOGGING_AUDITRETENTION))||86400*3,Cpe=1e3,VI=new Float64Array(1),kY=new Uint8Array(VI.buffer),qI=1e4,PY=!1;a(QS,"openAuditStore");a(jS,"removeAuditEntry");a(DY,"updateLastRemoved");a(mO,"getLastRemoved");a(Ppe,"setAuditRetention");WS=16,Uh=32,LY=1,$I=2,MY=3,vY=4,UY=5,xY=6,Zp=14,Dpe=15,qE=11,fc=512,_c=1024,Af=2048,Rf=4096,Un=8192,FY={put:LY|WS,[LY]:"put",delete:$I,[$I]:"delete",message:MY|WS,[MY]:"message",invalidate:vY|Uh,[vY]:"invalidate",patch:UY|Uh,[UY]:"patch",relocate:xY,[xY]:"relocate"},GY={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(jl,"createAuditEntry");a(Lpe,"readAction");a(bt,"readAuditEntry");Kc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function WI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=$Y,Mpe(e.primaryStore,e.auditStore)):(c=qY,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{VY(qY[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Kl(t);let f=new YI(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function VY(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),KY(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=bt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Kl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,KI.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,KI.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d!==l.length-1&&u++,d>-1?l=l.slice(0,d+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Mpe(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=$Y[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{VY(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function KY(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function hk(e){return e.nextTransaction||(WI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),KY(e)),e.nextTransaction}var KI,qY,$Y,YI,EO=be(()=>{KI=M(Q());Fl();Yl();Ji();qY=Object.create(null),$Y=Object.create(null);a(WI,"addSubscription");YI=class extends Dn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(VY,"notifyFromTransactionData");a(Mpe,"listenToCommits");a(KY,"nextTransaction");a(hk,"whenNextTransaction")});var Iw={};ve(Iw,{EVICTED:()=>jo,INVALIDATED:()=>Ln,coerceType:()=>ZS,makeTable:()=>tT,setServerUtilities:()=>Gpe});function tT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:p,evictionMS:S,audit:g,trackDeletes:A}=e;S??=0;let{attributes:E}=e;E||(E=[]);let R=WA(i,n,l),N,v,k={},F=Promise.resolve(),K,re,oe;for(let W of E)(W.assignCreatedTime||W.name==="__createdtime__")&&(K=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(re=W),W.expiresAt&&(oe=W),W.isPrimaryKey&&(k=W);let Z,se=[],Y=[],pe=1,Te=2,Ce={},me={},jt=864e5,at=0,Ar,os,Cn,Dl=!1,Ll,kT=new Map,FT=new Map,Dt,Hd,fp=gl.get(x.REPLICATION_DATABASES);if(Array.isArray(fp)){for(let W of fp)if(W.name===c&&W.replicateTo>=0){Hd=W.replicateTo;break}}let _p=i.getRange({start:!1,end:!1}).constructor,kd=10,hp=6;g&&qd(),vh(i.env.path,W=>{if(v)return qo(W)});class Pe extends Gr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=K;static updatedTimeProperty=re;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return p}static dbisDB=f;static schemaDefined=u;static sourcedFrom(m,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)m.intermediateSource=!0,this.sources.unshift(m);else{if(this.sources.some(b=>!b.intermediateSource)){if(this.sources.some(b=>b.name===m.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(m)}v=v||m.get&&(!m.get.reliesOnPrototype||m.prototype.get),N=N||m.load;let O=a(b=>{let U=this.sources;if(U=U.filter(L=>L.intermediateSource&&L[b]&&(!L[b].reliesOnPrototype||L.prototype[b])),U.length>0)if(U.length===1){let L=U[0];return(C,B,q)=>{if(C?.source!==L)return L[b](B,q,C)}}else return(L,C,B)=>{let q=[];for(let z of U){if(L?.source===z)break;q.push(z[b](C,B,L))}return Promise.all(q)}},"getApplyToIntermediateSource"),w=this.sources[this.sources.length-1];w.intermediateSource&&(w={});let y=a(b=>{if(w[b]&&(!w[b].reliesOnPrototype||w.prototype[b]))return(U,L,C)=>{if(!U?.source)return w[b](L,C,U)}},"getApplyToCanonicalSource");Ce={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},me={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish"),invalidate:O("invalidate")};let D=w.shouldRevalidateEvents;return(async()=>{let b=!1,U,L=a(async(C,B)=>{let q=C.value,z=C.table?$e[c][C.table]:Pe;if(c===Kd&&(C.table===Hl.ROLE_TABLE_NAME||C.table===Hl.USER_TABLE_NAME)&&(b=!0),C.id===void 0&&(C.id=q[z.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=m;let j={residencyId:Bl(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId},G=await z.getResource(C.id,B,j);switch(C.finished&&await C.finished,C.type){case"put":return D?G._writeInvalidate(j):G._writeUpdate(q,!0,j);case"patch":return D?G._writeInvalidate(j):G._writeUpdate(q,!1,j);case"delete":return G._writeDelete(j);case"publish":return G._writePublish(q,j);case"invalidate":return G._writeInvalidate(j);case"relocate":return G._writeRelocate(j);default:xe.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=m.subscribe;C&&A==null&&(A=!0);let B={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,El.getWorkerIndex)(),B):(0,El.getWorkerIndex)()===0,z=C&&q&&await m.subscribe?.(B);if(z){let j;for await(let G of z)try{if(!(G.type==="transaction"?G.writes[0]:G)){xe.default.error?.("Bad subscription event",G);continue}if(G.source=m,G.type==="end_txn"){if(j?.resolve(),G.localTime&&U!==G.localTime){if(G.remoteNodeIds?.length>0){let fe=[Symbol.for("seq"),G.remoteNodeIds[0]],ie=f.get(fe),J=ie?.nodes;J||(J=[]);for(let ye of G.remoteNodeIds.slice(1)){let Re=J.find(Be=>Be.id===ye);J=J.filter(Be=>Be.id!==ye||Be===Re),Re||(Re={id:ye,seqId:0},J.push(Re)),Re.seqId=Math.max(ie?.seqId??1,G.localTime),ye===j?.nodeId&&(Re.lastTxnTime=G.timestamp)}let ce=Math.max(ie?.seqId??1,G.localTime);xe.default.trace?.("Received txn",c,new Date(ce),new Date(G.localTime),G.remoteNodeIds),f.put(fe,{seqId:ce,nodes:J})}U=G.localTime}G.onCommit&&j?.committed.then(G.onCommit);continue}if(j)if(G.beginTxn)j.resolve();else{j.write_promises.push(L(G,j));continue}!G.timestamp&&G.version&&(G.timestamp=G.version);let te=yt(G,()=>{if(G.type==="transaction"){let fe=[];for(let ie of G.writes)try{fe.push(L(ie,G))}catch(J){throw J.message+=" writing "+JSON.stringify(ie)+" of event "+JSON.stringify(G),J}return Promise.all(fe)}else if(G.type==="define_schema"){let fe=this.attributes.slice(0),ie;for(let J of G.attributes)fe.find(ce=>ce.name===J.name)||(fe.push(J),ie=!0);ie&&(ct({table:s,database:c,attributes:fe,origin:"cluster"}),Hh.signalSchemaChange(new kh.SchemaEventMsg(process.pid,qt.CREATE_TABLE,c,s)))}else return G.beginTxn?(j=G,j.write_promises=[L(G,G)],new Promise(fe=>{j.resolve=()=>fe(Promise.all(j.write_promises))})):L(G,G)});j&&(j.committed=te),b&&te&&!te?.waitingForUserChange&&(te.then(()=>Hh.signalUserChange(new kh.UserEventMsg(process.pid))),te.waitingForUserChange=!0),G.onCommit&&(te?te.then(G.onCommit):G.onCommit())}catch(ue){xe.default.error?.("error in subscription handler",ue)}}}catch(C){xe.default.error?.(C)}})(),this}static get isCaching(){return v}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(m,T,O){let w=super.getResource(m,T,O);if(m!=null){Nr(m);try{if(w.getRecord?.())return w;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let y=!O?.async||i.cache?.get?.(m),D=Hr(T),b=D.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ml(m,T,{transaction:b,ensureLoaded:O?.ensureLoaded},y,U=>{if(U?Pe._updateResource(w,U):w.#e=null,T.onlyIfCached&&T.noCacheStore){if(!w.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(O?.ensureLoaded){let L=sn(m,U,T,w);if(L)return D?.disregardReadTxn(),w.#i=!0,QI(L,C=>(Pe._updateResource(w,C),w))}return w})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(m)),y}}return w}static _updateResource(m,T){m.#r=T,m.#e=T?.value??null,m.#n=T?.version}ensureLoaded(){let m=sn(this.getId(),this.#r,this.getContext());if(m)return this.#i=!0,QI(m,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let m=k?.type;if(m==="String"||m==="ID")return super.getNewId();if(!Dt){let y=i.getEntry(Symbol.for("id_allocation")),D=y?.value,b;if(D&&D.nodeName===server.hostname&&(!$pe(i)||D.pid===process.pid)){let U=D.start,L=D.end;b=U;for(let C of i.getKeys({start:L,end:U,limit:1,reverse:!0}))b=C}else D=w(y?.version??null),b=D.start;Dt=new BigInt64Array([BigInt(b)+1n]),Dt=new BigInt64Array(i.getUserSharedBuffer("id",Dt.buffer)),Dt.maxSafeId=D.end}let T=Number(Atomics.add(Dt,0,1n)),O=m==="Int"?512:1048576;if(T+O>=Dt.maxSafeId){let y=a(D=>{Dt.maxSafeId=T+(m==="Int"?1023:4194303);let b=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,U=D?void 0:i.useReadTransaction(),L=Number(Dt[0]);for(let q of i.getKeys({start:L+1,end:b,limit:1,transaction:U}))b=q;U?.done();let{value:C,version:B}=i.getEntry(Symbol.for("id_allocation"));if(Dt.maxSafeId<b){if(C.end>Dt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,Dt.maxSafeId,B),i.put(Symbol.for("id_allocation"),{start:C.start,end:Dt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),B)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Dt.maxSafeId}, but id of ${b} detected`);let q=w(B);q.alreadyUpdated||Atomics.store(Dt,0,BigInt(q.start+1)),Dt.maxSafeId=q.end}},"updateEnd");T+O===Dt.maxSafeId?setImmediate(y):T+100>=Dt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${m=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>y(!0)))}return T;function w(y){let D=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,b=D/4,U,L,C=!1,B,q;do{B=Math.floor(Math.random()*D),q={start:B,end:B+(m==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},U=0;for(let z of i.getKeys({start:B,limit:1,reverse:!0}))U=z;L=D;for(let z of i.getKeys({start:B+1,end:D,limit:1}))L=z;b*=.875,b<1e3&&!C&&(C=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${m==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,B,U,L,b))}while(!(b<L-B&&(b<B-U||U===0)));return i.transactionSync(()=>{let z=i.getEntry(Symbol.for("id_allocation"));return(z?.version??null)==y?(xe.default.info?.("Allocated new id range",q),i.put(Symbol.for("id_allocation"),q,Date.now()),q):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...z.value})})}}static setTTLExpiration(m){if(typeof m=="number")p=m*1e3,S||(S=0);else if(m&&typeof m=="object")p=m.expiration*1e3,S=(m.eviction||0)*1e3,jt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");jt=jt||(p+S)/4,qo()}static getResidencyRecord(m){return f.get([Symbol.for("residency_by_id"),m])}static setResidency(m){Pe.getResidency=m}static setResidencyById(m){Pe.getResidencyById=m}static getResidency(m,T,O){if(Pe.getResidencyById)return Pe.getResidencyById(m[t]);let w=Hd;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(w=T.replicateTo)}if(w>=0&&server.nodes){let y=[server.hostname];if(O)y.push(...O.slice(0,w));else{let D=server.nodes.map(L=>L.name),b=Math.floor(D.length*Math.random());y.push(...D.slice(b,b+w));let U=b+w-D.length;U>0&&y.push(...D.slice(0,U))}return y}}static enableAuditing(m=!0){g=m,m&&qd(),Pe.audit=m}static coerceId(m){return m===""?null:ZS(m,k)}static async dropTable(){delete $e[c][s];for(let m of i.getRange({versions:!0,snapshot:!1,lazy:!0}))m.metadataFlags&Un&&m.value&&ra(m.value);if(c===o){for(let m of E)f.remove(Pe.tableName+"/"+m.name),r[m.name]?.drop();f.remove(Pe.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await XS.default.remove(data_path),await XS.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Hh.signalSchemaChange(new kh.SchemaEventMsg(process.pid,qt.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this.isCollection)return this.search(m);if(this.getId()===null)return m?.conditions?this.search(m):{records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E};if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(m,T){let O=Gd(m);if(O?.read){if(O.isSuperUser)return!0;let w=O.attribute_permissions,y=T?.select;if(w?.length>0||Dl&&y){if(T||(T={}),y){let D=w?.length>0&&zI(w,"read");T.select=y.map(b=>{let U=b.name||b;if(!D||D[U]){let L=Cn[U]?.definition?.tableClass;if(L){if(b.name||(b={name:b}),!L.prototype.allowRead.call(null,m,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else T.select=w.filter(D=>D.read&&!Cn[D.attribute_name]).map(D=>D.attribute_name);return T}else return!0}}allowUpdate(m,T){let O=Gd(m);if(O?.update){let w=O.attribute_permissions;if(w?.length>0){let y=zI(w,"update");for(let D in T)if(!y[D])return!1;for(let D of w){let b=D.attribute_name;!D.update&&!(b in T)&&(T[b]=this.getProperty(b))}}return Go(this.getContext())}}allowCreate(m,T){if(this.isCollection){let O=Gd(m);if(O?.insert){let w=O.attribute_permissions;if(w?.length>0){let y=zI(w,"insert");for(let D in T)if(!y[D])return!1;return Go(this.getContext())}else return Go(this.getContext())}}else return this.allowUpdate(m,{})}allowDelete(m){return Gd(m)?.delete&&Go(this.getContext())}update(m,T){if(!Hr(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let w;return typeof m=="object"&&m&&(T?(Object.isFrozen(m)&&(m={...m}),this.#e={},this.#t=m):(w=this.#t,w&&(m=Object.assign(w,m)),this.#t=m)),this._writeUpdate(this.#t,T),this}addTo(m,T){if(typeof T=="number"||typeof T=="bigint")this.#s===WY?this.set(m,(+this.getProperty(m)||0)+T):(this.#s||this.update(),this.set(m,new Ym(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,T){if(typeof T=="number")return this.addTo(m,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(m){this.#t=m}setRecord(m){this.#e=m}invalidate(){this._writeInvalidate()}_writeInvalidate(m){let T=this.getContext(),O=this.getId();Nr(O),Hr(this.getContext()).addWrite({key:O,store:i,invalidated:!0,entry:this.#r,before:Ce.invalidate?.bind(this,T,O),beforeIntermediate:me.invalidate?.bind(this,T,O),commit:a((y,D)=>{if(Fo(y,D,m?.nodeId)<=0)return;let b=null;for(let U in r)b||(b={}),b[U]=this.getProperty(U);xe.default.trace?.(`Invalidating entry id: ${O}, timestamp: ${new Date(y).toISOString()}`),R(O,b,this.#r,y,Ln,g,{user:T?.user,residencyId:m?.residencyId,nodeId:m?.nodeId},"invalidate")},"commit")})}_writeRelocate(m){let T=this.getContext(),O=this.getId();Nr(O),Hr(this.getContext()).addWrite({key:O,store:i,invalidated:!0,entry:this.#r,before:Ce.relocate?.bind(this,T,O),beforeIntermediate:me.relocate?.bind(this,T,O),commit:a((y,D)=>{if(Fo(y,D,m?.nodeId)<=0)return;let b=Pe.getResidencyRecord(m.residencyId),U=0,L=null,C=D?.value;if(b&&!b.includes(server.hostname)){for(let B in r)L||(L={}),L[B]=C(B);U=Ln}else L=C;xe.default.trace?.(`Relocating entry id: ${O}, timestamp: ${new Date(y).toISOString()}`),R(O,L,this.#r,y,U,g,{user:T.user,residencyId:m.residencyId,nodeId:m.nodeId,expiresAt:m.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(m,T){let O={previousResidency:this.getResidencyRecord(m.residencyId),isRelocation:!0},w=this.getResidency(T.value,O),y;if(w){if(!Array.isArray(w))throw new Error("Residency must be an array, but was: "+w);if(!w.includes(server.hostname))return;y=Bl(w)}let b=R(m.key,T.value,m,m.version,0,!0,{residencyId:y,expiresAt:T.expiresAt},"relocate",!1,null)}static evict(m,T,O){let w=this.Source,y;if(!((v||g)&&(!T||(y=i.getEntry(m),!y||!T)||y.version!==O))){if(v){if(i.hasLock(m,y.version))return;let D;for(let b in r)D||(D={}),D[b]=T[b];if(D)return R(m,D,y,O,jo,null,null,null,!0)}if(i.ifVersion(m,O,()=>{nn(m,T,null)}),g)return R(m,null,y,O,jo,null,null,null,!0);dc(i,y??i.getEntry(m),O)}}lock(){throw new Error("Not yet implemented")}static operation(m,T){return m.table||=s,m.schema||=c,tW.operation(m,T)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,T,O){let w=this.getContext(),y=Hr(w),D=this.getId();Nr(D);let b=this.#r;this.#s=T?WY:Hpe;let U={key:D,store:i,entry:b,nodeName:w?.nodeName,validate:a(L=>{m||(m=this.#t),T||m&&Vm(this.#t===m?this:m)?w?.source||(y.checkOverloaded(),this.validate(m,!T),re&&(m[re.name]=re.type==="Date"?new Date(L):re.type==="String"?new Date(L).toISOString():L),T&&(t&&m[t]!==D&&(m[t]=D),K&&(b?.value?m[K.name]=b?.value[K.name]:m[K.name]=K.type==="Date"?new Date(L):K.type==="String"?new Date(L).toISOString():L),m=Pc(m))):y.removeWrite(U)},"validate"),before:T?Ce.put?()=>Ce.put(w,D,m):null:Ce.patch?()=>Ce.patch(w,D,m):Ce.put?()=>Ce.put(w,D,Pc(this)):null,beforeIntermediate:T?me.put?()=>me.put(w,D,m):null:me.patch?()=>me.patch(w,D,m):me.put?()=>me.put(w,D,Pc(this)):null,commit:a((L,C,B)=>{if(B){if(w&&C?.version>(w.lastModified||0)&&(w.lastModified=C.version),this.#r=C,C?.value&&C.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");T||(this.#e=C?.value??null)}this.#t=void 0,this.#n=L;let q=C?.value,z=m;this.#s=0;let j=!1,G=Fo(L,C,O?.nodeId),ue;if(G<=0)if(g){let ce=C.localTime,ye=C.version;xe.default.trace?.("Applying CRDT update to record with id: ",D,"applying later update:",ye);let Re=[];for(;ce>L||ye>=L&&ce>0;){let Be=l.get(ce);if(!Be)break;let nt=bt(Be);if(ye=nt.version,ye>=L){if(ye===L){if(G=Fo(L,{version:ye,localTime:ce},O?.nodeId),G===0)return;if(G>0)continue}if(nt.type==="patch")Re.push(nt),ue=m;else if(nt.type==="put"||nt.type==="delete")return}ce=nt.previousLocalTime}Re.sort((Be,nt)=>Be.version-nt.version);for(let Be of Re){let nt=Be.getValue(i);if(z=qm(z,nt,T),xe.default.debug?.("Rebuilding update with future patch:",z),!z)return}}else{if(T)return;z=qm(z,q,T),xe.default.debug?.("Rebuilding update without audit:",z)}let te;if(T?te=z:(this.#e=q,te=Pc(this,z)),this.#e=te,te&&te.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let fe;if(O?.residencyId!=null)fe=O.residencyId;else{b?.residencyId&&(w.previousResidency=Pe.getResidencyRecord(b.residencyId));let ce=Pe.getResidency(te,w);if(ce){if(!Array.isArray(ce))throw new Error("Residency must be an array, got: "+ce);if(!ce.includes(server.hostname))if(ue??=te,j=!0,Pe.getResidencyById)te=void 0;else{te=null;for(let ye in r)te||(te={}),te[ye]=ue[ye]}}fe=Bl(ce)}T||(ue=m);let ie=w?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${D}, timestamp: ${new Date(L).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${C?", replaces entry from: "+new Date(C.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(te).slice(0,100)}catch{return""}})()),nn(D,q,te);let J=T?"put":"patch";R(D,te,C,L,j?Ln:0,g,{omitLocalRecord:j,user:w?.user,residencyId:fe,expiresAt:ie,nodeId:O?.nodeId,originatingOperation:w?.originatingOperation},J,!1,ue),w.expiresAt&&qo()},"commit")};y.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this.isCollection){for await(let T of this.search(m))(await Pe.getResource(T[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this.#e?this._writeDelete(m):!1}_writeDelete(m){let T=Hr(this.getContext()),O=this.getId();Nr(O);let w=this.getContext();return T.addWrite({key:O,store:i,entry:this.#r,nodeName:w?.nodeName,before:Ce.delete?.bind(this,w,O),beforeIntermediate:me.delete?.bind(this,w,O),commit:a((y,D,b)=>{let U=D?.value;b&&(w&&D?.version>(w.lastModified||0)&&(w.lastModified=D.version),Pe._updateResource(this,D)),!(Fo(y,D,m?.nodeId)<=0)&&(nn(this.getId(),U),xe.default.trace?.(`Deleting record with id: ${O}, txn timestamp: ${new Date(y).toISOString()}`),g||A?(R(O,null,this.#r,y,0,g,{user:w?.user,nodeId:m?.nodeId},"delete"),g||qo()):dc(i,D))},"commit")}),!0}search(m){let T=this.getContext(),O=Hr(T);if(!m)throw new Error("No query provided");let w=m.conditions;w?w.length===void 0&&(w=w[Symbol.iterator]?Array.from(w):[w]):w=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this.getId()&&(w=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(w));let y,D={};function b(J,ce){let ye;switch(ce){case"and":case void 0:if(J.length<1)throw new Error('An "and" operator requires at least one condition');ye=!0;break;case"or":if(J.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ce)}for(let Re of J){if(Re.conditions){Re.conditions=b(Re.conditions,Re.operator);continue}let Be=Re[0]??Re.attribute,nt=Be==null?k:_i(E,Be);if(nt)(nt.type||mA[Re.comparator])&&(Re[1]===void 0?Re.value=L(Re.value,nt):Re[1]=L(Re[1],nt));else if(Be!=null)throw(0,Or.handleHDBError)(new Error,`${Be} is not a defined attribute`,404);if(Re.chainedConditions)if(Re.chainedConditions.length===1&&(!Re.operator||Re.operator=="and")){let wr=Re.chainedConditions[0],kr,Ae;if(wr.comparator==="gt"||wr.comparator==="greater_than"||wr.comparator==="ge"||wr.comparator==="greater_than_equal"?(kr=Re,Ae=wr):(kr=wr,Ae=Re),kr.comparator!=="lt"&&kr.comparator!=="less_than"&&kr.comparator!=="le"&&kr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let et=Ae.comparator==="ge"||Ae.comparator==="greater_than_equal",Lt=kr.comparator==="le"||kr.comparator==="less_than_equal";Re.comparator=(et?"ge":"gt")+(Lt?"le":"lt"),Re.value=[Ae.value,kr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return J}a(b,"prepareConditions");function U(J,ce){if(m.enforceExecutionOrder)return J;for(let ye of J)ye.conditions&&(ye.conditions=U(ye.conditions,ye.operator));return J.length>1&&ce!=="or"?(0,ZY.sortBy)(J,kp(Pe)):J}a(U,"orderConditions");function L(J,ce){return Array.isArray(J)?J.map(ye=>ZS(ye,ce)):ZS(J,ce)}a(L,"coerceTypedValues");let C=m.operator;(w.length>0||C)&&(w=b(w,C));let B=typeof m.sort=="object"&&m.sort,q;if(B&&C!=="or"){let J=B.attribute;if(J==null)throw new Or.ClientError("Sort requires an attribute");if(y=w.find(ce=>Vl(ce.attribute)===Vl(J)),!y){let ce=_i(E,J);if(!ce)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not a defined attribute`,404);if(ce.indexed)y={attribute:J,comparator:"sort"},w.push(y);else if(w.length===0&&!m.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not indexed and not combined with any other conditions`,404)}y&&(y.descending=!!B.descending)}w=U(w,C),B&&(y&&w[0]===y?B.next&&(q={dbOrderedAttribute:B.attribute,attribute:B.next.attribute,descending:B.next.descending,next:B.next.next}):(y&&w.splice(w.indexOf(y),1),q=B));let z=m.select;if(w.length===0&&(w=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:w,operator:C,postOrdering:q,selectApplied:!!z};let j=O.useReadTxn(),G=EA(w,C,Pe,j,m,T,(J,ce)=>Ul(J,z,T,j,ce),D),ue=m.ensureLoaded!==!1;q||(G=ie(G));let te=Pe.transformEntryForSelect(z,T,j,D,ue,!0),fe=Pe.transformToOrderedSelect(G,z,q,j,T,te);function ie(J){return m.offset||m.limit!==void 0?J.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):J}return a(ie,"applyOffset"),q&&(fe=ie(fe)),fe.onDone=()=>{fe.onDone=null,O.doneReadTxn()},fe.selectApplied=!0,fe.getColumns=()=>{if(z){let J=[];for(let ce of z)ce==="*"?J.push(...E.map(ye=>ye.name)):J.push(ce.name||ce);return J}return E.filter(J=>!J.computed&&!J.relationship).map(J=>J.name)},fe}static transformToOrderedSelect(m,T,O,w,y,D){let b=new _p;if(O){m=Ul(m,T,w,y,null);let U;b.iterate=function(){let C,B=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),q,z=O.dbOrderedAttribute,j,G,ue=!0;function te(ie){let J=ie.next&&te(ie.next),ce=ie.descending;return(ye,Re)=>{let Be=vl(ye,ie.attribute,w),nt=vl(Re,ie.attribute,w),wr=ce?(0,Sl.compareKeys)(nt,Be):(0,Sl.compareKeys)(Be,nt);return wr===0?J?.(ye,Re)||0:wr}}a(te,"createComparator");let fe=te(O);return{async next(){let ie;if(C)if(ie=C.next(),ie.done){if(q)return b.onDone&&b.onDone(),ie}else return{value:await D.call(this,ie.value)};U=[],j&&U.push(j);do if(ie=await B.next(),ie.done){if(q=!0,U.length)break;return b.onDone&&b.onDone(),ie}else{let J=ie.value;if(J?.then&&(J=await J),z){let ce=vl(J,z,w);if(ue)ue=!1,G=ce;else if(ce!==G){G=ce,j=J;break}}U.push(J)}while(!0);return O.isGrouped,U.sort(fe),C=U[Symbol.iterator](),ie=C.next(),ie.done?(b.onDone&&b.onDone(),ie):{value:await D.call(this,ie.value)}},return(){b.onDone&&b.onDone(),B.return()},throw(){b.onDone&&b.onDone(),B.throw()}}};let L=a(C=>{if(typeof T=="object"&&Array.isArray(C.attribute))for(let B=0;B<T.length;B++){let q=T[B],z;if(q.name===C.attribute[0]){for(z=q.sort||(q.sort={});z.next;)z=z.next;z.attribute=C.attribute.slice(1),z.descending=C.descending}else q===C.attribute[0]&&(T[B]=z={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&L(C.next)},"applySortingOnSelect");L(O)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(function(U){try{let L=D.call(this,U);return typeof L?.catch=="function"?L.catch(C=>{throw C.partialObject={[t]:U.key},C}):L}catch(L){throw L.partialObject={[t]:U.key},L}});return b}static transformEntryForSelect(m,T,O,w,y,D){if(m&&(m===t||m?.length===1&&m[0]===t&&Array.isArray(m))){let C=a(B=>(T?.transaction?.stale&&(T.transaction.stale=!1),B?.key??B),"transform");return m===t?C:m.asArray?B=>[C(B)]:B=>({[t]:C(B)})}let b;y&&v&&!(typeof m=="string"?[m]:m)?.every(C=>{let B;return typeof C=="object"?B=C.name:B=C,r[B]||B===t})&&(b=!0);let U,L=a(function(C){let B;if(T?.transaction?.stale&&(T.transaction.stale=!1),C!=null){if(B=C.value||C.deref?.()?.value,!B&&(C.key===void 0||C.deref)||C.metadataFlags&Ln){if(C.metadataFlags&Ln&&T.replicateFrom===!1&&D&&C.residencyId)return Ba.SKIP;if(C=Ml(C.key??C,T,{transaction:O,lazy:m?.length<4,ensureLoaded:y},this?.isSync,q=>q),C?.then)return C.then(L.bind(this));B=C?.value}if(b&&C?.metadataFlags&(Ln|jo)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(T.onlyIfCached&&T.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let q=sn(C.key??C,C,T);if(q?.then)return q.then(L)}}if(B==null)return D?Ba.SKIP:B;if(m&&!(m[0]==="*"&&m.length===1)){let q,z=a((G,ue)=>{let te;typeof G=="object"?te=G.name:te=G;let fe=Cn?.[te],ie;if(fe){let J=w?.[te];if(J)if(J.hasMappings){let ye=fe.from?B[fe.from]:Vl(C.key);ie=J.get(ye),ie||(ie=[])}else ie=J.fromRecord?.(B);else ie=fe(B,T,C);let ce=a(ye=>{if(ye&&typeof ye=="object"){let Re=fe.definition?.tableClass||Pe;U||(U={});let Be=U[te]||(U[te]=Re.transformEntryForSelect(te===G?null:G.select||(Array.isArray(G)?G:null),T,O,J,y));if(Array.isArray(ye)){let nt=[],wr=Re.transformToOrderedSelect(ye,G.select,typeof G.sort=="object"&&G.sort,T,O,Be)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),kr=a(et=>{for(;!et.done;){if(et?.then)return et.then(kr);nt.push(et.value),et=wr.next()}ue(nt,te)},"nextValue"),Ae=kr(wr.next());Ae&&(q||(q=[]),q.push(Ae));return}else if(ye=Be.call(this,ye),ye?.then){q||(q=[]),q.push(ye.then(nt=>ue(nt,te)));return}}ue(ye,te)},"handleResolvedValue");ie?.then?(q||(q=[]),q.push(ie.then(ce))):ce(ie);return}else ie=B[te],ie&&typeof ie=="object"&&te!==G&&(ie=Pe.transformEntryForSelect(G.select||G,T,O,null)({value:ie}));ue(ie,te)},"selectAttribute"),j;if(typeof m=="string")z(m,G=>{j=G});else if(Array.isArray(m))if(m.asArray)j=[],m.forEach((G,ue)=>{G==="*"?m[ue]=B:z(G,te=>j[ue]=te)});else{j={};let G=m.forceNulls;for(let ue of m)if(ue==="*")for(let te in B)j[te]=B[te];else z(ue,(te,fe)=>{te===void 0&&G&&(te=null),j[fe]=te})}else throw new Or.ClientError("Invalid select"+m);return q?Promise.all(q).then(()=>j):j}return B},"transform");return L}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ct({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),m||(m={});let T=!m.rawEvents,O=[],w=this,y=WI(Pe,this.getId()??null,function(b,U,L,C){try{let B=U.getValue?.(i,T),q=U.type;if(!B&&q==="patch"&&T){let j=i.getEntry(b);j?.version===U.version?B=j.value:B=U.getValue?.(i,!0,L),q="put"}let z={id:b,localTime:L,value:B,version:U.version,type:q,beginTxn:C};O?O.push(z):this.send(z)}catch(B){xe.default.error?.(B)}},m.startTime||0,m),D=(async()=>{this.isCollection&&(y.includeDescendants=!0,m.onlyChildren&&(y.onlyChildren=!0)),m.supportsTransactions&&(y.supportsTransactions=!0);let b=this.getId(),U=m.previousCount;U>1e3&&(U=1e3);let L=m.startTime;if(this.isCollection){if(L){if(U)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:B}of l.getRange({start:L,exclusiveStart:!0,snapshot:!1})){let q=bt(B);if(q.tableId!==n)continue;let z=q.recordId;if(b==null||JY(b,z)){let j=q.getValue(i,T,C);if(y.send({id:z,localTime:C,value:j,version:q.version,type:q.type}),y.queue?.length>QY&&await y.waitForDrain()===!1)return}y.startTime=C}}else if(U){let C=[];for(let{key:B,value:q}of l.getRange({start:"z",end:!1,reverse:!0}))try{let z=bt(q);if(z.tableId!==n)continue;let j=z.recordId;if(b==null||JY(b,j)){let G=z.getValue(i,T,B);if(C.push({id:j,localTime:B,value:G,version:z.version,type:z.type}),--U<=0)break}}catch(z){xe.default.error("Error getting history entry",B,z)}for(let B=C.length;B>0;)y.send(C[--B]);C[0]&&(y.startTime=C[0].localTime)}else if(!m.omitCurrent){for(let{key:C,value:B,version:q,localTime:z}of i.getRange({start:b??!1,end:b==null?void 0:[b,Sl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(B&&(y.send({id:C,localTime:z,value:B,version:q,type:"put"}),y.queue?.length>QY&&await y.waitForDrain()===!1))return}}else{U&&!L&&(L=0);let C=this.#r?.localTime;if(C===YA&&(i.cache?.delete(b),this.#r=i.getEntry(b),xe.default.trace?.("re-retrieved record",C,this.#r?.localTime),C=this.#r?.localTime),xe.default.trace?.("Subscription from",L,"from",b,C),L<C){let B=[],q=C;do{let z=l.get(q);if(z){m.omitCurrent=!0;let j=bt(z),G=j.getValue(i,T,q);T&&(j.type="put"),B.push({id:b,value:G,localTime:q,...j}),q=j.previousLocalTime}else break;U&&U--}while(q>L&&U!==0);for(let z=B.length;z>0;)y.send(B[--z]);y.startTime=C}!m.omitCurrent&&this.doesExist()&&y.send({id:b,localTime:C,value:this.#e,version:this.#n,type:"put"})}for(let C of O)y.send(C);O=null})();return m.listener&&y.on("data",m.listener),y}static subscribeOnThisThread(m,T){return m===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(m,T){this._writePublish(m,T)}_writePublish(m,T){let O=Hr(this.getContext()),w=this.getId()||null;w!=null&&Nr(w);let y=this.getContext();O.addWrite({key:w,store:i,entry:this.#r,nodeName:y?.nodeName,validate:a(()=>{y?.source||(O.checkOverloaded(),this.validate(m))},"validate"),before:Ce.publish?.bind(this,y,w,m),beforeIntermediate:me.publish?.bind(this,y,w,m),commit:a((D,b,U)=>{b===void 0&&A&&!g&&qo(),xe.default.trace?.(`Publishing message to id: ${w}, timestamp: ${new Date(D).toISOString()}`),R(w,b?.value??null,b,b?.version||D,0,!0,{user:y?.user,residencyId:T?.residencyId,expiresAt:y?.expiresAt,nodeId:T?.nodeId},"message",!1,m)},"commit")})}validate(m,T){let O,w=a((y,D,b)=>{if(D.type&&y!=null)if(T&&y.__op__&&(y=y.value),D.properties){typeof y!="object"&&(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let L=0,C=U.length;L<C;L++){let B=U[L],q=w(y[B.name],B,b+"."+B.name);q&&(y[B.name]=q)}if(D.sealed&&y!=null&&typeof y=="object")for(let L in y)U.find(C=>C.name===L)||(O||(O=[])).push(`Property ${L} is not allowed within object in property ${b}`)}else switch(D.type){case"Int":(typeof y!="number"||y>>0!==y)&&(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(U=>typeof U=="string")||(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a string`);break;case"Boolean":typeof y!="boolean"&&(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a bigint`)}break;case"Bytes":if(!(y instanceof Uint8Array)){if(typeof y=="string")return Buffer.from(y);(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(y instanceof Ei)){if(typeof y=="string"&&(y=Buffer.from(y)),y instanceof Buffer)return createBlob(y,{type:"text/plain"});(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be a Blob`)}break;case"array":if(Array.isArray(y)){if(D.elements)for(let U=0,L=y.length;U<L;U++){let C=y[U],B=w(C,D.elements,b+"[*]");B&&(y[U]=B)}}else(O||(O=[])).push(`Value ${Is(y)} in property ${b} must be an Array`);break}D.nullable===!1&&y==null&&(O||(O=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let y=0,D=E.length;y<D;y++){let b=E[y];if(!(b.relationship||b.computed)&&(!T||b.name in m)){let U=w(m[b.name],b,b.name);U&&(m[b.name]=U)}}if(d)for(let y in m)E.find(D=>D.name===y)||(O||(O=[])).push(`Property ${y} is not allowed`);if(O)throw new Or.ClientError(O.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return v?!!this.#i:void 0}static async addAttributes(m){let T=E.slice(0);for(let O of m){if(!O.name)throw new Or.ClientError("Attribute name is required");if(O.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,eW.validateAttribute)(O.name),T.push(O)}return ct({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static async removeAttributes(m){let T=E.filter(O=>!m.includes(O.name));return ct({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static getSize(){let m=i.getStats();return(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getAuditSize(){let m=l?.getStats();return m&&(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getStorageStats(){let m=i.env.path,T=XS.default.statfsSync?.(m)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(m){let T=i.getStats().entryCount,O=1e3/2,w=performance.now(),y=Math.floor(T/2),D=m?.exactCount,b=0,U=0,L;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&b++,U++,await xa(),!D&&U<y&&performance.now()-w>O){L=U;break}if(L){let C=b;b=0;for(let{value:ie}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L,snapshot:!1}))ie!=null&&b++,await xa();let B=L*2,q=(b+C)/B,z=Math.pow((b-C+1)/L/2,2)+q*(1-q)/B,j=Math.max(Math.sqrt(z)*T,1),G=Math.round(q*T),ue=Math.max(G-1.96*j,b+C),te=Math.min(G+1.96*j,T),fe=Math.pow(10,Math.round(Math.log10(j)));return fe>G&&(fe=fe/10),b=Math.round(G/fe)*fe,{recordCount:b,estimatedRange:[Math.round(ue),Math.round(te)]}}return{recordCount:b}}static updatedAttributes(){Cn=this.propertyResolvers={$id:a((m,T,O)=>({value:O.key}),"$id"),$updatedtime:a((m,T,O)=>O.version,"$updatedtime"),$record:a((m,T,O)=>O?{value:m}:m,"$record")};for(let m of this.attributes){m.resolve=null;let T=m.relationship,O=m.computed;if(T)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),O&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Dl=!0,T.to)m.elements?.definition?(Cn[m.name]=m.resolve=(w,y,D)=>{let b=w[T.from?T.from:t],U=m.elements.definition.tableClass;return D?$l({attribute:T.to,value:b},Hr(y).getReadTxn(),!1,U,!1).asArray:U.search([{attribute:T.to,value:b}],y).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,T.from&&(m.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let w=m.definition||m.elements?.definition;w?(Cn[m.name]=m.resolve=(y,D,b)=>{let U=y[T.from];if(U!==void 0){if(m.elements){let L,C=U?.map(B=>{let q=b?w.tableClass.primaryStore.getEntry(B,{transaction:Hr(D).getReadTxn()}):w.tableClass.get(B,D);return q?.then&&(L=!0),q});return T.filterMissing?L?Promise.all(C).then(B=>B.filter(XY)):C.filter(XY):L?Promise.all(C):C}return b?w.tableClass.primaryStore.getEntry(U,{transaction:Hr(D).getReadTxn()}):w.tableClass.get(U,D)}},m.set=(y,D)=>{if(Array.isArray(D)){let b=D.map(U=>U.getId?.()||U[w.tableClass.primaryKey]);y[T.from]=b}else{let b=D.getId?.()||D[w.tableClass.primaryKey];y[T.from]=b}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=T.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`);else O&&(typeof O.from=="function"&&this.setComputedAttribute(m.name,O.from),Cn[m.name]=m.resolve=(w,y,D)=>{let b=typeof O.from=="string"?w[O.from]:w,U=this.userResolvers[m.name];if(U)return U(b,y,D);xe.default.warn(`Computed attribute "${m.name}" does not have a function assigned to it. Please use setComputedAttribute('${m.name}', resolver) to assign a resolver function.`),this.userResolvers[m.name]=()=>{}})}Wm(this,this)}static setComputedAttribute(m,T){let O=_i(E,m);if(!O){console.error(`The attribute "${m}" does not exist in the table "${s}"`);return}if(!O.computed){console.error(`The attribute "${m}" is not defined as computed in the table "${s}"`);return}this.userResolvers[m]=T}static async deleteHistory(m=0,T=!1){let O;for(let{key:w,value:y}of l.getRange({start:0,end:m}))await xa(),bt(y).tableId===n&&(O=jS(l,w,y));if(T)for(let w of i.getRange({start:0,versions:!0})){let{key:y,value:D,localTime:b}=w;await xa(),D===null&&b<m&&(O=dc(i,w))}await O}static async*getHistory(m=0,T=1/0){for(let{key:O,value:w}of l.getRange({start:m||1,end:T})){await xa();let y=bt(w);y.tableId===n&&(yield{id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user,operation:y.originatingOperation})}}static async getHistoryOfRecord(m){let T=[];if(m==null)throw new Error("An id is required");let O=i.getEntry(m);if(!O)return T;let w=O.localTime;if(!w)throw new Error("The entry does not have a local audit time");let y=0;do{await xa();let D=l.get(w);if(D){let b=bt(D);T.push({id:b.recordId,localTime:w,version:b.version,type:b.type,value:b.getValue(i,!0,w),user:b.user}),w=b.previousLocalTime}else break}while(y<1e3&&w);return T.reverse()}static cleanup(){Z?.remove()}}Pe.updatedAttributes();let Fd=Pe.prototype;return p&&Pe.setTTLExpiration(p/1e3),oe&&xl(),Pe;function nn(W,m,T){let O;for(let w in r){let y=r[w],D=y.isIndexing,b=Cn[w],U=T&&(b?b(T):T[w]),L=m&&(b?b(m):m[w]);if(U===L&&!D)continue;O=!0;let C=y.indexNulls,B=(0,Bh.getIndexedValues)(U,C),q=(0,Bh.getIndexedValues)(L,C);if(q?.length>0){let z=new Set(q);if(B=B?B.filter(j=>{if(z.has(j))z.delete(j);else return!0}):[],q=Array.from(z),(q.length>0||B.length>0)&&YY){let j=q.concat(B).map(G=>({key:G,value:W}));y.prefetch(j,jY)}for(let j=0,G=q.length;j<G;j++)y.remove(q[j],W)}else B?.length>0&&YY&&y.prefetch(B.map(z=>({key:z,value:W})),jY);if(B)for(let z=0,j=B.length;z<j;z++)y.put(B[z],W)}return O}a(nn,"updateIndices");function Nr(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>zY)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)throw new Error("Invalid primary key of null");break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Sl.writeKey)(W,kpe,0)>zY)throw new Error("Primary key size is too large: "+W.length);return!0}a(Nr,"checkValidId");function Ml(W,m,T,O,w){if(Pe.getResidencyById&&T.ensureLoaded&&m?.replicateFrom!==!1){let D=Pe.getResidencyById(W);if(D&&!D.includes(server.hostname)&&N)return N({key:W,residency:D}).then(w)}let y=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),T.transaction?.isDone)return w(null,W);let D=i.getEntry(W,T);return D?.residencyId&&D.metadataFlags&Ln&&N&&T.ensureLoaded&&m?.replicateFrom!==!1?N(D).then(b=>w(b,W),b=>(xe.default.error?.("Error loading remote record",W,D,T,b),w(null,W))):(D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),w(D,W))},"whenPrefetched");return O?y():pe>0?(pe--,y()):new Promise((D,b)=>{pe===0?(pe--,i.prefetch([W],()=>{U(),L()})):(se.push(W),Y.push(L),se.length>hp&&(pe--,U()));function U(){if(se.length>0){let C=Y;i.prefetch(se,()=>{pe===-1?U():pe++;for(let B of C)B()}),se=[],Y=[],Te>2&&Te--}else pe=Te,Te<kd&&Te++}a(U,"prefetch");function L(){try{D(y())}catch(C){b(C)}}a(L,"load")})}a(Ml,"loadLocalRecord");function Gd(W){if(!W?.role)return;let m=W.role.permission;if(m.super_user)return Fpe;let T=m[c],O,w=T?.tables;if(w)return w[s];if(c==="data"&&(O=m[s])&&!O.tables)return O}a(Gd,"getTablePermissions");function sn(W,m,T,O){if(v){let w=!1;if(T.noCache?w=!0:(m?(!m.value||m.metadataFlags&(Ln|jo)||m.expiresAt!=null&&m.expiresAt<Date.now())&&(w=!0):w=!0,Wn(!w,"cache-hit",s)),w){let y=pp(W,m,T).then(D=>(D?.value&&D?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(D?.version>(T.lastModified||0)&&(T.lastModified=D.version),T.lastRefreshed=Date.now()),D));if(T?.onlyIfCached||m?.value&&O?.allowStaleWhileRevalidate?.(m,W)){if(y.catch(D=>xe.default.warn?.(D)),T?.onlyIfCached&&!O.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return y}}else if(m?.value&&m.expiresAt!=null&&m.expiresAt<Date.now())return Pe.evict(m.key,m.value,m.version),m.value=null,{then(w){return w(m)}}}a(sn,"ensureLoadedFromSource");function Hr(W){let m=W?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let T=m.next;if(!T)return m=m.next=new tc,m.lmdbDb=i,m;m=T}while(!0)}else return new xp}a(Hr,"txnForContext");function vl(W,m,T){if(!W)return;let O=W.value||i.getEntry(W.key)?.value;if(typeof m=="object"){let y=Cn,D=O;for(let b=0,U=m.length;b<U;b++){let L=m[b],C=y?.[L];D=C&&D?C(D,T,!0)?.value:D?.[L],y=C?.definition?.tableClass?.propertyResolvers}return D}let w=Cn[m];return w?w(O,T):O[m]}a(vl,"getAttributeValue");function Ul(W,m,T,O,w){let y=w?.length,D={transaction:O,lazy:y>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},b;function U(L,C){let B=L?.value;if(!B)return Ba.SKIP;for(let q=0;q<y;q++)if(!b?.includes(q)&&!w[q](B,L))return Ba.SKIP;return C!==void 0&&(L.key=C),L}if(a(U,"processEntry"),y>0||!W.hasEntries){let L=W.map(C=>{if(b=null,typeof C=="object"&&C?.key!==void 0)return y>0?U(C):C;if(C==null)return Ba.SKIP;for(let B=0;B<y;B++){let z=w[B].idFilter;if(z){if(!z(C))return Ba.SKIP;b||(b=[]),b.push(B)}}return Ml(C,T,D,!1,U)});return Array.isArray(W)&&(L=L.filter(C=>C!==Ba.SKIP)),L.hasEntries=!0,L}return W}a(Ul,"transformToEntries");function Fo(W,m,T=server.replication?.getThisNodeId(l)){if(W<=m?.version){if(m?.version===W&&T!==void 0){let O=server.replication?.exportIdMapping(l),w=m.localTime,y=w&&l.get(w);if(y){let D,b,U=bt(y);for(let L in O)O[L]===T&&(D=L),O[L]===U.nodeId&&(b=L);if(D>b)return 1;if(D===b)return 0}}return-1}return 1}a(Fo,"precedesExistingVersion");async function pp(W,m,T){let O=m?.metadataFlags,w=m?.version,y,D;if(!i.attemptLock(W,w,()=>{clearTimeout(D);let C=i.getEntry(W);!C||!C.value||C.metadataFlags&(Ln|jo)?y(pp(W,i.getEntry(W),T)):y(C)}))return new Promise(C=>{y=C,D=setTimeout(()=>{i.unlock(W,w)},Bpe)});let b=m?.value,U={requestContext:T,replacingRecord:b,replacingEntry:m,replacingVersion:w,noCacheStore:!1,source:null,resourceCache:T?.resourceCache},L=T?.responseHeaders;return new Promise((C,B)=>{let q;QI(yt(U,async z=>{let j=performance.now(),G,ue,te;try{for(let ce of Pe.sources)if(ce.get&&(!ce.get.reliesOnPrototype||ce.prototype.get)){if(ce.available?.(m)===!1)continue;if(U.source=ce,G=await ce.get(W,U),G)break}te=O&Ln;let ie=U.lastModified||te&&w;ue=te||ie>w||!b,ie||(ie=(0,Bh.getNextMonotonicTime)());let J=performance.now()-j;if(rr(J,"cache-resolution",s,null,"success"),L&&oE(L,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),z.timestamp=ie,p&&U.expiresAt==null&&(U.expiresAt=Date.now()+p),G){if(typeof G!="object")throw new Error("Only objects can be cached and stored in tables");if(G.status>0&&G.headers)if(G.status>=300)if(G.status===304)G=b,ie=w;else throw new Or.ServerError(G.body||"Error from source",G.status);else G=G.body;typeof G.toJSON=="function"&&(G=G.toJSON()),t&&G[t]!==W&&(G[t]=W)}q=!0,C({key:W,version:ie,value:G})}catch(ie){ie.message+=` while resolving record ${W} for ${s}`,b&&((ie.code==="ECONNRESET"||ie.code==="ECONNREFUSED"||ie.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(ie.statusCode===500||ie.statusCode===502||ie.statusCode===503||ie.statusCode===504))?(C({key:W,version:w,value:b}),xe.default.trace?.(ie.message,"(returned stale record)")):B(ie);let J=performance.now()-j;rr(J,"cache-resolution",s,null,"fail"),L&&oE(L,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),U.transaction.abort();return}if(T?.noCacheStore||U.noCacheStore){U.transaction.abort();return}Hr(U).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:a((ie,J)=>{if(J?.version!==w)return;let ce=nn(W,b,G);G?(me.put?.(U,W,G),xe.default.trace?.(`Writing resolved record from source with id: ${W}, timestamp: ${new Date(ie).toISOString()}`),R(W,G,J,ie,0,g&&ue||null,{user:U?.user,expiresAt:U.expiresAt},"put",!!te)):J&&(me.delete?.(U,W),xe.default.trace?.(`Deleting resolved record from source with id: ${W}, timestamp: ${new Date(ie).toISOString()}`),g||A?R(W,null,J,ie,0,g&&ue||null,{user:U?.user},"delete",!!te):dc(i,J,w))},"commit")})}),()=>{i.unlock(W,w)},z=>{i.unlock(W,w),q&&xe.default.error?.("Error committing cache update",z)})})}a(pp,"getFromSource");function Go(W){if(!W||W.user?.role?.permission?.super_user)return!0;if(W.replicateTo)throw new Or.ClientError("Can not specify replication parameters without super user permissions",403);if(W.replicatedConfirmation)throw new Or.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Go,"checkContextPermissions");function qo(W){let m=!1;if(W&&(W-at>1&&(m=!0),at=W),!(jt===Ar&&!m)&&(Ar=jt,(0,El.getWorkerIndex)()===(0,El.getWorkerCount)()-1))return os&&clearTimeout(os),jt?new Promise(T=>{let O=new Date;O.setMonth(0),O.setDate(1),O.setHours(0),O.setMinutes(0),O.setSeconds(0);let w=jt/(1+at),y=m?Date.now():Math.ceil((Date.now()-O.getTime())/w)*w+O.getTime(),D=a(b=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(b)}`),os=setTimeout(()=>F=F.then(async()=>{if(D(Math.max(b+jt,Date.now())),i.rootStore.status!=="open"){clearTimeout(os);return}let U=50,L=new Array(U),C=0,B=Math.pow(at,8)*(gl.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),q=S/Math.pow(Math.max(at,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${B}, adjusted eviction ${q}ms`);function z(j,G,ue,te){let fe=j+q-Date.now();if(fe<0)return!0;if(at){let ie=i.lastSize;return ue&Un&&Fh(te,J=>{J.size&&(ie+=J.size)}),xe.default.trace?.(`shouldEvict adjusted ${fe} ${ie}, ${fe*(j-G)/ie} < ${B}`),fe*(j-G)/ie<B}return!1}a(z,"shouldEvict");try{let j=0;for(let G of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:ue,value:te,version:fe,expiresAt:ie,metadataFlags:J}=G,ce;te===null&&!g&&fe+xpe<Date.now()?ce=dc(i,G,fe):ie!=null&&z(ie,fe,J,te)&&(ce=Pe.evict(ue,te,fe),j++),ce&&(await L[C],L[C]=ce.catch(ye=>{xe.default.error?.("Cleanup error",ye)}),++C>=U&&(C=0)),await xa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){xe.default.warn?.(`Error in cleanup scan for ${s}:`,j)}T(void 0),at=0}),Math.min(b-Date.now(),2147483647)).unref()},"startNextTimer");D(y)}):void 0}a(qo,"scheduleCleanup");function qd(){Z=l?.addDeleteRemovalCallback(n,i,(W,m)=>{i.remove(W,m)})}a(qd,"addDeleteRemoval");function xl(){(0,El.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ll){Ll=!0;try{let W=oe.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${oe} must be indexed`);for(let T of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let O of m.getValues(T)){let w=i.getEntry(O);w?.value?w.value[W]<Date.now()&&Pe.evict(O,w.value,w.version):i.ifVersion(O,w?.version,()=>m.remove(T,O))}await xa()}}catch(W){xe.default.error?.("Error in evicting old records",W)}finally{Ll=!1}}},Upe).unref()}a(xl,"runRecordExpirationEviction");function Bl(W){if(W){let m=W.join(","),T=f.get([Symbol.for("residency_by_set"),m]);return T||(f.put([Symbol.for("residency_by_set"),m],T=Math.floor(Math.random()*2147483647)),f.put([Symbol.for("residency_by_id"),T],W),T)}}a(Bl,"getResidencyId")}function zI(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 jY(){}function Gpe(e){tW=e}function ZS(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 JS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return JS(+e);case"Float":return e==="null"?null:JS(+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;qpe.test(e)||(e+="Z");let n=new Date(e);return JS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,eT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function JS(e){if(isNaN(e))throw new SyntaxError;return e}function JY(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 QI(e,t,r){return e?.then?e.then(t,r):t(e)}function XY(e){return e!=null}function Is(e){try{return JSON.stringify(e)}catch{return e}}function $pe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ba,Bh,ZY,eW,gl,Or,Hh,kh,xe,Sl,El,eT,XS,vpe,tW,Upe,xpe,YY,Bpe,WY,Hpe,Ln,jo,kpe,zY,QY,Fpe,iMe,qpe,xa,uf=be(()=>{H();Ba=require("lmdb"),Bh=M(cn()),ZY=require("lodash"),eW=M(nf());Jo();Bp();gl=M(le());EO();Or=M(he()),Hh=M(io()),kh=M(qs());Me();lf();xe=M(pi());$y();rc();Sl=require("ordered-binary"),El=M(tt());Ji();eT=M(ae());Jl();Ci();$m();p_();XS=M(require("node:fs"));ls();YS();vpe=new Uint8Array(9);vpe[8]=192;Upe=6e4,xpe=864e5;gl.initSync();YY=gl.get(x.STORAGE_PREFETCHWRITES),Bpe=1e4,WY=1,Hpe=2,Ln=1,jo=8,kpe=Buffer.allocUnsafeSlow(8192),zY=1978,QY=100,Fpe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},iMe=(0,eT.convertToMS)(gl.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(tT,"makeTable");a(zI,"attributesAsObject");a(jY,"noop");a(Gpe,"setServerUtilities");qpe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(ZS,"coerceType");a(JS,"rejectNaN");a(JY,"isDescendantId");xa=a(()=>new Promise(setImmediate),"rest");a(QI,"when");a(XY,"exists");a(Is,"stringify");a($pe,"hasOtherProcesses")});var st={};ve(st,{database:()=>fu,database_envs:()=>No,databases:()=>$e,dropDatabase:()=>zy,dropTableMeta:()=>zpe,getDatabases:()=>Je,getDefaultCompression:()=>Mg,getTables:()=>Vpe,onRemovedDB:()=>U_,onUpdatedTable:()=>Yc,readMetaDb:()=>Gh,resetDatabases:()=>ed,table:()=>ct,tables:()=>Yn});function Vpe(){return iT||Je(),Yn||{}}function Je(){if(iT)return $e;iT=!0,wd=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ct.join)((0,zt.getHdbBasePath)(),Za),t=(0,zt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(x.STORAGE_PATH)||e&&((0,es.existsSync)(e)?e:(0,Ct.join)((0,zt.getHdbBasePath)(),Ap)),!e)return;if((0,es.existsSync)(e))for(let n of(0,es.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ct.basename)(n.name,".mdb");n.isFile()&&(0,Ct.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Gh((0,Ct.join)(e,n.name),null,s)}if((0,es.existsSync)((0,Nd.getBaseSchemaPath)())){for(let n of(0,es.readdirSync)((0,Nd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ct.join)((0,Nd.getBaseSchemaPath)(),n.name),i=(0,Ct.join)((0,Nd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,es.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Ct.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Ct.join)(i,o.name);Gh((0,Ct.join)(s,o.name),(0,Ct.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,es.existsSync)(i))for(let c of(0,es.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ct.extname)(c.name).toLowerCase()===".mdb"&&Gh((0,Ct.join)(i,c.name),(0,Ct.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Ct.join)(l.path,(0,Ct.basename)(c+".mdb"));(0,es.existsSync)(u)&&Gh(u,c,n,null,!0)}}for(let n in $e){let s=wd.get(n);if(s){let i=$e[n];n.includes("delete")&&kt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(kt.trace(`delete table class ${o}`),delete i[o])}else if(delete $e[n],n==="data"){for(let i in Yn)delete Yn[i];delete Yn[oT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if($e.system)for(let n of r)$e.system[n]&&($e.system[n].replicate=!1);return wd=null,$e}function ed(){iT=!1;for(let[,e]of No)e.needsDeletion=!0;Je();for(let[e,t]of No)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),No.delete(e),delete $e[t.databaseName],$h.forEach(r=>r(t.databaseName)));return $e}function Gh(e,t,r=XI,n,s){let i=new jI.default(e,!1);try{let o=No.get(e);o?o.needsDeletion=!1:(o=(0,Id.open)(i),No.set(e,o));let c=new Tl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(rT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,es.existsSync)(n)&&(i.path=n,u=(0,Id.open)(i),u.isLegacy=!0):u=QS(o));let f=iW(r),d=f[oT],h=new Map;for(let{key:_,value:p}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=p.name:g||(g=S,S=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),d?.add(S);let A=h.get(S);A||h.set(S,A={attributes:[]}),(g==null||p.is_hash_attribute)&&(A.primary=p),g!=null&&A.attributes.push(p),Object.defineProperty(p,"key",{value:_,configurable:!0})}for(let[_,p]of h){let{attributes:S,primary:g}=p;if(!g){for(let Y of S)if(Y.is_hash_attribute||Y.isPrimaryKey){g=Y;break}if(!g){kt.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let A=f[_],E={},R=[],N,v,k=typeof g.audit=="boolean"?g.audit:(0,zt.get)(x.LOGGING_AUDITLOG),F=g.trackDeletes,K=g.expiration,re=g.eviction,oe=g.sealed,Z=g.splitSegments,se=g.replicate;if(A)E=A.indices,R=A.attributes,A.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Od)||0)&&(l.putSync(Od,N+1),kt.info(`Updating next table id (it was out of sync) to ${N+1} for ${_}`)):(g.tableId=N=l.get(Od),N||(N=1),kt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Od,N+1),l.putSync(g.key,g));let Y=new Tl.default(!g.is_hash_attribute,g.is_hash_attribute);if(Y.compression=g.compression,Y.compression){let pe=(0,zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||sW;Y.compression.threshold=pe}v=rm(o.openDB(g.key,Y),o),o.databaseName=r,v.tableId=N}for(let Y of S){Y.attribute=Y.name;try{if(!Y.is_hash_attribute&&(Y.indexed||Y.attribute&&!Y.name)){if(!E[Y.name]){let Te=new Tl.default(!Y.is_hash_attribute,Y.is_hash_attribute);E[Y.name]=o.openDB(Y.key,Te),E[Y.name].indexNulls=Y.indexNulls}let pe=R.find(Te=>Te.name===Y.name);pe?R.splice(R.indexOf(pe),1,Y):R.push(Y)}}catch(pe){kt.error("Error trying to update attribute",Y,R,E,pe)}}if(!A){A=oW(f,_,tT({primaryStore:v,auditStore:u,audit:k,sealed:oe,splitSegments:Z,replicate:se,expirationMS:K&&K*1e3,evictionMS:re&&re*1e3,trackDeletes:F,tableName:_,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let Y of qh)Y(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function iW(e){let t=$e[e];if(t||(e==="data"?t=$e[e]=Yn:e==="system"?Object.defineProperty($e,"system",{value:t=Object.create(null),configurable:!0}):t=$e[e]=Object.create(null)),wd&&!wd.has(e)){let r=new Set;t[oT]=r,wd.set(e,r)}return t}function oW(e,t,r){return e[t]=r,r}function fu({database:e,table:t}){e||(e=XI),Je();let r=iW(e),n=(0,Ct.join)((0,zt.getHdbBasePath)(),Za),s=(0,zt.get)(x.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(x.STORAGE_PATH)||((0,es.existsSync)(n)?n:(0,Ct.join)((0,zt.getHdbBasePath)(),Ap));let o=(0,Ct.join)(n,(i?t:e)+".mdb"),c=No.get(o);if(!c||c.status==="closed"){let l=new jI.default(o,!1);c=(0,Id.open)(l),No.set(o,c)}return c.auditStore||(c.auditStore=QS(c)),c}async function zy(e){if(!$e[e])throw new Error("Schema does not exist");let t=$e[e],r;for(let n in t)r=t[n].primaryStore.rootStore,No.delete(r.path),r.status==="open"&&(await r.close(),await Vh.remove(r.path));if(r||(r=fu({database:e,table:null}),r.status==="open"&&(await r.close(),await Vh.remove(r.path))),e==="data"){for(let n in Yn)delete Yn[n];delete Yn[oT]}delete $e[e],$h.forEach(n=>n(e)),await ZI(r)}function ct(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=XI);let p=fu({database:r,table:t}),S=$e[r];kt.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let A,E,R;h==null&&(h=!0);let N=new Tl.default(!1);for(let Z of o)Z.attribute&&!Z.name?(Z.name=Z.attribute,Z.indexed=!0):Z.attribute=Z.name,Z.expiresAt&&(Z.indexed=!0);let v,k;if(g){if(A=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let Z=p.auditStore;E=o.find(Te=>Te.isPrimaryKey)||{},A=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=Mg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,zt.get)(x.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),u??=!1,E.splitSegments=u,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),kt.trace(`${t} table loading, opening primary store`);let se=new Tl.default(!1,!0);se.compression=E.compression;let Y=t+"/";if(R=p.dbisDb=p.openDB(rT.INTERNAL_DBIS_NAME,N),oe(),R.get(Y))return k&&k(),ed(),ct(e);let pe=rm(p.openDB(Y,se),p);p.databaseName=r,pe.tableId=R.get(Od),kt.trace(`Assigning new table id ${pe.tableId} for ${t}`),pe.tableId||(pe.tableId=1),R.put(Od,pe.tableId+1),E.tableId=pe.tableId,g=oW(S,t,tT({primaryStore:pe,auditStore:Z,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:pe.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:R})),g.schemaVersion=1,v=!0,R.put(Y,E)}let F=g.indices;R=R||(p.dbisDb=p.openDB(rT.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let K=[];for(let{key:Z,value:se}of R.getRange({start:!0})){let[Y,pe]=Z.toString().split("/");if(pe===""&&(pe=se.name),pe){if(Y!==t)continue}else continue;let Te=o.find(me=>me.name===pe),Ce=!Te?.indexed&&se.indexed&&!se.isPrimaryKey;if((!Te||Ce)&&(oe(),v=!0,Te||R.remove(Z),Ce)){let me=g.indices[Y];me&&K.push(me)}}let re=[];try{for(let Z of o||[]){if((Z.relationship||Z.computed)&&(v=!0,Z.relationship))continue;let se=t+"/"+(Z.name||"");Object.defineProperty(Z,"key",{value:se,configurable:!0});let Y=R.get(se);if(Z.isPrimaryKey){if(Y=Y||R.get(se=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+Y.expiration||void 0)||(+s||void 0)!==(+Y.eviction||void 0)){let Te={...Y};typeof c=="boolean"&&(c&&g.enableAuditing(c),Te.audit=c),n&&(Te.expiration=+n),s&&(Te.eviction=+s),l!==void 0&&(Te.sealed=l),f!==void 0&&(Te.replicate=f),v=!0,oe(),R.put(se,Te)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let pe=!Y||Y.type!==Z.type||Y.indexed!==Z.indexed||Y.nullable!==Z.nullable||Y.version!==Z.version||JSON.stringify(Y.properties)!==JSON.stringify(Z.properties)||JSON.stringify(Y.elements)!==JSON.stringify(Z.elements);if(Z.indexed){let Te=new Tl.default(!0,!1),Ce=p.openDB(se,Te);(pe||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Kh.workerData?.restartNumber)&&(v=!0,oe(),Y=R.get(se),(pe||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Kh.workerData?.restartNumber)&&(v=!0,Z.indexNulls===void 0&&(Z.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Z.lastIndexedKey=Y?.lastIndexedKey??void 0,Z.indexingPID=process.pid,Ce.isIndexing=!0,Object.defineProperty(Z,"dbi",{value:Ce}),re.push(Z))),R.put(se,Z)),Y?.indexNulls&&Z.indexNulls===void 0&&(Z.indexNulls=!0),Ce.indexNulls=Z.indexNulls,F[Z.name]=Ce}else pe&&(v=!0,oe(),R.put(se,Z))}}finally{k&&k()}if(v&&(g.schemaVersion++,g.updatedAttributes()),kt.trace(`${t} table loading, running index`),re.length>0||K.length>0?g.indexingOperation=Wpe(g,re,K):v&&nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,v)for(let Z of qh)Z(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),kt.trace(`${t} table loaded`),g;function oe(){k||p.transactionSync(()=>({then(Z){k=Z}}))}a(oe,"startTxn")}async function Wpe(e,t,r){try{kt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Id.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let p=0;p<l;p++){let S=t[p],g=S.name;try{let A=S.resolve,E=h&&(A?A(h):h[g]),R=(0,rW.getIndexedValues)(E);if(R)for(let N=0,v=R.length;N<v;N++)S.dbi.put(R[N],d)}catch(A){o[g]||(o[g]=!0,kt.error(`Error indexing attribute ${g}`,A))}}}),s.then(()=>f--,p=>{f--,kt.error(p)}),Kh.workerData&&Kh.workerData.restartNumber!==nW.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(i)return}f>Kpe?await s:f>Ype&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),kt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){kt.error("Error in indexing",n)}}function zpe({table:e,database:t}){let r=fu({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 Yc(e){return qh.push(e),{remove(){let t=qh.indexOf(e);t>-1&&qh.splice(t,1)}}}function U_(e){return $h.push(e),{remove(){let t=$h.indexOf(e);t>-1&&$h.splice(t,1)}}}function Mg(){let e=(0,zt.get)(x.STORAGE_COMPRESSION),t=(0,zt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||sW,n={startingOffset:32};return t&&(n.dictionary=Vh.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,rT,Id,Ct,es,Nd,Tl,jI,Vh,JI,rW,nT,sT,Kh,kt,nW,XI,oT,sW,Yn,$e,Od,qh,$h,iT,No,wd,Kpe,Ype,Me=be(()=>{zt=M(le()),rT=M(vt()),Id=require("lmdb"),Ct=require("path"),es=require("fs"),Nd=M(Et());uf();Tl=M(yf()),jI=M(bf());H();Vh=M(require("fs-extra")),JI=M(li()),rW=M(cn()),nT=M(io()),sT=M(qs()),Kh=require("worker_threads"),kt=M(Q()),nW=M(tt());Ji();Jl();ls();XI="data",oT=Symbol("defined-tables"),sW=((0,zt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,zt.initSync)();Yn=Object.create(null),$e=Object.create(null);(0,JI._assignPackageExport)("databases",$e);(0,JI._assignPackageExport)("tables",Yn);Od=Symbol.for("next-table-id"),qh=[],$h=[],No=new Map;a(Vpe,"getTables");a(Je,"getDatabases");a(ed,"resetDatabases");a(Gh,"readMetaDb");a(iW,"ensureDB");a(oW,"setTable");a(fu,"database");a(zy,"dropDatabase");a(ct,"table");Kpe=1e3,Ype=10;a(Wpe,"runIndexing");a(zpe,"dropTableMeta");a(Yc,"onUpdatedTable");a(U_,"onRemovedDB");a(Mg,"getDefaultCompression")});var ae=I((mMe,TW)=>{"use strict";var Ha=require("path"),dW=require("fs-extra"),Nn=Q(),aW=require("fs-extra"),aT=require("os"),Qpe=require("net"),jpe=require("recursive-iterator"),Sr=(H(),P($)),{PACKAGE_ROOT:Jpe}=mt(),Xpe=aA(),cW=require("papaparse"),cT=require("moment"),{inspect:Zpe}=require("util"),lW=require("is-number"),pMe=require("lodash"),eme=require("minimist"),tme=require("https"),rme=require("http"),{hdb_errors:lT}=he(),nme=/^((\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)))$/,fW=require("util").promisify(setTimeout),sme=100,ime=5,ome="",ame=4,uW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};TW.exports={isEmpty:ts,isEmptyOrZeroLength:ki,arrayHasEmptyValues:ume,arrayHasEmptyOrZeroLengthValues:dme,buildFolderPath:fme,isBoolean:_W,errorizeMessage:cme,stripFileExtension:hme,autoCast:pme,autoCastJSON:hW,autoCastJSONDeep:tC,removeDir:mme,compareVersions:Eme,isCompatibleDataVersion:gme,escapeRawValue:Sme,unescapeValue:Tme,stringifyProps:Ame,timeoutPromise:yme,isClusterOperation:Ome,getClusterUser:wme,checkGlobalSchemaTable:Nme,getHomeDir:mW,getPropsFilePath:Rme,promisifyPapaParse:Ime,removeBOM:EW,createEventPromise:Cme,checkProcessRunning:Pme,checkSchemaTableExist:Dme,checkSchemaExists:gW,checkTableExists:SW,getStartOfTomorrowInSeconds:Lme,getLimitKey:Mme,isObject:_me,isNotEmptyAndHasValue:lme,autoCasterIsNumberCheck:pW,backtickASTSchemaItems:vme,isPortTaken:bme,createForkArgs:Ume,autoCastBoolean:xme,async_set_timeout:fW,getTableHashAttribute:Bme,doesSchemaExist:Hme,doesTableExist:kme,stringifyObj:Fme,ms_to_time:Gme,changeExtension:qme,getEnvCliRootPath:rC,noBootFile:$me,httpRequest:Vme,transformReq:Kme,convertToMS:Yme,PACKAGE_ROOT:Jpe};function cme(e){return e instanceof Error?e:new Error(e)}a(cme,"errorizeMessage");function ts(e){return e==null}a(ts,"isEmpty");function lme(e){return!ts(e)&&(e||e===0||e===""||_W(e))}a(lme,"isNotEmptyAndHasValue");function ki(e){return ts(e)||e.length===0||e.size===0}a(ki,"isEmptyOrZeroLength");function ume(e){if(ts(e))return!0;for(let t=0;t<e.length;t++)if(ts(e[t]))return!0;return!1}a(ume,"arrayHasEmptyValues");function dme(e){if(ki(e))return!0;for(let t=0;t<e.length;t++)if(ki(e[t]))return!0;return!1}a(dme,"arrayHasEmptyOrZeroLengthValues");function fme(...e){try{return e.join(Ha.sep)}catch{console.error(e)}}a(fme,"buildFolderPath");function _W(e){return ts(e)?!1:e===!0||e===!1}a(_W,"isBoolean");function _me(e){return ts(e)?!1:typeof e=="object"}a(_me,"isObject");function hme(e){return ki(e)?ome:e.slice(0,-ame)}a(hme,"stripFileExtension");function pme(e){return ts(e)||e===""||typeof e!="string"?e:uW[e]!==void 0?uW[e]:pW(e)===!0?Number(e):nme.test(e)?new Date(e):e}a(pme,"autoCast");function hW(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(hW,"autoCastJSON");function tC(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=tC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=tC(r);n!==r&&(e[t]=n)}return e}else return hW(e)}a(tC,"autoCastJSONDeep");function pW(e){if(e.startsWith("0.")&&lW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&lW(e))}a(pW,"autoCasterIsNumberCheck");async function mme(e){if(ki(e))throw new Error(`Directory path: ${e} does not exist`);try{await aW.emptyDir(e),await aW.remove(e)}catch(t){throw Nn.error(`Error removing files in ${e} -- ${t}`),t}}a(mme,"removeDir");function Eme(e,t){if(ki(e)){Nn.info("Invalid current version sent as parameter.");return}if(ki(t)){Nn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Eme,"compareVersions");function gme(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(gme,"isCompatibleDataVersion");function Sme(e){if(ts(e))return e;let t=String(e);return t==="."?Sr.UNICODE_PERIOD:t===".."?Sr.UNICODE_PERIOD+Sr.UNICODE_PERIOD:t.replace(Sr.FORWARD_SLASH_REGEX,Sr.UNICODE_FORWARD_SLASH)}a(Sme,"escapeRawValue");function Tme(e){if(ts(e))return e;let t=String(e);return t===Sr.UNICODE_PERIOD?".":t===Sr.UNICODE_PERIOD+Sr.UNICODE_PERIOD?"..":String(e).replace(Sr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Tme,"unescapeValue");function Ame(e,t){if(ts(e))return Nn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+aT.EOL}!ki(n)&&n[0]===";"?r+=" "+n+s+aT.EOL:ki(n)||(r+=n+"="+s+aT.EOL)}catch{Nn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Ame,"stringifyProps");function mW(){let e;try{e=aT.homedir()}catch{e=process.env.HOME}return e}a(mW,"getHomeDir");function Rme(){let e=Ha.join(mW(),Sr.HDB_HOME_DIR_NAME,Sr.BOOT_PROPS_FILE_NAME);return dW.existsSync(e)||(e=Ha.join(__dirname,"../","hdb_boot_properties.file")),e}a(Rme,"getPropsFilePath");function yme(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(yme,"timeoutPromise");async function bme(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Qpe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(bme,"isPortTaken");function Ome(e){try{return Sr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Nn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Ome,"isClusterOperation");function Nme(e,t){let r=(Me(),P(st)).getDatabases();if(!r[e])return lT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return lT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Nme,"checkGlobalSchemaTable");function wme(e,t){if(ts(t)){Nn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ts(e)||ki(e)){Nn.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){Nn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Nn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(wme,"getClusterUser");function Ime(){cW.parsePromise=function(e,t,r){return new Promise(function(n,s){cW.parse(e,{header:!0,transformHeader:EW,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Ime,"promisifyPapaParse");function EW(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(EW,"removeBOM");function Cme(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Nn.info(`Got cluster status event response: ${Zpe(s)}`);try{i.cancel()}catch{Nn.error("Error trying to cancel timeout.")}n(s)})})}a(Cme,"createEventPromise");async function Pme(e){let t=!0,r=0;do await fW(sme*r++),(await Xpe.findPs(e)).length>0&&(t=!1);while(t&&r<ime);if(t)throw new Error(`process ${e} was not started`)}a(Pme,"checkProcessRunning");function Dme(e,t){let r=gW(e);if(r)return r;let n=SW(e,t);if(n)return n}a(Dme,"checkSchemaTableExist");function gW(e){let{getDatabases:t}=(Me(),P(st));if(!t()[e])return lT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gW,"checkSchemaExists");function SW(e,t){let{getDatabases:r}=(Me(),P(st));if(!r()[e][t])return lT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(SW,"checkTableExists");function Lme(){let e=cT().utc().add(1,"d").startOf("d").unix(),t=cT().utc().unix();return e-t}a(Lme,"getStartOfTomorrowInSeconds");function Mme(){return cT().utc().format("DD-MM-YYYY")}a(Mme,"getLimitKey");function vme(e){try{let t=new jpe(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){Nn.error("Got an error back ticking items."),Nn.error(t)}}a(vme,"backtickASTSchemaItems");function Ume(e){return[e]}a(Ume,"createForkArgs");function xme(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(xme,"autoCastBoolean");function Bme(e,t){let{getDatabases:r}=(Me(),P(st)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Bme,"getTableHashAttribute");function Hme(e){let{getDatabases:t}=(Me(),P(st));return t()[e]!==void 0}a(Hme,"doesSchemaExist");function kme(e,t){let{getDatabases:r}=(Me(),P(st));return r()[e]?.[t]!==void 0}a(kme,"doesTableExist");function Fme(e){try{return JSON.stringify(e)}catch{return e}}a(Fme,"stringifyObj");function Gme(e){let t=cT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(Gme,"ms_to_time");function qme(e,t){let r=Ha.basename(e,Ha.extname(e));return Ha.join(Ha.dirname(e),r+t)}a(qme,"changeExtension");function rC(){if(process.env[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=eme(process.argv);if(e[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(rC,"getEnvCliRootPath");var eC;function $me(){if(eC)return eC;let e=rC();if(rC()&&dW.pathExistsSync(Ha.join(e,Sr.HDB_CONFIG_FILE)))return eC=!0,!0}a($me,"noBootFile");function Vme(e,t){let r;return e.protocol==="http:"?r=rme:r=tme,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(Vme,"httpRequest");function Kme(e){if(!e.schema&&!e.database){e.schema=Sr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Kme,"transformReq");function Yme(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Yme,"convertToMS")});var le=I((OW,NW)=>{"use strict";var nC=require("fs-extra"),Al=require("path"),AW=require("os"),Wme=require("properties-reader"),Wh=Q(),Yh=ae(),Le=(H(),P($)),uT=wt(),zme="Error initializing environment manager",dT="BOOT_PROPS_FILE_PATH",RW=!1,Qme={[Le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},wo={};Object.assign(OW,NW.exports={BOOT_PROPS_FILE_PATH:dT,getHdbBasePath:jme,setHdbBasePath:Jme,get:yW,initSync:Zme,setProperty:Ye,initTestEnvironment:tEe,setCloneVar:eEe});function jme(){return wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(jme,"getHdbBasePath");function Jme(e){wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Jme,"setHdbBasePath");function yW(e){let t=uT.getConfigValue(e);return t===void 0?wo[e]:t}a(yW,"get");function Ye(e,t){Qme[e]&&(wo[e]=t),uT.updateConfigObject(e,t)}a(Ye,"setProperty");function Xme(){let e;try{e=Yh.getPropsFilePath(),nC.accessSync(e,nC.constants.F_OK|nC.constants.R_OK),RW=!0;let t=Wme(e);return wo[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),wo[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),wo[dT]=e,!0}catch{return Wh.trace(`Environment manager found no properties file at ${e}`),!1}}a(Xme,"doesPropFileExist");function Zme(e=!1){try{((RW||Xme()||Yh.noBootFile())&&!bW||e)&&(uT.initConfig(e),wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=uT.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Wh.error(zme),Wh.error(t),console.error(t),process.exit(1)}}a(Zme,"initSync");var bW=!1;function eEe(e){bW=e}a(eEe,"setCloneVar");function tEe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Al.join(__dirname,"../../","unitTests");wo[dT]=Al.join(l,"hdb_boot_properties.file"),Ye(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Al.join(l,"settings.test")),Ye(Le.HDB_SETTINGS_NAMES.INSTALL_USER,AW.userInfo()?AW.userInfo().username:void 0),Ye(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ye(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Al.join(l,"envDir","log")),Ye(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ye(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ye(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ye(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Al.join(l,"envDir")),Ye(Le.CONFIG_PARAMS.STORAGE_PATH,Al.join(l,"envDir")),s&&(Ye(Le.CONFIG_PARAMS.HTTP_SECUREPORT,yW(Le.CONFIG_PARAMS.HTTP_PORT)),Ye(Le.CONFIG_PARAMS.HTTP_PORT,null)),Ye(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ye(Le.CONFIG_PARAMS.HTTP_PORT,9926),Ye(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ye(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ye(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yh.isEmpty(i)?!1:i),Ye(Le.CONFIG_PARAMS.HTTP_CORS,Yh.isEmpty(i)?!1:i),Ye(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ye(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ye(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ye(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ye(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Al.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ye(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yh.isEmpty(c)?!1:c),o&&(Ye("CORS_ACCESSLIST",o),Ye(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ye(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ye(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ye(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ye(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ye(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ye(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${dT}. Please check your boot props and settings files`;Wh.fatal(r),Wh.error(t)}}a(tEe,"initTestEnvironment")});var bE={};ve(bE,{Blob:()=>Ei,blobsWereEncoded:()=>lc,databasePaths:()=>hT,decodeBlobsWithWrites:()=>gO,decodeFromDatabase:()=>uc,decodeWithBlobCallback:()=>SO,deleteBlob:()=>UW,deleteBlobsInObject:()=>ra,deleteRootBlobPathsForDB:()=>ZI,encodeBlobsAsBuffers:()=>dEe,encodeBlobsWithFilePath:()=>em,findBlobsInObject:()=>Fh,getFileId:()=>$E,getFilePathForBlob:()=>BW,getRootBlobPathsForDB:()=>gT,setDeletionDelay:()=>iEe});function MW(){}function UW(e){let t=BW(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&ka.default.debug?.("Error trying to remove blob file",r)})},vW)}function iEe(e){vW=e}function xW(e){let t=wn.get(e);if(!t)t={storageIndex:0,fileId:null,store:ii},wn.set(e,t);else{if(t.saving)return t;t.store=ii}return aEe(t),t.source?sC(e,t.source,t):t.contentBuffer?oEe(e,t):sC(e,Qh.Readable.from(e.stream()),t),t}function sC(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,je.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.end(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g]));return}let h=!1;e.size!==void 0&&(d.write(p(e.size)),h=!0);let _;o?(h||d.write(nEe),_=(0,mT.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(rEe),t.pipe(d)),t.on("error",S);function p(g){let A=BigInt(g),E=new Uint8Array(Tr),R=new DataView(E.buffer);return A|=BigInt(o?iC:LW)<<48n,R.setBigInt64(0,A),E}a(p,"createHeader");function S(g){i.unlock(f,0);let A=d.fd;g?(A&&(0,je.close)(A),u(g)):c?(0,je.fdatasync)(A,E=>{E&&u(E),l(),(0,je.close)(A)}):(l(),(0,je.close)(A))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-Tr;e.size=g,(0,je.write)(d.fd,p(g),0,Tr,0,S)}})}),e}function $E(e){return wn.get(e)?.fileId}function BW(e){let t=wn.get(e);return t?.fileId&&jh(t)}function gT(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=hT.get(e);if(!t){if(!e.databaseName)throw new Error("No database name specified, can not determine blob storage path");let r=(0,ET.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Co.join)(n,e.databaseName)):t=[(0,Co.join)((0,ET.getHdbBasePath)(),"blobs",e.databaseName)],hT.set(e,t)}return t}async function ZI(e){let t=hT.get(e);t&&await Promise.all(t.map(r=>HW(r)))}async function HW(e){for(let t of await(0,oi.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await HW((0,Co.join)(e,t.name));else try{await(0,oi.unlink)((0,Co.join)(e,t.name))}catch(r){ka.default.warn?.("Error deleting file",r)}try{await(0,oi.rmdir)(e)}catch(t){ka.default.warn?.("Error deleting directory",t)}}function jh({storageIndex:e,fileId:t,store:r}){let n=gT(r);return(0,Co.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 oEe(e,t){let r=t.contentBuffer,n=r.length;if(!(n<DW))return e.size=n,sC(e,Qh.Readable.from([r]),t)}function aEe(e){let t=gT(e.store),r=cEe(),n=t?.length>1?lEe(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=jh(e),o=(0,Co.dirname)(i);(0,je.existsSync)(o)||(0,PW.ensureDirSync)(o),e.filePath=i}function cEe(){let e=CW.get(ii);if(!e){let t=0,r=gT(ii);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Co.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(ii.getUserSharedBuffer("blob-file-id",e.buffer)),CW.set(ii,e)}return Number(Atomics.add(e,0,1n))}function lEe(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(pT);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,uEe(e)),e.frequencyTable[t%pT]}async function uEe(e){if(!oi.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o=await(0,oi.statfs)(s),c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(pT),n=t.map(s=>1/s);for(let s=0;s<pT;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function em(e,t,r){Cd=t,ii=r,lc=!1;try{return e()}finally{Cd=void 0,ii=void 0}}function dEe(e){Ur=[];let t;try{t=e()}catch(n){throw Ur=void 0,n}let r=Ur.length<2?Ur[0]:Promise.all(Ur);return Ur=void 0,r?r.then(()=>e()):t}function gO(e,t){try{Ur=[],Rl=t,e()}catch(n){throw Rl=void 0,Ur=void 0,n}Rl=void 0;let r=Ur.length<2?Ur[0]:Promise.all(Ur);return Ur=void 0,r}function SO(e,t){try{return Rl=t,e()}finally{Rl=void 0}}function uc(e,t){return ii=t,e()}function ra(e){Fh(e,t=>{UW(t)})}function Fh(e,t){if(e instanceof Ei)t(e);else if(e.constructor===Object||Array.isArray(e))for(let r in e)typeof e[r]=="object"&&Fh(e[r],t)}function fEe(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Io,oi,je,mT,Qh,PW,ET,Co,ka,DW,Tr,LW,iC,wW,rEe,nEe,IW,wn,Rl,Ei,Cd,Ur,ii,lc,zh,fT,sEe,_T,vW,hT,CW,pT,ls=be(()=>{Io=require("msgpackr"),oi=require("node:fs/promises"),je=require("node:fs"),mT=require("node:zlib"),Qh=require("node:stream"),PW=require("fs-extra"),ET=M(le());H();Co=require("path"),ka=M(pi());ji();DW=8192,Tr=8,LW=0,iC=1,wW=255,rEe=new Uint8Array([0,LW,255,255,255,255,255,255]),nEe=new Uint8Array([0,iC,255,255,255,255,255,255]),IW=0xffffffffffff,wn=new WeakMap,Ei=global.Blob||fEe(),lc=!1,zh=new Uint8Array(8),fT=new DataView(zh.buffer),sEe=6e4;a(MW,"InstanceOfBlobWithNoConstructor");MW.prototype=Ei.prototype;_T=class e extends MW{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=wn.get(this),{start:r,end:n,contentBuffer:s}=t;return s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?s.toString():(LA(this.bytes().then(i=>t.contentBuffer=i)),"")}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=wn.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=jh(t),o,c=a(async()=>{let l,u=Tr;try{if(l=await(0,oi.readFile)(i),l.length>=Tr){l.copy(zh,0,0,Tr);let d=fT.getBigUint64(0);if(Number(d>>48n)===wW)throw new Error("Error in blob: "+buffer.subarray(Tr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<IW&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error("Incomplete blob");return new Promise((p,S)=>{if(h.attemptLock(_,0,()=>(o=!0,h.unlock(_,0),p(c()))))return o=!0,h.unlock(_,0),p(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===iC?new Promise((d,h)=>{(0,mT.deflate)(l.subarray(Tr),(_,p)=>{_?h(_):d(f(p))})}):f(l.subarray(Tr))},"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=wn.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(p){p.enqueue(r),p.close()}});let i=jh(t),o,c=0,l=0,u,f,d,h=this;return new ReadableStream({start(){let p=1e3,S=a((g,A)=>{(0,je.open)(i,"r",(E,R)=>{if(E){if(E.code==="ENOENT"&&d!==!1&&(ka.default.debug?.("File does not exist yet, waiting for it to be created",i,p),p-- >0))return setTimeout(()=>{_(),S(g,A)},20).unref();A(E),h.#e?.forEach(N=>N(E))}else o=R,g(R)})},"openFile");return new Promise(S)},pull:a(p=>{let S=0,g=100;return new Promise(a(function A(E,R){function N(k){(0,je.close)(o),u&&u.close(),R(k),h.#e?.forEach(F=>F(k))}a(N,"onError");let v=Buffer.allocUnsafe(262144);(0,je.read)(o,v,0,v.length,c,(k,F,K)=>{if(l+=F,k)return N(k);if(c===0){if(F<Tr){g-- >0&&d!==!1?(_(),ka.default.debug?.("File was empty, waiting for data to be written",i,g),setTimeout(()=>A(E,R),20).unref()):(ka.default.debug?.("File was empty, throwing error",i,g),R(new Error(`Blob ${t.fileId} was empty`)));return}K.copy(zh,0,0,Tr);let re=fT.getBigUint64(0);if(Number(re>>48n)===wW)return N(new Error("Error in blob: "+K.subarray(Tr)));if(S=Number(re&0xffffffffffffn),S<IW&&h.size!==S&&(h.size=S,h.#t))for(let oe of h.#t)oe(S);K=K.subarray(Tr,F),l-=Tr}else if(F===0){let re=Buffer.allocUnsafe(8);return(0,je.read)(o,re,0,Tr,0,oe=>{if(oe)return N(oe);if(zh.set(re),S=Number(fT.getBigUint64(0)&0xffffffffffffn),S>l){d!==!1?(f=setTimeout(()=>{N(new Error("File read timed out"))},sEe).unref(),u=(0,je.watch)(i,{persistent:!1},()=>{clearTimeout(f),u.close(),_(),A(E,R)})):N(new Error("Blob is incomplete"));return}(0,je.close)(o),p.close(),E()})}else K=K.subarray(0,F);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=F,A(E,R);s&&l>=s&&(l>s&&(K=K.subarray(0,s-c)),l=S=s),n&&n>c&&(K=K.subarray(n-c))}c+=F;try{p.enqueue(K)}catch(re){return ka.default.debug?.("Error enqueuing chunk",re),E()}l===S&&((0,je.close)(o),p.close()),E()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(f),u&&u.close()}});function _(){if(d===void 0){let p=t.store,S=t.fileId+":blob";d=!p.attemptLock(S,0,()=>{d=!1,p.unlock(S,0)}),d||p.unlock(S,0)}return d}}slice(t,r,n){let s=wn.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};wn.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};wn.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(!t?.primaryStore?.rootStore)throw new Error("No target table specified");return xW(this).saving??Promise.resolve()}},vW=500;a(UW,"deleteBlob");a(iEe,"setDeletionDelay");global.createBlob=function(e,t){let r=new _T(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(wn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Qh.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Qh.Readable.from(e);else throw new Error("Invalid source type");return r};a(xW,"saveBlob");a(sC,"writeBlobWithStream");a($E,"getFileId");a(BW,"getFilePathForBlob");hT=new Map;a(gT,"getRootBlobPathsForDB");a(ZI,"deleteRootBlobPathsForDB");a(HW,"rimrafSteadily");a(jh,"getFilePath");a(oEe,"writeBlobWithBuffer");a(aEe,"generateFilePath");CW=new Map;a(cEe,"getNextFileId");pT=128;a(lEe,"getNextStorageIndex");a(uEe,"createFrequencyTableForStoragePaths");a(em,"encodeBlobsWithFilePath");a(dEe,"encodeBlobsAsBuffers");a(gO,"decodeBlobsWithWrites");a(SO,"decodeWithBlobCallback");a(uc,"decodeFromDatabase");a(ra,"deleteBlobsInObject");a(Fh,"findBlobsInObject");(0,Io.addExtension)({Class:Ei,type:11,unpack:a(function(e){let t=(0,Io.unpack)(e),r=new _T;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(!ii)throw new Error("No store specified, can not load blob from storage");if(wn.set(r,{storageIndex:t[1],fileId:t[2],store:ii}),Rl)return Rl(r)??r}else wn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=wn.get(e);if(Cd!==void 0&&(lc=!0,t?.recordId!==void 0&&t.recordId!==Cd))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<DW)return r.size=t.contentBuffer.length,(0,Io.pack)([r,t.contentBuffer])}if(Cd!==void 0){if(t=xW(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Cd,(0,Io.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,je.readFileSync)(jh(t));if(n.length>=Tr&&(n.copy(zh,0,0,Tr),Number(fT.getBigUint64(0)&0xffffffffffffn)===n.length-Tr))return Buffer.concat([(0,Io.pack)([r]),n]);if(Ur)Ur.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Ur)return Ur.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Io.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(fEe,"polyfillBlob")});var aC=I((yMe,kW)=>{"use strict";var Jh=le();Jh.initSync();var Pd=require("fs-extra"),oC=require("path"),Dd=(H(),P($)),_Ee=require("crypto"),hEe=require("uuid").v4;kW.exports=pEe;function pEe(){if(Jh.getHdbBasePath()!==void 0){let e=oC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=oC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=oC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Pd.accessSync(r),Pd.accessSync(e),Pd.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=hEe(),i=_Ee.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Pd.writeFileSync(r,s),Pd.writeFileSync(e,i.privateKey),Pd.writeFileSync(t,i.publicKey)}else throw n}}}a(pEe,"checkJWTTokenExist")});var GW=I((OMe,FW)=>{"use strict";var cC=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};FW.exports={HdbInfoInsertObject:cC}});var VW=I((wMe,$W)=>{"use strict";var qW=(H(),P($)),lC=class{static{a(this,"UpgradeObject")}constructor(t,r){this[qW.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[qW.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};$W.exports={UpgradeObject:lC}});var ST=I((CMe,YW)=>{"use strict";var Cs=require("prompt"),Ld=require("chalk"),KW=Q(),ai=require("os"),uC=ec(),dC=["yes","y"];async function mEe(e){let t=`${ai.EOL}`+Ld.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ai.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ai.EOL}${ai.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ai.EOL}`;Cs.override=uC(["CONFIRM_UPGRADE"]),Cs.start(),Cs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Ld.magenta(`${ai.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 Cs.get([r])}catch(s){return KW.error("There was an error when prompting user about an upgrade."),KW.error(s),!1}return dC.includes(n.CONFIRM_UPGRADE)}a(mEe,"forceUpdatePrompt");async function EEe(e){let t=`${ai.EOL}`+Ld.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.${ai.EOL}`);Cs.override=uC(["CONFIRM_DOWNGRADE"]),Cs.start(),Cs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Ld.magenta(`${ai.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 Cs.get([r]);return dC.includes(n.CONFIRM_DOWNGRADE)}a(EEe,"forceDowngradePrompt");async function gEe(){let e=`${ai.EOL}`+Ld.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");Cs.override=uC(["GENERATE_CERTS"]),Cs.start(),Cs.message=e;let t={properties:{GENERATE_CERTS:{description:Ld.magenta(`${ai.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 Cs.get([t]);return dC.includes(r.GENERATE_CERTS)}a(gEe,"upgradeCertsPrompt");YW.exports={forceUpdatePrompt:mEe,forceDowngradePrompt:EEe,upgradeCertsPrompt:gEe}});var _C=I((DMe,WW)=>{"use strict";var fC=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};WW.exports=fC});var QW=I((BMe,zW)=>{"use strict";var SEe=ae(),TEe=wt(),MMe=Q(),vMe=require("path"),UMe=require("fs"),xMe=(H(),P($));zW.exports={getOldPropsValue:AEe};function AEe(e,t,r=!1){let n=t.getRaw(e);return SEe.isNotEmptyAndHasValue(n)?n:r?TEe.getDefaultConfig(e):""}a(AEe,"getOldPropsValue")});var ZW=I((kMe,XW)=>{"use strict";var Fa=require("path"),Ga=require("fs-extra"),REe=require("properties-reader"),yEe=_C(),lr=Q(),{getOldPropsValue:ht}=QW(),{HDB_SETTINGS_NAMES:Ee,CONFIG_PARAMS:yl}=(H(),P($)),bl=wt(),TT=le(),jW=ae(),Fi=(H(),P($)),hC=new yEe("3.1.0"),JW=[];function bEe(){let e=REe(TT.get(Ee.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),lr.info(t);let r=` ;Settings for the HarperDB process.
39
+ `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Oe.appendFile(Ao,o);let d=await Xs(e);return d.message=`Added ssh key: ${r}${f}`,d}a(vue,"addSSHKey");async function Uue(e){let t=Rn.updateSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n}=e;Ut.trace("updating ssh key",r);let s=we.join(Ia,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await Xs(e);return i.message=`Updated ssh key: ${r}`,i}a(Uue,"updateSSHKey");async function xue(e){let t=Rn.deleteSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r}=e;Ut.trace("deleting ssh key",r);let n=we.join(Ia,r+".key"),s=we.join(Ia,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await Xs(e);return c.message=`Deleted ssh key: ${r}`,c}a(xue,"deleteSSHKey");async function Bue(e){let t=[];return await Oe.pathExists(Ia)&&(await Oe.readdir(Ia)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Bue,"listSSHKeys");async function Hue(e){let t=Rn.setSSHKnownHostsValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(Ao,r);let n=await Xs(e);return n.message="Known hosts successfully set",n}a(Hue,"setSSHKnownHosts");async function kue(e){return await Oe.pathExists(Ao)?{known_hosts:await Oe.readFile(Ao,"utf8")}:{known_hosts:null}}a(kue,"getSSHKnownHosts");Object.assign(g$,{customFunctionsStatus:Tue,getCustomFunctions:Aue,getCustomFunction:Rue,setCustomFunction:yue,dropCustomFunction:bue,addComponent:Oue,dropCustomFunctionProject:Nue,packageComponent:wue,deployComponent:Iue,getComponents:Pue,getComponentFile:Due,setComponentFile:Lue,dropComponent:Mue,addSSHKey:vue,updateSSHKey:Uue,deleteSSHKey:xue,listSSHKeys:Bue,setSSHKnownHosts:Hue,getSSHKnownHosts:kue})});var JN=I((DPe,T$)=>{"use strict";var Ts=require("joi"),S$=dt();T$.exports={readTransactionLogValidator:Fue,deleteTransactionLogsBeforeValidator:Gue};function Fue(e){let t=Ts.object({schema:Ts.string(),database:Ts.string(),table:Ts.string().required(),from:Ts.date().timestamp(),to:Ts.date().timestamp(),limit:Ts.number().min(1)});return S$.validateBySchema(e,t)}a(Fue,"readTransactionLogValidator");function Gue(e){let t=Ts.object({schema:Ts.string(),database:Ts.string(),table:Ts.string().required(),timestamp:Ts.date().timestamp().required()});return S$.validateBySchema(e,t)}a(Gue,"deleteTransactionLogsBeforeValidator")});var Yg=I((MPe,N$)=>{"use strict";var XN=(H(),D(q)),mh=pr(),A$=oe(),R$=ce(),y$=ro(),b$=j(),{handleHDBError:Vg,hdb_errors:que}=he(),{HTTP_STATUS_CODES:Kg}=que,{readTransactionLogValidator:$ue,deleteTransactionLogsBeforeValidator:Vue}=JN(),O$=Hn(),Kue="Logs successfully deleted from transaction log.",Yue="All logs successfully deleted from transaction log.";N$.exports={readTransactionLog:Wue,deleteTransactionLogsBefore:Que};async function Wue(e){let t=$ue(e);if(t)throw Vg(t,t.message,Kg.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=A$.checkSchemaTableExist(e.database,e.table);if(r)throw Vg(new Error,r,Kg.NOT_FOUND,void 0,void 0,!0);return R$.get(XN.CONFIG_PARAMS.CLUSTERING_ENABLED)?await zue(e):(b$.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)),O$.readAuditLog(e))}a(Wue,"readTransactionLog");async function*zue(e){let t=y$.createNatsTableStreamName(e.database,e.table),r=await mh.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===XN.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(zue,"readTransactionLogNats");async function Que(e){let t=Vue(e);if(t)throw Vg(t,t.message,Kg.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!R$.get(XN.CONFIG_PARAMS.CLUSTERING_ENABLED))return b$.info("Delete transaction logs called for Plexus"),O$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=A$.checkSchemaTableExist(r,n);if(i)throw Vg(new Error,i,Kg.NOT_FOUND,void 0,void 0,!0);let o=y$.createNatsTableStreamName(r,n),{jsm:c}=await mh.getNATSReferences(),l=await mh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=Kue,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Yue):d=(await mh.viewStream(o,parseInt(s),1))[0].nats_sequence,await mh.purgeTableStream(r,n,{seq:d}),f}a(Que,"deleteTransactionLogsBefore")});var I$=I((UPe,w$)=>{"use strict";var ZN=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};w$.exports=ZN});var P$=I((BPe,C$)=>{"use strict";var ew=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};C$.exports=ew});var rw=I((kPe,L$)=>{"use strict";var D$=I$(),jue=P$(),{HDB_ERROR_MSGS:Jue}=Cn(),tw=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Jue.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 D$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new jue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new D$(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};L$.exports=tw});var jg=I(($Pe,Q$)=>{"use strict";var nw=hn(),Wg=$r(),As=ZE(),Sh=no(),sw=Tc(),Xue=yO(),Zue=Vk(),Th=Gn(),zg=a_(),mr=j(),ede=IO(),tde=dg(),rde=ZO(),nde=_g(),sde=rN(),ide=nN(),ode=oN(),ade=cN(),iw=gg(),Ro=oe(),cde=yG(),ow=AN(),U$=rd(),Zr=(H(),D(q)),x$=Bq(),lde=$u(),B$=(Tu(),D(S_)),H$=(Hg(),D(ah)),k$=It(),ar=QN(),ude=require("alasql"),F$=Yg(),G$=dh(),ad=Qs(),q$=(jc(),D(Qc)),$$=rw(),{handleHDBError:yn,hdb_errors:V$}=he(),{addNodeBack:GPe,removeNodeBack:qPe}=(jc(),D(Qc)),{HDB_ERROR_MSGS:Lr,HTTP_STATUS_CODES:Eh}=V$,J=new Map,K$="delete",Ca="insert",yo="read",ll="update",gh="describe",M$=Sh.describeSchema.name,v$=Sh.describeTable.name,Y$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},dde={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},fde="catchup",_de="handleGetJob",hde="handleGetJobsByStartDate",Qg={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},pde=[As.createTable.name,As.createAttribute.name,As.dropTable.name,As.dropAttribute.name],W$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};J.set(nw.insert.name,new re(!1,[Ca]));J.set(nw.update.name,new re(!1,[ll]));J.set(nw.upsert.name,new re(!1,[Ca,ll]));J.set(Wg.searchByConditions.name,new re(!1,[yo]));J.set(Wg.searchByHash.name,new re(!1,[yo]));J.set(Wg.searchByValue.name,new re(!1,[yo]));J.set(Wg.search.name,new re(!1,[yo]));J.set(As.createSchema.name,new re(!0,[]));J.set(As.createTable.name,new re(!0,[]));J.set(As.createAttribute.name,new re(!1,[Ca]));J.set(As.dropSchema.name,new re(!0,[]));J.set(As.dropTable.name,new re(!0,[]));J.set(As.dropAttribute.name,new re(!0,[]));J.set(Sh.describeSchema.name,new re(!1,[yo]));J.set(Sh.describeTable.name,new re(!1,[yo]));J.set(sw.deleteRecord.name,new re(!1,[K$]));J.set(Th.addUser.name,new re(!0,[]));J.set(Th.alterUser.name,new re(!0,[]));J.set(Th.dropUser.name,new re(!0,[]));J.set(Th.listUsersExternal.name,new re(!0,[]));J.set(zg.listRoles.name,new re(!0,[]));J.set(zg.addRole.name,new re(!0,[]));J.set(zg.alterRole.name,new re(!0,[]));J.set(zg.dropRole.name,new re(!0,[]));J.set(ede.name,new re(!0,[]));J.set(tde.name,new re(!0,[]));J.set(rde.name,new re(!0,[]));J.set(nde.name,new re(!0,[]));J.set(sde.name,new re(!0,[]));J.set(ide.name,new re(!0,[]));J.set(iw.setRoutes.name,new re(!0,[]));J.set(iw.getRoutes.name,new re(!0,[]));J.set(iw.deleteRoutes.name,new re(!0,[]));J.set(k$.setConfiguration.name,new re(!0,[]));J.set(ode.clusterStatus.name,new re(!0,[]));J.set(ade.name,new re(!0,[]));J.set(ow.getFingerprint.name,new re(!0,[]));J.set(ow.setLicense.name,new re(!0,[]));J.set(sw.deleteFilesBefore.name,new re(!0,[]));J.set(sw.deleteAuditLogsBefore.name,new re(!0,[]));J.set(U$.restart.name,new re(!0,[]));J.set(U$.restartService.name,new re(!0,[]));J.set(Xue.name,new re(!0,[]));J.set(Zue.name,new re(!0,[yo]));J.set(lde.systemInformation.name,new re(!0,[]));J.set(k$.getConfiguration.name,new re(!0,[]));J.set(F$.readTransactionLog.name,new re(!0,[]));J.set(F$.deleteTransactionLogsBefore.name,new re(!0,[]));J.set(G$.installModules.name,new re(!0,[]));J.set(G$.auditModules.name,new re(!0,[]));J.set(ad.createCsr.name,new re(!0,[]));J.set(ad.signCertificate.name,new re(!0,[]));J.set(ad.listCertificates.name,new re(!0,[]));J.set(ad.addCertificate.name,new re(!0,[]));J.set(ad.removeCertificate.name,new re(!0,[]));J.set(ad.getKey.name,new re(!0,[]));J.set(q$.addNodeBack.name,new re(!0,[]));J.set(q$.removeNodeBack.name,new re(!0,[]));J.set(B$.createTokens.name,new re(!1,[]));J.set(B$.refreshOperationToken.name,new re(!1,[]));J.set(H$.login.name,new re(!1,[]));J.set(H$.logout.name,new re(!1,[]));J.set(ar.customFunctionsStatus.name,new re(!0,[]));J.set(ar.getCustomFunctions.name,new re(!0,[]));J.set(ar.getComponents.name,new re(!0,[]));J.set(ar.getComponentFile.name,new re(!0,[]));J.set(ar.setComponentFile.name,new re(!0,[]));J.set(ar.dropComponent.name,new re(!0,[]));J.set(ar.getCustomFunction.name,new re(!0,[]));J.set(ar.setCustomFunction.name,new re(!0,[]));J.set(ar.dropCustomFunction.name,new re(!0,[]));J.set(ar.addComponent.name,new re(!0,[]));J.set(ar.dropCustomFunctionProject.name,new re(!0,[]));J.set(ar.packageComponent.name,new re(!0,[]));J.set(ar.deployComponent.name,new re(!0,[]));J.set(ar.addSSHKey.name,new re(!0,[]));J.set(ar.updateSSHKey.name,new re(!0,[]));J.set(ar.deleteSSHKey.name,new re(!0,[]));J.set(ar.listSSHKeys.name,new re(!0,[]));J.set(ar.setSSHKnownHosts.name,new re(!0,[]));J.set(ar.getSSHKnownHosts.name,new re(!0,[]));J.set(ow.getRegistrationInfo.name,new re(!1,[]));J.set(Th.userInfo.name,new re(!1,[]));J.set(Sh.describeAll.name,new re(!1,[]));J.set(_de,new re(!1,[]));J.set(hde,new re(!0,[]));J.set(fde,new re(!0,[]));J.set(Qg.CSV_DATA_LOAD,new re(!1,[Ca,ll]));J.set(Qg.CSV_URL_LOAD,new re(!1,[Ca,ll]));J.set(Qg.CSV_FILE_LOAD,new re(!1,[Ca,ll]));J.set(Qg.IMPORT_FROM_S3,new re(!1,[Ca,ll]));J.set(W$.EXPORT_TO_S3,new re(!0,[]));J.set(W$.EXPORT_LOCAL,new re(!0,[]));J.set(Zr.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[K$]));J.set(Zr.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[yo]));J.set(Zr.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Ca]));J.set(Zr.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[ll]));Q$.exports={verifyPerms:Ede,verifyPermsAst:mde,verifyBulkLoadAttributePerms:Sde};function mde(e,t,r){if(Ro.isEmptyOrZeroLength(e))throw mr.info("verify_perms_ast has an empty user parameter"),yn(new Error);if(Ro.isEmptyOrZeroLength(t))throw mr.info("verify_perms_ast has an empty user parameter"),yn(new Error);if(Ro.isEmptyOrZeroLength(r))throw mr.info("verify_perms_ast has a null operation parameter"),yn(new Error);try{let n=new $$,s=new cde(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw mr.info("No schemas defined in verifyPermsAst(), will not continue."),yn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&Y$[r])throw yn(new Error,Lr.DROP_SYSTEM,Eh.FORBIDDEN);if(c&&!l)return null;let u=x$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof ude.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=z$(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let p=s.getAttributesBySchemaTableName(h,d[_]),S=cw(t.role.permission,h,d[_]);aw(p,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw yn(n)}}a(mde,"verifyPermsAst");function Ede(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw mr.info("null required parameter in verifyPerms"),yn(new Error,Lr.DEFAULT_INVALID_REQUEST,Eh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new $$;if(Ro.isEmptyOrZeroLength(e.hdb_user?.role)||Ro.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return mr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Lr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(Zr.SYSTEM_SCHEMA_NAME)||s===Zr.SYSTEM_SCHEMA_NAME;if(l&&f&&dde[e.operation]&&(i===Zr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&Y$[r])throw yn(new Error,Lr.DROP_SYSTEM,Eh.FORBIDDEN);if(l&&!f||u===!0&&(r===As.createSchema.name||r===As.dropSchema.name))return null;if(pde.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=x$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===M$||r===v$)&&!d.super_user){if(s===Zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Lr.SCHEMA_PERM_ERROR(s));if(r===M$&&(!d[s]||!d[s][gh]))return c.handleInvalidItem(Lr.SCHEMA_NOT_FOUND(s));if(r===v$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][gh]))return c.handleInvalidItem(Lr.TABLE_NOT_FOUND(s,i))}let h=z$(e.hdb_user,r,o,c,n);if(h)return h;if(J.get(r)&&J.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Zr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[Zr.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=S)}let _=gde(e),p=cw(e.hdb_user?.role?.permission,s,i);return aw(_,p,r,i,s,c,n),c.getPermsResponse()}a(Ede,"verifyPerms");function z$(e,t,r,n,s){if(Ro.arrayHasEmptyValues([e,t,r]))throw mr.info("hasPermissions has an invalid parameter"),yn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||J.get(t).requires_su))return null;if(!J.get(t))throw mr.info(`operation ${t} not found.`),yn(new Error,Lr.OP_NOT_FOUND(t),Eh.BAD_REQUEST);if(J.get(t)&&J.get(t).requires_su)return mr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Lr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][gh]===!1){n.addInvalidItem(Lr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Lr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[gh]===!1)n.addInvalidItem(Lr.TABLE_NOT_FOUND(l,f));else try{let h=[],_=J.get(t).perms;!Ro.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let p=0;p<_.length;p++){let S=_[p],g=d[S];(g==null||g===!1)&&(mr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Lr.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw mr.error(_),mr.error(h),yn(V$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(z$,"hasPermissions");function aw(e,t,r,n,s,i,o){if(!e||!t)throw mr.info("no attributes specified in checkAttributePerms."),yn(new Error);let c=J.get(r).perms;if(!c||c==="")throw mr.info(`no permissions found for ${r} in checkAttributePerms().`),yn(new Error);if(Ro.isEmptyOrZeroLength(t))return mr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[gh]===!1){i.addInvalidItem(Lr.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==yo)throw yn(new Error,Lr.SYSTEM_TIMESTAMP_PERMS_ERR,Eh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Lr.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(aw,"checkAttributePerms");function gde(e){let t=new Set;try{if(e.action)return t;if(e.operation===Zr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){mr.info(r)}return t}a(gde,"getRecordAttributes");function cw(e,t,r){let n=new Map;if(Ro.isEmpty(e))return mr.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{mr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(cw,"getAttributePermissions");function Sde(e,t,r,n,s,i,o){let c=new Set(i),l=cw(e,n,s);aw(c,l,t,s,n,o,r)}a(Sde,"verifyBulkLoadAttributePerms")});var Xg=I((KPe,eV)=>{"use strict";eV.exports={evaluateSQL:Lde,processAST:Z$,convertSQLToAST:X$,checkASTPermissions:J$};var Tde=hn(),j$=require("util"),Ade=j$.callbackify(Tde.insert),Rde=$r().search,yde=vB().update,bde=j$.callbackify(yde),Ode=xB().convertDelete,Pa=require("alasql"),Nde=jg(),Jg=j(),wde=hm(),Ide=oe(),Ah=(H(),D(q)),{hdb_errors:Cde,handleHDBError:lw}=he(),{HTTP_STATUS_CODES:uw}=Cde;wde(Pa);var Pde=403,Dde="There was a problem performing this insert. Please check the logs and try again.",dw=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Lde(e,t){let r=e.parsed_sql_object;if(!r){r=X$(e.sql);let n,s=r.ast.statements[0];if(s instanceof Pa.yy.Insert?n=s.into.databaseid:s instanceof Pa.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Pa.yy.Update||s instanceof Pa.yy.Delete?n=s.table.databaseid:Jg.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Pa.yy.Select)&&Ide.isEmptyOrZeroLength(n))return t("No schema specified",null)}Z$(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Lde,"evaluateSQL");function J$(e,t){let r;try{r=Nde.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(J$,"checkASTPermissions");function X$(e){let t=new dw;if(!e)throw lw(new Error,"The 'sql' parameter is missing from the request body",uw.BAD_REQUEST);try{let r=e.trim(),n=Pa.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
40
+ `);throw n[1]?lw(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,uw.BAD_REQUEST):lw(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",uw.BAD_REQUEST)}return t}a(X$,"convertSQLToAST");function Z$(e,t,r){try{let n=Mde;if(!e.bypass_auth&&!t.permissions_checked){let i=J$(e,t);if(i&&i.length>0)return r(Pde,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ah.VALID_SQL_OPS_ENUM.SELECT:n=Rde,s=t.ast.statements[0];break;case Ah.VALID_SQL_OPS_ENUM.INSERT:n=vde;break;case Ah.VALID_SQL_OPS_ENUM.UPDATE:n=bde;break;case Ah.VALID_SQL_OPS_ENUM.DELETE:n=Ode;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(Z$,"processAST");function Mde(e,t){Jg.info(e),t("unknown sql statement")}a(Mde,"nullFunction");function vde({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Ude(i,e.values)}catch(o){return r(o)}Ade(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Jg.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(vde,"convertInsert");function Ude(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]]=Pa.compile(`SELECT ${s.toString()} AS [${Ah.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Jg.error(r),new Error(Dde)}}a(Ude,"createDataObjects")});var Ew=I((QPe,sV)=>{var rS=require("clone"),nS=dt(),xde=oe(),eS=(H(),D(q)),WPe=j(),fw=require("fs"),hw=require("joi"),{string:tS}=hw.types(),{hdb_errors:Bde,handleHDBError:Zg}=he(),{HDB_ERROR_MSGS:zPe,HTTP_STATUS_CODES:_w}=Bde,{common_validators:cd}=Si(),tV=" is required",Hde=["insert","update","upsert"],pw={database:{presence:!1,format:cd.schema_format,length:cd.schema_length},schema:{presence:!1,format:cd.schema_format,length:cd.schema_length},table:{presence:!0,format:cd.schema_format,length:cd.schema_length},action:{inclusion:{within:Hde,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},kde={schema:tS.required(),table:tS.required(),action:tS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Fde,AWS_SECRET:Gde,AWS_BUCKET:qde,AWS_FILE_KEY:$de,REGION:Vde}=eS.S3_BUCKET_AUTH_KEYS,Kde={s3:{presence:!0},[`s3.${Fde}`]:{presence:!0,type:"String"},[`s3.${Gde}`]:{presence:!0,type:"String"},[`s3.${qde}`]:{presence:!0,type:"String"},[`s3.${$de}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Vde}`]:{presence:!0,type:"String"}},rV=rS(pw);rV.data.presence={message:tV};var nV=rS(pw);nV.file_path.presence={message:tV};var Yde=Object.assign(rS(pw),Kde),mw=rS(kde);mw.csv_url=tS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();mw.passthrough_headers=hw.object();function Wde(e){let t=nS.validateObject(e,rV);return sS(e,t)}a(Wde,"dataObject");function zde(e){let t=nS.validateBySchema(e,hw.object(mw));return sS(e,t)}a(zde,"urlObject");function Qde(e){let t=nS.validateObject(e,nV);return sS(e,t)}a(Qde,"fileObject");function jde(e){let t=nS.validateObject(e,Yde);return sS(e,t)}a(jde,"s3FileObject");function sS(e,t){if(!t){let r=xde.checkGlobalSchemaTable(e.schema,e.table);if(r)return Zg(new Error,r,_w.BAD_REQUEST);if(e.operation===eS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{fw.accessSync(e.file_path,fw.constants.R_OK|fw.constants.F_OK)}catch(n){return n.code===eS.NODE_ERROR_CODES.ENOENT?Zg(n,`No such file or directory ${n.path}`,_w.BAD_REQUEST):n.code===eS.NODE_ERROR_CODES.EACCES?Zg(n,`Permission denied ${n.path}`,_w.BAD_REQUEST):Zg(n)}}return t}a(sS,"postValidateChecks");sV.exports={dataObject:Wde,urlObject:zde,fileObject:Qde,s3FileObject:jde}});var gw=I((JPe,iV)=>{"use strict";var Rh=j(),iS=(H(),D(q));async function Jde(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===iS.OPERATIONS_ENUM.INSERT||t.operation===iS.OPERATIONS_ENUM.UPDATE||t.operation===iS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rh.info(i.message),i):i.http_resp_msg?(Rh.error(`Error calling operation: ${e.name}`),Rh.error(i.http_resp_msg),i):(Rh.error(`Error calling operation: ${e.name}`),Rh.error(i),i)}}a(Jde,"callOperationFunctionAsAwait");iV.exports={callOperationFunctionAsAwait:Jde}});var Sw=I((ZPe,aV)=>{"use strict";var{S3:Xde,GetObjectCommand:Zde}=require("@aws-sdk/client-s3");aV.exports={getFileStreamFromS3:efe,getS3AuthObj:oV};async function efe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await oV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Zde(r))).Body}a(efe,"getFileStreamFromS3");function oV(e,t,r){return new Xde({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(oV,"getS3AuthObj")});var lV=I((tDe,cV)=>{"use strict";var Tw=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},Aw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};cV.exports={BulkLoadFileObject:Tw,BulkLoadDataObject:Aw}});var dV=I((nDe,uV)=>{"use strict";var Rw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};uV.exports=Rw});var Iw=I((lDe,IV)=>{"use strict";var oS=hn(),cS=Ew(),tfe=require("needle"),Zs=(H(),D(q)),iDe=Nt(),ld=oe(),{handleHDBError:Ht,hdb_errors:TV}=he(),{HTTP_STATUS_CODES:Mr,HDB_ERROR_MSGS:Er,CHECK_LOGS_WRAPPER:dl}=TV,ud=j(),yw=require("papaparse");ld.promisifyPapaParse();var ei=require("fs-extra"),rfe=require("path"),{chain:fV}=require("stream-chain"),_V=require("stream-json/streamers/StreamArray"),hV=require("stream-json/utils/Batch"),pV=require("stream-chain/utils/comp"),{finished:mV}=require("stream"),nfe=ce(),AV=gw(),sfe=Sw(),{BulkLoadFileObject:Ow,BulkLoadDataObject:ife}=lV(),Nw=rw(),{verifyBulkLoadAttributePerms:RV}=jg(),oDe=dV(),aDe=pr(),cDe=ro(),{databases:ofe}=(Me(),D(st)),{coerceType:afe}=(uf(),D(Cw)),EV="No records parsed from csv file.",ul=`${nfe.get("HDB_ROOT")}/tmp`,{schema_regex:cfe}=Si(),gV=1024*1024*2,SV=5e3,lfe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};IV.exports={csvDataLoad:ufe,csvURLLoad:dfe,csvFileLoad:ffe,importFromS3:_fe};async function ufe(e,t){let r=cS.dataObject(e);if(r)throw Ht(r,r.message,Mr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=OV(e.schema,e.table),i=yw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:bw.bind(null,s),dynamicTyping:!1}),o=new Nw;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&RV(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Ht(new Error,c,Mr.BAD_REQUEST,void 0,void 0,!0);let l=new ife(e.action,e.schema,e.table,i.data);return n=await AV.callOperationFunctionAsAwait(NV,l,null),n.message===EV?EV:wV(n.records,n.number_written)}catch(s){throw fl(s)}}a(ufe,"csvDataLoad");async function dfe(e){let t=cS.urlObject(e);if(t)throw Ht(t,t.message,Mr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${ul}/${r}`;try{await hfe(e,r)}catch(s){throw ud.error(Er.DOWNLOAD_FILE_ERR(r)+" - "+s),Ht(s,dl(Er.DOWNLOAD_FILE_ERR(r)))}try{let s=new Ow(this.job_operation_function.name,e.action,e.schema,e.table,n,Zs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await ww(s);return await aS(n),i}catch(s){throw await aS(n),fl(s)}}a(dfe,"csvURLLoad");async function ffe(e){let t=cS.fileObject(e);if(t)throw Ht(t,t.message,Mr.BAD_REQUEST,void 0,void 0,!0);let r=new Ow(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Zs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await ww(r)}catch(n){throw fl(n)}}a(ffe,"csvFileLoad");async function _fe(e){let t=cS.s3FileObject(e);if(t)throw Ht(t,t.message,Mr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=rfe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${ul}/${s}`;let i=new Ow(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await pfe(s,e);let o=await ww(i);return await aS(r),o}catch(n){throw await aS(r),fl(n)}}a(_fe,"importFromS3");async function hfe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await tfe("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 Ht(n,s,n.statusCode,Zs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Efe(r,e.csv_url),await mfe(t,r.raw)}a(hfe,"downloadCSVFile");async function pfe(e,t){try{let r=`${ul}/${e}`;await ei.mkdirp(ul),await ei.writeFile(`${ul}/${e}`,"",{flag:"a+"});let n=await ei.createWriteStream(r),s=await sfe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){ud.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ud.error(Er.S3_DOWNLOAD_ERR+" - "+r),Ht(r,dl(Er.S3_DOWNLOAD_ERR))}}a(pfe,"downloadFileFromS3");async function mfe(e,t){try{await ei.mkdirp(ul),await ei.writeFile(`${ul}/${e}`,t)}catch(r){throw ud.error(Er.WRITE_TEMP_FILE_ERR),Ht(r,dl(Er.DEFAULT_BULK_LOAD_ERR))}}a(mfe,"writeFileToTempFolder");async function aS(e){if(e)try{await ei.access(e),await ei.unlink(e)}catch{ud.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(aS,"deleteTempFile");function Efe(e,t){if(e.statusCode!==TV.HTTP_STATUS_CODES.OK)throw Ht(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Mr.BAD_REQUEST);if(!lfe[e.headers["content-type"]])throw Ht(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Mr.BAD_REQUEST);if(!e.raw)throw Ht(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Mr.BAD_REQUEST)}a(Efe,"validateURLResponse");async function ww(e){try{let t;switch(e.file_type){case Zs.VALID_S3_FILE_TYPES.CSV:t=await gfe(e);break;case Zs.VALID_S3_FILE_TYPES.JSON:t=await Sfe(e);break;default:throw Ht(new Error,Er.DEFAULT_BULK_LOAD_ERR,Mr.BAD_REQUEST,Zs.LOG_LEVELS.ERROR,Er.INVALID_FILE_EXT_ERR(e))}return wV(t.records,t.number_written)}catch(t){throw fl(t)}}a(ww,"fileLoad");async function yV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await oS.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&RV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Ht(c);r(l)}}a(yV,"validateChunk");async function bV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ld.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ld.isEmpty(c)&&!ld.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await AV.callOperationFunctionAsAwait(NV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Ht(c,dl(Er.INSERT_CSV_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.INSERT_CSV_ERR+" - "+c);r(l)}}a(bV,"insertChunk");async function gfe(e){let t={records:0,number_written:0},r=OV(e.schema,e.table);try{let n=new Nw,s=ei.createReadStream(e.file_path,{highWaterMark:gV});s.setEncoding("utf8"),await yw.parsePromise(s,yV.bind(null,e,n),bw.bind(null,r));let i=n.getPermsResponse();if(i)throw Ht(new Error,i,Mr.BAD_REQUEST);return s=ei.createReadStream(e.file_path,{highWaterMark:gV}),s.setEncoding("utf8"),await yw.parsePromise(s,bV.bind(null,e,t),bw.bind(null,r)),s.destroy(),t}catch(n){throw Ht(n,dl(Er.PAPA_PARSE_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.PAPA_PARSE_ERR+n)}}a(gfe,"callPapaParse");function OV(e,t){let r=ofe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>afe(i,s));return n}a(OV,"createTransformMap");function bw(e,t,r){let n=e.get(r);return n?n(t):ld.autoCast(t)}a(bw,"typeFunction");async function Sfe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Nw,s=fV([ei.createReadStream(e.file_path,{encoding:"utf-8"}),_V.withParser(),c=>c.value,new hV({batchSize:SV}),pV(async c=>{await yV(e,n,r,c)})]);await new Promise((c,l)=>{mV(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Ht(new Error,i,Mr.BAD_REQUEST);let o=fV([ei.createReadStream(e.file_path,{encoding:"utf-8"}),_V.withParser(),c=>c.value,new hV({batchSize:SV}),pV(async c=>{await bV(e,t,r,c)})]);return await new Promise((c,l)=>{mV(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Ht(n,dl(Er.INSERT_JSON_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.INSERT_JSON_ERR+n)}}a(Sfe,"insertJson");async function NV(e){let t={};try{e.data&&e.data.length>0&&Tfe(e.data[0])?t=await Afe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ud.info(t.message))}catch(r){throw fl(r)}return t}a(NV,"callBulkFileLoad");function Tfe(e){let t=Object.keys(e);for(let r of t)if(!cfe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Tfe,"validateColumnNames");async function Afe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=oS.insert;break;case"update":i=oS.update;break;case"upsert":i=oS.upsert;break;default:throw Ht(new Error,Er.INVALID_ACTION_PARAM_ERR(n),Mr.BAD_REQUEST,Zs.LOG_LEVELS.ERROR,Er.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=ld.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw fl(o)}}a(Afe,"bulkFileLoad");function wV(e,t){return`successfully loaded ${t} of ${e} records`}a(wV,"buildResponseMsg");function fl(e){return Ht(e,dl(Er.DEFAULT_BULK_LOAD_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(fl,"buildTopLevelErrMsg")});var Lw=I((dDe,xV)=>{"use strict";var Dw=$r(),Rfe=Sw(),{AsyncParser:yfe}=require("json2csv"),lS=require("stream"),Xn=oe(),Pw=require("fs-extra"),bfe=require("path"),Rs=j(),{promisify:DV}=require("util"),yh=oe(),{handleHDBError:cr,hdb_errors:Ofe}=he(),{HDB_ERROR_MSGS:bn,HTTP_STATUS_CODES:lr}=Ofe,{streamAsJSON:Nfe}=(wA(),D(MD)),{Upload:wfe}=require("@aws-sdk/lib-storage"),{toCsvStream:Ife}=(ji(),D(GD)),CV=["search_by_value","search_by_hash","sql","search_by_conditions"],PV=["json","csv"],LV="json",MV="csv",Cfe="Successfully exported JSON locally.",Pfe="Successfully exported CSV locally.",Dfe=1e3,Lfe=Dw.searchByHash,Mfe=Dw.searchByValue,vfe=DV(lS.finished);xV.exports={export_to_s3:Hfe,export_local:Ufe};async function Ufe(e){Rs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=vV(e);if(!Xn.isEmpty(t))throw Rs.error(t),cr(new Error,t,lr.BAD_REQUEST,void 0,void 0,!0);if(Xn.isEmpty(e.path))throw Rs.error(bn.MISSING_VALUE("path")),cr(new Error,bn.MISSING_VALUE("path"),lr.BAD_REQUEST,void 0,void 0,!0);let r=(Xn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(bfe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Xn.buildFolderPath(e.path,r);await xfe(e.path);let s=await UV(e);return await Bfe(n,e.format,s)}a(Ufe,"export_local");async function xfe(e){if(Rs.trace("in confirmPath"),Xn.isEmptyOrZeroLength(e))throw cr(new Error,`Invalid path: ${e}`,lr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Pw.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Rs.error(n),cr(new Error,n,lr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Rs.error(r),cr(new Error,r,lr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(xfe,"confirmPath");async function Bfe(e,t,r){if(Rs.trace("in saveToLocal"),yh.isEmptyOrZeroLength(e))throw cr(new Error,bn.INVALID_VALUE("file_path"),lr.BAD_REQUEST,void 0,void 0,!0);if(yh.isEmptyOrZeroLength(t))throw cr(new Error,bn.INVALID_VALUE("Source format"),lr.BAD_REQUEST,void 0,void 0,!0);if(yh.isEmpty(r))throw cr(new Error,bn.NOT_FOUND("Data"),lr.BAD_REQUEST,void 0,void 0,!0);if(t===LV){let n=Pw.createWriteStream(e);return Nfe(r).pipe(n),await vfe(n),{message:Cfe,path:e}}else if(t===MV){let n=Pw.createWriteStream(e),s=lS.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new yfe(i,c).fromInput(s).toOutput(n).promise(!1),{message:Pfe,path:e}}throw cr(new Error,bn.INVALID_VALUE("format"),lr.BAD_REQUEST)}a(Bfe,"saveToLocal");async function Hfe(e){if(!e.s3||Object.keys(e.s3).length===0)throw cr(new Error,bn.MISSING_VALUE("S3 object"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw cr(new Error,bn.MISSING_VALUE("aws_access_key_id"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw cr(new Error,bn.MISSING_VALUE("aws_secret_access_key"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.bucket))throw cr(new Error,bn.MISSING_VALUE("bucket"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.key))throw cr(new Error,bn.MISSING_VALUE("key"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.region))throw cr(new Error,bn.MISSING_VALUE("region"),lr.BAD_REQUEST);let t=vV(e);if(!Xn.isEmpty(t))throw cr(new Error,t,lr.BAD_REQUEST);Rs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await UV(e)}catch(l){throw Rs.error(l),l}let n,s=await Rfe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new lS.PassThrough;if(e.format===MV){i=e.s3.key+".csv";let l=Ife(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===LV){i=e.s3.key+".json";let l=new lS.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%Dfe===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw cr(new Error,bn.INVALID_VALUE("format"),lr.BAD_REQUEST);return new wfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Hfe,"export_to_s3");function vV(e){if(Rs.trace("in exportCoreValidation"),Xn.isEmpty(e.format))return"format missing";if(PV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${PV.join(", ")}`;let t=e.search_operation.operation;if(Xn.isEmpty(t))return"search_operation.operation missing";if(CV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${CV.join(", ")}`}a(vV,"exportCoreValidation");async function UV(e){Rs.trace("in getRecords");let t,r;if(yh.isEmpty(e.search_operation)||yh.isEmptyOrZeroLength(e.search_operation.operation))throw cr(new Error,bn.INVALID_VALUE("Search operation"),lr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Mfe;break;case"search_by_hash":t=Lfe;break;case"search_by_conditions":t=Dw.searchByConditions;break;case"sql":{let n=Xg();t=DV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Rs.error(r),cr(new Error,r,lr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(UV,"getRecords")});var HV=I((_De,BV)=>{"use strict";var Mw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};BV.exports=Mw});var GV=I((pDe,FV)=>{"use strict";var kfe=(H(),D(q)),kV=require("moment"),Ffe=require("uuid").v4,vw=class{static{a(this,"JobObject")}constructor(){this.id=Ffe(),this.type=void 0,this.start_datetime=kV().valueOf(),this.created_datetime=kV().valueOf(),this.end_datetime=void 0,this.status=kfe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};FV.exports=vw});var Uw=I((EDe,QV)=>{"use strict";var Gfe=require("uuid").v4,YV=hn(),WV=$r(),qfe=qs(),$fe=uu(),Vfe=HV(),yt=(H(),D(q)),Kfe=GV(),Yfe=uE(),ti=j(),Wfe=rf(),dd=oe(),{promisify:zfe}=require("util"),_l=require("moment"),Qfe=Xg(),uS=Ew(),qV=wR(),{deleteTransactionLogsBeforeValidator:jfe}=JN(),{handleHDBError:$V,hdb_errors:Jfe,ClientError:Xfe}=he(),{HTTP_STATUS_CODES:VV}=Jfe,KV=WV.searchByValue,Zfe=WV.searchByHash,e_e=YV.insert,t_e=zfe(Qfe.evaluateSQL),r_e=YV.update;QV.exports={addJob:i_e,updateJob:a_e,handleGetJob:n_e,handleGetJobsByStartDate:s_e,getJobById:zV};async function n_e(e){if(e.id===void 0)throw new Xfe("'id' is required");let t=await zV(e.id);return dd.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(n_e,"handleGetJob");async function s_e(e){try{let t=await o_e(e);if(ti.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=_l(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=_l(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 ti.error(r),new Error(r)}}a(s_e,"handleGetJobsByStartDate");async function i_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||dd.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return ti.info(f),t.error=f,t}if(!yt.JOB_TYPE_ENUM[e.operation])return ti.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case yt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=uS.fileObject(e);break;case yt.OPERATIONS_ENUM.CSV_URL_LOAD:n=uS.urlObject(e);break;case yt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=uS.dataObject(e);break;case yt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=uS.s3FileObject(e);break;case yt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case yt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=qV(e,"date");break;case yt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=qV(e,"timestamp");break;case yt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=jfe(e);break;case yt.OPERATIONS_ENUM.RESTART_SERVICE:if(yt.HDB_PROCESS_SERVICES[e.service]===void 0)throw $V(new Error,"Invalid service",VV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw $V(n,n.message,VV.BAD_REQUEST,void 0,void 0,!0);let s=new Kfe;s.type=e.operation===yt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?yt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new qfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await KV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return ti.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Gfe();try{o=await KV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return ti.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ti.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Wfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await e_e(l)}catch(f){return ti.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,ti.trace(f)}return t}a(i_e,"addJob");async function o_e(e){let t=_l(e.from_date,_l.ISO_8601),r=_l(e.to_date,_l.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 Vfe(n,e.hdb_user);try{return await t_e(s)}catch(i){throw ti.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(o_e,"getJobsInDateRange");async function zV(e){if(dd.isEmptyOrZeroLength(e))return dd.errorizeMessage("Invalid job ID specified.");let t=new $fe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Zfe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ti.error(n),dd.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(zV,"getJobById");async function a_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(dd.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===yt.JOB_STATUS_ENUM.COMPLETE||e.status===yt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=_l().valueOf());let t=new Yfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await r_e(t),r}a(a_e,"updateJob")});var n1=I((SDe,r1)=>{"use strict";var jV=oe(),gr=(H(),D(q)),c_e=require("moment"),dS=Iw(),bh=j(),JV=Uw(),XV=Lw(),ZV=Tc(),e1=rt(),l_e=Yg(),u_e=rd(),{parentPort:d_e,isMainThread:t1}=require("worker_threads"),{onMessageByType:f_e}=rt(),xw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function __e(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(jV.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(jV.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gr.JOB_TYPE_ENUM.csv_file_load:await vi(e,dS.csvFileLoad);break;case gr.JOB_TYPE_ENUM.csv_url_load:await vi(e,dS.csvURLLoad);break;case gr.JOB_TYPE_ENUM.csv_data_load:await vi(e,dS.csvDataLoad);break;case gr.JOB_TYPE_ENUM.import_from_s3:await vi(e,dS.importFromS3);break;case gr.JOB_TYPE_ENUM.empty_trash:break;case gr.JOB_TYPE_ENUM.export_local:await vi(e,XV.export_local);break;case gr.JOB_TYPE_ENUM.export_to_s3:await vi(e,XV.export_to_s3);break;case gr.JOB_TYPE_ENUM.delete_files_before:case gr.JOB_TYPE_ENUM.delete_records_before:await vi(e,ZV.deleteFilesBefore);break;case gr.JOB_TYPE_ENUM.delete_audit_logs_before:await vi(e,ZV.deleteAuditLogsBefore);break;case gr.JOB_TYPE_ENUM.delete_transaction_logs_before:await vi(e,l_e.deleteTransactionLogsBefore);break;case gr.JOB_TYPE_ENUM.restart_service:return await vi(e,u_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(__e,"parseMessage");async function vi(e,t){try{e.job.status=gr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=c_e().valueOf(),await JV.updateJob(e.job),await h_e(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):bh.error(`There was an error running ${t.name} job with id ${e.job.id}`),bh.error(n),e.job.message=n,e.job.status=gr.JOB_STATUS_ENUM.ERROR;try{await JV.updateJob(e.job)}catch(s){throw bh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(vi,"runJob");async function h_e(e){bh.trace("launching job thread:",e),t1?e1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):d_e.postMessage({type:gr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(h_e,"launchJobThread");t1&&f_e(gr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{e1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){bh.error(r)}});r1.exports={parseMessage:__e,RunnerMessage:xw}});var i1=I((ADe,s1)=>{"use strict";var Bw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};s1.exports=Bw});var jN=I((bDe,$w)=>{"use strict";var mS=$r(),Fw=Xg(),fS=Iw(),bo=ZE(),_S=no(),Nh=Tc(),p_e=yO(),Oh=Gn(),hS=a_(),Ct=QN(),pS=j(),m_e=IO(),E_e=dg(),o1=ZO(),g_e=_g(),S_e=rN(),T_e=nN(),A_e=oN(),R_e=cN(),Hw=gg(),a1=Lw(),y_e=jg(),Gw=Uw(),V=(H(),D(q)),{hdb_errors:Ih,handleHDBError:wh}=he(),{HTTP_STATUS_CODES:c1}=Ih,kw=AN(),l1=rd(),S1=require("util"),_d=hn(),b_e=Hs(),O_e=$u(),u1=n1(),d1=(Tu(),D(S_)),f1=(Hg(),D(ah)),_1=It(),h1=Yg(),p1=dh(),{setServerUtilities:N_e}=(uf(),D(Cw)),{CONTEXT:yDe}=(Jo(),D(TA)),{_assignPackageExport:w_e}=ci(),{transformReq:I_e}=oe(),{server:C_e}=(Gr(),D(Wl)),en=pS.loggerWithTag("operation"),fd=Qs(),m1=(jc(),D(Qc)),P_e=gw(),E1=mS.searchByHash,D_e=mS.searchByValue,L_e=S1.promisify(mS.search),M_e=S1.promisify(Fw.evaluateSQL),v_e={[V.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.CREATE_TABLE]:!0,[V.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[V.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.DROP_TABLE]:!0,[V.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Z=i1();async function T1(e,t){try{if(e.body.operation!=="read_log"&&(pS.log_level===V.LOG_LEVELS.INFO||pS.log_level===V.LOG_LEVELS.DEBUG||pS.log_level===V.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;en.info(c)}}catch(n){en.error(n)}let r=await P_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return v_e[e.body.operation]&&b_e.setSchemaDataToGlobal(n=>{n&&en.error(n)}),r}a(T1,"processLocalTransaction");var g1=x_e();$w.exports={chooseOperation:A1,getOperationFunction:R1,operation:qw,processLocalTransaction:T1,executeJob:ys};N_e($w.exports);C_e.operation=qw;function A1(e){let t;try{t=R1(e)}catch(s){throw en.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Fw.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Fw.checkASTPermissions(e,i);if(o)throw en.error(`${c1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),wh(new Error,o,Ih.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.OPERATIONS_ENUM.LOGIN&&e.operation!==V.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=y_e.verifyPerms(i,s);if(o)throw en.error(`${c1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),wh(new Error,o,Ih.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw wh(s,"There was an error when trying to choose an operation path")}return r}a(A1,"chooseOperation");function R1(e){if(en.trace(`getOperationFunction with operation: ${e.operation}`),g1.has(e.operation))return g1.get(e.operation);throw wh(new Error,Ih.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ih.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(R1,"getOperationFunction");w_e("operation",qw);function qw(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=A1(e);return T1({body:e},n)}a(qw,"operation");async function U_e(e){en.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[V.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case V.OPERATIONS_ENUM.INSERT:o=await _d.insert(i);break;case V.OPERATIONS_ENUM.UPDATE:o=await _d.update(i);break;case V.OPERATIONS_ENUM.UPSERT:o=await _d.upsert(i);break;case V.OPERATIONS_ENUM.DELETE:o=await Nh.deleteRecord(i);break;default:en.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){en.info("Invalid operation in transaction"),en.error(o)}}a(U_e,"catchup");async function ys(e){I_e(e);let t,r;try{r=await Gw.addJob(e),t=r.createdJob,en.info("addJob result",r);let n=new u1.RunnerMessage(t,e);return{message:await u1.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw en.error(s),wh(n,s)}}a(ys,"executeJob");function x_e(){let e=new Map;return e.set(V.OPERATIONS_ENUM.INSERT,new Z(_d.insert)),e.set(V.OPERATIONS_ENUM.UPDATE,new Z(_d.update)),e.set(V.OPERATIONS_ENUM.UPSERT,new Z(_d.upsert)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Z(mS.searchByConditions)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_HASH,new Z(E1)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_ID,new Z(E1)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Z(D_e)),e.set(V.OPERATIONS_ENUM.SEARCH,new Z(L_e)),e.set(V.OPERATIONS_ENUM.SQL,new Z(M_e)),e.set(V.OPERATIONS_ENUM.CSV_DATA_LOAD,new Z(ys,fS.csvDataLoad)),e.set(V.OPERATIONS_ENUM.CSV_FILE_LOAD,new Z(ys,fS.csvFileLoad)),e.set(V.OPERATIONS_ENUM.CSV_URL_LOAD,new Z(ys,fS.csvURLLoad)),e.set(V.OPERATIONS_ENUM.IMPORT_FROM_S3,new Z(ys,fS.importFromS3)),e.set(V.OPERATIONS_ENUM.CREATE_SCHEMA,new Z(bo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_DATABASE,new Z(bo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_TABLE,new Z(bo.createTable)),e.set(V.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Z(bo.createAttribute)),e.set(V.OPERATIONS_ENUM.DROP_SCHEMA,new Z(bo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_DATABASE,new Z(bo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_TABLE,new Z(bo.dropTable)),e.set(V.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Z(bo.dropAttribute)),e.set(V.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Z(_S.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Z(_S.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_TABLE,new Z(_S.describeTable)),e.set(V.OPERATIONS_ENUM.DESCRIBE_ALL,new Z(_S.describeAll)),e.set(V.OPERATIONS_ENUM.DELETE,new Z(Nh.deleteRecord)),e.set(V.OPERATIONS_ENUM.ADD_USER,new Z(Oh.addUser)),e.set(V.OPERATIONS_ENUM.ALTER_USER,new Z(Oh.alterUser)),e.set(V.OPERATIONS_ENUM.DROP_USER,new Z(Oh.dropUser)),e.set(V.OPERATIONS_ENUM.LIST_USERS,new Z(Oh.listUsersExternal)),e.set(V.OPERATIONS_ENUM.LIST_ROLES,new Z(hS.listRoles)),e.set(V.OPERATIONS_ENUM.ADD_ROLE,new Z(hS.addRole)),e.set(V.OPERATIONS_ENUM.ALTER_ROLE,new Z(hS.alterRole)),e.set(V.OPERATIONS_ENUM.DROP_ROLE,new Z(hS.dropRole)),e.set(V.OPERATIONS_ENUM.USER_INFO,new Z(Oh.userInfo)),e.set(V.OPERATIONS_ENUM.READ_LOG,new Z(m_e)),e.set(V.OPERATIONS_ENUM.ADD_NODE,new Z(E_e)),e.set(V.OPERATIONS_ENUM.UPDATE_NODE,new Z(o1)),e.set(V.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Z(o1)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE,new Z(g_e)),e.set(V.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Z(S_e)),e.set(V.OPERATIONS_ENUM.PURGE_STREAM,new Z(T_e)),e.set(V.OPERATIONS_ENUM.SET_CONFIGURATION,new Z(_1.setConfiguration)),e.set(V.OPERATIONS_ENUM.CLUSTER_STATUS,new Z(A_e.clusterStatus)),e.set(V.OPERATIONS_ENUM.CLUSTER_NETWORK,new Z(R_e)),e.set(V.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Z(Hw.setRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Z(Hw.getRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Z(Hw.deleteRoutes)),e.set(V.OPERATIONS_ENUM.EXPORT_TO_S3,new Z(ys,a1.export_to_s3)),e.set(V.OPERATIONS_ENUM.CREATE_CSR,new Z(fd.createCsr)),e.set(V.OPERATIONS_ENUM.SIGN_CERTIFICATE,new Z(fd.signCertificate)),e.set(V.OPERATIONS_ENUM.LIST_CERTIFICATES,new Z(fd.listCertificates)),e.set(V.OPERATIONS_ENUM.ADD_CERTIFICATES,new Z(fd.addCertificate)),e.set(V.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new Z(fd.removeCertificate)),e.set(V.OPERATIONS_ENUM.GET_KEY,new Z(fd.getKey)),e.set(V.OPERATIONS_ENUM.ADD_NODE_BACK,new Z(m1.addNodeBack)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE_BACK,new Z(m1.removeNodeBack)),e.set(V.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Z(ys,Nh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Z(ys,Nh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.EXPORT_LOCAL,new Z(ys,a1.export_local)),e.set(V.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Z(Gw.handleGetJobsByStartDate)),e.set(V.OPERATIONS_ENUM.GET_JOB,new Z(Gw.handleGetJob)),e.set(V.OPERATIONS_ENUM.GET_FINGERPRINT,new Z(kw.getFingerprint)),e.set(V.OPERATIONS_ENUM.SET_LICENSE,new Z(kw.setLicense)),e.set(V.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Z(kw.getRegistrationInfo)),e.set(V.OPERATIONS_ENUM.RESTART,new Z(l1.restart)),e.set(V.OPERATIONS_ENUM.RESTART_SERVICE,new Z(ys,l1.restartService)),e.set(V.OPERATIONS_ENUM.CATCHUP,new Z(U_e)),e.set(V.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Z(O_e.systemInformation)),e.set(V.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Z(ys,Nh.deleteAuditLogsBefore)),e.set(V.OPERATIONS_ENUM.READ_AUDIT_LOG,new Z(p_e)),e.set(V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Z(d1.createTokens)),e.set(V.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Z(d1.refreshOperationToken)),e.set(V.OPERATIONS_ENUM.LOGIN,new Z(f1.login)),e.set(V.OPERATIONS_ENUM.LOGOUT,new Z(f1.logout)),e.set(V.OPERATIONS_ENUM.GET_CONFIGURATION,new Z(_1.getConfiguration)),e.set(V.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Z(Ct.customFunctionsStatus)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Z(Ct.getCustomFunctions)),e.set(V.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Z(Ct.getComponentFile)),e.set(V.OPERATIONS_ENUM.GET_COMPONENTS,new Z(Ct.getComponents)),e.set(V.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Z(Ct.setComponentFile)),e.set(V.OPERATIONS_ENUM.DROP_COMPONENT,new Z(Ct.dropComponent)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Z(Ct.getCustomFunction)),e.set(V.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Z(Ct.setCustomFunction)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Z(Ct.dropCustomFunction)),e.set(V.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ct.addComponent)),e.set(V.OPERATIONS_ENUM.ADD_COMPONENT,new Z(Ct.addComponent)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ct.dropCustomFunctionProject)),e.set(V.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ct.packageComponent)),e.set(V.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Z(Ct.packageComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ct.deployComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Z(Ct.deployComponent)),e.set(V.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Z(h1.readTransactionLog)),e.set(V.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ys,h1.deleteTransactionLogsBefore)),e.set(V.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Z(p1.installModules)),e.set(V.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Z(p1.auditModules)),e.set(V.OPERATIONS_ENUM.GET_BACKUP,new Z(bo.getBackup)),e.set(V.OPERATIONS_ENUM.ADD_SSH_KEY,new Z(Ct.addSSHKey)),e.set(V.OPERATIONS_ENUM.UPDATE_SSH_KEY,new Z(Ct.updateSSHKey)),e.set(V.OPERATIONS_ENUM.DELETE_SSH_KEY,new Z(Ct.deleteSSHKey)),e.set(V.OPERATIONS_ENUM.LIST_SSH_KEYS,new Z(Ct.listSSHKeys)),e.set(V.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new Z(Ct.setSSHKnownHosts)),e.set(V.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new Z(Ct.getSSHKnownHosts)),e}a(x_e,"initializeOperationFunctionMap")});var SS=I((NDe,O1)=>{"use strict";var ES=(H(),D(q)),B_e=oe(),Ch=j(),{handleHDBError:Vw,hdb_errors:gS}=he(),{isMainThread:H_e}=require("worker_threads"),{Readable:k_e}=require("stream"),y1=require("os"),F_e=require("util"),G_e=bb(),q_e=F_e.promisify(G_e.authorize),b1=jN(),{createGzip:$_e,constants:V_e}=require("zlib"),K_e=[ES.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,ES.OPERATIONS_ENUM.LOGIN,ES.OPERATIONS_ENUM.LOGOUT];function Y_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${y1.EOL}Stack: ${e.stack} ${y1.EOL}Terminating ${H_e?"HDB":"thread"}.`;console.error(t),Ch.fatal(t),process.exit(1)}a(Y_e,"handleServerUncaughtException");function W_e(e,t,r){if(Ch[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:gS.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(W_e,"serverErrorHandler");function z_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Vw(new Error,"Invalid JSON.",gS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(B_e.isEmpty(e.body.operation)){let n=Vw(new Error,"Request body must include an 'operation' property.",gS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(z_e,"reqBodyValidationHandler");function Q_e(e,t,r){let n;!K_e.includes(e.body.operation)||e.body.operation===ES.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?q_e(e,t).then(i=>{n=i,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(i=>{Ch.warn(i),Ch.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(Vw(i,o,gS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Q_e,"authHandler");async function j_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=b1.chooseOperation(e.body);let s=await b1.processLocalTransaction(e,n);if(s instanceof k_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe($_e({level:V_e.Z_BEST_SPEED})))}return s}catch(s){throw Ch.error(s),s}}a(j_e,"handlePostRequest");O1.exports={authHandler:Q_e,handlePostRequest:j_e,handleServerUncaughtException:Y_e,serverErrorHandler:W_e,reqBodyValidationHandler:z_e}});var C1=I((IDe,I1)=>{"use strict";var J_e=require("fastify-plugin"),{handlePostRequest:N1,authHandler:X_e,reqBodyValidationHandler:Z_e}=SS();async function ehe(e){e.decorate("hdbCore",{preValidation:[Z_e,X_e],request:a(t=>w1(N1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>w1(N1(t,r,!0)),"requestWithoutAuthentication")})}a(ehe,"hdbCore");async function w1(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(w1,"convertAsyncIterators");I1.exports=J_e(ehe)});var D1=I((DDe,P1)=>{"use strict";var PDe=require("fs"),TS=ce();TS.initSync();var{CONFIG_PARAMS:Kw}=(H(),D(q)),the=1024*1024*1024;function rhe(e){let t=TS.get(Kw.HTTP_TIMEOUT),r=TS.get(Kw.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:the,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:TS.get(Kw.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(rhe,"getServerOptions");P1.exports=rhe});var v1=I((MDe,M1)=>{"use strict";var Yw=ce();Yw.initSync();var{CONFIG_PARAMS:L1}=(H(),D(q));function nhe(){let e=Yw.get(L1.HTTP_CORSACCESSLIST),t=Yw.get(L1.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(nhe,"getCORSOptions");M1.exports=nhe});var B1=I((UDe,x1)=>{"use strict";var U1=ce();U1.initSync();var she=(H(),D(q));function ihe(){return U1.get(she.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(ihe,"getHeaderTimeoutConfig");x1.exports=ihe});var zw={};ve(zw,{customFunctionsServer:()=>che,ready:()=>J1,start:()=>ahe});function ahe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Oo||(Oo=j1(t),Ye.http((await Oo).server));let o=await Oo,c=(0,Ww.dirname)(s),l=(0,Ww.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!H1.has(c)){H1.add(c);try{o.register(uhe(c,l))}catch(u){if(u.message==="Root plugin has already booted")ht.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:J1}}async function che(){try{ht.info("In Custom Functions Fastify server"+process.cwd()),ht.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ht.debug(`Custom Functions server process ${process.pid} starting up.`),await lhe();let e=V1.get(B.HTTP_SECUREPORT)>0,t;try{t=Oo=await j1(e)}catch(r){throw ht.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw ht.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){ht.error(`Custom Functions ${process.pid} Error: ${e}`),ht.error(e),process.exit(1)}}async function lhe(){try{ht.info("Custom Functions starting configuration."),await K1.setUsersWithRolesCache(),ht.info("Custom Functions completed configuration.")}catch(e){ht.error(e)}}function uhe(e,t){return async function(r){try{ht.info("Custom Functions starting buildRoutes"),ht.trace("Loading fastify routes folder "+e),(0,k1.existsSync)(e)&&r.register($1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:ht.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?ht.error(s.message):s&&ht.error(s),o()})}catch(n){ht.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function j1(e){ht.info("Custom Functions starting buildServer.");let t=(0,Y1.default)(e),r=(0,F1.default)(t);r.server.headersTimeout=(0,z1.default)(),r.setErrorHandler(Q1.serverErrorHandler);let n=(0,W1.default)();return n&&r.register(G1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(q1.default),await r.register(ohe),await r.after(),hf(r),ht.info("Custom Functions completed buildServer."),r}function J1(){if(Oo)return Oo.then?Oo.then(e=>e.ready()):Oo.ready()}var Ww,k1,F1,G1,q1,$1,V1,ht,ohe,K1,Y1,W1,z1,Q1,Oo,H1,X1=be(()=>{Ww=require("path"),k1=require("fs"),F1=M(require("fastify")),G1=M(require("@fastify/cors")),q1=M(Sb()),$1=M(require("@fastify/autoload")),V1=M(ce());H();ht=M(j()),ohe=M(C1()),K1=M(Gn()),Y1=M(D1()),W1=M(v1()),z1=M(B1()),Q1=M(SS());ji();Gr();H1=new Set;a(ahe,"start");a(che,"customFunctionsServer");a(lhe,"setUp");a(uhe,"buildRouteFolder");a(j1,"buildServer");a(J1,"ready")});var Qw={};ve(Qw,{start:()=>dhe});function dhe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,nK.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){eK||(eK=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Z1.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,tK.default)(s,(0,rK.realpathSync)(o))}}return i(s)},{runFirst:!0})),Z1.set(r,n)}}}var tK,rK,nK,Z1,eK,sK=be(()=>{tK=M(require("send")),rK=require("fs"),nK=M(require("serve-static")),Z1=new Map;a(dhe,"start")});var jw={};ve(jw,{start:()=>fhe});function fhe({override:e}){return{handleFile:a((t,r,n)=>{AS.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,iK.parse)(t))){if(process.env[s]!==void 0)if(AS.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)AS.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var iK,AS,oK=be(()=>{iK=require("dotenv"),AS=M(j());a(fhe,"start")});var mK={};ve(mK,{startHTTPThreads:()=>hhe,startSocketServer:()=>tI,updateWorkerIdleness:()=>pK});async function hhe(e=2,t){try{if(t)Zw(0,1,!0);else{let{loadRootComponents:r}=NS();if(e===0)return(0,bs.setMainIsWorker)(!0),await sI().startServers(),Promise.resolve([]);await r()}hK();for(let r=0;r<e;r++)Zw(r,e);return Promise.all(_K)}finally{(0,bs.threadsHaveStarted)()}}function hK(){let e=(0,uK.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),Xw=setInterval(()=>{bS.notify(e)},_he).unref())}function Zw(e,t=1,r){if(Jw++,(0,bs.startWorker)("server/threads/threadServer.js",{name:tA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===XT.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});_K.push(s),await s,hd.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=yS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=hd.indexOf(n);o>-1&&hd.splice(o,1)}if(a(i,"removeWorker"),pd){let o=pd;pd=[];for(let c of o)fK[c.localPort](null,c)}}}),r){let n=setInterval(()=>{eI?eI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,bs.shutdownWorkers)(),Jw=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function tI(e=0,t){if(typeof e=="string")try{(0,OS.existsSync)(e)&&(0,OS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=phe:r=mhe(t):r=rI;let n=(0,md.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=fK[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),eI=!0,r(i,(o,c)=>{if(!o){if(aK){let u=i._socket||new md.Socket({handle:i,writable:!0,readable:!0});aK.deliverSocket(u,e,c),u.resume()}else Jw>0?(pd.length===0&&setTimeout(()=>{pd.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,pd.push(i)):(console.log("start up a dynamic thread to handle request"),Zw(0));nr(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new md.Socket({handle:i,writable:!0,readable:!0});She(u,o,e)}nr(!0,"socket-routed")})},bS.info(`HarperDB ${dK.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 rI(e,t){let r,n=0;for(let s of hd){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=RS)return RS=i,t(r);n=i}RS=0,t(r)}function phe(e,t){let r={};e.getpeername(r);let n=r.address,s=Ed.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);rI(e,o=>{Ed.set(n,{worker:o,lastUsed:i}),t(o)})}function mhe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new md.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Ed.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);rI(n,d=>{Ed.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function pK(){RS=0;for(let e of hd)e.expectedIdle=e.recentELU.idle+Ehe,e.requests=1;hd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function She(e,t,r){let n=ghe++;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(),yS.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")),yS.delete(n)),s.event=="destroy"&&(e.destroy(),yS.delete(n))})}var bs,md,bS,OS,lK,uK,dK,hd,pd,fK,aK,Jw,_K,Xw,_he,eI,RS,cK,Ed,Ehe,yS,ghe,nI=be(()=>{bs=M(rt()),md=require("net");H();bS=M(j()),OS=require("fs");Ii();lK=require("worker_threads"),uK=M(Qu()),dK=M(Et()),hd=[],pd=[],fK=[],Jw=0,_K=[];lK.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,bs.onMessageFromWorkers)(e=>{e.type===eA.RESTART&&Xw&&(clearInterval(Xw),hK())}));_he=6e5;a(hhe,"startHTTPThreads");a(hK,"licenseWarning");a(Zw,"startHTTPWorker");a(tI,"startSocketServer");RS=0;a(rI,"findMostIdleWorker");cK=36e5,Ed=new Map;a(phe,"findByRemoteAddressAffinity");a(mhe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ed)r.lastUsed+cK<e&&Ed.delete(t)},cK).unref();Ehe=1e3;a(pK,"updateWorkerIdleness");(0,bs.setMonitorListener)(pK);yS=new Map,ghe=1;a(She,"proxySocket")});var DK=I((zDe,PK)=>{var gK=M(require("cluster")),Da=M(ce());H();var Ui=M(j()),SK=M(require("fastify")),TK=M(require("@fastify/cors")),AK=M(require("@fastify/compress")),RK=M(require("@fastify/static")),yK=M(Sb()),bK=M(require("path")),OK=M(Et()),NK=M(Hs()),wK=M(oe()),IK=M(Gn()),CK=M(Qu());Gr();var La=M(SS());ji();Da.default.initSync();var The=6e4,Ahe=1024*1024*1024,Rhe="TRUE",{CONFIG_PARAMS:Ph}=q,gd;PK.exports={hdbServer:EK,start:EK};async function EK(e){try{Ui.default.debug("In Fastify server"+process.cwd()),Ui.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ui.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=gK.default.isMaster,await yhe();let t=e.securePort>0;gd=bhe(t),await gd.ready(),e||(e={}),e.isOperationsServer=!0;try{Ye.http(gd.server,e),gd.server.closeIdleConnections||await gd.listen({port:0,host:"::"})}catch(r){throw gd.close(),Ui.default.error(r),Ui.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ui.default.fatal(t),process.exit(1)}}a(EK,"operationsServer");async function yhe(){Ui.default.trace("Configuring HarperDB process."),NK.default.setSchemaDataToGlobal(),await IK.default.setUsersWithRolesCache(),await CK.default.getLicense()}a(yhe,"setUp");function bhe(e){Ui.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ohe(e),r=(0,SK.default)(t);r.server.headersTimeout=whe(),r.setErrorHandler(La.serverErrorHandler);let n=Nhe();n&&r.register(TK.default,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(yK.default),r.register(AK.default),r.register(RK.default,{root:bK.default.join(OK.PACKAGE_ROOT,"studio/build-local")}),hf(r);let s=Da.default.get(JT.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!wK.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[La.reqBodyValidationHandler,La.authHandler],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),(0,La.handlePostRequest)(i,o)}),r.get("/health",()=>"HarperDB is running."),Ui.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(bhe,"buildServer");function Ohe(e){let t=Da.default.get(Ph.OPERATIONSAPI_NETWORK_TIMEOUT),r=Da.default.get(Ph.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Ahe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Ohe,"getServerOptions");function Nhe(){let e=Da.default.get(Ph.OPERATIONSAPI_NETWORK_CORS),t=Da.default.get(Ph.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Rhe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Nhe,"getCORSOpts");function whe(){return Da.default.get(Ph.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??The}a(whe,"getHeaderTimeoutConfig")});var uI={};ve(uI,{disableNATS:()=>Che,publishToStream:()=>CS,setNATSReplicator:()=>iI,setPublishToStream:()=>Phe,setSubscription:()=>lI,start:()=>Ihe});function Ihe(){Dh.default.get(B.CLUSTERING_ENABLED)&&Lhe()}function Che(e=!0){xK=e}function Phe(e,t){CS=e,lI=t}function Lhe(){if(xK||process.env._DISABLE_NATS)return;let e=Je(),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];iI(s,r,i)}}Yc((r,n)=>{iI(r.tableName,r.databaseName,r),n&&HK(r)}),!LK&&(LK=!0)}function iI(e,t,r){if(t==="system"&&Mhe.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{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){HK(i)}static subscribe(){let i=new Pn;return lI(t,e,i),i}static subscribeOnThisThread(i){return i<(Dh.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Dhe)}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 wS(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=BK;return i}a(n,"getNATSTransaction")}function HK(e){let t=Dh.default.get(B.CLUSTERING_NODENAME);CS(`${aI.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,cI.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 MK,aI,cI,vK,UK,Dh,IS,xK,CS,lI,Dhe,BK,LK,Mhe,wS,oI,kK=be(()=>{Me();Jo();MK=M(pr()),aI=M(Nt()),cI=M(ro());Fl();vK=M(Mb()),UK=M(an()),Dh=M(ce());H();IS=M(j());a(Ihe,"start");a(Che,"disableNATS");CS=MK.publishToStream,lI=vK.setSubscription;a(Phe,"setPublishToStream");Dhe=2;a(Lhe,"assignReplicationSource");Mhe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(iI,"setNATSReplicator");a(HK,"publishSchema");wS=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Dh.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(IS.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(CS(`${aI.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,cI.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw IS.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},oI=class extends wS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,UK.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};BK=new oI});async function VK({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await dI.get(e,{returnNonexistent:!0});i=new hI(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await dI.get(e);o&&o.delete()}i=new DS(e,t)}return n&&(n.id=e,n.user={username:t?.username},Lh.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function fI(){return PS++,PS>65500&&(PS=1),PS}function _I(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=_i.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return bt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var GK,Ma,qK,$K,FK,dI,Lh,PS,DS,hI,KK=be(()=>{Me();Yl();GK=M(an()),Ma=M(j());rc();qK=M(rt()),$K=M(sI());Gr();FK=100,dI=ut({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"}]}}]}),Lh=ut({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,qK.getWorkerIndex)()===0&&(async()=>{await $K.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Lh.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ye.getUser(r.user.username));try{await _I(r,t,r)}catch{(0,Ma.warn)("Failed to publish will",t)}Lh.delete(e.id)}})();a(VK,"getSession");PS=1;a(fI,"getNextMessageId");DS=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(R=>R.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ma.trace)("Resuming subscription from",s,"from",o);let _=_i.getMatch(u,"mqtt");if(!_){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let R=h.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,R.indexOf("+")===R.length-1)h.onlyChildren=!0,h.url="/"+R.slice(0,R.length-1);else{let E=R.split("/"),A;for(let F=0;F<E.length;F++)if(E[F].indexOf("+")>-1)if(E[F]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let O=!0;E[E.length-1]==="#"&&(E.length--,O=!1),A&&(n=a(F=>{let G=F.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(O&&G.length!==E.length)return!1;for(let Y=0;Y<E.length;Y++)if(E[Y]!=="+"&&E[Y]!==G[Y])return!1;return!0},"filter"));let v=E.indexOf("+");h.url="/"+(v>-1?E.slice(0,v):E).concat("").join("/")}}let p=_.path,S=_.Resource,g=await bt(h,async()=>{let R=this.createContext();R.topic=s,R.retainHandling=i;let E=await S.subscribe(h,R);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let A=(async()=>{for await(let O of E)try{let v;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,v=this.needsAcknowledge(O)):(O.acknowledge?.(),v=fI());let F=O.id;if(Array.isArray(F)&&(F=Kl(F)),F==null&&(F=""),await this.listener(p+"/"+F,O.value,v,t)===!1)break;this.awaitingAcks?.size>FK?await new Promise(Y=>setTimeout(Y,this.awaitingAcks.size-FK)):await new Promise(setImmediate)}catch(v){(0,Ma.warn)(v)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=fI();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 _I(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await Lh.get(this.sessionId);n?.doesExist()&&await _I(n,n.data,r)}}finally{await Lh.delete(this.sessionId)}}).catch(n=>{(0,Ma.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(_I,"publish");hI=class extends DS{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=fI(),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,Ma.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,GK.getNextMonotonicTime)()),(0,Ma.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),dI.put(this.sessionRecord)}}});var mI={};ve(mI,{bypassAuth:()=>vhe,start:()=>Uhe});function vhe(){jK=!0}function Uhe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new QK.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),ur.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:p}=WK(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",p),u.on("error",S=>{ur.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),ur.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&MS.notify?.({username:f?.username,status:Ls.SUCCESS,type:Vo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(p){throw(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&MS.error?.({username:_,status:Ls.FAILURE,type:Vo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),p}}else ur.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),ur.error?.(_)}else if(l.required)return ur.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&jK&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,zK.getSuperUser)(),ur.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=WK(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{ur.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function WK(e,t,r,n,s){YK||(YK=!0,__(d=>{LS>0&&d.push({metric:"mqtt-connections",connections:LS,byThread:!0})}));let i;LS++;let o,c={protocolVersion:4},l=(0,vS.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){LS--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!1,"connection","mqtt","disconnect"),ur.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){ur.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,p=_?.indexOf("/",1),S=p>0?_.slice(0,p):_;nr(d.length,"bytes-received",S,R(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Ye.getUser(d.username,d.password.toString(),r),(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&MS.notify?.({username:n?.username,status:Ls.SUCCESS,type:Vo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(se){return(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&MS.error?.({username:d.username,status:Ls.FAILURE,type:Vo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let se=e.deserialize||(e.deserialize=Qi(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?se(d.will.payload):void 0,delete d.will.payload}o=VK({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(se){return ur.error?.(se),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:se.code||5,returnCode:se.code||128})}s.events.emit("connected",o,e),Yn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let A=a(async(se,X,ne,Q)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",se);let pe=se.indexOf("/",1),Re=pe>0?se.slice(0,pe):se;g({cmd:"publish",topic:se,payload:await E(X),messageId:ne||Math.floor(Math.random()*1e8),qos:Q.qos},Re);let Ce=e._socket??e;return Ce.writableNeedDrain?new Promise(me=>Ce.once("drain",me)):!Ce.closed}catch(pe){return ur.error?.(pe),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(A),o.sessionWasPresent&&await o.resume();break;case"subscribe":let O=[];for(let se of d.subscriptions){let X;try{let ne=await o.addSubscription(se,se.qos>=1);X=ne?ne.qos||0:c.protocolVersion<5?128:143}catch(ne){s.events.emit("error",ne,e,se,o),ne.statusCode?ne.statusCode===500?ur.warn?.(ne):ur.info?.(ne):ur.error?.(ne),X=c.protocolVersion<5?128:ne.statusCode===403?135:ne.statusCode===404?143:128}O.push(X)}await o.committed,g({cmd:"suback",granted:O,messageId:d.messageId});break;case"unsubscribe":{let se=[];for(let X of d.unsubscriptions)se.push(o.removeSubscription(X)?0:17);g({cmd:"unsuback",granted:se,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let v=d.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Qi(r?.headers.get?.("content-type"))),Y=(d.payload?.length||0)>0?F(d.payload):void 0,te;try{te=await o.publish(d,Y)}catch(se){s.events.emit("error",se,e,d,o),ur.warn?.(se),d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:te===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!0,"connection","mqtt","disconnect"),ur.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(A){s.events.emit("error",A,e,d,o),ur.error?.(A),g({cmd:"disconnect"})}function g(A,O){let v=(0,vS.generate)(A,c);t(v),nr(v.length,"bytes-sent",O,R(A),"mqtt")}a(g,"sendPacket");function R(A){return A.qos>0?A.cmd+",qos="+A.qos:A.cmd}a(R,"packetMethodName");function E(A){return Zo(A,r)}a(E,"serialize")}),l.on("error",d=>{ur.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var vS,zK,Sd,pI,QK,MS,ur,jK,YK,LS,JK=be(()=>{vS=require("mqtt-packet");KK();zK=M(Gn());ji();Ii();Gr();Sd=M(ce());H();pI=M(hi()),QK=require("events"),MS=(0,pI.loggerWithTag)("auth-event"),ur=(0,pI.loggerWithTag)("mqtt"),jK=(0,Sd.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(vhe,"bypassAuth");a(Uhe,"start");LS=0;a(WK,"onSocket")});var ZK={};ve(ZK,{Request:()=>EI,createReuseportFd:()=>US});var XK,EI,gI,SI,US,TI=be(()=>{XK=require("os"),EI=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new SI(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new gI(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},gI=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},SI=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,XK.platform)()!="win32"&&(US=require("node-unix-socket").createReuseportFd)});var hh={};ve(hh,{component_errors:()=>Ad,getComponentName:()=>Fhe,loadComponent:()=>HS,loadComponentDirectories:()=>sY,setErrorReporter:()=>khe});function sY(e,t){t&&(RI=t),e&&(NI=e);let r=[];if((0,at.existsSync)(AI)){let s=(0,at.readdirSync)(AI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,St.join)(AI,o);r.push(HS(c,RI,WT,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(HS(n,RI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{nY=!0})}function khe(e){Mh=e}async function HS(e,t,r,n,s,i){let o=(0,at.realpathSync)(e);if(xS.has(o))return xS.get(o);xS.set(o,!0),s&&(NI=s);try{let c;n&&(Ad=new Map);let l=(0,St.join)(e,"harperdb-config.yaml");(0,at.existsSync)(l)?c=n?(0,kS.getConfigObj)():(0,yI.parseDocument)((0,at.readFileSync)(l,"utf8")).toJSON():!n&&(0,at.existsSync)(l=(0,St.join)(e,"config.yaml"))?c=(0,yI.parseDocument)((0,at.readFileSync)(l,"utf8")).toJSON():c=wI;let u=(0,St.join)(e,"node_modules","harperdb");try{hl.isMainThread&&(n||((0,at.existsSync)(u)||!e.startsWith((0,OI.getHdbBasePath)()))&&(!(0,at.existsSync)(u)||(0,at.realpathSync)(bI.PACKAGE_ROOT)!==(0,at.realpathSync)(u)))&&((0,at.rmSync)(u,{recursive:!0,force:!0}),(0,at.existsSync)((0,St.join)(e,"node_modules"))||(0,at.mkdirSync)((0,St.join)(e,"node_modules")),(0,at.symlinkSync)(bI.PACKAGE_ROOT,u,"dir"))}catch(h){Td.default.error("Error symlinking harperdb module",h)}let f=BS,d=n;for(let h in c){BS=h;let _=c[h];if(Ad.set(n?h:(0,St.basename)(e),!1),!_)continue;let p,S=_.package;try{if(S){let O=e,v;for(;!(0,at.existsSync)(v=(0,St.join)(O,"node_modules",h));)if(O=(0,St.dirname)(O),O.length<(0,OI.getHdbBasePath)().length){v=null;break}if(v)p=await HS(v,t,r,!1),d=!0;else throw new Error(`Unable to find package ${h}:${S}`)}else p=Hhe[h];if(!p)continue;let g=a(O=>(O.origin=r,ut(O)),"ensureTable"),R=_.network||(_.port||_.securePort)&&_,E=R?.securePort||R?.https&&R.port,A=!R?.https&&R?.port;if(hl.isMainThread&&(p=await p.startOnMainThread?.({server:Ye,ensureTable:g,port:A,securePort:E,resources:t,..._})||p,n&&R))for(let O of[A,E])try{if(+O&&!eY.includes(O)){let v=II.get(B.HTTP_SESSIONAFFINITY);v&&Td.default.warn("Session affinity is not recommended and may cause memory leaks"),(v||!US)&&(eY.push(O),tI(O,v))}}catch(v){console.error("Error listening on socket",O,v,h)}if(t.isWorker&&(p=await p.start?.({server:Ye,ensureTable:g,port:A,securePort:E,resources:t,..._})||p),NI.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&_.files!=null){if(_.files.includes(".."))throw(0,rY.handleHDBError)("Can not reference parent directories");let O=(0,St.join)(e,_.files).replace(/\\/g,"/"),v=O.indexOf("/*");if(v>-1&&_.files!==wI[h]?.files&&!(0,at.existsSync)(O.slice(0,v)))throw new Error(`The path '${O.slice(0,v)}' does not exist and cannot be used as the base of the resolved 'files' path value '${_.files}'`);let F=(0,St.basename)(e),G=_.path||"/";G=G.startsWith("/")?G:G.startsWith("./")?"/"+F+G.slice(2):G==="."?"/"+F:"/"+F+"/"+G;let Y,te,se;if(_.root){let ne=_.root;ne.startsWith("/")&&(ne=ne.slice(1)),ne.endsWith("/")&&(ne=ne.slice(0,-1)),ne+="/",te=(0,St.join)(e,ne)}else(se=O.indexOf("/*"))>-1?(te=O.slice(0,se+1),Y=(0,St.relative)(e,te)):_.files.indexOf("/")>-1&&(te=O.slice(0,O.lastIndexOf("/")+1),Y=(0,St.relative)(e,te));let X=!1;if(hl.isMainThread&&p.setupDirectory&&(X=await p.setupDirectory?.(G,te,t)),t.isWorker&&p.handleDirectory&&(X=await p.handleDirectory?.(G,te,t)),X){d=!0;continue}for(let ne of await(0,tY.default)(O,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:pe}=ne;d=!0;let Re=(0,St.relative)(e,Q).replace(/\\/g,"/");if(Y)if(Re.startsWith(Y))Re=Re.slice(Y.length+1);else throw new Error(`The root path '${_.root}' does not reference a valid part of the file path '${Re}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ce=G+(G.endsWith("/")?"":"/")+Re;try{if(pe.isFile()){let me=await Bhe(Q);hl.isMainThread&&await p.setupFile?.(me,Ce,Q,t),t.isWorker&&await p.handleFile?.(me,Ce,Q,t)}else hl.isMainThread&&await p.setupDirectory?.(Ce,Q,t),t.isWorker&&await p.handleDirectory?.(Ce,Q,t)}catch(me){me.message=`Could not load ${pe.isFile()?"file":"directory"} '${Q}'${_.module?" using '"+_.module+"'":""} for application '${e}' due to: ${me.message}`,Mh?.(me),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(me),t.set(_.path||"/",new Xo(me)),Ad.set(n?h:(0,St.basename)(e),me.message)}}}}catch(g){g.message=`Could not load component '${h}' for application '${(0,St.basename)(e)}' due to: ${g.message}`,Mh?.(g),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(g),t.set(_.path||"/",new Xo(g),null,!0),Ad.set(n?h:(0,St.basename)(e),g.message)}}if(BS=f,hl.isMainThread&&!nY&&i&&(0,Rd.watchDir)(e,async()=>sY()),c.extensionModule){let h=await rE((0,St.join)(e,c.extensionModule));return xS.set(o,h),h}if(!d&&t.isWorker){let h=`${e} did not load any modules, resources, or files, is this a valid component?`;Mh?.(new Error(h)),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(h),Ad.set((0,St.basename)(e),h)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,Mh?.(c),t.set("",new Xo(c))}}var at,St,hl,yI,II,bI,tY,Rd,Td,rY,OI,xhe,kS,Bhe,AI,NI,nY,RI,Ad,Hhe,wI,eY,xS,Mh,BS,Fhe,ph=be(()=>{at=require("fs"),St=require("path"),hl=require("worker_threads"),yI=require("yaml"),II=M(ce()),bI=M(Et());H();ND();JD();Ix();Lx();Mx();pB();X1();sK();oK();tY=M(require("fast-glob")),Rd=M(rt()),Td=M(j());nb();Gr();rY=M(he());Me();nI();OI=M(ce()),xhe=M(DK());Hg();kK();fs();JK();kS=M(It());TI();AA();({readFile:Bhe}=at.promises),AI=(0,kS.resolvePath)(II.get(B.COMPONENTSROOT)),NI=new Map,Ad=new Map;a(sY,"loadComponentDirectories");Hhe={REST:cE,rest:cE,graphql:UA,graphqlSchema:bA,roles:rb,jsResource:ib,fastifyRoutes:zw,login:ab,static:Qw,operationsApi:xhe,customFunctions:{},http:{},clustering:uI,replication:ma,authentication:ah,mqtt:mI,loadEnv:jw},wI={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(wI,"static",{value:{files:"web/**"}});eY=[],xS=new Map;a(khe,"setErrorReporter");Fhe=a(()=>BS,"getComponentName");a(HS,"loadComponent")});var NS=I((OLe,oY)=>{var{isMainThread:iY}=require("worker_threads"),{getTables:Ghe,getDatabases:yLe,table:bLe}=(Me(),D(st)),{loadComponentDirectories:qhe,loadComponent:$he}=(ph(),D(hh)),{resetResources:Vhe}=(Yl(),D(RD)),Khe=YN(),Yhe=It(),{dirname:Whe}=require("path"),{getConnection:zhe}=pr(),Qhe=ce(),{CONFIG_PARAMS:jhe}=(H(),D(q)),{loadCertificates:Jhe}=Qs(),CI=new Map;async function Xhe(e=!1){!iY&&Qhe.get(jhe.CLUSTERING_ENABLED)&&zhe();try{iY&&await Khe()}catch(n){console.error(n)}let t=Vhe();Ghe(),t.isWorker=e,await Jhe(),await $he(Whe(Yhe.getConfigFilePath()),t,"hdb",!0,CI),await qhe(CI,t);let r=[];for(let[n]of CI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Xhe,"loadRootComponents");oY.exports.loadRootComponents=Xhe});var rt=I((wLe,ni)=>{"use strict";KT();var{Worker:Zhe,MessageChannel:epe,parentPort:xi,isMainThread:vI,threadId:tpe,workerData:Bi}=require("worker_threads"),{PACKAGE_ROOT:rpe}=Et(),{join:uY,isAbsolute:npe,extname:spe}=require("path"),{server:dY}=(Gr(),D(Wl)),{watch:ipe,readdir:ope}=require("fs/promises"),{totalmem:aY}=require("os"),yd=(H(),D(q)),fY=ce(),ri=j(),{randomBytes:ape}=require("crypto"),{_assignPackageExport:cpe}=ci(),cY=1024*1024,va=[],Os=[],lpe=50,UI=1e4,upe="restart",_Y="request_thread_info",hY="resource_report",pY="thread_info",mY="added-port",dpe="ack",PI;cpe("threads",Os);ni.exports={startWorker:DI,restartWorkers:BI,shutdownWorkers:mpe,workers:va,setMonitorListener:bpe,onMessageFromWorkers:Epe,onMessageByType:yY,broadcast:Spe,broadcastWithAcknowledgement:Ape,setChildListenerByType:ppe,getWorkerIndex:EY,getWorkerCount:gY,getTicketKeys:TY,setMainIsWorker:_pe,setTerminateTimeout:fpe,restartNumber:Bi?.restartNumber||1};Os.onMessageByType=yY;Os.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Os.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};ni.exports.whenThreadsStarted=new Promise(e=>{ni.exports.threadsHaveStarted=e});var xI;function fpe(e){UI=e}a(fpe,"setTerminateTimeout");function EY(){return Bi?Bi.workerIndex:xI?0:void 0}a(EY,"getWorkerIndex");function gY(){return Bi?Bi.workerCount:xI?1:void 0}a(gY,"getWorkerCount");function _pe(e){xI=e,ni.exports.threadsHaveStarted()}a(_pe,"setMainIsWorker");var SY=1,FS;function TY(){return FS||(FS=vI?ape(48):Bi.ticketKeys,FS)}a(TY,"getTicketKeys");Object.defineProperty(dY,"workerIndex",{get(){return EY()}});Object.defineProperty(dY,"workerCount",{get(){return gY()}});var AY={[_Y](e,t){Rpe(t)},[hY](e,t){ype(t,e)}};function DI(e,t={}){let r=process.constrainedMemory?.()||aY();r=Math.min(r,aY(),2e4*cY);let n=fY.get(yd.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/cY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Os){let u=new epe;u.existingPort=l,i.push(u),o.push(u.port2)}spe(e)||(e+=".js");let c=new Zhe(npe(e)?e:uY(rpe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:SY=t.threadCount,name:t.name,restartNumber:ni.exports.restartNumber,ticketKeys:TY()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:mY,port:l,threadId:c.threadId},[l]);return qS(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>DI(e,t),c.on("error",l=>{ri.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{va.splice(va.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<lpe?(t.unexpectedRestarts=c.unexpectedRestarts+1,DI(e,t)):ri.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{AY[l.type]?.(l,c)}),va.push(c),Npe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(DI,"startWorker");var hpe=[yd.THREAD_TYPES.HTTP];async function BI(e=null,t=Math.max(SY>3,1),r=!0){if(vI){try{process.chdir(process.cwd())}catch(o){ri.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=NS();await o()}ni.exports.restartNumber++,t<1&&(t=t*va.length);let n=[],s=[];for(let o of va.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ri.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ni.exports.restartNumber,type:yd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=hpe.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{ri.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},UI*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===yd.ITC_EVENT_TYPES.CHILD_STARTED&&(ri.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");ri.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=rd();r&&(e==="http"||!e)&&fY.get(yd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else xi.postMessage({type:upe,workerType:e})}a(BI,"restartWorkers");function ppe(e,t){AY[e]=t}a(ppe,"setChildListenerByType");function mpe(e){return BI(e,1/0,!1)}a(mpe,"shutdownWorkers");var RY=[];function Epe(e){RY.push(e)}a(Epe,"onMessageFromWorkers");var LI=new Map;function yY(e,t){let r=LI.get(e);r||LI.set(e,r=[]),r.push(t)}a(yY,"onMessageByType");var gpe=10;async function Spe(e,t){let r=0;for(let n of Os)try{n.postMessage(e),r++>gpe&&(r=0,await new Promise(setImmediate))}catch(s){ri.error("Unable to send message to worker",s)}t&&OY(e,null)}a(Spe,"broadcast");var GS=new Map,Tpe=1;function Ape(e){return new Promise(t=>{let r=0;for(let n of Os)try{let s=Tpe++,i=a(()=>{GS.delete(s),--r===0&&t(),n!==xi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,GS.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of GS)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ri.error("Unable to send message to worker",s)}r===0&&t()})}a(Ape,"broadcastWithAcknowledgement");function Rpe(e){e.postMessage({type:pY,workers:bY()})}a(Rpe,"sendThreadInfo");function bY(){let e=Date.now();return va.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(bY,"getChildWorkerInfo");function ype(e,t){e.resources=t,e.resources.updated=Date.now()}a(ype,"recordResourceReport");var MI;function bpe(e){MI=e}a(bpe,"setMonitorListener");var Ope=1e3,lY=!1;function Npe(){lY||(lY=!0,setInterval(()=>{for(let e of va){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}MI&&MI()},Ope).unref())}a(Npe,"startMonitoring");var wpe=1e3;if(xi&&Bi?.addPorts){qS(xi);for(let e=0,t=Bi.addPorts.length;e<t;e++){let r=Bi.addPorts[e];r.threadId=Bi.addThreadIds[e],qS(r)}setInterval(()=>{let e=process.memoryUsage();xi.postMessage({type:hY,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},wpe).unref(),PI=a(()=>new Promise((e,t)=>{xi.on("message",r),xi.postMessage({type:_Y});function r(n){n.type===pY&&(xi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else PI=bY;ni.exports.getThreadInfo=PI;function qS(e,t){Os.push(e),e.on("message",r=>{if(r.type===mY)r.port.threadId=r.threadId,qS(r.port);else if(r.type===dpe){let n=GS.get(r.id);n&&n()}else OY(r,e)}).on("close",()=>{Os.splice(Os.indexOf(e),1)}).on("exit",()=>{Os.splice(Os.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(qS,"addPort");function OY(e,t){for(let n of RY)n(e,t);let r=LI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ri.error(s)}}a(OY,"notifyMessageListeners");if(vI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await ope(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(uY(s,o.name));try{for await(let{filename:o}of ipe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await BI(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");ni.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else xi.on("message",async e=>{let{type:t}=e;t===yd.ITC_EVENT_TYPES.SHUTDOWN&&(ni.exports.restartNumber=e.restartNumber,xi.unref(),setTimeout(()=>{ri.warn("Thread did not voluntarily terminate",tpe),process.exit(0)},UI).unref())})});var PY={};ve(PY,{onStorageReclamation:()=>vh,runReclamationHandlers:()=>GI,setAvailableSpaceRatioGetter:()=>Cpe});function vh(e,t,r){(r||(0,VS.getWorkerIndex)()===(0,VS.getWorkerCount)()-1)&&($S.has(e)||$S.set(e,[]),$S.get(e).push({priority:0,handler:t}),FI||(FI=setTimeout(GI,wY).unref()))}async function GI(){for(let[e,t]of $S)try{let r=await CY(e),n=Ipe/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(kI.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){kI.default.error?.("Error running storage reclamation handlers",r)}FI=setTimeout(GI,wY).unref()}function Cpe(e){CY=e??IY}var HI,VS,kI,KS,NY,$S,Ipe,wY,FI,IY,CY,YS=be(()=>{HI=require("node:fs/promises"),VS=M(rt()),kI=M(hi());H();KS=M(ce()),NY=M(oe());KS.default.initSync();$S=new Map,Ipe=KS.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,wY=(0,NY.convertToMS)(KS.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;a(vh,"onStorageReclamation");IY=a(async e=>{if(HI.statfs){let t=await(0,HI.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"),CY=IY;a(GI,"runReclamationHandlers");a(Cpe,"setAvailableSpaceRatioGetter")});var W0={};ve(W0,{ACTION_32_BIT:()=>Zp,ACTION_64_BIT:()=>Lpe,AUDIT_STORE_OPTIONS:()=>rh,Decoder:()=>Kc,HAS_BLOBS:()=>vn,HAS_CURRENT_RESIDENCY_ID:()=>fc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Rf,HAS_ORIGINATING_OPERATION:()=>Af,HAS_PREVIOUS_RESIDENCY_ID:()=>_c,REMOTE_SEQUENCE_UPDATE:()=>qE,createAuditEntry:()=>jl,getLastRemoved:()=>EO,openAuditStore:()=>QS,readAuditEntry:()=>Ot,removeAuditEntry:()=>jS,setAuditRetention:()=>Dpe,transactionKeyEncoder:()=>kY});function QS(e){let t=e.auditStore=e.openDB(qI.AUDIT_STORE_NAME,{create:!1,...rh});t||(t=e.auditStore=e.openDB(qI.AUDIT_STORE_NAME,rh),LY(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,f){return r[l]=f,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=VI;vh(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(f=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let d=0,h,_;try{for(let{key:p,value:S}of t.getRange({start:1,snapshot:!1,end:Date.now()-$I/(1+i*i)})){try{h=jS(t,p,S)}catch(g){bd.warn("Error removing audit entry",g)}if(_=p,await new Promise(setImmediate),++d>=Ppe){o=10;break}}await h}finally{d===0?o=Math.min(o<<1,$I/10):(LY(t,_),o>100&&(o=o>>1)),f(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,xh.getWorkerIndex)()===(0,xh.getWorkerCount)()-1&&c(),(0,xh.getWorkerIndex)()===0&&!DY)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(DY=!0,bd.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 jS(e,t,r){let n=Mpe(r),s;if(n&vn){s=Ot(r);let i=e.tableStores[s.tableId],o=i.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&uc(()=>ta(s.getValue(i)),i.rootStore)}if((n&15)===KI){s=s||Ot(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 LY(e,t){YI[0]=t,e.put(Symbol.for("last-removed"),FY)}function EO(e){let t=e.get(Symbol.for("last-removed"));if(t)return FY.set(t),YI[0]}function Dpe(e,t=VI){$I=e,VI=t}function jl(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=GY[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let p=1;if(n&&(n>1?Ua.setFloat64(0,n):Ns.set(KA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}R(s),R(t),g(r),Ua.setFloat64(p,e),p+=8,l&fc&&R(u),l&_c&&R(f),l&Rf&&(Ua.setFloat64(p,d),p+=8),l&Af&&R(qY[h]),i?g(i):Ns[p++]=0,l?Ua.setUint32(n?8:0,_|l|3221225472):Ns[n?8:0]=_;let S=Ns.subarray(0,p);if(c)return Buffer.concat([S,c]);return S;function g(E){let A=p;p+=1,p=(0,pl.writeKey)(E,Ns,p);let O=p-A-1;O>127?O>16383?(bd.error("Key or username was too large for audit entry",E),p=A+1,Ns[A]=0):(Ns.copyWithin(A+2,A+1,p),Ua.setUint16(A,O|32768),p++):Ns[A]=O}function R(E){E<128?Ns[p++]=E:E<16384?(Ua.setUint16(p,E|32768),p+=2):E<1056964608?(Ua.setUint32(p,E|3221225472),p+=4):(Ns[p]=255,Ua.setUint32(p+1,E),p+=5)}}function Mpe(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 Kc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ot(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Kc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,p,S;if(i&fc&&(h=n.readInt()),i&_c&&(_=n.readInt()),i&Rf&&(p=n.readFloat64()),i&Af){let A=n.readInt();S=qY[A]}l=n.readInt();let g=n.position,R=n.position+=l,E;return{type:GY[i&7],tableId:c,nodeId:o,get recordId(){return(0,pl.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return R>g?(0,pl.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(A,O,v){if(i&WS||i&Uh&&!O)return E||(E=uc(()=>A.decoder.decode(e.subarray(n.position,r)),A.rootStore)),E;if(i&Uh&&v)return Gy(A.getEntry(this.recordId),v,A)},getBinaryValue(){return i&(WS|Uh)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:p,originatingOperation:S}}catch(n){return bd.error("Reading audit entry error",n,e),{}}}var pl,zS,qI,xh,HY,bd,Ns,Ua,kY,rh,$I,Ppe,YI,FY,VI,DY,WS,Uh,MY,KI,vY,UY,xY,BY,Zp,Lpe,qE,fc,_c,Af,Rf,vn,GY,qY,Kc,Ji=be(()=>{pl=require("ordered-binary"),zS=M(ce()),qI=M(vt());H();xh=M(rt()),HY=M(oe());Jl();bd=M(j());$m();cs();YS();(0,zS.initSync)();Ns=Buffer.alloc(2816),Ua=new DataView(Ns.buffer,Ns.byteOffset,2816),kY={writeKey(e,t,r){return e===Tf?(t.set(Tf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,pl.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,pl.readKey)(e,t,r)}},rh={encoding:"binary",keyEncoder:kY},$I=(0,HY.convertToMS)((0,zS.get)(B.LOGGING_AUDITRETENTION))||86400*3,Ppe=1e3,YI=new Float64Array(1),FY=new Uint8Array(YI.buffer),VI=1e4,DY=!1;a(QS,"openAuditStore");a(jS,"removeAuditEntry");a(LY,"updateLastRemoved");a(EO,"getLastRemoved");a(Dpe,"setAuditRetention");WS=16,Uh=32,MY=1,KI=2,vY=3,UY=4,xY=5,BY=6,Zp=14,Lpe=15,qE=11,fc=512,_c=1024,Af=2048,Rf=4096,vn=8192,GY={put:MY|WS,[MY]:"put",delete:KI,[KI]:"delete",message:vY|WS,[vY]:"message",invalidate:UY|Uh,[UY]:"invalidate",patch:xY|Uh,[xY]:"patch",relocate:BY,[BY]:"relocate"},qY={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(jl,"createAuditEntry");a(Mpe,"readAction");a(Ot,"readAuditEntry");Kc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function QI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=VY,vpe(e.primaryStore,e.auditStore)):(c=$Y,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{KY($Y[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Kl(t);let f=new zI(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function KY(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),YY(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ot(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Kl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,WI.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,WI.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d!==l.length-1&&u++,d>-1?l=l.slice(0,d+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function vpe(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=VY[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{KY(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function YY(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function mk(e){return e.nextTransaction||(QI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),YY(e)),e.nextTransaction}var WI,$Y,VY,zI,gO=be(()=>{WI=M(j());Fl();Yl();Ji();$Y=Object.create(null),VY=Object.create(null);a(QI,"addSubscription");zI=class extends Pn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(KY,"notifyFromTransactionData");a(vpe,"listenToCommits");a(YY,"nextTransaction");a(mk,"whenNextTransaction")});var Cw={};ve(Cw,{EVICTED:()=>jo,INVALIDATED:()=>Dn,coerceType:()=>ZS,makeTable:()=>tT,setServerUtilities:()=>qpe});function tT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:p,evictionMS:S,audit:g,trackDeletes:R}=e;S??=0;let{attributes:E}=e;E||(E=[]);let A=zA(i,n,l),O,v,F={},G=Promise.resolve(),Y,te,se;for(let K of E)(K.assignCreatedTime||K.name==="__createdtime__")&&(Y=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(te=K),K.expiresAt&&(se=K),K.isPrimaryKey&&(F=K);let X,ne=[],Q=[],pe=1,Re=2,Ce={},me={},Jt=864e5,ct=0,Ar,is,In,Pl=!1,Dl,kT=new Map,FT=new Map,Lt,Hd,fp=El.get(B.REPLICATION_DATABASES);if(Array.isArray(fp)){for(let K of fp)if(K.name===c&&K.replicateTo>=0){Hd=K.replicateTo;break}}let _p=i.getRange({start:!1,end:!1}).constructor,kd=10,hp=6;g&&qd(),vh(i.env.path,K=>{if(v)return qo(K)});class Pe extends Fr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=Y;static updatedTimeProperty=te;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=f;static schemaDefined=u;static sourcedFrom(m,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)m.intermediateSource=!0,this.sources.unshift(m);else{if(this.sources.some(N=>!N.intermediateSource)){if(this.sources.some(N=>N.name===m.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(m)}v=v||m.get&&(!m.get.reliesOnPrototype||m.prototype.get),O=O||m.load;let w=a(N=>{let L=this.sources;if(L=L.filter(k=>k.intermediateSource&&k[N]&&(!k[N].reliesOnPrototype||k.prototype[N])),L.length>0)if(L.length===1){let k=L[0];return(P,x,$)=>{if(P?.source!==k)return k[N](x,$,P)}}else return(k,P,x)=>{let $=[];for(let z of L){if(k?.source===z)break;$.push(z[N](P,x,k))}return Promise.all($)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=a(N=>{if(y[N]&&(!y[N].reliesOnPrototype||y.prototype[N]))return(L,k,P)=>{if(!L?.source)return y[N](k,P,L)}},"getApplyToCanonicalSource");Ce={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},me={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")};let C=y.shouldRevalidateEvents;return(async()=>{let N=!1,L,k=a(async(P,x)=>{let $=P.value,z=P.table?qe[c][P.table]:Pe;if(c===Kd&&(P.table===Hl.ROLE_TABLE_NAME||P.table===Hl.USER_TABLE_NAME)&&(N=!0),P.id===void 0&&(P.id=$[z.primaryKey],P.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(P));P.source=m;let ie={residencyId:Bl(P.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:P.nodeId},U=await z.getResource(P.id,x,ie);switch(P.finished&&await P.finished,P.type){case"put":return C?U._writeInvalidate($,ie):U._writeUpdate($,!0,ie);case"patch":return C?U._writeInvalidate($,ie):U._writeUpdate($,!1,ie);case"delete":return U._writeDelete(ie);case"publish":return U._writePublish($,ie);case"invalidate":return U._writeInvalidate($,ie);case"relocate":return U._writeRelocate(ie);default:xe.default.error?.("Unknown operation",P.type,P.id)}},"writeUpdate");try{let P=m.subscribe;P&&R==null&&(R=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=m.subscribeOnThisThread?m.subscribeOnThisThread((0,ml.getWorkerIndex)(),x):(0,ml.getWorkerIndex)()===0,z=P&&$&&await m.subscribe?.(x);if(z){let ie;for await(let U of z)try{if(!(U.type==="transaction"?U.writes[0]:U)){xe.default.error?.("Bad subscription event",U);continue}if(U.source=m,U.type==="end_txn"){if(ie?.resolve(),U.localTime&&L!==U.localTime){if(U.remoteNodeIds?.length>0){let fe=[Symbol.for("seq"),U.remoteNodeIds[0]],ee=f.get(fe),W=ee?.nodes;W||(W=[]);for(let Ae of U.remoteNodeIds.slice(1)){let ye=W.find(lt=>lt.id===Ae);W=W.filter(lt=>lt.id!==Ae||lt===ye),ye||(ye={id:Ae,seqId:0},W.push(ye)),ye.seqId=Math.max(ee?.seqId??1,U.localTime),Ae===ie?.nodeId&&(ye.lastTxnTime=U.timestamp)}let _e=Math.max(ee?.seqId??1,U.localTime);xe.default.trace?.("Received txn",c,new Date(_e),new Date(U.localTime),U.remoteNodeIds),f.put(fe,{seqId:_e,nodes:W})}L=U.localTime}U.onCommit&&ie?.committed.then(U.onCommit);continue}if(ie)if(U.beginTxn)ie.resolve();else{ie.write_promises.push(k(U,ie));continue}!U.timestamp&&U.version&&(U.timestamp=U.version);let ae=bt(U,()=>{if(U.type==="transaction"){let fe=[];for(let ee of U.writes)try{fe.push(k(ee,U))}catch(W){throw W.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(U),W}return Promise.all(fe)}else if(U.type==="define_schema"){let fe=this.attributes.slice(0),ee;for(let W of U.attributes)fe.find(_e=>_e.name===W.name)||(fe.push(W),ee=!0);ee&&(ut({table:s,database:c,attributes:fe,origin:"cluster"}),Hh.signalSchemaChange(new kh.SchemaEventMsg(process.pid,$t.CREATE_TABLE,c,s)))}else return U.beginTxn?(ie=U,ie.write_promises=[k(U,U)],new Promise(fe=>{ie.resolve=()=>fe(Promise.all(ie.write_promises))})):k(U,U)});ie&&(ie.committed=ae),N&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>Hh.signalUserChange(new kh.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),U.onCommit&&(ae?ae.then(U.onCommit):U.onCommit())}catch(ue){xe.default.error?.("error in subscription handler",ue)}}}catch(P){xe.default.error?.(P)}})(),this}static get isCaching(){return v}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(m,T,w){let y=super.getResource(m,T,w);if(m!=null){Nr(m);try{if(y.getRecord?.())return y;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let b=!w?.async||i.cache?.get?.(m),C=Br(T),N=C.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ll(m,T,{transaction:N,ensureLoaded:w?.ensureLoaded},b,L=>{if(L?Pe._updateResource(y,L):y.#e=null,T.onlyIfCached&&T.noCacheStore){if(!y.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let k=nn(m,L,T,y);if(k)return C?.disregardReadTxn(),y.#i=!0,JI(k,P=>(Pe._updateResource(y,P),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(m)),b}}return y}static _updateResource(m,T){m.#r=T,m.#e=T?.value??null,m.#n=T?.version}ensureLoaded(){let m=nn(this.getId(),this.#r,this.getContext());if(m)return this.#i=!0,JI(m,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let m=F?.type;if(m==="String"||m==="ID")return super.getNewId();if(!Lt){let b=i.getEntry(Symbol.for("id_allocation")),C=b?.value,N;if(C&&C.nodeName===server.hostname&&(!Vpe(i)||C.pid===process.pid)){let L=C.start,k=C.end;N=L;for(let P of i.getKeys({start:k,end:L,limit:1,reverse:!0}))N=P}else C=y(b?.version??null),N=C.start;Lt=new BigInt64Array([BigInt(N)+1n]),Lt=new BigInt64Array(i.getUserSharedBuffer("id",Lt.buffer)),Lt.maxSafeId=C.end}let T=Number(Atomics.add(Lt,0,1n)),w=m==="Int"?512:1048576;if(T+w>=Lt.maxSafeId){let b=a(C=>{Lt.maxSafeId=T+(m==="Int"?1023:4194303);let N=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=C?void 0:i.useReadTransaction(),k=Number(Lt[0]);for(let $ of i.getKeys({start:k+1,end:N,limit:1,transaction:L}))N=$;L?.done();let{value:P,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Lt.maxSafeId<N){if(P.end>Lt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,Lt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:P.start,end:Lt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Lt.maxSafeId}, but id of ${N} detected`);let $=y(x);$.alreadyUpdated||Atomics.store(Lt,0,BigInt($.start+1)),Lt.maxSafeId=$.end}},"updateEnd");T+w===Lt.maxSafeId?setImmediate(b):T+100>=Lt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${m=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return T;function y(b){let C=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,N=C/4,L,k,P=!1,x,$;do{x=Math.floor(Math.random()*C),$={start:x,end:x+(m==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},L=0;for(let z of i.getKeys({start:x,limit:1,reverse:!0}))L=z;k=C;for(let z of i.getKeys({start:x+1,end:C,limit:1}))k=z;N*=.875,N<1e3&&!P&&(P=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${m==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,L,k,N))}while(!(N<k-x&&(N<x-L||L===0)));return i.transactionSync(()=>{let z=i.getEntry(Symbol.for("id_allocation"));return(z?.version??null)==b?(xe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...z.value})})}}static setTTLExpiration(m){if(typeof m=="number")p=m*1e3,S||(S=0);else if(m&&typeof m=="object")p=m.expiration*1e3,S=(m.eviction||0)*1e3,Jt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");Jt=Jt||(p+S)/4,qo()}static getResidencyRecord(m){return f.get([Symbol.for("residency_by_id"),m])}static setResidency(m){Pe.getResidency=m}static setResidencyById(m){Pe.getResidencyById=m}static getResidency(m,T){if(Pe.getResidencyById)return Pe.getResidencyById(m[t]);let w=Hd;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(w=T.replicateTo)}if(w>=0&&server.nodes){let y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,w));else{let b=server.nodes.map(L=>L.name),C=Math.floor(b.length*Math.random());y.push(...b.slice(C,C+w));let N=C+w-b.length;N>0&&y.push(...b.slice(0,N))}return y}}static enableAuditing(m=!0){g=m,m&&qd(),Pe.audit=m}static coerceId(m){return m===""?null:ZS(m,F)}static async dropTable(){delete qe[c][s];for(let m of i.getRange({versions:!0,snapshot:!1,lazy:!0}))m.metadataFlags&vn&&m.value&&ta(m.value);if(c===o){for(let m of E)f.remove(Pe.tableName+"/"+m.name),r[m.name]?.drop();f.remove(Pe.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await XS.default.remove(data_path),await XS.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Hh.signalSchemaChange(new kh.SchemaEventMsg(process.pid,$t.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this.isCollection)return this.search(m);if(this.getId()===null)return m?.conditions?this.search(m):{records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E};if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(m,T){let w=Gd(m);if(w?.read){if(w.isSuperUser)return!0;let y=w.attribute_permissions,b=T?.select;if(y?.length>0||Pl&&b){if(T||(T={}),b){let C=y?.length>0&&jI(y,"read");T.select=b.map(N=>{let L=N.name||N;if(!C||C[L]){let k=In[L]?.definition?.tableClass;if(k){if(N.name||(N={name:N}),!k.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else T.select=y.filter(C=>C.read&&!In[C.attribute_name]).map(C=>C.attribute_name);return T}else return!0}}allowUpdate(m,T){let w=Gd(m);if(w?.update){let y=w.attribute_permissions;if(y?.length>0){let b=jI(y,"update");for(let C in T)if(!b[C])return!1;for(let C of y){let N=C.attribute_name;!C.update&&!(N in T)&&(T[N]=this.getProperty(N))}}return Go(this.getContext())}}allowCreate(m,T){if(this.isCollection){let w=Gd(m);if(w?.insert){let y=w.attribute_permissions;if(y?.length>0){let b=jI(y,"insert");for(let C in T)if(!b[C])return!1;return Go(this.getContext())}else return Go(this.getContext())}}else return this.allowUpdate(m,{})}allowDelete(m){return Gd(m)?.delete&&Go(this.getContext())}update(m,T){if(!Br(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let y;return typeof m=="object"&&m&&(T?(Object.isFrozen(m)&&(m={...m}),this.#e={},this.#t=m):(y=this.#t,y&&(m=Object.assign(y,m)),this.#t=m)),this._writeUpdate(this.#t,T),this}addTo(m,T){if(typeof T=="number"||typeof T=="bigint")this.#s===zY?this.set(m,(+this.getProperty(m)||0)+T):(this.#s||this.update(),this.set(m,new Ym(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,T){if(typeof T=="number")return this.addTo(m,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(m){this.#t=m}setRecord(m){this.#e=m}invalidate(){this._writeInvalidate()}_writeInvalidate(m,T){let w=this.getContext(),y=this.getId();Nr(y),Br(this.getContext()).addWrite({key:y,store:i,invalidated:!0,entry:this.#r,before:Ce.invalidate?.bind(this,w,y),beforeIntermediate:me.invalidate?.bind(this,w,y),commit:a((C,N)=>{if(!(Fo(C,N,T?.nodeId)<=0)){m??=null;for(let L in r)m||(m={}),m[L]===void 0&&(m[L]=this.getProperty(L));xe.default.trace?.(`Invalidating entry id: ${y}, timestamp: ${new Date(C).toISOString()}`),A(y,m,this.#r,C,Dn,g,{user:w?.user,residencyId:T?.residencyId,nodeId:T?.nodeId},"invalidate")}},"commit")})}_writeRelocate(m){let T=this.getContext(),w=this.getId();Nr(w),Br(this.getContext()).addWrite({key:w,store:i,invalidated:!0,entry:this.#r,before:Ce.relocate?.bind(this,T,w),beforeIntermediate:me.relocate?.bind(this,T,w),commit:a((b,C)=>{if(Fo(b,C,m?.nodeId)<=0)return;let N=Pe.getResidencyRecord(m.residencyId),L=0,k=null,P=C?.value;if(N&&!N.includes(server.hostname)){for(let x in r)k||(k={}),k[x]=P(x);L=Dn}else k=P;xe.default.trace?.(`Relocating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),A(w,k,this.#r,b,L,g,{user:T.user,residencyId:m.residencyId,nodeId:m.nodeId,expiresAt:m.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(m,T){let w={previousResidency:this.getResidencyRecord(m.residencyId),isRelocation:!0},y=xl(this.getResidency(T.value,w)),b;if(y){if(!y.includes(server.hostname))return;b=Bl(y)}let N=A(m.key,T.value,m,m.version,0,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null)}static evict(m,T,w){let y=this.Source,b;if(!((v||g)&&(!T||(b=i.getEntry(m),!b||!T)||b.version!==w))){if(v){if(i.hasLock(m,b.version))return;let C;for(let N in r)C||(C={}),C[N]=T[N];if(C)return A(m,C,b,w,jo,null,null,null,!0)}if(i.ifVersion(m,w,()=>{rn(m,T,null)}),g)return A(m,null,b,w,jo,null,null,null,!0);dc(i,b??i.getEntry(m),w)}}lock(){throw new Error("Not yet implemented")}static operation(m,T){return m.table||=s,m.schema||=c,rW.operation(m,T)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,T,w){let y=this.getContext(),b=Br(y),C=this.getId();Nr(C);let N=this.#r;this.#s=T?zY:kpe;let L={key:C,store:i,entry:N,nodeName:y?.nodeName,validate:a(k=>{m||(m=this.#t),T||m&&Vm(this.#t===m?this:m)?y?.source||(b.checkOverloaded(),this.validate(m,!T),te&&(m[te.name]=te.type==="Date"?new Date(k):te.type==="String"?new Date(k).toISOString():k),T&&(t&&m[t]!==C&&(m[t]=C),Y&&(N?.value?m[Y.name]=N?.value[Y.name]:m[Y.name]=Y.type==="Date"?new Date(k):Y.type==="String"?new Date(k).toISOString():k),m=Pc(m))):b.removeWrite(L)},"validate"),before:T?Ce.put?()=>Ce.put(y,C,m):null:Ce.patch?()=>Ce.patch(y,C,m):Ce.put?()=>Ce.put(y,C,Pc(this)):null,beforeIntermediate:T?me.put?()=>me.put(y,C,m):null:me.patch?()=>me.patch(y,C,m):me.put?()=>me.put(y,C,Pc(this)):null,commit:a((k,P,x)=>{if(x){if(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),this.#r=P,P?.value&&P.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");T||(this.#e=P?.value??null)}this.#t=void 0,this.#n=k;let $=P?.value,z=m;this.#s=0;let ie=!1,U=Fo(k,P,w?.nodeId),ue;if(U<=0)if(g){let _e=P.localTime,Ae=P.version;xe.default.trace?.("Applying CRDT update to record with id: ",C,"applying later update:",Ae);let ye=[];for(;_e>k||Ae>=k&&_e>0;){let lt=l.get(_e);if(!lt)break;let et=Ot(lt);if(Ae=et.version,Ae>=k){if(Ae===k){if(U=Fo(k,{version:Ae,localTime:_e},w?.nodeId),U===0)return;if(U>0)continue}if(et.type==="patch")ye.push(et),ue=m;else if(et.type==="put"||et.type==="delete")return}_e=et.previousLocalTime}ye.sort((lt,et)=>lt.version-et.version);for(let lt of ye){let et=lt.getValue(i);if(z=qm(z,et,T),xe.default.debug?.("Rebuilding update with future patch:",z),!z)return}}else{if(T)return;z=qm(z,$,T),xe.default.debug?.("Rebuilding update without audit:",z)}let ae;if(T?ae=z:(this.#e=$,ae=Pc(this,z)),this.#e=ae,ae&&ae.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let fe;if(w?.residencyId!=null)fe=w.residencyId;else{N?.residencyId&&(y.previousResidency=Pe.getResidencyRecord(N.residencyId));let _e=xl(Pe.getResidency(ae,y));if(_e&&!_e.includes(server.hostname))if(ue??=ae,ie=!0,Pe.getResidencyById)ae=void 0;else{ae=null;for(let Ae in r)ae||(ae={}),ae[Ae]=ue[Ae]}fe=Bl(_e)}T||(ue=m);let ee=y?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${C}, timestamp: ${new Date(k).toISOString()}${ee?", expires at: "+new Date(ee).toISOString():""}${P?", replaces entry from: "+new Date(P.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ae).slice(0,100)}catch{return""}})()),rn(C,$,ae);let W=T?"put":"patch";A(C,ae,P,k,ie?Dn:0,g,{omitLocalRecord:ie,user:y?.user,residencyId:fe,expiresAt:ee,nodeId:w?.nodeId,originatingOperation:y?.originatingOperation},W,!1,ue),y.expiresAt&&qo()},"commit")};b.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this.isCollection){for await(let T of this.search(m))(await Pe.getResource(T[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this.#e?this._writeDelete(m):!1}_writeDelete(m){let T=Br(this.getContext()),w=this.getId();Nr(w);let y=this.getContext();return T.addWrite({key:w,store:i,entry:this.#r,nodeName:y?.nodeName,before:Ce.delete?.bind(this,y,w),beforeIntermediate:me.delete?.bind(this,y,w),commit:a((b,C,N)=>{let L=C?.value;N&&(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),Pe._updateResource(this,C)),!(Fo(b,C,m?.nodeId)<=0)&&(rn(this.getId(),L),xe.default.trace?.(`Deleting record with id: ${w}, txn timestamp: ${new Date(b).toISOString()}`),g||R?(A(w,null,this.#r,b,0,g,{user:y?.user,nodeId:m?.nodeId},"delete"),g||qo()):dc(i,C))},"commit")}),!0}search(m){let T=this.getContext(),w=Br(T);if(!m)throw new Error("No query provided");let y=m.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this.getId()&&(y=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(y));let b,C={};function N(W,_e){let Ae;switch(_e){case"and":case void 0:if(W.length<1)throw new Error('An "and" operator requires at least one condition');Ae=!0;break;case"or":if(W.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+_e)}for(let ye of W){if(ye.conditions){ye.conditions=N(ye.conditions,ye.operator);continue}let lt=ye[0]??ye.attribute,et=lt==null?F:fi(E,lt);if(et)(et.type||mA[ye.comparator])&&(ye[1]===void 0?ye.value=k(ye.value,et):ye[1]=k(ye[1],et));else if(lt!=null)throw(0,Or.handleHDBError)(new Error,`${lt} is not a defined attribute`,404);if(ye.chainedConditions)if(ye.chainedConditions.length===1&&(!ye.operator||ye.operator=="and")){let Hr=ye.chainedConditions[0],Ee,je;if(Hr.comparator==="gt"||Hr.comparator==="greater_than"||Hr.comparator==="ge"||Hr.comparator==="greater_than_equal"?(Ee=ye,je=Hr):(Ee=Hr,je=ye),Ee.comparator!=="lt"&&Ee.comparator!=="less_than"&&Ee.comparator!=="le"&&Ee.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let tt=je.comparator==="ge"||je.comparator==="greater_than_equal",Gt=Ee.comparator==="le"||Ee.comparator==="less_than_equal";ye.comparator=(tt?"ge":"gt")+(Gt?"le":"lt"),ye.value=[je.value,Ee.value]}else throw new Error("Multiple chained conditions are not currently supported")}return W}a(N,"prepareConditions");function L(W,_e){if(m.enforceExecutionOrder)return W;for(let Ae of W)Ae.conditions&&(Ae.conditions=L(Ae.conditions,Ae.operator));return W.length>1&&_e!=="or"?(0,eW.sortBy)(W,kp(Pe)):W}a(L,"orderConditions");function k(W,_e){return Array.isArray(W)?W.map(Ae=>ZS(Ae,_e)):ZS(W,_e)}a(k,"coerceTypedValues");let P=m.operator;(y.length>0||P)&&(y=N(y,P));let x=typeof m.sort=="object"&&m.sort,$;if(x&&P!=="or"){let W=x.attribute;if(W==null)throw new Or.ClientError("Sort requires an attribute");if(b=y.find(_e=>Vl(_e.attribute)===Vl(W)),!b){let _e=fi(E,W);if(!_e)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(W)?W.join("."):W} is not a defined attribute`,404);if(_e.indexed)b={attribute:W,comparator:"sort"},y.push(b);else if(y.length===0&&!m.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(W)?W.join("."):W} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!x.descending)}y=L(y,P),x&&(b&&y[0]===b?x.next&&($={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(b&&y.splice(y.indexOf(b),1),$=x));let z=m.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:y,operator:P,postOrdering:$,selectApplied:!!z};let ie=w.useReadTxn(),U=EA(y,P,Pe,ie,m,T,(W,_e)=>vl(W,z,T,ie,_e),C),ue=m.ensureLoaded!==!1;$||(U=ee(U));let ae=Pe.transformEntryForSelect(z,T,ie,C,ue,!0),fe=Pe.transformToOrderedSelect(U,z,$,ie,T,ae);function ee(W){return m.offset||m.limit!==void 0?W.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):W}return a(ee,"applyOffset"),$&&(fe=ee(fe)),fe.onDone=()=>{fe.onDone=null,w.doneReadTxn()},fe.selectApplied=!0,fe.getColumns=()=>{if(z){let W=[];for(let _e of z)_e==="*"?W.push(...E.map(Ae=>Ae.name)):W.push(_e.name||_e);return W}return E.filter(W=>!W.computed&&!W.relationship).map(W=>W.name)},fe}static transformToOrderedSelect(m,T,w,y,b,C){let N=new _p;if(w){m=vl(m,T,y,b,null);let L;N.iterate=function(){let P,x=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),$,z=w.dbOrderedAttribute,ie,U,ue=!0;function ae(ee){let W=ee.next&&ae(ee.next),_e=ee.descending;return(Ae,ye)=>{let lt=Ml(Ae,ee.attribute,y),et=Ml(ye,ee.attribute,y),Hr=_e?(0,gl.compareKeys)(et,lt):(0,gl.compareKeys)(lt,et);return Hr===0?W?.(Ae,ye)||0:Hr}}a(ae,"createComparator");let fe=ae(w);return{async next(){let ee;if(P)if(ee=P.next(),ee.done){if($)return N.onDone&&N.onDone(),ee}else return{value:await C.call(this,ee.value)};L=[],ie&&L.push(ie);do if(ee=await x.next(),ee.done){if($=!0,L.length)break;return N.onDone&&N.onDone(),ee}else{let W=ee.value;if(W?.then&&(W=await W),z){let _e=Ml(W,z,y);if(ue)ue=!1,U=_e;else if(_e!==U){U=_e,ie=W;break}}L.push(W)}while(!0);return w.isGrouped,L.sort(fe),P=L[Symbol.iterator](),ee=P.next(),ee.done?(N.onDone&&N.onDone(),ee):{value:await C.call(this,ee.value)}},return(){N.onDone&&N.onDone(),x.return()},throw(){N.onDone&&N.onDone(),x.throw()}}};let k=a(P=>{if(typeof T=="object"&&Array.isArray(P.attribute))for(let x=0;x<T.length;x++){let $=T[x],z;if($.name===P.attribute[0]){for(z=$.sort||($.sort={});z.next;)z=z.next;z.attribute=P.attribute.slice(1),z.descending=P.descending}else $===P.attribute[0]&&(T[x]=z={name:$,sort:{attribute:P.attribute.slice(1),descending:P.descending}})}P.next&&k(P.next)},"applySortingOnSelect");k(w)}else N.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),N=N.map(function(L){try{let k=C.call(this,L);return typeof k?.catch=="function"?k.catch(P=>{throw P.partialObject={[t]:L.key},P}):k}catch(k){throw k.partialObject={[t]:L.key},k}});return N}static transformEntryForSelect(m,T,w,y,b,C){if(m&&(m===t||m?.length===1&&m[0]===t&&Array.isArray(m))){let P=a(x=>(T?.transaction?.stale&&(T.transaction.stale=!1),x?.key??x),"transform");return m===t?P:m.asArray?x=>[P(x)]:x=>({[t]:P(x)})}let N;b&&v&&!(typeof m=="string"?[m]:m)?.every(P=>{let x;return typeof P=="object"?x=P.name:x=P,r[x]||x===t})&&(N=!0);let L,k=a(function(P){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),P!=null){if(x=P.value||P.deref?.()?.value,!x&&(P.key===void 0||P.deref)||P.metadataFlags&Dn){if(P.metadataFlags&Dn&&T.replicateFrom===!1&&C&&P.residencyId)return Ba.SKIP;if(P=Ll(P.key??P,T,{transaction:w,lazy:m?.length<4,ensureLoaded:b},this?.isSync,$=>$),P?.then)return P.then(k.bind(this));x=P?.value}if(N&&P?.metadataFlags&(Dn|jo)||P?.expiresAt!=null&&P?.expiresAt<Date.now()){if(T.onlyIfCached&&T.noCacheStore)return{[t]:P.key,message:"This entry has expired"};let $=nn(P.key??P,P,T);if($?.then)return $.then(k)}}if(x==null)return C?Ba.SKIP:x;if(m&&!(m[0]==="*"&&m.length===1)){let $,z=a((U,ue)=>{let ae;typeof U=="object"?ae=U.name:ae=U;let fe=In?.[ae],ee;if(fe){let W=y?.[ae];if(W)if(W.hasMappings){let Ae=fe.from?x[fe.from]:Vl(P.key);ee=W.get(Ae),ee||(ee=[])}else ee=W.fromRecord?.(x);else ee=fe(x,T,P);let _e=a(Ae=>{if(Ae&&typeof Ae=="object"){let ye=fe.definition?.tableClass||Pe;L||(L={});let lt=L[ae]||(L[ae]=ye.transformEntryForSelect(ae===U?null:U.select||(Array.isArray(U)?U:null),T,w,W,b));if(Array.isArray(Ae)){let et=[],Hr=ye.transformToOrderedSelect(Ae,U.select,typeof U.sort=="object"&&U.sort,T,w,lt)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ee=a(tt=>{for(;!tt.done;){if(tt?.then)return tt.then(Ee);et.push(tt.value),tt=Hr.next()}ue(et,ae)},"nextValue"),je=Ee(Hr.next());je&&($||($=[]),$.push(je));return}else if(Ae=lt.call(this,Ae),Ae?.then){$||($=[]),$.push(Ae.then(et=>ue(et,ae)));return}}ue(Ae,ae)},"handleResolvedValue");ee?.then?($||($=[]),$.push(ee.then(_e))):_e(ee);return}else ee=x[ae],ee&&typeof ee=="object"&&ae!==U&&(ee=Pe.transformEntryForSelect(U.select||U,T,w,null)({value:ee}));ue(ee,ae)},"selectAttribute"),ie;if(typeof m=="string")z(m,U=>{ie=U});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((U,ue)=>{U==="*"?m[ue]=x:z(U,ae=>ie[ue]=ae)});else{ie={};let U=m.forceNulls;for(let ue of m)if(ue==="*")for(let ae in x)ie[ae]=x[ae];else z(ue,(ae,fe)=>{ae===void 0&&U&&(ae=null),ie[fe]=ae})}else throw new Or.ClientError("Invalid select"+m);return $?Promise.all($).then(()=>ie):ie}return x},"transform");return k}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ut({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),m||(m={});let T=!m.rawEvents,w=[],y=this,b=QI(Pe,this.getId()??null,function(N,L,k,P){try{let x=L.getValue?.(i,T),$=L.type;if(!x&&$==="patch"&&T){let ie=i.getEntry(N);ie?.version===L.version?x=ie.value:x=L.getValue?.(i,!0,k),$="put"}let z={id:N,localTime:k,value:x,version:L.version,type:$,beginTxn:P};w?w.push(z):this.send(z)}catch(x){xe.default.error?.(x)}},m.startTime||0,m),C=(async()=>{this.isCollection&&(b.includeDescendants=!0,m.onlyChildren&&(b.onlyChildren=!0)),m.supportsTransactions&&(b.supportsTransactions=!0);let N=this.getId(),L=m.previousCount;L>1e3&&(L=1e3);let k=m.startTime;if(this.isCollection){if(k){if(L)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:P,value:x}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let $=Ot(x);if($.tableId!==n)continue;let z=$.recordId;if(N==null||XY(N,z)){let ie=$.getValue(i,T,P);if(b.send({id:z,localTime:P,value:ie,version:$.version,type:$.type}),b.queue?.length>jY&&await b.waitForDrain()===!1)return}b.startTime=P}}else if(L){let P=[];for(let{key:x,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let z=Ot($);if(z.tableId!==n)continue;let ie=z.recordId;if(N==null||XY(N,ie)){let U=z.getValue(i,T,x);if(P.push({id:ie,localTime:x,value:U,version:z.version,type:z.type}),--L<=0)break}}catch(z){xe.default.error("Error getting history entry",x,z)}for(let x=P.length;x>0;)b.send(P[--x]);P[0]&&(b.startTime=P[0].localTime)}else if(!m.omitCurrent){for(let{key:P,value:x,version:$,localTime:z}of i.getRange({start:N??!1,end:N==null?void 0:[N,gl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(b.send({id:P,localTime:z,value:x,version:$,type:"put"}),b.queue?.length>jY&&await b.waitForDrain()===!1))return}}else{L&&!k&&(k=0);let P=this.#r?.localTime;if(P===WA&&(i.cache?.delete(N),this.#r=i.getEntry(N),xe.default.trace?.("re-retrieved record",P,this.#r?.localTime),P=this.#r?.localTime),xe.default.trace?.("Subscription from",k,"from",N,P),k<P){let x=[],$=P;do{let z=l.get($);if(z){m.omitCurrent=!0;let ie=Ot(z),U=ie.getValue(i,T,$);T&&(ie.type="put"),x.push({id:N,value:U,localTime:$,...ie}),$=ie.previousLocalTime}else break;L&&L--}while($>k&&L!==0);for(let z=x.length;z>0;)b.send(x[--z]);b.startTime=P}!m.omitCurrent&&this.doesExist()&&b.send({id:N,localTime:P,value:this.#e,version:this.#n,type:"put"})}for(let P of w)b.send(P);w=null})();return m.listener&&b.on("data",m.listener),b}static subscribeOnThisThread(m,T){return m===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(m,T){this._writePublish(m,T)}_writePublish(m,T){let w=Br(this.getContext()),y=this.getId()||null;y!=null&&Nr(y);let b=this.getContext();w.addWrite({key:y,store:i,entry:this.#r,nodeName:b?.nodeName,validate:a(()=>{b?.source||(w.checkOverloaded(),this.validate(m))},"validate"),before:Ce.publish?.bind(this,b,y,m),beforeIntermediate:me.publish?.bind(this,b,y,m),commit:a((C,N,L)=>{N===void 0&&R&&!g&&qo(),xe.default.trace?.(`Publishing message to id: ${y}, timestamp: ${new Date(C).toISOString()}`),A(y,N?.value??null,N,N?.version||C,0,!0,{user:b?.user,residencyId:T?.residencyId,expiresAt:b?.expiresAt,nodeId:T?.nodeId},"message",!1,m)},"commit")})}validate(m,T){let w,y=a((b,C,N)=>{if(C.type&&b!=null)if(T&&b.__op__&&(b=b.value),C.properties){typeof b!="object"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an object${C.type?" ("+C.type+")":""}`);let L=C.properties;for(let k=0,P=L.length;k<P;k++){let x=L[k],$=y(b[x.name],x,N+"."+x.name);$&&(b[x.name]=$)}if(C.sealed&&b!=null&&typeof b=="object")for(let k in b)L.find(P=>P.name===k)||(w||(w=[])).push(`Property ${k} is not allowed within object in property ${N}`)}else switch(C.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(L=>typeof L=="string")||(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof mi)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(C.elements)for(let L=0,k=b.length;L<k;L++){let P=b[L],x=y(P,C.elements,N+"[*]");x&&(b[L]=x)}}else(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an Array`);break}C.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let b=0,C=E.length;b<C;b++){let N=E[b];if(!(N.relationship||N.computed)&&(!T||N.name in m)){let L=y(m[N.name],N,N.name);L&&(m[N.name]=L)}}if(d)for(let b in m)E.find(C=>C.name===b)||(w||(w=[])).push(`Property ${b} is not allowed`);if(w)throw new Or.ClientError(w.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return v?!!this.#i:void 0}static async addAttributes(m){let T=E.slice(0);for(let w of m){if(!w.name)throw new Or.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,tW.validateAttribute)(w.name),T.push(w)}return ut({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static async removeAttributes(m){let T=E.filter(w=>!m.includes(w.name));return ut({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static getSize(){let m=i.getStats();return(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getAuditSize(){let m=l?.getStats();return m&&(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getStorageStats(){let m=i.env.path,T=XS.default.statfsSync?.(m)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(m){let T=i.getStats().entryCount,w=1e3/2,y=performance.now(),b=Math.floor(T/2),C=m?.exactCount,N=0,L=0,k;for(let{value:P}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(P!=null&&N++,L++,await xa(),!C&&L<b&&performance.now()-y>w){k=L;break}if(k){let P=N;N=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k,snapshot:!1}))ee!=null&&N++,await xa();let x=k*2,$=(N+P)/x,z=Math.pow((N-P+1)/k/2,2)+$*(1-$)/x,ie=Math.max(Math.sqrt(z)*T,1),U=Math.round($*T),ue=Math.max(U-1.96*ie,N+P),ae=Math.min(U+1.96*ie,T),fe=Math.pow(10,Math.round(Math.log10(ie)));return fe>U&&(fe=fe/10),N=Math.round(U/fe)*fe,{recordCount:N,estimatedRange:[Math.round(ue),Math.round(ae)]}}return{recordCount:N}}static updatedAttributes(){In=this.propertyResolvers={$id:a((m,T,w)=>({value:w.key}),"$id"),$updatedtime:a((m,T,w)=>w.version,"$updatedtime"),$record:a((m,T,w)=>w?{value:m}:m,"$record")};for(let m of this.attributes){m.resolve=null;let T=m.relationship,w=m.computed;if(T)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),w&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Pl=!0,T.to)m.elements?.definition?(In[m.name]=m.resolve=(y,b,C)=>{let N=y[T.from?T.from:t],L=m.elements.definition.tableClass;return C?$l({attribute:T.to,value:N},Br(b).getReadTxn(),!1,L,!1).asArray:L.search([{attribute:T.to,value:N}],b).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,T.from&&(m.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let y=m.definition||m.elements?.definition;y?(In[m.name]=m.resolve=(b,C,N)=>{let L=b[T.from];if(L!==void 0){if(m.elements){let k,P=L?.map(x=>{let $=N?y.tableClass.primaryStore.getEntry(x,{transaction:Br(C).getReadTxn()}):y.tableClass.get(x,C);return $?.then&&(k=!0),$});return T.filterMissing?k?Promise.all(P).then(x=>x.filter(ZY)):P.filter(ZY):k?Promise.all(P):P}return N?y.tableClass.primaryStore.getEntry(L,{transaction:Br(C).getReadTxn()}):y.tableClass.get(L,C)}},m.set=(b,C)=>{if(Array.isArray(C)){let N=C.map(L=>L.getId?.()||L[y.tableClass.primaryKey]);b[T.from]=N}else{let N=C.getId?.()||C[y.tableClass.primaryKey];b[T.from]=N}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=T.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`);else w&&(typeof w.from=="function"&&this.setComputedAttribute(m.name,w.from),In[m.name]=m.resolve=(y,b,C)=>{let N=typeof w.from=="string"?y[w.from]:y,L=this.userResolvers[m.name];if(L)return L(N,b,C);xe.default.warn(`Computed attribute "${m.name}" does not have a function assigned to it. Please use setComputedAttribute('${m.name}', resolver) to assign a resolver function.`),this.userResolvers[m.name]=()=>{}})}Wm(this,this)}static setComputedAttribute(m,T){let w=fi(E,m);if(!w){console.error(`The attribute "${m}" does not exist in the table "${s}"`);return}if(!w.computed){console.error(`The attribute "${m}" is not defined as computed in the table "${s}"`);return}this.userResolvers[m]=T}static async deleteHistory(m=0,T=!1){let w;for(let{key:y,value:b}of l.getRange({start:0,end:m}))await xa(),Ot(b).tableId===n&&(w=jS(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:C,localTime:N}=y;await xa(),C===null&&N<m&&(w=dc(i,y))}await w}static async*getHistory(m=0,T=1/0){for(let{key:w,value:y}of l.getRange({start:m||1,end:T})){await xa();let b=Ot(y);b.tableId===n&&(yield{id:b.recordId,localTime:w,version:b.version,type:b.type,value:b.getValue(i,!0,w),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(m){let T=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return T;let y=w.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await xa();let C=l.get(y);if(C){let N=Ot(C);T.push({id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user}),y=N.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){X?.remove()}}Pe.updatedAttributes();let Fd=Pe.prototype;return p&&Pe.setTTLExpiration(p/1e3),se&&Ul(),Pe;function rn(K,m,T){let w;for(let y in r){let b=r[y],C=b.isIndexing,N=In[y],L=T&&(N?N(T):T[y]),k=m&&(N?N(m):m[y]);if(L===k&&!C)continue;w=!0;let P=b.indexNulls,x=(0,Bh.getIndexedValues)(L,P),$=(0,Bh.getIndexedValues)(k,P);if($?.length>0){let z=new Set($);if(x=x?x.filter(ie=>{if(z.has(ie))z.delete(ie);else return!0}):[],$=Array.from(z),($.length>0||x.length>0)&&WY){let ie=$.concat(x).map(U=>({key:U,value:K}));b.prefetch(ie,JY)}for(let ie=0,U=$.length;ie<U;ie++)b.remove($[ie],K)}else x?.length>0&&WY&&b.prefetch(x.map(z=>({key:z,value:K})),JY);if(x)for(let z=0,ie=x.length;z<ie;z++)b.put(x[z],K)}return w}a(rn,"updateIndices");function Nr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>QY)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,gl.writeKey)(K,Fpe,0)>QY)throw new Error("Primary key size is too large: "+K.length);return!0}a(Nr,"checkValidId");function Ll(K,m,T,w,y){if(Pe.getResidencyById&&T.ensureLoaded&&m?.replicateFrom!==!1){let C=xl(Pe.getResidencyById(K));if(C&&!C.includes(server.hostname)&&O)return O({key:K,residency:C}).then(y)}let b=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let C=i.getEntry(K,T);return C?.residencyId&&C.metadataFlags&Dn&&O&&T.ensureLoaded&&m?.replicateFrom!==!1?O(C).then(N=>y(N,K),N=>(xe.default.error?.("Error loading remote record",K,C,T,N),y(null,K))):(C&&m&&(C?.version>(m.lastModified||0)&&(m.lastModified=C.version),C?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=C.localTime)),y(C,K))},"whenPrefetched");return w?b():pe>0?(pe--,b()):new Promise((C,N)=>{pe===0?(pe--,i.prefetch([K],()=>{L(),k()})):(ne.push(K),Q.push(k),ne.length>hp&&(pe--,L()));function L(){if(ne.length>0){let P=Q;i.prefetch(ne,()=>{pe===-1?L():pe++;for(let x of P)x()}),ne=[],Q=[],Re>2&&Re--}else pe=Re,Re<kd&&Re++}a(L,"prefetch");function k(){try{C(b())}catch(P){N(P)}}a(k,"load")})}a(Ll,"loadLocalRecord");function Gd(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Gpe;let T=m[c],w,y=T?.tables;if(y)return y[s];if(c==="data"&&(w=m[s])&&!w.tables)return w}a(Gd,"getTablePermissions");function nn(K,m,T,w){if(v){let y=!1;if(T.noCache?y=!0:(m?(!m.value||m.metadataFlags&(Dn|jo)||m.expiresAt!=null&&m.expiresAt<Date.now())&&(y=!0):y=!0,Yn(!y,"cache-hit",s)),y){let b=pp(K,m,T).then(C=>(C?.value&&C?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(C?.version>(T.lastModified||0)&&(T.lastModified=C.version),T.lastRefreshed=Date.now()),C));if(T?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(b.catch(C=>xe.default.warn?.(C)),T?.onlyIfCached&&!w.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return b}}else if(m?.value&&m.expiresAt!=null&&m.expiresAt<Date.now())return Pe.evict(m.key,m.value,m.version),m.value=null,{then(y){return y(m)}}}a(nn,"ensureLoadedFromSource");function Br(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let T=m.next;if(!T)return m=m.next=new tc,m.lmdbDb=i,m;m=T}while(!0)}else return new xp}a(Br,"txnForContext");function Ml(K,m,T){if(!K)return;let w=K.value||i.getEntry(K.key)?.value;if(typeof m=="object"){let b=In,C=w;for(let N=0,L=m.length;N<L;N++){let k=m[N],P=b?.[k];C=P&&C?P(C,T,!0)?.value:C?.[k],b=P?.definition?.tableClass?.propertyResolvers}return C}let y=In[m];return y?y(w,T):w[m]}a(Ml,"getAttributeValue");function vl(K,m,T,w,y){let b=y?.length,C={transaction:w,lazy:b>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function L(k,P){let x=k?.value;if(!x)return Ba.SKIP;for(let $=0;$<b;$++)if(!N?.includes($)&&!y[$](x,k))return Ba.SKIP;return P!==void 0&&(k.key=P),k}if(a(L,"processEntry"),b>0||!K.hasEntries){let k=K.map(P=>{if(N=null,typeof P=="object"&&P?.key!==void 0)return b>0?L(P):P;if(P==null)return Ba.SKIP;for(let x=0;x<b;x++){let z=y[x].idFilter;if(z){if(!z(P))return Ba.SKIP;N||(N=[]),N.push(x)}}return Ll(P,T,C,!1,L)});return Array.isArray(K)&&(k=k.filter(P=>P!==Ba.SKIP)),k.hasEntries=!0,k}return K}a(vl,"transformToEntries");function Fo(K,m,T=server.replication?.getThisNodeId(l)){if(K<=m?.version){if(m?.version===K&&T!==void 0){let w=server.replication?.exportIdMapping(l),y=m.localTime,b=y&&l.get(y);if(b){let C,N,L=Ot(b);for(let k in w)w[k]===T&&(C=k),w[k]===L.nodeId&&(N=k);if(C>N)return 1;if(C===N)return 0}}return-1}return 1}a(Fo,"precedesExistingVersion");async function pp(K,m,T){let w=m?.metadataFlags,y=m?.version,b,C;if(!i.attemptLock(K,y,()=>{clearTimeout(C);let P=i.getEntry(K);!P||!P.value||P.metadataFlags&(Dn|jo)?b(pp(K,i.getEntry(K),T)):b(P)}))return new Promise(P=>{b=P,C=setTimeout(()=>{i.unlock(K,y)},Hpe)});let N=m?.value,L={requestContext:T,replacingRecord:N,replacingEntry:m,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache},k=T?.responseHeaders;return new Promise((P,x)=>{let $;JI(bt(L,async z=>{let ie=performance.now(),U,ue,ae;try{for(let _e of Pe.sources)if(_e.get&&(!_e.get.reliesOnPrototype||_e.prototype.get)){if(_e.available?.(m)===!1)continue;if(L.source=_e,U=await _e.get(K,L),U)break}ae=w&Dn;let ee=L.lastModified||ae&&y;ue=ae||ee>y||!N,ee||(ee=(0,Bh.getNextMonotonicTime)());let W=performance.now()-ie;if(nr(W,"cache-resolution",s,null,"success"),k&&oE(k,"Server-Timing",`cache-resolve;dur=${W.toFixed(2)}`,!0),z.timestamp=ee,p&&L.expiresAt==null&&(L.expiresAt=Date.now()+p),U){if(typeof U!="object")throw new Error("Only objects can be cached and stored in tables");if(U.status>0&&U.headers)if(U.status>=300)if(U.status===304)U=N,ee=y;else throw new Or.ServerError(U.body||"Error from source",U.status);else U=U.body;typeof U.toJSON=="function"&&(U=U.toJSON()),t&&U[t]!==K&&(U[t]=K)}$=!0,P({key:K,version:ee,value:U})}catch(ee){ee.message+=` while resolving record ${K} for ${s}`,N&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(P({key:K,version:y,value:N}),xe.default.trace?.(ee.message,"(returned stale record)")):x(ee);let W=performance.now()-ie;nr(W,"cache-resolution",s,null,"fail"),k&&oE(k,"Server-Timing",`cache-resolve;dur=${W.toFixed(2)}`,!0),L.transaction.abort();return}if(T?.noCacheStore||L.noCacheStore){L.transaction.abort();return}Br(L).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:a((ee,W)=>{if(W?.version!==y)return;let _e=rn(K,N,U);U?(me.put?.(L,K,U),xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ee).toISOString()}`),A(K,U,W,ee,0,g&&ue||null,{user:L?.user,expiresAt:L.expiresAt},"put",!!ae)):W&&(me.delete?.(L,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(ee).toISOString()}`),g||R?A(K,null,W,ee,0,g&&ue||null,{user:L?.user},"delete",!!ae):dc(i,W,y))},"commit")})}),()=>{i.unlock(K,y)},z=>{i.unlock(K,y),$&&xe.default.error?.("Error committing cache update",z)})})}a(pp,"getFromSource");function Go(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new Or.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new Or.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Go,"checkContextPermissions");function qo(K){let m=!1;if(K&&(K-ct>1&&(m=!0),ct=K),!(Jt===Ar&&!m)&&(Ar=Jt,(0,ml.getWorkerIndex)()===(0,ml.getWorkerCount)()-1))return is&&clearTimeout(is),Jt?new Promise(T=>{let w=new Date;w.setMonth(0),w.setDate(1),w.setHours(0),w.setMinutes(0),w.setSeconds(0);let y=Jt/(1+ct),b=m?Date.now():Math.ceil((Date.now()-w.getTime())/y)*y+w.getTime(),C=a(N=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(N)}`),is=setTimeout(()=>G=G.then(async()=>{if(C(Math.max(N+Jt,Date.now())),i.rootStore.status!=="open"){clearTimeout(is);return}let L=50,k=new Array(L),P=0,x=Math.pow(ct,8)*(El.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=S/Math.pow(Math.max(ct,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${$}ms`);function z(ie,U,ue,ae){let fe=ie+$-Date.now();if(fe<0)return!0;if(ct){let ee=i.lastSize;return ue&vn&&Fh(ae,W=>{W.size&&(ee+=W.size)}),xe.default.trace?.(`shouldEvict adjusted ${fe} ${ee}, ${fe*(ie-U)/ee} < ${x}`),fe*(ie-U)/ee<x}return!1}a(z,"shouldEvict");try{let ie=0;for(let U of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:ue,value:ae,version:fe,expiresAt:ee,metadataFlags:W}=U,_e;ae===null&&!g&&fe+Bpe<Date.now()?_e=dc(i,U,fe):ee!=null&&z(ee,fe,W,ae)&&(_e=Pe.evict(ue,ae,fe),ie++),_e&&(await k[P],k[P]=_e.catch(Ae=>{xe.default.error?.("Cleanup error",Ae)}),++P>=L&&(P=0)),await xa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${ie} entries`)}catch(ie){xe.default.warn?.(`Error in cleanup scan for ${s}:`,ie)}T(void 0),ct=0}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");C(b)}):void 0}a(qo,"scheduleCleanup");function qd(){X=l?.addDeleteRemovalCallback(n,i,(K,m)=>{i.remove(K,m)})}a(qd,"addDeleteRemoval");function Ul(){(0,ml.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dl){Dl=!0;try{let K=se.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let T of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let w of m.getValues(T)){let y=i.getEntry(w);y?.value?y.value[K]<Date.now()&&Pe.evict(w,y.value,y.version):i.ifVersion(w,y?.version,()=>m.remove(T,w))}await xa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Dl=!1}}},xpe).unref()}a(Ul,"runRecordExpirationEviction");function xl(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let m=server.shards.get?.(K);if(m)return m.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(xl,"residencyFromFunction");function Bl(K){if(K){let m=K.join(","),T=f.get([Symbol.for("residency_by_set"),m]);return T||(f.put([Symbol.for("residency_by_set"),m],T=Math.floor(Math.random()*2147418112)+65535),f.put([Symbol.for("residency_by_id"),T],K),T)}}a(Bl,"getResidencyId")}function jI(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 JY(){}function qpe(e){rW=e}function ZS(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 JS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return JS(+e);case"Float":return e==="null"?null:JS(+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;$pe.test(e)||(e+="Z");let n=new Date(e);return JS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,eT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function JS(e){if(isNaN(e))throw new SyntaxError;return e}function XY(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 JI(e,t,r){return e?.then?e.then(t,r):t(e)}function ZY(e){return e!=null}function ws(e){try{return JSON.stringify(e)}catch{return e}}function Vpe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ba,Bh,eW,tW,El,Or,Hh,kh,xe,gl,ml,eT,XS,Upe,rW,xpe,Bpe,WY,Hpe,zY,kpe,Dn,jo,Fpe,QY,jY,Gpe,oMe,$pe,xa,uf=be(()=>{H();Ba=require("lmdb"),Bh=M(an()),eW=require("lodash"),tW=M(nf());Jo();Bp();El=M(ce());gO();Or=M(he()),Hh=M(io()),kh=M(Gs());Me();lf();xe=M(hi());Vy();rc();gl=require("ordered-binary"),ml=M(rt());Ji();eT=M(oe());Jl();Ii();$m();p_();XS=M(require("node:fs"));cs();YS();Upe=new Uint8Array(9);Upe[8]=192;xpe=6e4,Bpe=864e5;El.initSync();WY=El.get(B.STORAGE_PREFETCHWRITES),Hpe=1e4,zY=1,kpe=2,Dn=1,jo=8,Fpe=Buffer.allocUnsafeSlow(8192),QY=1978,jY=100,Gpe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},oMe=(0,eT.convertToMS)(El.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(tT,"makeTable");a(jI,"attributesAsObject");a(JY,"noop");a(qpe,"setServerUtilities");$pe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(ZS,"coerceType");a(JS,"rejectNaN");a(XY,"isDescendantId");xa=a(()=>new Promise(setImmediate),"rest");a(JI,"when");a(ZY,"exists");a(ws,"stringify");a(Vpe,"hasOtherProcesses")});var st={};ve(st,{database:()=>fu,database_envs:()=>No,databases:()=>qe,dropDatabase:()=>Qy,dropTableMeta:()=>Qpe,getDatabases:()=>Je,getDefaultCompression:()=>Mg,getTables:()=>Kpe,onRemovedDB:()=>U_,onUpdatedTable:()=>Yc,readMetaDb:()=>Gh,resetDatabases:()=>ed,table:()=>ut,tables:()=>Kn});function Kpe(){return iT||Je(),Kn||{}}function Je(){if(iT)return qe;iT=!0,wd=new Map;let e=(0,Qt.getHdbBasePath)()&&(0,Pt.join)((0,Qt.getHdbBasePath)(),Za),t=(0,Qt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Qt.get)(B.STORAGE_PATH)||e&&((0,Zn.existsSync)(e)?e:(0,Pt.join)((0,Qt.getHdbBasePath)(),Ap)),!e)return;if((0,Zn.existsSync)(e))for(let n of(0,Zn.readdirSync)(e,{withFileTypes:!0})){let s=(0,Pt.basename)(n.name,".mdb");n.isFile()&&(0,Pt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Gh((0,Pt.join)(e,n.name),null,s)}if((0,Zn.existsSync)((0,Nd.getBaseSchemaPath)())){for(let n of(0,Zn.readdirSync)((0,Nd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Pt.join)((0,Nd.getBaseSchemaPath)(),n.name),i=(0,Pt.join)((0,Nd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,Zn.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Pt.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Pt.join)(i,o.name);Gh((0,Pt.join)(s,o.name),(0,Pt.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,Zn.existsSync)(i))for(let c of(0,Zn.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Pt.extname)(c.name).toLowerCase()===".mdb"&&Gh((0,Pt.join)(i,c.name),(0,Pt.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Pt.join)(l.path,(0,Pt.basename)(c+".mdb"));(0,Zn.existsSync)(u)&&Gh(u,c,n,null,!0)}}for(let n in qe){let s=wd.get(n);if(s){let i=qe[n];n.includes("delete")&&kt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(kt.trace(`delete table class ${o}`),delete i[o])}else if(delete qe[n],n==="data"){for(let i in Kn)delete Kn[i];delete Kn[oT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(qe.system)for(let n of r)qe.system[n]&&(qe.system[n].replicate=!1);return wd=null,qe}function ed(){iT=!1;for(let[,e]of No)e.needsDeletion=!0;Je();for(let[e,t]of No)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),No.delete(e),delete qe[t.databaseName],$h.forEach(r=>r(t.databaseName)));return qe}function Gh(e,t,r=eC,n,s){let i=new XI.default(e,!1);try{let o=No.get(e);o?o.needsDeletion=!1:(o=(0,Id.open)(i),No.set(e,o));let c=new Sl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(rT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,Zn.existsSync)(n)&&(i.path=n,u=(0,Id.open)(i),u.isLegacy=!0):u=QS(o));let f=oW(r),d=f[oT],h=new Map;for(let{key:_,value:p}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=p.name:g||(g=S,S=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),d?.add(S);let R=h.get(S);R||h.set(S,R={attributes:[]}),(g==null||p.is_hash_attribute)&&(R.primary=p),g!=null&&R.attributes.push(p),Object.defineProperty(p,"key",{value:_,configurable:!0})}for(let[_,p]of h){let{attributes:S,primary:g}=p;if(!g){for(let Q of S)if(Q.is_hash_attribute||Q.isPrimaryKey){g=Q;break}if(!g){kt.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let R=f[_],E={},A=[],O,v,F=typeof g.audit=="boolean"?g.audit:(0,Qt.get)(B.LOGGING_AUDITLOG),G=g.trackDeletes,Y=g.expiration,te=g.eviction,se=g.sealed,X=g.splitSegments,ne=g.replicate;if(R)E=R.indices,A=R.attributes,R.schemaVersion++;else{O=g.tableId,O?O>=(l.get(Od)||0)&&(l.putSync(Od,O+1),kt.info(`Updating next table id (it was out of sync) to ${O+1} for ${_}`)):(g.tableId=O=l.get(Od),O||(O=1),kt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Od,O+1),l.putSync(g.key,g));let Q=new Sl.default(!g.is_hash_attribute,g.is_hash_attribute);if(Q.compression=g.compression,Q.compression){let pe=(0,Qt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||iW;Q.compression.threshold=pe}v=rm(o.openDB(g.key,Q),o),o.databaseName=r,v.tableId=O}for(let Q of S){Q.attribute=Q.name;try{if(!Q.is_hash_attribute&&(Q.indexed||Q.attribute&&!Q.name)){if(!E[Q.name]){let Re=new Sl.default(!Q.is_hash_attribute,Q.is_hash_attribute);E[Q.name]=o.openDB(Q.key,Re),E[Q.name].indexNulls=Q.indexNulls}let pe=A.find(Re=>Re.name===Q.name);pe?A.splice(A.indexOf(pe),1,Q):A.push(Q)}}catch(pe){kt.error("Error trying to update attribute",Q,A,E,pe)}}if(!R){R=aW(f,_,tT({primaryStore:v,auditStore:u,audit:F,sealed:se,splitSegments:X,replicate:ne,expirationMS:Y&&Y*1e3,evictionMS:te&&te*1e3,trackDeletes:G,tableName:_,tableId:O,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let Q of qh)Q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function oW(e){let t=qe[e];if(t||(e==="data"?t=qe[e]=Kn:e==="system"?Object.defineProperty(qe,"system",{value:t=Object.create(null),configurable:!0}):t=qe[e]=Object.create(null)),wd&&!wd.has(e)){let r=new Set;t[oT]=r,wd.set(e,r)}return t}function aW(e,t,r){return e[t]=r,r}function fu({database:e,table:t}){e||(e=eC),Je();let r=oW(e),n=(0,Pt.join)((0,Qt.getHdbBasePath)(),Za),s=(0,Qt.get)(B.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Qt.get)(B.STORAGE_PATH)||((0,Zn.existsSync)(n)?n:(0,Pt.join)((0,Qt.getHdbBasePath)(),Ap));let o=(0,Pt.join)(n,(i?t:e)+".mdb"),c=No.get(o);if(!c||c.status==="closed"){let l=new XI.default(o,!1);c=(0,Id.open)(l),No.set(o,c)}return c.auditStore||(c.auditStore=QS(c)),c}async function Qy(e){if(!qe[e])throw new Error("Schema does not exist");let t=qe[e],r;for(let n in t)r=t[n].primaryStore.rootStore,No.delete(r.path),r.status==="open"&&(await r.close(),await Vh.remove(r.path));if(r||(r=fu({database:e,table:null}),r.status==="open"&&(await r.close(),await Vh.remove(r.path))),e==="data"){for(let n in Kn)delete Kn[n];delete Kn[oT]}delete qe[e],$h.forEach(n=>n(e)),await tC(r)}function ut(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=eC);let p=fu({database:r,table:t}),S=qe[r];kt.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,E,A;h==null&&(h=!0);let O=new Sl.default(!1);for(let X of o)X.attribute&&!X.name?(X.name=X.attribute,X.indexed=!0):X.attribute=X.name,X.expiresAt&&(X.indexed=!0);let v,F;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let X=p.auditStore;E=o.find(Re=>Re.isPrimaryKey)||{},R=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=Mg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,Qt.get)(B.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),u??=!1,E.splitSegments=u,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),kt.trace(`${t} table loading, opening primary store`);let ne=new Sl.default(!1,!0);ne.compression=E.compression;let Q=t+"/";if(A=p.dbisDb=p.openDB(rT.INTERNAL_DBIS_NAME,O),se(),A.get(Q))return F&&F(),ed(),ut(e);let pe=rm(p.openDB(Q,ne),p);p.databaseName=r,pe.tableId=A.get(Od),kt.trace(`Assigning new table id ${pe.tableId} for ${t}`),pe.tableId||(pe.tableId=1),A.put(Od,pe.tableId+1),E.tableId=pe.tableId,g=aW(S,t,tT({primaryStore:pe,auditStore:X,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:pe.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:A})),g.schemaVersion=1,v=!0,A.put(Q,E)}let G=g.indices;A=A||(p.dbisDb=p.openDB(rT.INTERNAL_DBIS_NAME,O)),g.dbisDB=A;let Y=[];for(let{key:X,value:ne}of A.getRange({start:!0})){let[Q,pe]=X.toString().split("/");if(pe===""&&(pe=ne.name),pe){if(Q!==t)continue}else continue;let Re=o.find(me=>me.name===pe),Ce=!Re?.indexed&&ne.indexed&&!ne.isPrimaryKey;if((!Re||Ce)&&(se(),v=!0,Re||A.remove(X),Ce)){let me=g.indices[Q];me&&Y.push(me)}}let te=[];try{for(let X of o||[]){if((X.relationship||X.computed)&&(v=!0,X.relationship))continue;let ne=t+"/"+(X.name||"");Object.defineProperty(X,"key",{value:ne,configurable:!0});let Q=A.get(ne);if(X.isPrimaryKey){if(Q=Q||A.get(ne=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+Q.expiration||void 0)||(+s||void 0)!==(+Q.eviction||void 0)){let Re={...Q};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),f!==void 0&&(Re.replicate=f),v=!0,se(),A.put(ne,Re)}continue}Q?.attribute&&!Q.name&&(Q.indexed=!0);let pe=!Q||Q.type!==X.type||Q.indexed!==X.indexed||Q.nullable!==X.nullable||Q.version!==X.version||JSON.stringify(Q.properties)!==JSON.stringify(X.properties)||JSON.stringify(Q.elements)!==JSON.stringify(X.elements);if(X.indexed){let Re=new Sl.default(!0,!1),Ce=p.openDB(ne,Re);(pe||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Kh.workerData?.restartNumber)&&(v=!0,se(),Q=A.get(ne),(pe||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Kh.workerData?.restartNumber)&&(v=!0,X.indexNulls===void 0&&(X.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(X.lastIndexedKey=Q?.lastIndexedKey??void 0,X.indexingPID=process.pid,Ce.isIndexing=!0,Object.defineProperty(X,"dbi",{value:Ce}),te.push(X))),A.put(ne,X)),Q?.indexNulls&&X.indexNulls===void 0&&(X.indexNulls=!0),Ce.indexNulls=X.indexNulls,G[X.name]=Ce}else pe&&(v=!0,se(),A.put(ne,X))}}finally{F&&F()}if(v&&(g.schemaVersion++,g.updatedAttributes()),kt.trace(`${t} table loading, running index`),te.length>0||Y.length>0?g.indexingOperation=zpe(g,te,Y):v&&nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,v)for(let X of qh)X(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),kt.trace(`${t} table loaded`),g;function se(){F||p.transactionSync(()=>({then(X){F=X}}))}a(se,"startTxn")}async function zpe(e,t,r){try{kt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Id.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let p=0;p<l;p++){let S=t[p],g=S.name;try{let R=S.resolve,E=h&&(R?R(h):h[g]),A=(0,nW.getIndexedValues)(E);if(A)for(let O=0,v=A.length;O<v;O++)S.dbi.put(A[O],d)}catch(R){o[g]||(o[g]=!0,kt.error(`Error indexing attribute ${g}`,R))}}}),s.then(()=>f--,p=>{f--,kt.error(p)}),Kh.workerData&&Kh.workerData.restartNumber!==sW.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(i)return}f>Ype?await s:f>Wpe&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),kt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){kt.error("Error in indexing",n)}}function Qpe({table:e,database:t}){let r=fu({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 Yc(e){return qh.push(e),{remove(){let t=qh.indexOf(e);t>-1&&qh.splice(t,1)}}}function U_(e){return $h.push(e),{remove(){let t=$h.indexOf(e);t>-1&&$h.splice(t,1)}}}function Mg(){let e=(0,Qt.get)(B.STORAGE_COMPRESSION),t=(0,Qt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Qt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||iW,n={startingOffset:32};return t&&(n.dictionary=Vh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Qt,rT,Id,Pt,Zn,Nd,Sl,XI,Vh,ZI,nW,nT,sT,Kh,kt,sW,eC,oT,iW,Kn,qe,Od,qh,$h,iT,No,wd,Ype,Wpe,Me=be(()=>{Qt=M(ce()),rT=M(vt()),Id=require("lmdb"),Pt=require("path"),Zn=require("fs"),Nd=M(gt());uf();Sl=M(yf()),XI=M(bf());H();Vh=M(require("fs-extra")),ZI=M(ci()),nW=M(an()),nT=M(io()),sT=M(Gs()),Kh=require("worker_threads"),kt=M(j()),sW=M(rt());Ji();Jl();cs();eC="data",oT=Symbol("defined-tables"),iW=((0,Qt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Qt.initSync)();Kn=Object.create(null),qe=Object.create(null);(0,ZI._assignPackageExport)("databases",qe);(0,ZI._assignPackageExport)("tables",Kn);Od=Symbol.for("next-table-id"),qh=[],$h=[],No=new Map;a(Kpe,"getTables");a(Je,"getDatabases");a(ed,"resetDatabases");a(Gh,"readMetaDb");a(oW,"ensureDB");a(aW,"setTable");a(fu,"database");a(Qy,"dropDatabase");a(ut,"table");Ype=1e3,Wpe=10;a(zpe,"runIndexing");a(Qpe,"dropTableMeta");a(Yc,"onUpdatedTable");a(U_,"onRemovedDB");a(Mg,"getDefaultCompression")});var oe=I((EMe,AW)=>{"use strict";var Ha=require("path"),fW=require("fs-extra"),On=j(),cW=require("fs-extra"),aT=require("os"),jpe=require("net"),Jpe=require("recursive-iterator"),Sr=(H(),D(q)),{PACKAGE_ROOT:Xpe}=Et(),Zpe=aA(),lW=require("papaparse"),cT=require("moment"),{inspect:eme}=require("util"),uW=require("is-number"),mMe=require("lodash"),tme=require("minimist"),rme=require("https"),nme=require("http"),{hdb_errors:lT}=he(),sme=/^((\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)))$/,_W=require("util").promisify(setTimeout),ime=100,ome=5,ame="",cme=4,dW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};AW.exports={isEmpty:es,isEmptyOrZeroLength:Hi,arrayHasEmptyValues:dme,arrayHasEmptyOrZeroLengthValues:fme,buildFolderPath:_me,isBoolean:hW,errorizeMessage:lme,stripFileExtension:pme,autoCast:mme,autoCastJSON:pW,autoCastJSONDeep:nC,removeDir:Eme,compareVersions:gme,isCompatibleDataVersion:Sme,escapeRawValue:Tme,unescapeValue:Ame,stringifyProps:Rme,timeoutPromise:bme,isClusterOperation:Nme,getClusterUser:Ime,checkGlobalSchemaTable:wme,getHomeDir:EW,getPropsFilePath:yme,promisifyPapaParse:Cme,removeBOM:gW,createEventPromise:Pme,checkProcessRunning:Dme,checkSchemaTableExist:Lme,checkSchemaExists:SW,checkTableExists:TW,getStartOfTomorrowInSeconds:Mme,getLimitKey:vme,isObject:hme,isNotEmptyAndHasValue:ume,autoCasterIsNumberCheck:mW,backtickASTSchemaItems:Ume,isPortTaken:Ome,createForkArgs:xme,autoCastBoolean:Bme,async_set_timeout:_W,getTableHashAttribute:Hme,doesSchemaExist:kme,doesTableExist:Fme,stringifyObj:Gme,ms_to_time:qme,changeExtension:$me,getEnvCliRootPath:sC,noBootFile:Vme,httpRequest:Kme,transformReq:Yme,convertToMS:Wme,PACKAGE_ROOT:Xpe};function lme(e){return e instanceof Error?e:new Error(e)}a(lme,"errorizeMessage");function es(e){return e==null}a(es,"isEmpty");function ume(e){return!es(e)&&(e||e===0||e===""||hW(e))}a(ume,"isNotEmptyAndHasValue");function Hi(e){return es(e)||e.length===0||e.size===0}a(Hi,"isEmptyOrZeroLength");function dme(e){if(es(e))return!0;for(let t=0;t<e.length;t++)if(es(e[t]))return!0;return!1}a(dme,"arrayHasEmptyValues");function fme(e){if(Hi(e))return!0;for(let t=0;t<e.length;t++)if(Hi(e[t]))return!0;return!1}a(fme,"arrayHasEmptyOrZeroLengthValues");function _me(...e){try{return e.join(Ha.sep)}catch{console.error(e)}}a(_me,"buildFolderPath");function hW(e){return es(e)?!1:e===!0||e===!1}a(hW,"isBoolean");function hme(e){return es(e)?!1:typeof e=="object"}a(hme,"isObject");function pme(e){return Hi(e)?ame:e.slice(0,-cme)}a(pme,"stripFileExtension");function mme(e){return es(e)||e===""||typeof e!="string"?e:dW[e]!==void 0?dW[e]:mW(e)===!0?Number(e):sme.test(e)?new Date(e):e}a(mme,"autoCast");function pW(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(pW,"autoCastJSON");function nC(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=nC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=nC(r);n!==r&&(e[t]=n)}return e}else return pW(e)}a(nC,"autoCastJSONDeep");function mW(e){if(e.startsWith("0.")&&uW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&uW(e))}a(mW,"autoCasterIsNumberCheck");async function Eme(e){if(Hi(e))throw new Error(`Directory path: ${e} does not exist`);try{await cW.emptyDir(e),await cW.remove(e)}catch(t){throw On.error(`Error removing files in ${e} -- ${t}`),t}}a(Eme,"removeDir");function gme(e,t){if(Hi(e)){On.info("Invalid current version sent as parameter.");return}if(Hi(t)){On.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(gme,"compareVersions");function Sme(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Sme,"isCompatibleDataVersion");function Tme(e){if(es(e))return e;let t=String(e);return t==="."?Sr.UNICODE_PERIOD:t===".."?Sr.UNICODE_PERIOD+Sr.UNICODE_PERIOD:t.replace(Sr.FORWARD_SLASH_REGEX,Sr.UNICODE_FORWARD_SLASH)}a(Tme,"escapeRawValue");function Ame(e){if(es(e))return e;let t=String(e);return t===Sr.UNICODE_PERIOD?".":t===Sr.UNICODE_PERIOD+Sr.UNICODE_PERIOD?"..":String(e).replace(Sr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Ame,"unescapeValue");function Rme(e,t){if(es(e))return On.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+aT.EOL}!Hi(n)&&n[0]===";"?r+=" "+n+s+aT.EOL:Hi(n)||(r+=n+"="+s+aT.EOL)}catch{On.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Rme,"stringifyProps");function EW(){let e;try{e=aT.homedir()}catch{e=process.env.HOME}return e}a(EW,"getHomeDir");function yme(){let e=Ha.join(EW(),Sr.HDB_HOME_DIR_NAME,Sr.BOOT_PROPS_FILE_NAME);return fW.existsSync(e)||(e=Ha.join(__dirname,"../","hdb_boot_properties.file")),e}a(yme,"getPropsFilePath");function bme(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(bme,"timeoutPromise");async function Ome(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=jpe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Ome,"isPortTaken");function Nme(e){try{return Sr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){On.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Nme,"isClusterOperation");function wme(e,t){let r=(Me(),D(st)).getDatabases();if(!r[e])return lT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return lT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wme,"checkGlobalSchemaTable");function Ime(e,t){if(es(t)){On.warn("No CLUSTERING_USER defined, clustering disabled");return}if(es(e)||Hi(e)){On.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){On.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){On.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Ime,"getClusterUser");function Cme(){lW.parsePromise=function(e,t,r){return new Promise(function(n,s){lW.parse(e,{header:!0,transformHeader:gW,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Cme,"promisifyPapaParse");function gW(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(gW,"removeBOM");function Pme(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;On.info(`Got cluster status event response: ${eme(s)}`);try{i.cancel()}catch{On.error("Error trying to cancel timeout.")}n(s)})})}a(Pme,"createEventPromise");async function Dme(e){let t=!0,r=0;do await _W(ime*r++),(await Zpe.findPs(e)).length>0&&(t=!1);while(t&&r<ome);if(t)throw new Error(`process ${e} was not started`)}a(Dme,"checkProcessRunning");function Lme(e,t){let r=SW(e);if(r)return r;let n=TW(e,t);if(n)return n}a(Lme,"checkSchemaTableExist");function SW(e){let{getDatabases:t}=(Me(),D(st));if(!t()[e])return lT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(SW,"checkSchemaExists");function TW(e,t){let{getDatabases:r}=(Me(),D(st));if(!r()[e][t])return lT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(TW,"checkTableExists");function Mme(){let e=cT().utc().add(1,"d").startOf("d").unix(),t=cT().utc().unix();return e-t}a(Mme,"getStartOfTomorrowInSeconds");function vme(){return cT().utc().format("DD-MM-YYYY")}a(vme,"getLimitKey");function Ume(e){try{let t=new Jpe(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){On.error("Got an error back ticking items."),On.error(t)}}a(Ume,"backtickASTSchemaItems");function xme(e){return[e]}a(xme,"createForkArgs");function Bme(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Bme,"autoCastBoolean");function Hme(e,t){let{getDatabases:r}=(Me(),D(st)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Hme,"getTableHashAttribute");function kme(e){let{getDatabases:t}=(Me(),D(st));return t()[e]!==void 0}a(kme,"doesSchemaExist");function Fme(e,t){let{getDatabases:r}=(Me(),D(st));return r()[e]?.[t]!==void 0}a(Fme,"doesTableExist");function Gme(e){try{return JSON.stringify(e)}catch{return e}}a(Gme,"stringifyObj");function qme(e){let t=cT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(qme,"ms_to_time");function $me(e,t){let r=Ha.basename(e,Ha.extname(e));return Ha.join(Ha.dirname(e),r+t)}a($me,"changeExtension");function sC(){if(process.env[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=tme(process.argv);if(e[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(sC,"getEnvCliRootPath");var rC;function Vme(){if(rC)return rC;let e=sC();if(sC()&&fW.pathExistsSync(Ha.join(e,Sr.HDB_CONFIG_FILE)))return rC=!0,!0}a(Vme,"noBootFile");function Kme(e,t){let r;return e.protocol==="http:"?r=nme:r=rme,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(Kme,"httpRequest");function Yme(e){if(!e.schema&&!e.database){e.schema=Sr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Yme,"transformReq");function Wme(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Wme,"convertToMS")});var ce=I((NW,wW)=>{"use strict";var iC=require("fs-extra"),Tl=require("path"),RW=require("os"),zme=require("properties-reader"),Wh=j(),Yh=oe(),Le=(H(),D(q)),uT=It(),Qme="Error initializing environment manager",dT="BOOT_PROPS_FILE_PATH",yW=!1,jme={[Le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},wo={};Object.assign(NW,wW.exports={BOOT_PROPS_FILE_PATH:dT,getHdbBasePath:Jme,setHdbBasePath:Xme,get:bW,initSync:eEe,setProperty:Ke,initTestEnvironment:rEe,setCloneVar:tEe});function Jme(){return wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Jme,"getHdbBasePath");function Xme(e){wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Xme,"setHdbBasePath");function bW(e){let t=uT.getConfigValue(e);return t===void 0?wo[e]:t}a(bW,"get");function Ke(e,t){jme[e]&&(wo[e]=t),uT.updateConfigObject(e,t)}a(Ke,"setProperty");function Zme(){let e;try{e=Yh.getPropsFilePath(),iC.accessSync(e,iC.constants.F_OK|iC.constants.R_OK),yW=!0;let t=zme(e);return wo[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),wo[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),wo[dT]=e,!0}catch{return Wh.trace(`Environment manager found no properties file at ${e}`),!1}}a(Zme,"doesPropFileExist");function eEe(e=!1){try{((yW||Zme()||Yh.noBootFile())&&!OW||e)&&(uT.initConfig(e),wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=uT.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Wh.error(Qme),Wh.error(t),console.error(t),process.exit(1)}}a(eEe,"initSync");var OW=!1;function tEe(e){OW=e}a(tEe,"setCloneVar");function rEe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Tl.join(__dirname,"../../","unitTests");wo[dT]=Tl.join(l,"hdb_boot_properties.file"),Ke(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Tl.join(l,"settings.test")),Ke(Le.HDB_SETTINGS_NAMES.INSTALL_USER,RW.userInfo()?RW.userInfo().username:void 0),Ke(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ke(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Tl.join(l,"envDir","log")),Ke(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ke(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ke(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ke(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Tl.join(l,"envDir")),Ke(Le.CONFIG_PARAMS.STORAGE_PATH,Tl.join(l,"envDir")),s&&(Ke(Le.CONFIG_PARAMS.HTTP_SECUREPORT,bW(Le.CONFIG_PARAMS.HTTP_PORT)),Ke(Le.CONFIG_PARAMS.HTTP_PORT,null)),Ke(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ke(Le.CONFIG_PARAMS.HTTP_PORT,9926),Ke(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ke(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ke(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yh.isEmpty(i)?!1:i),Ke(Le.CONFIG_PARAMS.HTTP_CORS,Yh.isEmpty(i)?!1:i),Ke(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ke(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ke(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ke(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ke(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Tl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ke(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yh.isEmpty(c)?!1:c),o&&(Ke("CORS_ACCESSLIST",o),Ke(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ke(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ke(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ke(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ke(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ke(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ke(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${dT}. Please check your boot props and settings files`;Wh.fatal(r),Wh.error(t)}}a(rEe,"initTestEnvironment")});var bE={};ve(bE,{Blob:()=>mi,blobsWereEncoded:()=>lc,databasePaths:()=>hT,decodeBlobsWithWrites:()=>SO,decodeFromDatabase:()=>uc,decodeWithBlobCallback:()=>TO,deleteBlob:()=>xW,deleteBlobsInObject:()=>ta,deleteRootBlobPathsForDB:()=>tC,encodeBlobsAsBuffers:()=>fEe,encodeBlobsWithFilePath:()=>em,findBlobsInObject:()=>Fh,getFileId:()=>$E,getFilePathForBlob:()=>HW,getRootBlobPathsForDB:()=>gT,setDeletionDelay:()=>oEe});function vW(){}function xW(e){let t=HW(e);t&&setTimeout(()=>{(0,Qe.unlink)(t,r=>{r&&ka.default.debug?.("Error trying to remove blob file",r)})},UW)}function oEe(e){UW=e}function BW(e){let t=Nn.get(e);if(!t)t={storageIndex:0,fileId:null,store:si},Nn.set(e,t);else{if(t.saving)return t;t.store=si}return cEe(t),t.source?oC(e,t.source,t):t.contentBuffer?aEe(e,t):oC(e,Qh.Readable.from(e.stream()),t),t}function oC(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,Qe.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.end(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g]));return}let h=!1;e.size!==void 0&&(d.write(p(e.size)),h=!0);let _;o?(h||d.write(sEe),_=(0,mT.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(nEe),t.pipe(d)),t.on("error",S);function p(g){let R=BigInt(g),E=new Uint8Array(Tr),A=new DataView(E.buffer);return R|=BigInt(o?aC:MW)<<48n,A.setBigInt64(0,R),E}a(p,"createHeader");function S(g){i.unlock(f,0);let R=d.fd;g?(R&&(0,Qe.close)(R),u(g)):c?(0,Qe.fdatasync)(R,E=>{E&&u(E),l(),(0,Qe.close)(R)}):(l(),(0,Qe.close)(R))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-Tr;e.size=g,(0,Qe.write)(d.fd,p(g),0,Tr,0,S)}})}),e}function $E(e){return Nn.get(e)?.fileId}function HW(e){let t=Nn.get(e);return t?.fileId&&jh(t)}function gT(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=hT.get(e);if(!t){if(!e.databaseName)throw new Error("No database name specified, can not determine blob storage path");let r=(0,ET.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Co.join)(n,e.databaseName)):t=[(0,Co.join)((0,ET.getHdbBasePath)(),"blobs",e.databaseName)],hT.set(e,t)}return t}async function tC(e){let t=hT.get(e);t&&await Promise.all(t.map(r=>kW(r)))}async function kW(e){for(let t of await(0,ii.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await kW((0,Co.join)(e,t.name));else try{await(0,ii.unlink)((0,Co.join)(e,t.name))}catch(r){ka.default.warn?.("Error deleting file",r)}try{await(0,ii.rmdir)(e)}catch(t){ka.default.warn?.("Error deleting directory",t)}}function jh({storageIndex:e,fileId:t,store:r}){let n=gT(r);return(0,Co.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 aEe(e,t){let r=t.contentBuffer,n=r.length;if(!(n<LW))return e.size=n,oC(e,Qh.Readable.from([r]),t)}function cEe(e){let t=gT(e.store),r=lEe(),n=t?.length>1?uEe(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=jh(e),o=(0,Co.dirname)(i);(0,Qe.existsSync)(o)||(0,DW.ensureDirSync)(o),e.filePath=i}function lEe(){let e=PW.get(si);if(!e){let t=0,r=gT(si);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,Qe.existsSync)(n))for(let c of(0,Qe.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Co.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(si.getUserSharedBuffer("blob-file-id",e.buffer)),PW.set(si,e)}return Number(Atomics.add(e,0,1n))}function uEe(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(pT);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,dEe(e)),e.frequencyTable[t%pT]}async function dEe(e){if(!ii.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o=await(0,ii.statfs)(s),c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(pT),n=t.map(s=>1/s);for(let s=0;s<pT;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function em(e,t,r){Cd=t,si=r,lc=!1;try{return e()}finally{Cd=void 0,si=void 0}}function fEe(e){vr=[];let t;try{t=e()}catch(n){throw vr=void 0,n}let r=vr.length<2?vr[0]:Promise.all(vr);return vr=void 0,r?r.then(()=>e()):t}function SO(e,t){try{vr=[],Al=t,e()}catch(n){throw Al=void 0,vr=void 0,n}Al=void 0;let r=vr.length<2?vr[0]:Promise.all(vr);return vr=void 0,r}function TO(e,t){try{return Al=t,e()}finally{Al=void 0}}function uc(e,t){return si=t,e()}function ta(e){Fh(e,t=>{xW(t)})}function Fh(e,t){if(e instanceof mi)t(e);else if(e.constructor===Object||Array.isArray(e))for(let r in e)typeof e[r]=="object"&&Fh(e[r],t)}function _Ee(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Io,ii,Qe,mT,Qh,DW,ET,Co,ka,LW,Tr,MW,aC,IW,nEe,sEe,CW,Nn,Al,mi,Cd,vr,si,lc,zh,fT,iEe,_T,UW,hT,PW,pT,cs=be(()=>{Io=require("msgpackr"),ii=require("node:fs/promises"),Qe=require("node:fs"),mT=require("node:zlib"),Qh=require("node:stream"),DW=require("fs-extra"),ET=M(ce());H();Co=require("path"),ka=M(hi());ji();LW=8192,Tr=8,MW=0,aC=1,IW=255,nEe=new Uint8Array([0,MW,255,255,255,255,255,255]),sEe=new Uint8Array([0,aC,255,255,255,255,255,255]),CW=0xffffffffffff,Nn=new WeakMap,mi=global.Blob||_Ee(),lc=!1,zh=new Uint8Array(8),fT=new DataView(zh.buffer),iEe=6e4;a(vW,"InstanceOfBlobWithNoConstructor");vW.prototype=mi.prototype;_T=class e extends vW{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Nn.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):(MA()&&LA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Nn.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=jh(t),o,c=a(async()=>{let l,u=Tr;try{if(l=await(0,ii.readFile)(i),l.length>=Tr){l.copy(zh,0,0,Tr);let d=fT.getBigUint64(0);if(Number(d>>48n)===IW)throw new Error("Error in blob: "+buffer.subarray(Tr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<CW&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error("Incomplete blob");return new Promise((p,S)=>{if(h.attemptLock(_,0,()=>(o=!0,h.unlock(_,0),p(c()))))return o=!0,h.unlock(_,0),p(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===aC?new Promise((d,h)=>{(0,mT.deflate)(l.subarray(Tr),(_,p)=>{_?h(_):d(f(p))})}):f(l.subarray(Tr))},"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=Nn.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(p){p.enqueue(r),p.close()}});let i=jh(t),o,c=0,l=0,u,f,d,h=this;return new ReadableStream({start(){let p=1e3,S=a((g,R)=>{(0,Qe.open)(i,"r",(E,A)=>{if(E){if(E.code==="ENOENT"&&d!==!1&&(ka.default.debug?.("File does not exist yet, waiting for it to be created",i,p),p-- >0))return setTimeout(()=>{_(),S(g,R)},20).unref();R(E),h.#e?.forEach(O=>O(E))}else o=A,g(A)})},"openFile");return new Promise(S)},pull:a(p=>{let S=0,g=100;return new Promise(a(function R(E,A){function O(F){(0,Qe.close)(o),u&&u.close(),A(F),h.#e?.forEach(G=>G(F))}a(O,"onError");let v=Buffer.allocUnsafe(262144);(0,Qe.read)(o,v,0,v.length,c,(F,G,Y)=>{if(l+=G,F)return O(F);if(c===0){if(G<Tr){g-- >0&&d!==!1?(_(),ka.default.debug?.("File was empty, waiting for data to be written",i,g),setTimeout(()=>R(E,A),20).unref()):(ka.default.debug?.("File was empty, throwing error",i,g),A(new Error(`Blob ${t.fileId} was empty`)));return}Y.copy(zh,0,0,Tr);let te=fT.getBigUint64(0);if(Number(te>>48n)===IW)return O(new Error("Error in blob: "+Y.subarray(Tr)));if(S=Number(te&0xffffffffffffn),S<CW&&h.size!==S&&(h.size=S,h.#t))for(let se of h.#t)se(S);Y=Y.subarray(Tr,G),l-=Tr}else if(G===0){let te=Buffer.allocUnsafe(8);return(0,Qe.read)(o,te,0,Tr,0,se=>{if(se)return O(se);if(zh.set(te),S=Number(fT.getBigUint64(0)&0xffffffffffffn),S>l){d!==!1?(f=setTimeout(()=>{O(new Error("File read timed out"))},iEe).unref(),u=(0,Qe.watch)(i,{persistent:!1},()=>{clearTimeout(f),u.close(),_(),R(E,A)})):O(new Error("Blob is incomplete"));return}(0,Qe.close)(o),p.close(),E()})}else Y=Y.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,R(E,A);s&&l>=s&&(l>s&&(Y=Y.subarray(0,s-c)),l=S=s),n&&n>c&&(Y=Y.subarray(n-c))}c+=G;try{p.enqueue(Y)}catch(te){return ka.default.debug?.("Error enqueuing chunk",te),E()}l===S&&((0,Qe.close)(o),p.close()),E()})},"readMore"))},"pull"),cancel(){(0,Qe.close)(o),clearTimeout(f),u&&u.close()}});function _(){if(d===void 0){let p=t.store,S=t.fileId+":blob";d=!p.attemptLock(S,0,()=>{d=!1,p.unlock(S,0)}),d||p.unlock(S,0)}return d}}slice(t,r,n){let s=Nn.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Nn.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Nn.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(!t?.primaryStore?.rootStore)throw new Error("No target table specified");return BW(this).saving??Promise.resolve()}},UW=500;a(xW,"deleteBlob");a(oEe,"setDeletionDelay");global.createBlob=function(e,t){let r=new _T(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Nn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Qh.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Qh.Readable.from(e);else throw new Error("Invalid source type");return r};a(BW,"saveBlob");a(oC,"writeBlobWithStream");a($E,"getFileId");a(HW,"getFilePathForBlob");hT=new Map;a(gT,"getRootBlobPathsForDB");a(tC,"deleteRootBlobPathsForDB");a(kW,"rimrafSteadily");a(jh,"getFilePath");a(aEe,"writeBlobWithBuffer");a(cEe,"generateFilePath");PW=new Map;a(lEe,"getNextFileId");pT=128;a(uEe,"getNextStorageIndex");a(dEe,"createFrequencyTableForStoragePaths");a(em,"encodeBlobsWithFilePath");a(fEe,"encodeBlobsAsBuffers");a(SO,"decodeBlobsWithWrites");a(TO,"decodeWithBlobCallback");a(uc,"decodeFromDatabase");a(ta,"deleteBlobsInObject");a(Fh,"findBlobsInObject");(0,Io.addExtension)({Class:mi,type:11,unpack:a(function(e){let t=(0,Io.unpack)(e),r=new _T;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(!si)throw new Error("No store specified, can not load blob from storage");if(Nn.set(r,{storageIndex:t[1],fileId:t[2],store:si}),Al)return Al(r)??r}else Nn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Nn.get(e);if(Cd!==void 0&&(lc=!0,t?.recordId!==void 0&&t.recordId!==Cd))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<LW)return r.size=t.contentBuffer.length,(0,Io.pack)([r,t.contentBuffer])}if(Cd!==void 0){if(t=BW(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Cd,(0,Io.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,Qe.readFileSync)(jh(t));if(n.length>=Tr&&(n.copy(zh,0,0,Tr),Number(fT.getBigUint64(0)&0xffffffffffffn)===n.length-Tr))return Buffer.concat([(0,Io.pack)([r]),n]);if(vr)vr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&vr)return vr.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Io.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(_Ee,"polyfillBlob")});var lC=I((bMe,FW)=>{"use strict";var Jh=ce();Jh.initSync();var Pd=require("fs-extra"),cC=require("path"),Dd=(H(),D(q)),hEe=require("crypto"),pEe=require("uuid").v4;FW.exports=mEe;function mEe(){if(Jh.getHdbBasePath()!==void 0){let e=cC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=cC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=cC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Pd.accessSync(r),Pd.accessSync(e),Pd.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=pEe(),i=hEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Pd.writeFileSync(r,s),Pd.writeFileSync(e,i.privateKey),Pd.writeFileSync(t,i.publicKey)}else throw n}}}a(mEe,"checkJWTTokenExist")});var qW=I((NMe,GW)=>{"use strict";var uC=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};GW.exports={HdbInfoInsertObject:uC}});var KW=I((IMe,VW)=>{"use strict";var $W=(H(),D(q)),dC=class{static{a(this,"UpgradeObject")}constructor(t,r){this[$W.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[$W.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};VW.exports={UpgradeObject:dC}});var ST=I((PMe,WW)=>{"use strict";var Is=require("prompt"),Ld=require("chalk"),YW=j(),oi=require("os"),fC=ec(),_C=["yes","y"];async function EEe(e){let t=`${oi.EOL}`+Ld.bold.green("Your current HarperDB version requires that we complete an update process.")+`${oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}${oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${oi.EOL}`;Is.override=fC(["CONFIRM_UPGRADE"]),Is.start(),Is.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Ld.magenta(`${oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Is.get([r])}catch(s){return YW.error("There was an error when prompting user about an upgrade."),YW.error(s),!1}return _C.includes(n.CONFIRM_UPGRADE)}a(EEe,"forceUpdatePrompt");async function gEe(e){let t=`${oi.EOL}`+Ld.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}`);Is.override=fC(["CONFIRM_DOWNGRADE"]),Is.start(),Is.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Ld.magenta(`${oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Is.get([r]);return _C.includes(n.CONFIRM_DOWNGRADE)}a(gEe,"forceDowngradePrompt");async function SEe(){let e=`${oi.EOL}`+Ld.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");Is.override=fC(["GENERATE_CERTS"]),Is.start(),Is.message=e;let t={properties:{GENERATE_CERTS:{description:Ld.magenta(`${oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Is.get([t]);return _C.includes(r.GENERATE_CERTS)}a(SEe,"upgradeCertsPrompt");WW.exports={forceUpdatePrompt:EEe,forceDowngradePrompt:gEe,upgradeCertsPrompt:SEe}});var pC=I((LMe,zW)=>{"use strict";var hC=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};zW.exports=hC});var jW=I((HMe,QW)=>{"use strict";var TEe=oe(),AEe=It(),vMe=j(),UMe=require("path"),xMe=require("fs"),BMe=(H(),D(q));QW.exports={getOldPropsValue:REe};function REe(e,t,r=!1){let n=t.getRaw(e);return TEe.isNotEmptyAndHasValue(n)?n:r?AEe.getDefaultConfig(e):""}a(REe,"getOldPropsValue")});var ez=I((FMe,ZW)=>{"use strict";var Fa=require("path"),Ga=require("fs-extra"),yEe=require("properties-reader"),bEe=pC(),dr=j(),{getOldPropsValue:pt}=jW(),{HDB_SETTINGS_NAMES:ge,CONFIG_PARAMS:Rl}=(H(),D(q)),yl=It(),TT=ce(),JW=oe(),ki=(H(),D(q)),mC=new bEe("3.1.0"),XW=[];function OEe(){let e=yEe(TT.get(ge.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),dr.info(t);let r=` ;Settings for the HarperDB process.
41
41
 
42
42
  ;The directory selected during install where the database files reside.
43
- ${Ee.HDB_ROOT_KEY} = ${ht(Ee.HDB_ROOT_KEY,e)}
43
+ ${ge.HDB_ROOT_KEY} = ${pt(ge.HDB_ROOT_KEY,e)}
44
44
  ;The port the HarperDB REST interface will listen on.
45
- ${Ee.SERVER_PORT_KEY} = ${ht(Ee.SERVER_PORT_KEY,e)}
45
+ ${ge.SERVER_PORT_KEY} = ${pt(ge.SERVER_PORT_KEY,e)}
46
46
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
47
- ${Ee.HTTP_SECURE_ENABLED_KEY} = ${ht(Ee.HTTP_SECURE_ENABLED_KEY,e)}
47
+ ${ge.HTTP_SECURE_ENABLED_KEY} = ${pt(ge.HTTP_SECURE_ENABLED_KEY,e)}
48
48
  ;The path to the SSL certificate used when running with HTTPS enabled.
49
- ${Ee.CERT_KEY} = ${ht(Ee.CERT_KEY,e)}
49
+ ${ge.CERT_KEY} = ${pt(ge.CERT_KEY,e)}
50
50
  ;The path to the SSL private key used when running with HTTPS enabled.
51
- ${Ee.PRIVATE_KEY_KEY} = ${ht(Ee.PRIVATE_KEY_KEY,e)}
51
+ ${ge.PRIVATE_KEY_KEY} = ${pt(ge.PRIVATE_KEY_KEY,e)}
52
52
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
53
- ${Ee.CORS_ENABLED_KEY} = ${ht(Ee.CORS_ENABLED_KEY,e)}
53
+ ${ge.CORS_ENABLED_KEY} = ${pt(ge.CORS_ENABLED_KEY,e)}
54
54
  ;Allows for setting allowable domains with CORS. Comma separated list.
55
- ${Ee.CORS_WHITELIST_KEY} = ${ht(Ee.CORS_WHITELIST_KEY,e)}
55
+ ${ge.CORS_WHITELIST_KEY} = ${pt(ge.CORS_WHITELIST_KEY,e)}
56
56
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
57
- ${Ee.SERVER_TIMEOUT_KEY} = ${ht(Ee.SERVER_TIMEOUT_KEY,e,!0)}
57
+ ${ge.SERVER_TIMEOUT_KEY} = ${pt(ge.SERVER_TIMEOUT_KEY,e,!0)}
58
58
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
59
- ${Ee.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${ht(Ee.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
59
+ ${ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${pt(ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
60
60
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
61
- ${Ee.SERVER_HEADERS_TIMEOUT_KEY} = ${ht(Ee.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
61
+ ${ge.SERVER_HEADERS_TIMEOUT_KEY} = ${pt(ge.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
62
62
  ;Define whether to log to file or not.
63
- ${Ee.LOG_TO_FILE} = ${bl.getDefaultConfig(yl.LOGGING_FILE)}
63
+ ${ge.LOG_TO_FILE} = ${yl.getDefaultConfig(Rl.LOGGING_FILE)}
64
64
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
65
- ${Ee.LOG_TO_STDSTREAMS} = ${bl.getDefaultConfig(yl.LOGGING_STDSTREAMS)}
65
+ ${ge.LOG_TO_STDSTREAMS} = ${yl.getDefaultConfig(Rl.LOGGING_STDSTREAMS)}
66
66
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
67
- ${Ee.LOG_LEVEL_KEY} = ${ht(Ee.LOG_LEVEL_KEY,e)}
67
+ ${ge.LOG_LEVEL_KEY} = ${pt(ge.LOG_LEVEL_KEY,e)}
68
68
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
69
- ${Ee.LOG_PATH_KEY} = ${ht(Ee.LOG_PATH_KEY,e)}
69
+ ${ge.LOG_PATH_KEY} = ${pt(ge.LOG_PATH_KEY,e)}
70
70
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
71
- ${Ee.LOG_DAILY_ROTATE_KEY} = ${ht(Ee.LOG_DAILY_ROTATE_KEY,e)}
71
+ ${ge.LOG_DAILY_ROTATE_KEY} = ${pt(ge.LOG_DAILY_ROTATE_KEY,e)}
72
72
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
73
73
  ;daily log files which may consume a large amount of storage depending on your log settings.
74
- ${Ee.LOG_MAX_DAILY_FILES_KEY} = ${ht(Ee.LOG_MAX_DAILY_FILES_KEY,e)}
74
+ ${ge.LOG_MAX_DAILY_FILES_KEY} = ${pt(ge.LOG_MAX_DAILY_FILES_KEY,e)}
75
75
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
76
- ${Ee.PROPS_ENV_KEY} = ${ht(Ee.PROPS_ENV_KEY,e)}
76
+ ${ge.PROPS_ENV_KEY} = ${pt(ge.PROPS_ENV_KEY,e)}
77
77
  ;This allows self signed certificates to be used in clustering. This is a security risk
78
78
  ;as clustering will not validate the cert, so should only be used internally.
79
79
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
80
- ${Ee.ALLOW_SELF_SIGNED_SSL_CERTS} = ${ht(Ee.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
80
+ ${ge.ALLOW_SELF_SIGNED_SSL_CERTS} = ${pt(ge.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
81
81
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
82
- ${Ee.MAX_HDB_PROCESSES} = ${ht(Ee.MAX_HDB_PROCESSES,e)}
82
+ ${ge.MAX_HDB_PROCESSES} = ${pt(ge.MAX_HDB_PROCESSES,e)}
83
83
  ;Set to true to enable clustering. Requires a valid enterprise license.
84
- ${Ee.CLUSTERING_ENABLED_KEY} = ${ht(Ee.CLUSTERING_ENABLED_KEY,e,!0)}
84
+ ${ge.CLUSTERING_ENABLED_KEY} = ${pt(ge.CLUSTERING_ENABLED_KEY,e,!0)}
85
85
  ;The port that will be used for HarperDB clustering.
86
- ${Ee.CLUSTERING_PORT_KEY} = ${ht(Ee.CLUSTERING_PORT_KEY,e)}
86
+ ${ge.CLUSTERING_PORT_KEY} = ${pt(ge.CLUSTERING_PORT_KEY,e)}
87
87
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
88
- ${Ee.CLUSTERING_NODE_NAME_KEY} = ${ht(Ee.CLUSTERING_NODE_NAME_KEY,e)}
88
+ ${ge.CLUSTERING_NODE_NAME_KEY} = ${pt(ge.CLUSTERING_NODE_NAME_KEY,e)}
89
89
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
90
- ${Ee.CLUSTERING_USER_KEY} = ${ht(Ee.CLUSTERING_USER_KEY,e)}
90
+ ${ge.CLUSTERING_USER_KEY} = ${pt(ge.CLUSTERING_USER_KEY,e)}
91
91
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
92
- ${Ee.DISABLE_TRANSACTION_LOG_KEY} = ${ht(Ee.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
92
+ ${ge.DISABLE_TRANSACTION_LOG_KEY} = ${pt(ge.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
93
93
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
94
- ${Ee.OPERATION_TOKEN_TIMEOUT_KEY} = ${ht(Ee.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
94
+ ${ge.OPERATION_TOKEN_TIMEOUT_KEY} = ${pt(ge.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
95
95
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
96
- ${Ee.REFRESH_TOKEN_TIMEOUT_KEY} = ${ht(Ee.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
96
+ ${ge.REFRESH_TOKEN_TIMEOUT_KEY} = ${pt(ge.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
97
97
  ;The port the IPC server will run on.
98
- ${Ee.IPC_SERVER_PORT} = ${bl.getDefaultConfig(yl.IPC_NETWORK_PORT)}
98
+ ${ge.IPC_SERVER_PORT} = ${yl.getDefaultConfig(Rl.IPC_NETWORK_PORT)}
99
99
  ;Run HDB in the foreground.
100
- ${Ee.RUN_IN_FOREGROUND} = ${bl.getDefaultConfig(yl.OPERATIONSAPI_FOREGROUND)}
100
+ ${ge.RUN_IN_FOREGROUND} = ${yl.getDefaultConfig(Rl.OPERATIONSAPI_FOREGROUND)}
101
101
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
102
- ${Ee.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${bl.getDefaultConfig(yl.CUSTOMFUNCTIONS_ENABLED)}
102
+ ${ge.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${yl.getDefaultConfig(Rl.CUSTOMFUNCTIONS_ENABLED)}
103
103
  ;The port used to access the custom functions server.
104
- ${Ee.CUSTOM_FUNCTIONS_PORT_KEY} = ${bl.getDefaultConfig(yl.HTTP_PORT)}
104
+ ${ge.CUSTOM_FUNCTIONS_PORT_KEY} = ${yl.getDefaultConfig(Rl.HTTP_PORT)}
105
105
  ;The path to the folder containing HarperDB custom function files.
106
- ${Ee.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Fa.join(ht(Ee.HDB_ROOT_KEY,e),"custom_functions")}
106
+ ${ge.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Fa.join(pt(ge.HDB_ROOT_KEY,e),"custom_functions")}
107
107
  ;Set the max number of processes HarperDB will start for the Custom Functions server
108
- ${Ee.MAX_CUSTOM_FUNCTION_PROCESSES} = ${bl.getDefaultConfig(yl.HTTP_THREADS)}
109
- `,n=TT.get("settings_path"),s=Fa.dirname(n),i=Fa.join(s,"3_1_0_upgrade_settings.bak");try{lr.info(`Backing up old settings file to: ${i}`),Ga.copySync(n,i)}catch(c){throw lr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{lr.info("New settings file values for 3.1.0 upgrade:",r),lr.info(`Creating new/upgraded settings file at '${n}'`),Ga.writeFileSync(n,r),lr.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."),lr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),lr.error(c),Ga.copySync(i,n),c}TT.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),lr.info(o),o}a(bEe,"updateSettingsFile_3_1_0");function OEe(){let e=Fa.join(jW.getHomeDir(),Fi.HDB_HOME_DIR_NAME,Fi.LICENSE_KEY_DIR_NAME,Fi.LICENSE_FILE_NAME),t=Fa.join(jW.getHomeDir(),Fi.HDB_HOME_DIR_NAME,Fi.LICENSE_KEY_DIR_NAME,Fi.REG_KEY_FILE_NAME),r=Fa.join(TT.getHdbBasePath(),Fi.LICENSE_KEY_DIR_NAME,Fi.LICENSE_FILE_NAME),n=Fa.join(r,Fi.LICENSE_FILE_NAME),s=Fa.join(r,Fi.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),lr.info(i);let o="Creating .license directory";console.log(o),lr.info(o),Ga.mkdirpSync(r);try{Ga.accessSync(e);try{let c="Moving licence file";console.log(c),lr.info(c),Ga.moveSync(e,n);let l="License file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving license file failed";console.error(l),lr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),lr.warn(l)}try{Ga.accessSync(t);try{let c="Moving registration file";console.log(c),lr.info(c),Ga.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving registration file failed";console.error(l),lr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),lr.warn(l)}}a(OEe,"moveLicenseFiles");hC.sync_functions.push(bEe);hC.sync_functions.push(OEe);JW.push(hC);XW.exports=JW});var sz=I((GMe,nz)=>{"use strict";var rs=ut(),{insertRecords:NEe}=pc(),wEe=cn(),qa=vt(),IEe=ae(),Po=Q(),CEe=ae(),Gi=require("fs-extra"),Do=require("path"),PEe=require("cli-progress"),Xh=require("assert"),DEe=require("pino"),LEe=le();nz.exports=MEe;var AT,ez,RT,pC,rn,Zh=!1;async function MEe(e=!0){return AT=LEe.getHdbBasePath(),ez=Do.join(AT,"schema"),RT=Do.join(AT,"4_0_0_upgrade_tmp"),pC=Do.join(AT,"transactions"),console.info("Reindexing upgrade started for schemas"),Po.notify("Reindexing upgrade started for schemas"),await tz(ez,!1,e),await Gi.pathExists(pC)&&(console.info(`
108
+ ${ge.MAX_CUSTOM_FUNCTION_PROCESSES} = ${yl.getDefaultConfig(Rl.HTTP_THREADS)}
109
+ `,n=TT.get("settings_path"),s=Fa.dirname(n),i=Fa.join(s,"3_1_0_upgrade_settings.bak");try{dr.info(`Backing up old settings file to: ${i}`),Ga.copySync(n,i)}catch(c){throw dr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{dr.info("New settings file values for 3.1.0 upgrade:",r),dr.info(`Creating new/upgraded settings file at '${n}'`),Ga.writeFileSync(n,r),dr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),dr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),dr.error(c),Ga.copySync(i,n),c}TT.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),dr.info(o),o}a(OEe,"updateSettingsFile_3_1_0");function NEe(){let e=Fa.join(JW.getHomeDir(),ki.HDB_HOME_DIR_NAME,ki.LICENSE_KEY_DIR_NAME,ki.LICENSE_FILE_NAME),t=Fa.join(JW.getHomeDir(),ki.HDB_HOME_DIR_NAME,ki.LICENSE_KEY_DIR_NAME,ki.REG_KEY_FILE_NAME),r=Fa.join(TT.getHdbBasePath(),ki.LICENSE_KEY_DIR_NAME,ki.LICENSE_FILE_NAME),n=Fa.join(r,ki.LICENSE_FILE_NAME),s=Fa.join(r,ki.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),dr.info(i);let o="Creating .license directory";console.log(o),dr.info(o),Ga.mkdirpSync(r);try{Ga.accessSync(e);try{let c="Moving licence file";console.log(c),dr.info(c),Ga.moveSync(e,n);let l="License file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving license file failed";console.error(l),dr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),dr.warn(l)}try{Ga.accessSync(t);try{let c="Moving registration file";console.log(c),dr.info(c),Ga.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving registration file failed";console.error(l),dr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),dr.warn(l)}}a(NEe,"moveLicenseFiles");mC.sync_functions.push(OEe);mC.sync_functions.push(NEe);XW.push(mC);ZW.exports=XW});var iz=I((qMe,sz)=>{"use strict";var ts=ft(),{insertRecords:wEe}=pc(),IEe=an(),qa=vt(),CEe=oe(),Po=j(),PEe=oe(),Fi=require("fs-extra"),Do=require("path"),DEe=require("cli-progress"),Xh=require("assert"),LEe=require("pino"),MEe=ce();sz.exports=vEe;var AT,tz,RT,EC,tn,Zh=!1;async function vEe(e=!0){return AT=MEe.getHdbBasePath(),tz=Do.join(AT,"schema"),RT=Do.join(AT,"4_0_0_upgrade_tmp"),EC=Do.join(AT,"transactions"),console.info("Reindexing upgrade started for schemas"),Po.notify("Reindexing upgrade started for schemas"),await rz(tz,!1,e),await Fi.pathExists(EC)&&(console.info(`
110
110
 
111
- Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade started for transaction logs"),await tz(pC,!0,e)),Po.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Zh?", but errors occurred":"")}a(MEe,"reindexUpgrade");async function tz(e,t,r){let n=await Gi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Do.join(e,o.toString());if(o===".DS_Store")continue;let l=await Gi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Gi.statSync(Do.join(c,d)).isDirectory())try{await vEe(o,d,t),rn.info(`Reindexing started for ${o}.${d}`),Po.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await xEe(o,d,c,t,r),rn.info(`Reindexing completed for ${o}.${d}`),Po.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Zh=!0,h.schema_path=c,h.table_name=d,Po.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Po.error(h),rn.error(h),console.error(h)}}}if(!Zh)try{await Gi.rm(RT,{recursive:!0})}catch{}}a(tz,"processTables");async function vEe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Do.join(RT,s);await Gi.ensureDir(RT),await Gi.writeFile(i,""),rn=DEe({level:"debug",formatters:{bindings(){}}},i)}a(vEe,"initPinoLogger");var UEe=20;async function xEe(e,t,r,n,s){let i;try{i=await rs.openEnvironment(r,t,n)}catch(E){if(E.message==="MDB_INVALID: File is not an LMDB file"){Po.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),rn.error(E);return}throw E}let o=kEe(i.dbis),c=rs.openDBI(i,o),l=Object.keys(i.dbis),u=rs.statDBI(i,o);rn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new PEe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await rs.createEnvironment(r,t,!1);rs.createDBI(d,o,!1,!0);let h=[];try{for(let E of c.getRange({start:!1}))E.value={...E.value},h.push(E),n||e==="system"&&(t==="hdb_schema"&&(E.key=E.key.toString(),E.value.name=E.value.name.toString()),t==="hdb_table"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.name=E.value.name.toString()),t==="hdb_attribute"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.table=E.value.table.toString(),E.value.attribute=E.value.attribute.toString())),h.length>UEe&&await _();await _()}catch(E){throw Zh=!0,rn.error(E),E}async function _(){let E,R=h.map(({value:v})=>v);n?E=await Promise.all(R.map(v=>BEe(d,v))):E=await NEe(d,o,l.filter(v=>v!=="__blob__"),R,!1);for(let v=0,k=h.length;v<k;v++){let{key:F,value:K}=h[v];rn.info(`Record hash value: ${F} hash: ${o}`);let re;n?re=E[v]:re=E.written_hashes.indexOf(F)>-1,Xh(re,!0),HEe(d,o,K[o],n),rn.info(`Insert success, written hashes: ${E.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Po.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),rn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let p=rs.statDBI(i,o),S=rs.statDBI(d,o);if(rn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${S.entryCount}`),Xh.deepStrictEqual(p.entryCount,S.entryCount),await rs.closeEnvironment(i),await rs.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let E=Do.join(r,t),R=Do.join(E,"data.mdb"),N=Do.join(E,"lock.mdb");await Gi.unlink(R),await Gi.unlink(N),await Gi.rmdir(E),rn.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await rs.openEnvironment(r,t),A=rs.statDBI(g,o);rn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(A)}`),Xh.deepStrictEqual(A.entryCount,S.entryCount),await rs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(xEe,"processTable");async function BEe(e,t){rs.initializeDBIs(e,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qa.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),CEe.isEmpty(t.user_name)||e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(BEe,"insertTransaction");function HEe(e,t,r,n){let i=e.dbis[t].get(r);Xh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!IEe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];rz(e,c,d,r)}else rz(e,c,l,r)}a(HEe,"validateIndices");function rz(e,t,r,n){try{let s=!1,i=wEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||rn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Xh.deepStrictEqual(s,!0)}catch(s){Zh=!0,rn.error(s),console.error(s)}}a(rz,"validateIndex");function kEe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(kEe,"getHashDBI")});var lz=I((VMe,cz)=>{"use strict";var yT=require("path"),$a=require("fs-extra"),FEe=_C(),Ol=Q(),iz=wt(),mC=le(),ci=(H(),P($)),bT=ae(),GEe=require("properties-reader"),qEe=$s(),$Ee=uE(),VEe=Vr(),$Me=require("util"),KEe=VEe.searchByValue,YEe=pn(),WEe=gg(),zEe=Ot(),QEe=sz(),oz=js(),jEe=ST(),rp=new FEe("4.0.0"),az=[],ep,tp;async function JEe(){try{if(await jEe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),ep){let t=bT.changeExtension(ep,".bak");await $a.move(ep,t)}if(tp){let t=bT.changeExtension(tp,".bak");await $a.move(tp,t)}await oz.generateKeys()}else console.log("Using existing certificates."),oz.updateConfigCert(ep,tp,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(JEe,"generateNewKeys");async function XEe(){console.log("Updating HarperDB nodes."),Ol.info("Updating HarperDB nodes.");let e=[];try{let t=new qEe(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await KEe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!zEe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ci.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(bT.isEmptyOrZeroLength(n))return;let s=new $Ee(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await YEe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{WEe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(XEe,"updateNodes");async function ZEe(){let e=mC.get(ci.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(yT.join("config","settings.js"))){Ol.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),Ol.info(t);let r=yT.dirname(e),n=mC.get(ci.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=yT.join(n,"backup","4_0_0_upgrade_settings.bak"),i=yT.join(n,ci.HDB_CONFIG_FILE);try{Ol.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),$a.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Ol.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ol.info("Updating env variables with new settings values");let d=iz.initOldConfig(e);ep=d[ci.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],tp=d[ci.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],iz.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=bT.getPropsFilePath();$a.accessSync(o,$a.constants.F_OK|$a.constants.R_OK);let l=GEe(o).get(ci.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
112
- install_user = ${l}`;try{$a.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{mC.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{$a.removeSync(r),console.log(f),Ol.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(ZEe,"updateSettingsFile_4_0_0");rp.async_functions.push(ZEe);rp.async_functions.push(JEe);rp.async_functions.push(QEe);rp.async_functions.push(XEe);az.push(rp);cz.exports=az});var EC=I((YMe,_z)=>{"use strict";var Nl=ae(),ege=(H(),P($)),uz=Q(),{DATA_VERSION:tge,UPGRADE_VERSION:rge}=ege.UPGRADE_JSON_FIELD_NAMES_ENUM,dz=ZW(),OT=lz(),wl=new Map;dz&&dz.forEach(e=>{wl.set(e.version,e)});OT&&OT.forEach(e=>{wl.set(e.version,e)});OT&&OT.forEach(e=>{wl.set(e.version,e)});function nge(){return[...wl.keys()].sort(Nl.compareVersions)}a(nge,"getSortedVersions");function fz(e){let t=e[tge],r=e[rge];return Nl.isEmptyOrZeroLength(t)||Nl.isEmptyOrZeroLength(r)?(uz.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),uz.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."),[]):[...wl.keys()].sort(Nl.compareVersions).filter(function(n){return Nl.compareVersions(n,t)>0&&Nl.compareVersions(n,r)<=0})}a(fz,"getVersionsForUpgrade");function sge(e){return fz(e).length>0}a(sge,"hasUpgradesRequired");function ige(e){return Nl.isEmptyOrZeroLength(e)?null:wl.has(e)?wl.get(e):null}a(ige,"getDirectiveByVersion");_z.exports={getSortedVersions:nge,getDirectiveByVersion:ige,getVersionsForUpgrade:fz,hasUpgradesRequired:sge}});var wT=I((zMe,gz)=>{"use strict";var oge=require("util"),gC=require("chalk"),age=require("os"),pz=pn(),cge=Vr(),ns=(H(),P($)),mz=GW(),TC=DR(),{UpgradeObject:hz}=VW(),{forceDowngradePrompt:lge}=ST(),{packageJson:uge}=mt(),NT=Q(),Md=ae(),AC=ks(),dge=(Me(),P(st)),fge=EC(),_ge=oge.promisify(AC.setSchemaDataToGlobal),hge=cge.searchByValue,pge="info_id",mge="2.9.9",Ege="3.0.0";async function gge(e){let t=new mz.HdbInfoInsertObject(1,e,e),r=new TC.InsertObject(ns.OPERATIONS_ENUM.INSERT,ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ns.INFO_TABLE_HASH_ATTRIBUTE,[t]);return AC.setSchemaDataToGlobal(),pz.insert(r)}a(gge,"insertHdbInstallInfo");async function SC(e){let t,r=await Ez(),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 mz.HdbInfoInsertObject(i,e,e);let o=new TC.InsertObject(ns.OPERATIONS_ENUM.INSERT,ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ns.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await _ge(),pz.insert(o)}a(SC,"insertHdbUpgradeInfo");async function Ez(){let e=new TC.NoSQLSeachObject(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,pge,ns.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await hge(e))}catch(r){console.error(r)}return t}a(Ez,"getAllHdbInfoRecords");async function Sge(){let e=await Ez();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(Sge,"getLatestHdbInfoRecord");async function Tge(){NT.info("Checking if HDB software has been updated");try{let e=uge.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Sge(),r;if(Md.isEmpty(t))r=mge;else if(r=t.data_version_num,Md.compareVersions(r.toString(),e.toString())>0){if(!Md.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(gC.yellow(`This instance's data was last run on version ${r}`)),console.error(gC.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.${age.EOL}${ns.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Md.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(gC.yellow(`This instance's data was last run on version ${r}`)),await lge(new hz(r,e))?await SC(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(AC.setSchemaDataToGlobal(),Age(r),e.toString()===r.toString())return;let n=new hz(r,e);if(fge.hasUpgradesRequired(n))return n;Md.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await SC(n.upgrade_version),NT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw NT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),NT.fatal(e),e}}a(Tge,"getVersionUpdateInfo");function Age(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 ${ns.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in dge.databases.system))throw console.log(t),new Error(t);if(!Md.isEmpty(e)&&e<Ege)throw console.log(t),new Error(t)}a(Age,"checkIfInstallIsSupported");gz.exports={insertHdbInstallInfo:gge,insertHdbUpgradeInfo:SC,getVersionUpdateInfo:Tge}});var Rz=I((jMe,Az)=>{"use strict";var IT=require("joi"),{boolean:Rge,string:RC,number:yge}=IT.types(),Sz=require("fs-extra"),np=(H(),P($)),Tz=require("path"),bge=lt();Az.exports=Oge;function Oge(e){let t=RC.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=IT.object({[np.INSTALL_PROMPTS.ROOTPATH]:IT.custom(Nge),[np.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:IT.alternatives([yge.min(0),RC]).allow("null",null),[np.INSTALL_PROMPTS.TC_AGREEMENT]:RC.valid("yes","YES","Yes"),[np.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[np.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Rge});return bge.validateBySchema(e,r)}a(Oge,"installValidator");function Nge(e,t){if(Sz.existsSync(Tz.join(e,"system/hdb_user/data.mdb"))||Sz.existsSync(Tz.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Nge,"validateRootAvailable")});var bz=I((XMe,yz)=>{"use strict";var{mkdirpSync:wge,copySync:Ige}=require("fs-extra"),Va=require("path"),sp=(H(),P($)),{PACKAGE_ROOT:Cge}=mt(),bC=Q(),Pge=kn(),yC=Zi(),Dge=Et();yz.exports=Lge;async function Lge(e){bC.trace("Mounting HarperDB"),Il(e),Il(Va.join(e,"backup")),Il(Va.join(e,"keys")),Il(Va.join(e,"keys",sp.LICENSE_FILE_NAME)),Il(Va.join(e,"log")),Il(Va.join(e,"database")),Il(Va.join(e,"components")),Ige(Va.resolve(Cge,"./utility/install/README.md"),Va.join(e,"README.md")),await Mge()}a(Lge,"mountHdb");async function Mge(){let e=t_(),t=Object.keys(yC);for(let r=0;r<t.length;r++){let n=t[r],s=yC[n].hash_attribute;try{Dge.initSystemSchemaPaths(sp.SYSTEM_SCHEMA_NAME,n);let i=new e(sp.SYSTEM_SCHEMA_NAME,n,s);i.attributes=yC[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await Pge.createTable(n,i)}catch(i){throw bC.error(`issue creating environment for ${sp.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Mge,"createLMDBTables");function Il(e){wge(e,{mode:sp.HDB_FILE_PERMISSIONS}),bC.info(`Directory ${e} created`)}a(Il,"makeDirectory")});var Hz=I((rve,Bz)=>{"use strict";var NC=require("os"),Cz=require("inquirer"),Ds=require("fs-extra"),vge=require("properties-reader"),Pl=require("chalk"),$i=require("path"),Uge=require("human-readable-ids").hri,xge=require("ora"),Bge=require("yaml"),ur=Q(),Ka=le(),ip=ae(),PT=ec(),Pz=wT(),{packageJson:Dz}=mt(),_e=(H(),P($)),{CONFIG_PARAM_MAP:eve,CONFIG_PARAMS:Pt}=_e,Hge=Rz(),kge=bz(),wC=wt(),Fge=qn(),Gge=a_(),qge=aC(),$ge=ks(),Vge=require("util").promisify,Kge=Vge($ge.setSchemaDataToGlobal),Oz=js(),Cl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Br=a(e=>Pl.magenta.bold(e),"HDB_PROMPT_MSG"),Yge="https://harperdb.io/legal/end-user-license-agreement",Ya=NC.EOL,Lo="",Wge="yes",Nz="Starting HarperDB install...",wz="HarperDB installation was successful.",Iz="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",zge="An out of date version of HarperDB is already installed.",OC="It appears that HarperDB is already installed. Exiting install...",Qge="Aborting install",tve=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])$/),jge=new RegExp(/^[^\s.,*>]+$/),Jge=NC.homedir(),Xge=$i.join(Jge,_e.HDB_ROOT_DIR_NAME),Zge="HDB_ADMIN",eSe="CLUSTER_USER",tSe="dev",rSe="localhost",CT={[Pt.HTTP_CORS]:!0,[Pt.HTTP_CORSACCESSLIST]:["*"],[Pt.HTTP_PORT]:9926,[Pt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Pt.THREADS_COUNT]:1,[Pt.THREADS_DEBUG]:!0,[Pt.LOGGING_STDSTREAMS]:!0,[Pt.LOGGING_LEVEL]:"info",[Pt.OPERATIONSAPI_NETWORK_PORT]:9925,[Pt.LOCALSTUDIO_ENABLED]:!0},xr={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:"},Wa=PT([_e.INSTALL_PROMPTS.HDB_CONFIG]),qi,Lz=!1,IC=!1,Mz=!1;Bz.exports={install:vz,updateConfigEnv:_Se,setIgnoreExisting:hSe};vz.createSuperUser=xz;async function vz(){console.log(Br(Ya+Nz+Ya)),ur.notify(Nz);let e;Wa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&(e=nSe());let t=iSe();Object.assign(t,e),t[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&t[_e.INSTALL_PROMPTS.ROOTPATH]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Mz=!0,t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Hge(t);if(r)throw r.message;await oSe(),await aSe(t);let n=await sSe(t);qi=n[_e.INSTALL_PROMPTS.ROOTPATH],Wa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&$i.dirname(Wa[_e.INSTALL_PROMPTS.HDB_CONFIG])===qi&&(Lz=!0),!IC&&!Wa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&await Ds.pathExists($i.join(qi,_e.HDB_CONFIG_FILE))&&(console.error(OC),process.exit());let s=xge({prefixText:Br("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),ip.isEmpty(qi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ka.setHdbBasePath(qi),await kge(qi),await cSe(),await lSe(n),ur.initLogSettings(!0),await xz(n),await dSe(n),await Oz.updateConfigCert(),await Oz.generateCertsKeys(),await fSe(),qge(),s.stop(),console.log(Br(Ya+wz+Ya)),ur.notify(wz)}a(vz,"install");function nSe(){let e=Bge.parseDocument(Ds.readFileSync(Wa[_e.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=wC.flattenConfig(e.toJSON());return t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(nSe,"getConfigFromFile");async function sSe(e){ur.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Cl,when:Mo(e[_e.INSTALL_PROMPTS.ROOTPATH],xr.DESTINATION),name:_e.INSTALL_PROMPTS.ROOTPATH,prefix:Lo,default:Xge,validate:a(async s=>Ps(s)?Ps(s):await Ds.pathExists($i.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Br(xr.DESTINATION)},{type:"input",transformer:Cl,when:Mo(e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],xr.HDB_USERNAME),name:_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lo,default:Zge,validate:a(s=>Ps(s)?Ps(s):(t=s,!0),"validate"),message:Br(xr.HDB_USERNAME)},{type:"password",when:Mo(e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],xr.HDB_PASS),name:_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lo,validate:a(s=>Ps(s)?Ps(s):!0,"validate"),message:Br(xr.HDB_PASS)},{type:"input",transformer:Cl,when:Mo(e[_e.INSTALL_PROMPTS.DEFAULTS_MODE],xr.DEFAULTS_MODE),name:_e.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Lo,default:tSe,validate:a(s=>Ps(s)?Ps(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Br(xr.DEFAULTS_MODE)}];if(Mz||r.push({type:"input",name:_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Cl,when:Mo(e[_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME],xr.REPLICATION_HOSTNAME),prefix:Lo,default:rSe,message:Br(xr.REPLICATION_HOSTNAME)}),ip.autoCastBoolean(e[_e.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Cl,when:Mo(e[_e.INSTALL_PROMPTS.CLUSTERING_NODENAME],xr.NODE_NAME),name:_e.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lo,default:Uge.random(),validate:a(i=>jge.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Br(xr.NODE_NAME)},{type:"input",transformer:Cl,when:Mo(e[_e.INSTALL_PROMPTS.CLUSTERING_USER],xr.CLUSTER_USERNAME),name:_e.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lo,default:eSe,validate:a(i=>Ps(i)?Ps(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Br(xr.CLUSTER_USERNAME)},{type:"password",when:Mo(e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD],xr.CLUSTER_PASS),name:_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lo,validate:a(i=>Ps(i)?Ps(i):!0,"validate"),message:Br(xr.CLUSTER_PASS)}];r.push(...s)}let n=await Cz.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(sSe,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Br(t)} ${Pl.gray("[hidden]")}`),ur.trace(`${Br(t)} [hidden]`)):(console.log(`${Br(t)} ${e}`),ur.trace(`${Br(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function Ps(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ps,"checkForEmptyValue");function iSe(){let e=Object.keys(_e.INSTALL_PROMPTS),t=PT(e),r=PT(Object.keys(_e.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=_e.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(iSe,"checkForPromptOverride");async function oSe(){ur.trace("Checking for existing install.");let e=ip.getPropsFilePath(),t=await Ds.pathExists(e),r;if(t){ur.trace(`Install found an existing boot prop file at:${e}`);let n=vge(e),s=wC.getConfigValue(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ds.pathExists(s)}if(!t&&ip.noBootFile()&&(r=!0),r&&!IC){if(ur.trace(`Install found existing HDB config at:${e}`),await Pz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Dz.version}. Exiting install...`;console.log(Ya+Pl.magenta.bold(zge)),console.log(Pl.magenta.bold(s)),ur.error(s)}else console.log(Ya+Pl.magenta.bold(OC)),ur.error(OC);process.exit(0)}}a(oSe,"checkForExistingInstall");async function aSe(e){ur.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Yge}${Ya}and can be viewed by typing or copying and pasting the URL into your web browser.${Ya}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Lo,transformer:Cl,when:Mo(e[_e.INSTALL_PROMPTS.TC_AGREEMENT],t),name:_e.INSTALL_PROMPTS.TC_AGREEMENT,message:Br(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Pl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Cz.prompt([r]);n[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&n[_e.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Wge&&(console.log(Pl.yellow(Iz)),ur.error(Iz),process.exit(0))}a(aSe,"termsAgreement");async function cSe(){let e=$i.join(qi,_e.HDB_CONFIG_FILE),t;try{t=NC.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
113
- install_user = ${t}`,n=ip.getHomeDir(),s=$i.join(n,_e.HDB_HOME_DIR_NAME),i=$i.join(s,_e.LICENSE_KEY_DIR_NAME);try{Ds.mkdirpSync(s,{mode:_e.HDB_FILE_PERMISSIONS}),Ds.mkdirpSync(i,{mode:_e.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${_e.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=$i.join(s,_e.BOOT_PROPS_FILE_NAME);try{await Ds.writeFile(o,r)}catch(c){throw ur.error(`There was an error creating the boot file at path: ${o}`),c}Ka.setProperty(_e.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ka.setProperty(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ka.setProperty(Ka.BOOT_PROPS_FILE_PATH,o)}}a(cSe,"createBootPropertiesFile");async function lSe(e){ur.trace("Creating HarperDB config file");let t=PT(Object.keys(_e.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[_e.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in CT){if(r===Pt.HTTP_PORT&&t[Pt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??CT[r],t[Pt.HTTP_SECUREPORT]=null;continue}else if(r===Pt.HTTP_PORT)continue;if(r===Pt.OPERATIONSAPI_NETWORK_PORT&&t[Pt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??CT[r],t[Pt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Pt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=CT[r])}}else t[Pt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Pt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Pt.HTTP_PORT.toLowerCase()]&&(t[Pt.HTTP_SECUREPORT]=null);try{Wa[_e.INSTALL_PROMPTS.HDB_CONFIG]||wC.createConfigFile(t),Ka.initSync()}catch(r){uSe(r)}}a(lSe,"createConfigFile");function uSe(e){ur.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Qge);let t=$i.resolve(Ka.get(Ka.BOOT_PROPS_FILE_PATH),"../");t&&Ds.removeSync(t),qi&&(Lz?Ds.readdirSync(qi,{withFileTypes:!0}).forEach(n=>{let s=$i.join(n.path,n.name);s!==Wa[_e.INSTALL_PROMPTS.HDB_CONFIG]&&Ds.removeSync(s)}):Ds.removeSync(qi)),process.exit(1)}a(uSe,"rollbackInstall");async function Uz(e,t){ur.trace("Creating admin user"),await Kge();let r;try{r=await Gge.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 Fge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(Uz,"createAdminUser");async function xz(e){ur.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Uz(t,r),delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(xz,"createSuperUser");async function dSe(e){ur.trace("Creating Cluster user.");let t;e[_e.INSTALL_PROMPTS.CLUSTERING_USER]&&e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[_e.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Uz({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[_e.INSTALL_PROMPTS.CLUSTERING_USER],delete e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(dSe,"createClusterUser");async function fSe(){let e=Dz.version;if(e)await Pz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(fSe,"insertHdbVersionInfo");function _Se(e){Wa[_e.INSTALL_PROMPTS.HDB_CONFIG]=e}a(_Se,"updateConfigEnv");function hSe(e){IC=e}a(hSe,"setIgnoreExisting")});var Gz=I((sve,Fz)=>{"use strict";var CC=ae(),ss=Q(),kz=EC();Fz.exports={processDirectives:pSe};async function pSe(e){console.log("Starting upgrade process...");let t=kz.getVersionsForUpgrade(e),r=gSe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ss.notify(c),console.log(c);let l=[],u=[];try{l=mSe(o.sync_functions)}catch(f){throw ss.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await ESe(o.async_functions)}catch(f){throw ss.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(pSe,"processDirectives");function mSe(e){if(CC.isEmptyOrZeroLength(e))return ss.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ss.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ss.info(`Running function ${r.name}`),!(r instanceof Function)){ss.info("Variable being processed is not a function");continue}let n=r();ss.info(n),t.push(n)}return t}a(mSe,"runSyncFunctions");async function ESe(e){if(CC.isEmptyOrZeroLength(e))return ss.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ss.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ss.info(`Running function ${s.name}`),!(s instanceof Function)){ss.info("Variable being processed is not a function");continue}let i=await s();ss.info(i),t.push(i)}return t}a(ESe,"runAsyncFunctions");function gSe(e){if(CC.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=kz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(gSe,"getUpgradeDirectivesToInstall")});var zz=I((ove,Wz)=>{"use strict";var DT=le();DT.initSync();var Kz=require("chalk"),qz=require("fs-extra"),Uo=Q(),vo=(H(),P($)),SSe=Gz(),PC=ae(),Yz=wT(),TSe=ST(),$z=aA(),ASe=ks(),{packageJson:Vz}=mt(),RSe=require("util").promisify,ySe=RSe(ASe.setSchemaDataToGlobal),DC,{UPGRADE_VERSION:LC}=vo.UPGRADE_JSON_FIELD_NAMES_ENUM;Wz.exports={upgrade:bSe};async function bSe(e){await ySe(),DC===void 0&&(DC=th()),qz.existsSync(DT.get(DT.BOOT_PROPS_FILE_PATH))||(op("The hdb_boot_properties file was not found. Please install HDB.",vo.LOG_LEVELS.ERROR),process.exit(1)),qz.existsSync(DT.get(vo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(op("The hdb settings file was not found. Please make sure HDB is installed.",vo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Yz.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),op(`This version of HarperDB is ${Vz.version}`,vo.LOG_LEVELS.INFO);let r=t[LC]??Vz.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vo.HDB_SUPPORT_ADDRESS}`),Uo.notify("Missing new version field from upgrade info object"),process.exit(1)),await OSe();let n,s=0;try{n=await TSe.forceUpdatePrompt(t)}catch(i){Uo.error("There was an error when prompting user about upgrade."),Uo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Uo.info(`Starting upgrade to version ${r}`),await NSe(t),op(`HarperDB was successfully upgraded to version ${t[LC]}`,vo.LOG_LEVELS.INFO)}a(bSe,"upgrade");async function OSe(){let e=!1,t=await $z.findPs(vo.HDB_PROC_NAME);if(PC.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await $z.findPs("hdb_express");PC.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await DC.list();PC.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Kz.red(r)),Uo.error(r),process.exit(1)}}a(OSe,"checkIfRunning");async function NSe(e){try{await SSe.processDirectives(e)}catch(t){throw op("There was an error during the data upgrade. Please check the logs.",vo.LOG_LEVELS.ERROR),t}try{await Yz.insertHdbUpgradeInfo(e[LC])}catch(t){Uo.error("Error updating the 'hdb_info' system table."),Uo.error(t)}}a(NSe,"runUpgrade");function op(e,t=void 0){t||(t=Uo.info),Uo[t](e),console.log(Kz.magenta(e))}a(op,"printToLogAndConsole")});var Zz=I((cve,Xz)=>{"use strict";var{promises:vd,createReadStream:wSe,createWriteStream:ISe}=require("fs"),{createGzip:CSe}=require("zlib"),{promisify:PSe}=require("util"),{pipeline:DSe}=require("stream"),LSe=PSe(DSe),vC=require("path"),Qa=le();Qa.initSync();var za=Q(),{CONFIG_PARAMS:Ud,ITC_EVENT_TYPES:MSe}=(H(),P($)),{onMessageFromWorkers:vSe}=tt(),{convertToMS:USe}=ae(),{onStorageReclamation:xSe}=(YS(),P(CY)),BSe=6e4,HSe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",kSe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",MC,jz;Xz.exports=Jz;vSe(e=>{e.type===MSe.RESTART&&(Qa.initSync(!0),clearInterval(jz),Qa.get(Ud.LOGGING_ROTATION_ENABLED)&&Jz())});async function Jz(){try{let e=za.getLogFilePath(),t=Qa.get(Ud.LOGGING_ROTATION_MAXSIZE),r=Qa.get(Ud.LOGGING_ROTATION_INTERVAL),n=Qa.get(Ud.LOGGING_ROTATION_RETENTION),s=0;if(xSe(e,l=>{s=l},!0),!t&&!r){za.error(HSe);return}let i=Qa.get(Ud.LOGGING_ROTATION_PATH);if(!i){za.error(kSe);return}let o;if(t){let l=t.slice(-1),u=t.slice(0,-1);l==="G"?o=u*1e9:l==="M"?o=u*1e6:o=u*1e3}let c;if(r){let l=r.slice(-1),u=r.slice(0,-1);l==="D"?c=u*1440:l==="H"?c=u*60:c=u}MC=Date.now()/6e4,za.trace("Log rotate enabled, maxSize:",t,"interval:",r),jz=setInterval(async()=>{if(o){let l;l=await vd.stat(e),l.size>=o&&await Qz(e,i)}if(c&&Date.now()/6e4-MC>=c&&(await Qz(e,i),MC=Date.now()/6e4),n||s){let l=USe(n??"1M")/(1+s);s=0;let u=await vd.readdir(i);for(let f of u)try{let d=await vd.stat(vC.join(i,f));Date.now()-d.mtimeMs>l&&await vd.unlink(vC.join(i,f))}catch(d){za.error("Error trying to remove log",f,d)}}},BSe).unref()}catch(e){za.error(e)}}a(Jz,"logRotator");async function Qz(e,t){let r=Qa.get(Ud.LOGGING_ROTATION_COMPRESS),n=vC.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);await vd.rename(e,n),r&&(e=n,n+=".gz",await LSe(wSe(e),CSe(),ISe(n)),await vd.unlink(e)),za.closeLogFile(),za.notify(`hdb.log rotated, old log moved to ${n}`)}a(Qz,"moveLogFile")});var aQ=I(oQ=>{"use strict";var ge=le();ge.initSync();rd();var Ft=(H(),P($)),{CONFIG_PARAMS:Ie}=Ft,is=Q(),xo=require("fs-extra"),Bo=require("path"),FSe=aC(),{install:GSe}=Hz(),UC=require("chalk"),{packageJson:qSe,PACKAGE_ROOT:$Se}=mt(),Ho=ae(),xC=wt(),tQ=ec(),eQ=Ng(),VSe=zz(),KSe=Zz(),{compactOnStart:YSe}=(MN(),P(LN)),WSe=require("minimist"),zSe=js(),{startHTTPThreads:QSe}=(rI(),P(hK)),jSe=wT(),{isMainThread:JSe}=require("worker_threads"),uve=Zi(),dve=no(),fve=Ny(),_ve=t_(),LT=(H(),P($)),Vi,xd,rQ=!1,XSe="Upgrade complete. Starting HarperDB.",ZSe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",eTe="HarperDB not found, starting install process.",tTe="There was an error during install, check install_log.log for more details. Exiting.",rTe="HarperDB successfully started.";function nTe(){if(!rQ){let e=a(()=>{xo.removeSync(Bo.join(ge.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(nTe,"addExitListeners");async function nQ(e=!1,t=!1){if(console.log(UC.magenta("Starting HarperDB...")),is.suppressLogging?.(()=>{console.log(UC.magenta(""+xo.readFileSync(Bo.join($Se,"utility/install/ascii_logo.txt"))))}),await iQ()===!1){console.log(eTe);try{await GSe()}catch(l){console.error(tTe,l),is.error(l),process.exit(1)}}if(!e){let l=tQ(Object.keys(Ft.CONFIG_PARAM_MAP),!0);!Ho.isEmpty(l)&&!Ho.isEmptyOrZeroLength(Object.keys(l))&&xC.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=xd?.service==="clustering";xd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Bo.join(ge.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE),i=cTe(s);i&&i!==1&&lTe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Vi===void 0&&(Vi=th()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ge.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await eQ.generateNatsConfig(),await Vi.startClusteringProcesses(!0),process.exit()),nTe(),await xo.writeFile(Bo.join(ge.get(LT.CONFIG_PARAMS.ROOTPATH),LT.HDB_PID_FILE),`${process.pid}`),is.info("HarperDB PID",process.pid);let o;try{let l=await jSe.getVersionUpdateInfo();l!==void 0&&(o=l[Ft.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await VSe.upgrade(l),console.log(XSe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),is.error(l)):(console.error(ZSe,l),is.error(l)),process.exit(1)}FSe(),oTe(),await zSe.reviewSelfSignedCert(),Ho.autoCastBoolean(ge.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&JSe&&await eQ.generateNatsConfig(t)}a(nQ,"initialize");async function sTe(e=!1){try{xd=WSe(process.argv),xd.ROOTPATH&&xC.updateConfigObject("settings_path",Bo.join(xd.ROOTPATH,Ft.HDB_CONFIG_FILE)),await nQ(e,!0),ge.get(Ft.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await YSe();let t=process.env.IS_SCRIPTED_SERVICE&&!xd.service;Ho.autoCastBoolean(ge.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Vi.startClusteringProcesses(),await Vi.startClusteringThreads()),await QSe(process.env.DEV_MODE?1:ge.get(LT.CONFIG_PARAMS.THREADS_COUNT)??ge.get(LT.CONFIG_PARAMS.THREADS)),ge.get(Ft.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await KSe(),t||sQ()}catch(t){console.error(t),is.error(t),process.exit(1)}}a(sTe,"main");function sQ(){is.suppressLogging(()=>{console.log(UC.magenta(`HarperDB ${qSe.version} successfully started`))}),is.notify(rTe)}a(sQ,"started");async function iTe(e=!0){rQ=!e;try{Vi===void 0&&(Vi=th()),Vi.enterPM2Mode(),await nQ(),Ho.autoCastBoolean(ge.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Vi.startClusteringProcesses(),await Vi.startService(Ft.PROCESS_DESCRIPTORS.HDB),sQ(),e&&process.exit(0)}catch(t){console.error(t),is.error(t),process.exit(1)}}a(iTe,"launch");function oTe(){let e=Bo.join(ge.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.LICENSE_KEY_DIR_NAME,Ft.LICENSE_FILE_NAME),t=Bo.join(e,Ft.LICENSE_FILE_NAME),r=Bo.join(e,Ft.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=tQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ho.isEmpty(n)||Ho.isEmpty(s))return;xo.mkdirpSync(e),xo.writeFileSync(r,n),xo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),is.error(s)}}a(oTe,"writeLicenseFromVars");Object.assign(oQ,{launch:iTe,main:sTe,isHdbInstalled:iQ,startupLog:aTe});async function iQ(){try{await xo.stat(Ho.getPropsFilePath()),await xo.stat(ge.get(Ft.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ho.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw is.error(`Error checking for HDB install - ${e}`),e}return!0}a(iQ,"isHdbInstalled");function aTe(e){let r=a(_=>_.padEnd(20),"pad"),n=`
114
- `;ge.get(Ie.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ge.get(Ie.REPLICATION_HOSTNAME)}
115
- `),ge.get(Ie.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ge.get(Ie.REPLICATION_URL)}
116
- `),n+=`${r("Worker Threads:")}${ge.get(Ie.THREADS_COUNT)}
117
- `,n+=`${r("Root Path:")}${ge.get(Ie.ROOTPATH)}
118
- `,ge.get(Ie.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=ge.get(Ie.THREADS_DEBUG_PORT)?`, TCP: ${ge.get(Ie.THREADS_DEBUG_PORT)}
111
+ Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade started for transaction logs"),await rz(EC,!0,e)),Po.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Zh?", but errors occurred":"")}a(vEe,"reindexUpgrade");async function rz(e,t,r){let n=await Fi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Do.join(e,o.toString());if(o===".DS_Store")continue;let l=await Fi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Fi.statSync(Do.join(c,d)).isDirectory())try{await UEe(o,d,t),tn.info(`Reindexing started for ${o}.${d}`),Po.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await BEe(o,d,c,t,r),tn.info(`Reindexing completed for ${o}.${d}`),Po.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Zh=!0,h.schema_path=c,h.table_name=d,Po.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Po.error(h),tn.error(h),console.error(h)}}}if(!Zh)try{await Fi.rm(RT,{recursive:!0})}catch{}}a(rz,"processTables");async function UEe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Do.join(RT,s);await Fi.ensureDir(RT),await Fi.writeFile(i,""),tn=LEe({level:"debug",formatters:{bindings(){}}},i)}a(UEe,"initPinoLogger");var xEe=20;async function BEe(e,t,r,n,s){let i;try{i=await ts.openEnvironment(r,t,n)}catch(E){if(E.message==="MDB_INVALID: File is not an LMDB file"){Po.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),tn.error(E);return}throw E}let o=FEe(i.dbis),c=ts.openDBI(i,o),l=Object.keys(i.dbis),u=ts.statDBI(i,o);tn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new DEe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await ts.createEnvironment(r,t,!1);ts.createDBI(d,o,!1,!0);let h=[];try{for(let E of c.getRange({start:!1}))E.value={...E.value},h.push(E),n||e==="system"&&(t==="hdb_schema"&&(E.key=E.key.toString(),E.value.name=E.value.name.toString()),t==="hdb_table"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.name=E.value.name.toString()),t==="hdb_attribute"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.table=E.value.table.toString(),E.value.attribute=E.value.attribute.toString())),h.length>xEe&&await _();await _()}catch(E){throw Zh=!0,tn.error(E),E}async function _(){let E,A=h.map(({value:v})=>v);n?E=await Promise.all(A.map(v=>HEe(d,v))):E=await wEe(d,o,l.filter(v=>v!=="__blob__"),A,!1);for(let v=0,F=h.length;v<F;v++){let{key:G,value:Y}=h[v];tn.info(`Record hash value: ${G} hash: ${o}`);let te;n?te=E[v]:te=E.written_hashes.indexOf(G)>-1,Xh(te,!0),kEe(d,o,Y[o],n),tn.info(`Insert success, written hashes: ${E.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Po.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),tn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let p=ts.statDBI(i,o),S=ts.statDBI(d,o);if(tn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${S.entryCount}`),Xh.deepStrictEqual(p.entryCount,S.entryCount),await ts.closeEnvironment(i),await ts.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let E=Do.join(r,t),A=Do.join(E,"data.mdb"),O=Do.join(E,"lock.mdb");await Fi.unlink(A),await Fi.unlink(O),await Fi.rmdir(E),tn.info(`Deleted old environment files from schema folder: ${A}, ${O}`)}let g=await ts.openEnvironment(r,t),R=ts.statDBI(g,o);tn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(R)}`),Xh.deepStrictEqual(R.entryCount,S.entryCount),await ts.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(BEe,"processTable");async function HEe(e,t){ts.initializeDBIs(e,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qa.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),PEe.isEmpty(t.user_name)||e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(HEe,"insertTransaction");function kEe(e,t,r,n){let i=e.dbis[t].get(r);Xh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!CEe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];nz(e,c,d,r)}else nz(e,c,l,r)}a(kEe,"validateIndices");function nz(e,t,r,n){try{let s=!1,i=IEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||tn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Xh.deepStrictEqual(s,!0)}catch(s){Zh=!0,tn.error(s),console.error(s)}}a(nz,"validateIndex");function FEe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(FEe,"getHashDBI")});var uz=I((KMe,lz)=>{"use strict";var yT=require("path"),$a=require("fs-extra"),GEe=pC(),bl=j(),oz=It(),gC=ce(),ai=(H(),D(q)),bT=oe(),qEe=require("properties-reader"),$Ee=qs(),VEe=uE(),KEe=$r(),VMe=require("util"),YEe=KEe.searchByValue,WEe=hn(),zEe=gg(),QEe=Nt(),jEe=iz(),az=Qs(),JEe=ST(),rp=new GEe("4.0.0"),cz=[],ep,tp;async function XEe(){try{if(await JEe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),ep){let t=bT.changeExtension(ep,".bak");await $a.move(ep,t)}if(tp){let t=bT.changeExtension(tp,".bak");await $a.move(tp,t)}await az.generateKeys()}else console.log("Using existing certificates."),az.updateConfigCert(ep,tp,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(XEe,"generateNewKeys");async function ZEe(){console.log("Updating HarperDB nodes."),bl.info("Updating HarperDB nodes.");let e=[];try{let t=new $Ee(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await YEe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!QEe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ai.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(bT.isEmptyOrZeroLength(n))return;let s=new VEe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await WEe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{zEe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(ZEe,"updateNodes");async function ege(){let e=gC.get(ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(yT.join("config","settings.js"))){bl.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),bl.info(t);let r=yT.dirname(e),n=gC.get(ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=yT.join(n,"backup","4_0_0_upgrade_settings.bak"),i=yT.join(n,ai.HDB_CONFIG_FILE);try{bl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),$a.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{bl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),bl.info("Updating env variables with new settings values");let d=oz.initOldConfig(e);ep=d[ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],tp=d[ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],oz.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=bT.getPropsFilePath();$a.accessSync(o,$a.constants.F_OK|$a.constants.R_OK);let l=qEe(o).get(ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
112
+ install_user = ${l}`;try{$a.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{gC.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{$a.removeSync(r),console.log(f),bl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(ege,"updateSettingsFile_4_0_0");rp.async_functions.push(ege);rp.async_functions.push(XEe);rp.async_functions.push(jEe);rp.async_functions.push(ZEe);cz.push(rp);lz.exports=cz});var SC=I((WMe,hz)=>{"use strict";var Ol=oe(),tge=(H(),D(q)),dz=j(),{DATA_VERSION:rge,UPGRADE_VERSION:nge}=tge.UPGRADE_JSON_FIELD_NAMES_ENUM,fz=ez(),OT=uz(),Nl=new Map;fz&&fz.forEach(e=>{Nl.set(e.version,e)});OT&&OT.forEach(e=>{Nl.set(e.version,e)});OT&&OT.forEach(e=>{Nl.set(e.version,e)});function sge(){return[...Nl.keys()].sort(Ol.compareVersions)}a(sge,"getSortedVersions");function _z(e){let t=e[rge],r=e[nge];return Ol.isEmptyOrZeroLength(t)||Ol.isEmptyOrZeroLength(r)?(dz.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),dz.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."),[]):[...Nl.keys()].sort(Ol.compareVersions).filter(function(n){return Ol.compareVersions(n,t)>0&&Ol.compareVersions(n,r)<=0})}a(_z,"getVersionsForUpgrade");function ige(e){return _z(e).length>0}a(ige,"hasUpgradesRequired");function oge(e){return Ol.isEmptyOrZeroLength(e)?null:Nl.has(e)?Nl.get(e):null}a(oge,"getDirectiveByVersion");hz.exports={getSortedVersions:sge,getDirectiveByVersion:oge,getVersionsForUpgrade:_z,hasUpgradesRequired:ige}});var wT=I((QMe,Sz)=>{"use strict";var age=require("util"),TC=require("chalk"),cge=require("os"),mz=hn(),lge=$r(),rs=(H(),D(q)),Ez=qW(),RC=LR(),{UpgradeObject:pz}=KW(),{forceDowngradePrompt:uge}=ST(),{packageJson:dge}=Et(),NT=j(),Md=oe(),yC=Hs(),fge=(Me(),D(st)),_ge=SC(),hge=age.promisify(yC.setSchemaDataToGlobal),pge=lge.searchByValue,mge="info_id",Ege="2.9.9",gge="3.0.0";async function Sge(e){let t=new Ez.HdbInfoInsertObject(1,e,e),r=new RC.InsertObject(rs.OPERATIONS_ENUM.INSERT,rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return yC.setSchemaDataToGlobal(),mz.insert(r)}a(Sge,"insertHdbInstallInfo");async function AC(e){let t,r=await gz(),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 Ez.HdbInfoInsertObject(i,e,e);let o=new RC.InsertObject(rs.OPERATIONS_ENUM.INSERT,rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await hge(),mz.insert(o)}a(AC,"insertHdbUpgradeInfo");async function gz(){let e=new RC.NoSQLSeachObject(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mge,rs.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await pge(e))}catch(r){console.error(r)}return t}a(gz,"getAllHdbInfoRecords");async function Tge(){let e=await gz();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(Tge,"getLatestHdbInfoRecord");async function Age(){NT.info("Checking if HDB software has been updated");try{let e=dge.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Tge(),r;if(Md.isEmpty(t))r=Ege;else if(r=t.data_version_num,Md.compareVersions(r.toString(),e.toString())>0){if(!Md.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(TC.yellow(`This instance's data was last run on version ${r}`)),console.error(TC.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.${cge.EOL}${rs.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Md.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(TC.yellow(`This instance's data was last run on version ${r}`)),await uge(new pz(r,e))?await AC(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(yC.setSchemaDataToGlobal(),Rge(r),e.toString()===r.toString())return;let n=new pz(r,e);if(_ge.hasUpgradesRequired(n))return n;Md.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await AC(n.upgrade_version),NT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw NT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),NT.fatal(e),e}}a(Age,"getVersionUpdateInfo");function Rge(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 ${rs.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in fge.databases.system))throw console.log(t),new Error(t);if(!Md.isEmpty(e)&&e<gge)throw console.log(t),new Error(t)}a(Rge,"checkIfInstallIsSupported");Sz.exports={insertHdbInstallInfo:Sge,insertHdbUpgradeInfo:AC,getVersionUpdateInfo:Age}});var yz=I((JMe,Rz)=>{"use strict";var IT=require("joi"),{boolean:yge,string:bC,number:bge}=IT.types(),Tz=require("fs-extra"),np=(H(),D(q)),Az=require("path"),Oge=dt();Rz.exports=Nge;function Nge(e){let t=bC.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=IT.object({[np.INSTALL_PROMPTS.ROOTPATH]:IT.custom(wge),[np.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:IT.alternatives([bge.min(0),bC]).allow("null",null),[np.INSTALL_PROMPTS.TC_AGREEMENT]:bC.valid("yes","YES","Yes"),[np.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[np.INSTALL_PROMPTS.CLUSTERING_ENABLED]:yge});return Oge.validateBySchema(e,r)}a(Nge,"installValidator");function wge(e,t){if(Tz.existsSync(Az.join(e,"system/hdb_user/data.mdb"))||Tz.existsSync(Az.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(wge,"validateRootAvailable")});var Oz=I((ZMe,bz)=>{"use strict";var{mkdirpSync:Ige,copySync:Cge}=require("fs-extra"),Va=require("path"),sp=(H(),D(q)),{PACKAGE_ROOT:Pge}=Et(),NC=j(),Dge=Hn(),OC=Zi(),Lge=gt();bz.exports=Mge;async function Mge(e){NC.trace("Mounting HarperDB"),wl(e),wl(Va.join(e,"backup")),wl(Va.join(e,"keys")),wl(Va.join(e,"keys",sp.LICENSE_FILE_NAME)),wl(Va.join(e,"log")),wl(Va.join(e,"database")),wl(Va.join(e,"components")),Cge(Va.resolve(Pge,"./utility/install/README.md"),Va.join(e,"README.md")),await vge()}a(Mge,"mountHdb");async function vge(){let e=t_(),t=Object.keys(OC);for(let r=0;r<t.length;r++){let n=t[r],s=OC[n].hash_attribute;try{Lge.initSystemSchemaPaths(sp.SYSTEM_SCHEMA_NAME,n);let i=new e(sp.SYSTEM_SCHEMA_NAME,n,s);i.attributes=OC[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await Dge.createTable(n,i)}catch(i){throw NC.error(`issue creating environment for ${sp.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(vge,"createLMDBTables");function wl(e){Ige(e,{mode:sp.HDB_FILE_PERMISSIONS}),NC.info(`Directory ${e} created`)}a(wl,"makeDirectory")});var kz=I((nve,Hz)=>{"use strict";var IC=require("os"),Pz=require("inquirer"),Ps=require("fs-extra"),Uge=require("properties-reader"),Cl=require("chalk"),qi=require("path"),xge=require("human-readable-ids").hri,Bge=require("ora"),Hge=require("yaml"),fr=j(),Ka=ce(),ip=oe(),PT=ec(),Dz=wT(),{packageJson:Lz}=Et(),de=(H(),D(q)),{CONFIG_PARAM_MAP:tve,CONFIG_PARAMS:Dt}=de,kge=yz(),Fge=Oz(),CC=It(),Gge=Gn(),qge=a_(),$ge=lC(),Vge=Hs(),Kge=require("util").promisify,Yge=Kge(Vge.setSchemaDataToGlobal),Nz=Qs(),Il=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),xr=a(e=>Cl.magenta.bold(e),"HDB_PROMPT_MSG"),Wge="https://harperdb.io/legal/end-user-license-agreement",Ya=IC.EOL,Lo="",zge="yes",wz="Starting HarperDB install...",Iz="HarperDB installation was successful.",Cz="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Qge="An out of date version of HarperDB is already installed.",wC="It appears that HarperDB is already installed. Exiting install...",jge="Aborting install",rve=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])$/),Jge=new RegExp(/^[^\s.,*>]+$/),Xge=IC.homedir(),Zge=qi.join(Xge,de.HDB_ROOT_DIR_NAME),eSe="HDB_ADMIN",tSe="CLUSTER_USER",rSe="dev",nSe="localhost",CT={[Dt.HTTP_CORS]:!0,[Dt.HTTP_CORSACCESSLIST]:["*"],[Dt.HTTP_PORT]:9926,[Dt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Dt.THREADS_COUNT]:1,[Dt.THREADS_DEBUG]:!0,[Dt.LOGGING_STDSTREAMS]:!0,[Dt.LOGGING_LEVEL]:"info",[Dt.OPERATIONSAPI_NETWORK_PORT]:9925,[Dt.LOCALSTUDIO_ENABLED]:!0},Ur={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:"},Wa=PT([de.INSTALL_PROMPTS.HDB_CONFIG]),Gi,Mz=!1,PC=!1,vz=!1;Hz.exports={install:Uz,updateConfigEnv:hSe,setIgnoreExisting:pSe};Uz.createSuperUser=Bz;async function Uz(){console.log(xr(Ya+wz+Ya)),fr.notify(wz);let e;Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&(e=sSe());let t=oSe();Object.assign(t,e),t[de.INSTALL_PROMPTS.TC_AGREEMENT]&&t[de.INSTALL_PROMPTS.ROOTPATH]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[de.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(vz=!0,t[de.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=kge(t);if(r)throw r.message;await aSe(),await cSe(t);let n=await iSe(t);Gi=n[de.INSTALL_PROMPTS.ROOTPATH],Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&qi.dirname(Wa[de.INSTALL_PROMPTS.HDB_CONFIG])===Gi&&(Mz=!0),!PC&&!Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&await Ps.pathExists(qi.join(Gi,de.HDB_CONFIG_FILE))&&(console.error(wC),process.exit());let s=Bge({prefixText:xr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),ip.isEmpty(Gi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ka.setHdbBasePath(Gi),await Fge(Gi),await lSe(),await uSe(n),fr.initLogSettings(!0),await Bz(n),await fSe(n),await Nz.updateConfigCert(),await Nz.generateCertsKeys(),await _Se(),$ge(),s.stop(),console.log(xr(Ya+Iz+Ya)),fr.notify(Iz)}a(Uz,"install");function sSe(){let e=Hge.parseDocument(Ps.readFileSync(Wa[de.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=CC.flattenConfig(e.toJSON());return t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(sSe,"getConfigFromFile");async function iSe(e){fr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.ROOTPATH],Ur.DESTINATION),name:de.INSTALL_PROMPTS.ROOTPATH,prefix:Lo,default:Zge,validate:a(async s=>Cs(s)?Cs(s):await Ps.pathExists(qi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:xr(Ur.DESTINATION)},{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Ur.HDB_USERNAME),name:de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lo,default:eSe,validate:a(s=>Cs(s)?Cs(s):(t=s,!0),"validate"),message:xr(Ur.HDB_USERNAME)},{type:"password",when:Mo(e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Ur.HDB_PASS),name:de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lo,validate:a(s=>Cs(s)?Cs(s):!0,"validate"),message:xr(Ur.HDB_PASS)},{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.DEFAULTS_MODE],Ur.DEFAULTS_MODE),name:de.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Lo,default:rSe,validate:a(s=>Cs(s)?Cs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:xr(Ur.DEFAULTS_MODE)}];if(vz||r.push({type:"input",name:de.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Ur.REPLICATION_HOSTNAME),prefix:Lo,default:nSe,message:xr(Ur.REPLICATION_HOSTNAME)}),ip.autoCastBoolean(e[de.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.CLUSTERING_NODENAME],Ur.NODE_NAME),name:de.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lo,default:xge.random(),validate:a(i=>Jge.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:xr(Ur.NODE_NAME)},{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.CLUSTERING_USER],Ur.CLUSTER_USERNAME),name:de.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lo,default:tSe,validate:a(i=>Cs(i)?Cs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:xr(Ur.CLUSTER_USERNAME)},{type:"password",when:Mo(e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Ur.CLUSTER_PASS),name:de.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lo,validate:a(i=>Cs(i)?Cs(i):!0,"validate"),message:xr(Ur.CLUSTER_PASS)}];r.push(...s)}let n=await Pz.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(iSe,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${xr(t)} ${Cl.gray("[hidden]")}`),fr.trace(`${xr(t)} [hidden]`)):(console.log(`${xr(t)} ${e}`),fr.trace(`${xr(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function Cs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Cs,"checkForEmptyValue");function oSe(){let e=Object.keys(de.INSTALL_PROMPTS),t=PT(e),r=PT(Object.keys(de.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=de.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(oSe,"checkForPromptOverride");async function aSe(){fr.trace("Checking for existing install.");let e=ip.getPropsFilePath(),t=await Ps.pathExists(e),r;if(t){fr.trace(`Install found an existing boot prop file at:${e}`);let n=Uge(e),s=CC.getConfigValue(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ps.pathExists(s)}if(!t&&ip.noBootFile()&&(r=!0),r&&!PC){if(fr.trace(`Install found existing HDB config at:${e}`),await Dz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Lz.version}. Exiting install...`;console.log(Ya+Cl.magenta.bold(Qge)),console.log(Cl.magenta.bold(s)),fr.error(s)}else console.log(Ya+Cl.magenta.bold(wC)),fr.error(wC);process.exit(0)}}a(aSe,"checkForExistingInstall");async function cSe(e){fr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Wge}${Ya}and can be viewed by typing or copying and pasting the URL into your web browser.${Ya}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Lo,transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.TC_AGREEMENT],t),name:de.INSTALL_PROMPTS.TC_AGREEMENT,message:xr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Cl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Pz.prompt([r]);n[de.INSTALL_PROMPTS.TC_AGREEMENT]&&n[de.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==zge&&(console.log(Cl.yellow(Cz)),fr.error(Cz),process.exit(0))}a(cSe,"termsAgreement");async function lSe(){let e=qi.join(Gi,de.HDB_CONFIG_FILE),t;try{t=IC.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
113
+ install_user = ${t}`,n=ip.getHomeDir(),s=qi.join(n,de.HDB_HOME_DIR_NAME),i=qi.join(s,de.LICENSE_KEY_DIR_NAME);try{Ps.mkdirpSync(s,{mode:de.HDB_FILE_PERMISSIONS}),Ps.mkdirpSync(i,{mode:de.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${de.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=qi.join(s,de.BOOT_PROPS_FILE_NAME);try{await Ps.writeFile(o,r)}catch(c){throw fr.error(`There was an error creating the boot file at path: ${o}`),c}Ka.setProperty(de.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ka.setProperty(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ka.setProperty(Ka.BOOT_PROPS_FILE_PATH,o)}}a(lSe,"createBootPropertiesFile");async function uSe(e){fr.trace("Creating HarperDB config file");let t=PT(Object.keys(de.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[de.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in CT){if(r===Dt.HTTP_PORT&&t[Dt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??CT[r],t[Dt.HTTP_SECUREPORT]=null;continue}else if(r===Dt.HTTP_PORT)continue;if(r===Dt.OPERATIONSAPI_NETWORK_PORT&&t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??CT[r],t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Dt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=CT[r])}}else t[Dt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Dt.HTTP_PORT.toLowerCase()]&&(t[Dt.HTTP_SECUREPORT]=null);try{Wa[de.INSTALL_PROMPTS.HDB_CONFIG]||CC.createConfigFile(t),Ka.initSync()}catch(r){dSe(r)}}a(uSe,"createConfigFile");function dSe(e){fr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(jge);let t=qi.resolve(Ka.get(Ka.BOOT_PROPS_FILE_PATH),"../");t&&Ps.removeSync(t),Gi&&(Mz?Ps.readdirSync(Gi,{withFileTypes:!0}).forEach(n=>{let s=qi.join(n.path,n.name);s!==Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&Ps.removeSync(s)}):Ps.removeSync(Gi)),process.exit(1)}a(dSe,"rollbackInstall");async function xz(e,t){fr.trace("Creating admin user"),await Yge();let r;try{r=await qge.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 Gge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(xz,"createAdminUser");async function Bz(e){fr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await xz(t,r),delete e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Bz,"createSuperUser");async function fSe(e){fr.trace("Creating Cluster user.");let t;e[de.INSTALL_PROMPTS.CLUSTERING_USER]&&e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[de.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await xz({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[de.INSTALL_PROMPTS.CLUSTERING_USER],delete e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(fSe,"createClusterUser");async function _Se(){let e=Lz.version;if(e)await Dz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(_Se,"insertHdbVersionInfo");function hSe(e){Wa[de.INSTALL_PROMPTS.HDB_CONFIG]=e}a(hSe,"updateConfigEnv");function pSe(e){PC=e}a(pSe,"setIgnoreExisting")});var qz=I((ive,Gz)=>{"use strict";var DC=oe(),ns=j(),Fz=SC();Gz.exports={processDirectives:mSe};async function mSe(e){console.log("Starting upgrade process...");let t=Fz.getVersionsForUpgrade(e),r=SSe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ns.notify(c),console.log(c);let l=[],u=[];try{l=ESe(o.sync_functions)}catch(f){throw ns.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await gSe(o.async_functions)}catch(f){throw ns.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(mSe,"processDirectives");function ESe(e){if(DC.isEmptyOrZeroLength(e))return ns.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ns.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ns.info(`Running function ${r.name}`),!(r instanceof Function)){ns.info("Variable being processed is not a function");continue}let n=r();ns.info(n),t.push(n)}return t}a(ESe,"runSyncFunctions");async function gSe(e){if(DC.isEmptyOrZeroLength(e))return ns.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ns.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ns.info(`Running function ${s.name}`),!(s instanceof Function)){ns.info("Variable being processed is not a function");continue}let i=await s();ns.info(i),t.push(i)}return t}a(gSe,"runAsyncFunctions");function SSe(e){if(DC.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Fz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(SSe,"getUpgradeDirectivesToInstall")});var Qz=I((ave,zz)=>{"use strict";var DT=ce();DT.initSync();var Yz=require("chalk"),$z=require("fs-extra"),Uo=j(),vo=(H(),D(q)),TSe=qz(),LC=oe(),Wz=wT(),ASe=ST(),Vz=aA(),RSe=Hs(),{packageJson:Kz}=Et(),ySe=require("util").promisify,bSe=ySe(RSe.setSchemaDataToGlobal),MC,{UPGRADE_VERSION:vC}=vo.UPGRADE_JSON_FIELD_NAMES_ENUM;zz.exports={upgrade:OSe};async function OSe(e){await bSe(),MC===void 0&&(MC=th()),$z.existsSync(DT.get(DT.BOOT_PROPS_FILE_PATH))||(op("The hdb_boot_properties file was not found. Please install HDB.",vo.LOG_LEVELS.ERROR),process.exit(1)),$z.existsSync(DT.get(vo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(op("The hdb settings file was not found. Please make sure HDB is installed.",vo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Wz.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),op(`This version of HarperDB is ${Kz.version}`,vo.LOG_LEVELS.INFO);let r=t[vC]??Kz.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vo.HDB_SUPPORT_ADDRESS}`),Uo.notify("Missing new version field from upgrade info object"),process.exit(1)),await NSe();let n,s=0;try{n=await ASe.forceUpdatePrompt(t)}catch(i){Uo.error("There was an error when prompting user about upgrade."),Uo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Uo.info(`Starting upgrade to version ${r}`),await wSe(t),op(`HarperDB was successfully upgraded to version ${t[vC]}`,vo.LOG_LEVELS.INFO)}a(OSe,"upgrade");async function NSe(){let e=!1,t=await Vz.findPs(vo.HDB_PROC_NAME);if(LC.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Vz.findPs("hdb_express");LC.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await MC.list();LC.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Yz.red(r)),Uo.error(r),process.exit(1)}}a(NSe,"checkIfRunning");async function wSe(e){try{await TSe.processDirectives(e)}catch(t){throw op("There was an error during the data upgrade. Please check the logs.",vo.LOG_LEVELS.ERROR),t}try{await Wz.insertHdbUpgradeInfo(e[vC])}catch(t){Uo.error("Error updating the 'hdb_info' system table."),Uo.error(t)}}a(wSe,"runUpgrade");function op(e,t=void 0){t||(t=Uo.info),Uo[t](e),console.log(Yz.magenta(e))}a(op,"printToLogAndConsole")});var eQ=I((lve,Zz)=>{"use strict";var{promises:vd,createReadStream:ISe,createWriteStream:CSe}=require("fs"),{createGzip:PSe}=require("zlib"),{promisify:DSe}=require("util"),{pipeline:LSe}=require("stream"),MSe=DSe(LSe),xC=require("path"),Qa=ce();Qa.initSync();var za=j(),{CONFIG_PARAMS:Ud,ITC_EVENT_TYPES:vSe}=(H(),D(q)),{onMessageFromWorkers:USe}=rt(),{convertToMS:xSe}=oe(),{onStorageReclamation:BSe}=(YS(),D(PY)),HSe=6e4,kSe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",FSe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",UC,Jz;Zz.exports=Xz;USe(e=>{e.type===vSe.RESTART&&(Qa.initSync(!0),clearInterval(Jz),Qa.get(Ud.LOGGING_ROTATION_ENABLED)&&Xz())});async function Xz(){try{let e=za.getLogFilePath(),t=Qa.get(Ud.LOGGING_ROTATION_MAXSIZE),r=Qa.get(Ud.LOGGING_ROTATION_INTERVAL),n=Qa.get(Ud.LOGGING_ROTATION_RETENTION),s=0;if(BSe(e,l=>{s=l},!0),!t&&!r){za.error(kSe);return}let i=Qa.get(Ud.LOGGING_ROTATION_PATH);if(!i){za.error(FSe);return}let o;if(t){let l=t.slice(-1),u=t.slice(0,-1);l==="G"?o=u*1e9:l==="M"?o=u*1e6:o=u*1e3}let c;if(r){let l=r.slice(-1),u=r.slice(0,-1);l==="D"?c=u*1440:l==="H"?c=u*60:c=u}UC=Date.now()/6e4,za.trace("Log rotate enabled, maxSize:",t,"interval:",r),Jz=setInterval(async()=>{if(o){let l;l=await vd.stat(e),l.size>=o&&await jz(e,i)}if(c&&Date.now()/6e4-UC>=c&&(await jz(e,i),UC=Date.now()/6e4),n||s){let l=xSe(n??"1M")/(1+s);s=0;let u=await vd.readdir(i);for(let f of u)try{let d=await vd.stat(xC.join(i,f));Date.now()-d.mtimeMs>l&&await vd.unlink(xC.join(i,f))}catch(d){za.error("Error trying to remove log",f,d)}}},HSe).unref()}catch(e){za.error(e)}}a(Xz,"logRotator");async function jz(e,t){let r=Qa.get(Ud.LOGGING_ROTATION_COMPRESS),n=xC.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);await vd.rename(e,n),r&&(e=n,n+=".gz",await MSe(ISe(e),PSe(),CSe(n)),await vd.unlink(e)),za.closeLogFile(),za.notify(`hdb.log rotated, old log moved to ${n}`)}a(jz,"moveLogFile")});var cQ=I(aQ=>{"use strict";var Se=ce();Se.initSync();rd();var Ft=(H(),D(q)),{CONFIG_PARAMS:Ie}=Ft,ss=j(),xo=require("fs-extra"),Bo=require("path"),GSe=lC(),{install:qSe}=kz(),BC=require("chalk"),{packageJson:$Se,PACKAGE_ROOT:VSe}=Et(),Ho=oe(),HC=It(),rQ=ec(),tQ=Ng(),KSe=Qz(),YSe=eQ(),{compactOnStart:WSe}=(vN(),D(MN)),zSe=require("minimist"),QSe=Qs(),{startHTTPThreads:jSe}=(nI(),D(mK)),JSe=wT(),{isMainThread:XSe}=require("worker_threads"),dve=Zi(),fve=no(),_ve=wy(),hve=t_(),LT=(H(),D(q)),$i,xd,nQ=!1,ZSe="Upgrade complete. Starting HarperDB.",eTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",tTe="HarperDB not found, starting install process.",rTe="There was an error during install, check install_log.log for more details. Exiting.",nTe="HarperDB successfully started.";function sTe(){if(!nQ){let e=a(()=>{xo.removeSync(Bo.join(Se.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(sTe,"addExitListeners");async function sQ(e=!1,t=!1){if(console.log(BC.magenta("Starting HarperDB...")),ss.suppressLogging?.(()=>{console.log(BC.magenta(""+xo.readFileSync(Bo.join(VSe,"utility/install/ascii_logo.txt"))))}),await oQ()===!1){console.log(tTe);try{await qSe()}catch(l){console.error(rTe,l),ss.error(l),process.exit(1)}}if(!e){let l=rQ(Object.keys(Ft.CONFIG_PARAM_MAP),!0);!Ho.isEmpty(l)&&!Ho.isEmptyOrZeroLength(Object.keys(l))&&HC.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=xd?.service==="clustering";xd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Bo.join(Se.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE),i=lTe(s);i&&i!==1&&uTe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),$i===void 0&&($i=th()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await tQ.generateNatsConfig(),await $i.startClusteringProcesses(!0),process.exit()),sTe(),await xo.writeFile(Bo.join(Se.get(LT.CONFIG_PARAMS.ROOTPATH),LT.HDB_PID_FILE),`${process.pid}`),ss.info("HarperDB PID",process.pid);let o;try{let l=await JSe.getVersionUpdateInfo();l!==void 0&&(o=l[Ft.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await KSe.upgrade(l),console.log(ZSe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),ss.error(l)):(console.error(eTe,l),ss.error(l)),process.exit(1)}GSe(),aTe(),await QSe.reviewSelfSignedCert(),Ho.autoCastBoolean(Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&XSe&&await tQ.generateNatsConfig(t)}a(sQ,"initialize");async function iTe(e=!1){try{xd=zSe(process.argv),xd.ROOTPATH&&HC.updateConfigObject("settings_path",Bo.join(xd.ROOTPATH,Ft.HDB_CONFIG_FILE)),await sQ(e,!0),Se.get(Ft.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await WSe();let t=process.env.IS_SCRIPTED_SERVICE&&!xd.service;Ho.autoCastBoolean(Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await $i.startClusteringProcesses(),await $i.startClusteringThreads()),await jSe(process.env.DEV_MODE?1:Se.get(LT.CONFIG_PARAMS.THREADS_COUNT)??Se.get(LT.CONFIG_PARAMS.THREADS)),Se.get(Ft.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await YSe(),t||iQ()}catch(t){console.error(t),ss.error(t),process.exit(1)}}a(iTe,"main");function iQ(){ss.suppressLogging(()=>{console.log(BC.magenta(`HarperDB ${$Se.version} successfully started`))}),ss.notify(nTe)}a(iQ,"started");async function oTe(e=!0){nQ=!e;try{$i===void 0&&($i=th()),$i.enterPM2Mode(),await sQ(),Ho.autoCastBoolean(Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await $i.startClusteringProcesses(),await $i.startService(Ft.PROCESS_DESCRIPTORS.HDB),iQ(),e&&process.exit(0)}catch(t){console.error(t),ss.error(t),process.exit(1)}}a(oTe,"launch");function aTe(){let e=Bo.join(Se.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.LICENSE_KEY_DIR_NAME,Ft.LICENSE_FILE_NAME),t=Bo.join(e,Ft.LICENSE_FILE_NAME),r=Bo.join(e,Ft.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=rQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ho.isEmpty(n)||Ho.isEmpty(s))return;xo.mkdirpSync(e),xo.writeFileSync(r,n),xo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ss.error(s)}}a(aTe,"writeLicenseFromVars");Object.assign(aQ,{launch:oTe,main:iTe,isHdbInstalled:oQ,startupLog:cTe});async function oQ(){try{await xo.stat(Ho.getPropsFilePath()),await xo.stat(Se.get(Ft.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ho.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ss.error(`Error checking for HDB install - ${e}`),e}return!0}a(oQ,"isHdbInstalled");function cTe(e){let r=a(_=>_.padEnd(20),"pad"),n=`
114
+ `;Se.get(Ie.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Se.get(Ie.REPLICATION_HOSTNAME)}
115
+ `),Se.get(Ie.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Se.get(Ie.REPLICATION_URL)}
116
+ `),n+=`${r("Worker Threads:")}${Se.get(Ie.THREADS_COUNT)}
117
+ `,n+=`${r("Root Path:")}${Se.get(Ie.ROOTPATH)}
118
+ `,Se.get(Ie.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=Se.get(Ie.THREADS_DEBUG_PORT)?`, TCP: ${Se.get(Ie.THREADS_DEBUG_PORT)}
119
119
  `:`
120
- `);let s=Bo.join(ge.get(Ie.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${ge.get(Ie.LOGGING_LEVEL)}, location: ${s+(ge.get(Ie.LOGGING_STDSTREAMS)?", stdout/err":"")}
121
- `,n+=r("Default:"),n+=ge.get(Ie.HTTP_PORT)?`HTTP (and WS): ${ge.get(Ie.HTTP_PORT)}, `:"",n+=ge.get(Ie.HTTP_SECUREPORT)?`HTTPS (and WS): ${ge.get(Ie.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${ge.get(Ie.HTTP_CORS)?`enabled for ${ge.get(Ie.HTTP_CORSACCESSLIST)}`:"disabled"}
122
- `,n+=r("Operations API:"),n+=ge.get(Ie.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${ge.get(Ie.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=ge.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${ge.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${ge.get(Ie.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${ge.get(Ie.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${ge.get(Ie.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
123
- `,n+=r("MQTT:"),n+=ge.get(Ie.MQTT_NETWORK_PORT)?`TCP: ${ge.get(Ie.MQTT_NETWORK_PORT)}, `:"",n+=ge.get(Ie.MQTT_NETWORK_SECUREPORT)?`TLS: ${ge.get(Ie.MQTT_NETWORK_SECUREPORT)}`:"",n+=ge.get(Ie.MQTT_WEBSOCKET)&&ge.get(Ie.HTTP_PORT)?`, WS: ${ge.get(Ie.HTTP_PORT)}`:"",n+=ge.get(Ie.MQTT_WEBSOCKET)&&ge.get(Ie.HTTP_SECUREPORT)?`, WSS: ${ge.get(Ie.HTTP_SECUREPORT)}
120
+ `);let s=Bo.join(Se.get(Ie.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Se.get(Ie.LOGGING_LEVEL)}, location: ${s+(Se.get(Ie.LOGGING_STDSTREAMS)?", stdout/err":"")}
121
+ `,n+=r("Default:"),n+=Se.get(Ie.HTTP_PORT)?`HTTP (and WS): ${Se.get(Ie.HTTP_PORT)}, `:"",n+=Se.get(Ie.HTTP_SECUREPORT)?`HTTPS (and WS): ${Se.get(Ie.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${Se.get(Ie.HTTP_CORS)?`enabled for ${Se.get(Ie.HTTP_CORSACCESSLIST)}`:"disabled"}
122
+ `,n+=r("Operations API:"),n+=Se.get(Ie.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${Se.get(Ie.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=Se.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${Se.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${Se.get(Ie.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${Se.get(Ie.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${Se.get(Ie.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
123
+ `,n+=r("MQTT:"),n+=Se.get(Ie.MQTT_NETWORK_PORT)?`TCP: ${Se.get(Ie.MQTT_NETWORK_PORT)}, `:"",n+=Se.get(Ie.MQTT_NETWORK_SECUREPORT)?`TLS: ${Se.get(Ie.MQTT_NETWORK_SECUREPORT)}`:"",n+=Se.get(Ie.MQTT_WEBSOCKET)&&Se.get(Ie.HTTP_PORT)?`, WS: ${Se.get(Ie.HTTP_PORT)}`:"",n+=Se.get(Ie.MQTT_WEBSOCKET)&&Se.get(Ie.HTTP_SECUREPORT)?`, WSS: ${Se.get(Ie.HTTP_SECUREPORT)}
124
124
  `:`
125
- `;let i=ge.get(Ie.REPLICATION_PORT)??ge.get(Ie.OPERATIONSAPI_NETWORK_PORT),o=ge.get(Ie.REPLICATION_SECUREPORT)??ge.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
126
- `;let l=[],u=xC.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,p]of e)for(let S of p){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
127
- `);let h=ge.get(Ie.HTTP_PORT)?`HTTP: ${ge.get(Ie.HTTP_PORT)}, `:"";h+=ge.get(Ie.HTTP_SECUREPORT)?`HTTPS: ${ge.get(Ie.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
125
+ `;let i=Se.get(Ie.REPLICATION_PORT)??Se.get(Ie.OPERATIONSAPI_NETWORK_PORT),o=Se.get(Ie.REPLICATION_SECUREPORT)??Se.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
126
+ `;let l=[],u=HC.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,p]of e)for(let S of p){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
127
+ `);let h=Se.get(Ie.HTTP_PORT)?`HTTP: ${Se.get(Ie.HTTP_PORT)}, `:"";h+=Se.get(Ie.HTTP_SECUREPORT)?`HTTPS: ${Se.get(Ie.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
128
128
  `:n+=`${r(_+": ")}${h}
129
- `;console.log(n),ge.get(Ie.LOGGING_STDSTREAMS)&&is.logsAtLevel("info")&&is.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(aTe,"startupLog");function cTe(e){try{return Number.parseInt(xo.readFileSync(e,"utf8"),10)}catch{return null}}a(cTe,"readPidFile");function lTe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(lTe,"isProcessRunning")});var nI=I(ko=>{KT();var{isMainThread:BC,parentPort:up,threadId:vT,workerData:uTe}=require("node:worker_threads"),{Socket:dTe,createServer:fTe}=require("node:net"),{createServer:_Te,IncomingMessage:hTe}=require("node:http"),{createServer:pTe}=require("node:https"),{createSecureServer:mTe}=require("node:http2"),{Blob:ETe}=(ls(),P(bE)),{unlinkSync:pQ,existsSync:gTe}=require("fs"),In=Q(),pt=le(),Qt=(H(),P($)),{server:dp}=(qr(),P(Wl)),{WebSocketServer:STe}=require("ws"),{createServer:TTe}=require("node:tls"),{getTicketKeys:ATe,restartNumber:RTe,getWorkerIndex:Bd}=tt(),{Headers:HC,appendHeader:yTe}=(p_(),P(nB)),{recordAction:ap,recordActionBinary:cQ}=(Ci(),P(h_)),{Request:mQ,createReuseportFd:lp}=(SI(),P(JK)),{checkMemoryLimit:bTe}=Qu(),{createTLSSelector:EQ}=js(),{resolvePath:gQ}=wt(),{startupLog:OTe}=aQ(),{Readable:lQ}=require("node:stream"),NTe=li(),SQ=pt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG);if(SQ){let e;if(BC)e=pt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){In.info("Could not close debugger",t)}});else{let t=pt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Bd()>=0&&(e=t+Bd())}if(e){let t=pt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=pt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){In.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&BC)try{require("inspector").open(9229)}catch(e){RTe<=1&&In.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:mve,CONFIG_PARAMS:wTe}=Qt;pt.initSync();var ITe=pt.get(wTe.HTTP_SESSIONAFFINITY),Ki={},kC=new Map;ko.registerServer=$C;ko.httpServer=KC;ko.deliverSocket=qC;ko.startServers=TQ;ko.listenOnPorts=AQ;ko.globals=NTe;ko.when_components_loaded=null;dp.http=KC;dp.request=PTe;dp.socket=DTe;dp.ws=LTe;dp.upgrade=bQ;var cp={},MT={},UT={},FC=[];function TQ(){return ko.when_components_loaded=NS().loadRootComponents(!0).then(()=>{up?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)qC(n,r,s);else if(t.requestId)CTe(t);else if(t.type===Qt.ITC_EVENT_TYPES.SHUTDOWN){In.trace("received shutdown request",vT);for(let i in Ki){let o=Ki[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?In.info(`Closing ${_.length} idle connections`):h&&In.warn(`Forcefully closing ${_.length} active connections`);for(let p=0,S=_.length;p<S;p++){let g=_[p].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
129
+ `;console.log(n),Se.get(Ie.LOGGING_STDSTREAMS)&&ss.logsAtLevel("info")&&ss.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(cTe,"startupLog");function lTe(e){try{return Number.parseInt(xo.readFileSync(e,"utf8"),10)}catch{return null}}a(lTe,"readPidFile");function uTe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(uTe,"isProcessRunning")});var sI=I(ko=>{KT();var{isMainThread:kC,parentPort:up,threadId:vT,workerData:dTe}=require("node:worker_threads"),{Socket:fTe,createServer:_Te}=require("node:net"),{createServer:hTe,IncomingMessage:pTe}=require("node:http"),{createServer:mTe}=require("node:https"),{createSecureServer:ETe}=require("node:http2"),{Blob:gTe}=(cs(),D(bE)),{unlinkSync:mQ,existsSync:STe}=require("fs"),wn=j(),mt=ce(),jt=(H(),D(q)),{server:dp}=(Gr(),D(Wl)),{WebSocketServer:TTe}=require("ws"),{createServer:ATe}=require("node:tls"),{getTicketKeys:RTe,restartNumber:yTe,getWorkerIndex:Bd}=rt(),{Headers:FC,appendHeader:bTe}=(p_(),D(iB)),{recordAction:ap,recordActionBinary:lQ}=(Ii(),D(h_)),{Request:EQ,createReuseportFd:lp}=(TI(),D(ZK)),{checkMemoryLimit:OTe}=Qu(),{createTLSSelector:gQ}=Qs(),{resolvePath:SQ}=It(),{startupLog:NTe}=cQ(),{Readable:uQ}=require("node:stream"),wTe=ci(),TQ=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG);if(TQ){let e;if(kC)e=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wn.info("Could not close debugger",t)}});else{let t=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Bd()>=0&&(e=t+Bd())}if(e){let t=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&kC)try{require("inspector").open(9229)}catch(e){yTe<=1&&wn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Eve,CONFIG_PARAMS:ITe}=jt;mt.initSync();var CTe=mt.get(ITe.HTTP_SESSIONAFFINITY),Vi={},GC=new Map;ko.registerServer=KC;ko.httpServer=WC;ko.deliverSocket=VC;ko.startServers=AQ;ko.listenOnPorts=RQ;ko.globals=wTe;ko.when_components_loaded=null;dp.http=WC;dp.request=DTe;dp.socket=LTe;dp.ws=MTe;dp.upgrade=OQ;var cp={},MT={},UT={},qC=[];function AQ(){return ko.when_components_loaded=NS().loadRootComponents(!0).then(()=>{up?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)VC(n,r,s);else if(t.requestId)PTe(t);else if(t.type===jt.ITC_EVENT_TYPES.SHUTDOWN){wn.trace("received shutdown request",vT);for(let i in Vi){let o=Vi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?wn.info(`Closing ${_.length} idle connections`):h&&wn.warn(`Forcefully closing ${_.length} active connections`);for(let p=0,S=_.length;p<S;p++){let g=_[p].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
130
130
  Connection: close\r
131
131
  \r
132
- `))}},25).unref()}o.close?.(()=>{if(pt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Bd()==0)try{pQ(gQ(pt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,vT),o.cantCleanupProperly||In.warn("Had to forcefully exit the thread",vT),process.exit(0)},5e3).unref()})}if(SQ||process.env.DEV_MODE)try{require("inspector").close()}catch(i){In.info("Could not close debugger",i)}}}).ref();let e;lp&&!ITe&&(e=AQ()),Promise.resolve(e).then(()=>{if(Bd()===0)try{OTe(kC)}catch(t){console.error("Error displaying start-up log",t)}up?.postMessage({type:Qt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(TQ,"startServers");function AQ(){let e=[];for(let t in Ki){let r=Ki[t];if(t.includes?.("/")&&Bd()==0){gTe(t)&&pQ(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),In.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=pt.get(Qt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Bd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?lp?n={fd:lp(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:lp?n={fd:lp(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),In.trace("Listening on port "+t,vT)}).on("error",c)}))}return Promise.all(e)}a(AQ,"listenOnPorts");!BC&&!uTe?.noServerStart&&TQ();function qC(e,t,r){let n=e?.read?e:new dTe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ki[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ki[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(In.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(qC,"deliverSocket");var uQ=new Map;function CTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=uQ.get(s),r){case"connection":i=qC(void 0,t),uQ.set(s,i),i.write=(c,l,u)=>(up.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(up.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),up.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(CTe,"proxyRequest");var{getComponentName:xT}=(ph(),P(hh));function $C(e,t,r=!0){t||(t=pt.get(Qt.CONFIG_PARAMS.HTTP_PORT));let n=Ki[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",hQ),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ki[t]=e;e.on("unhandled",hQ)}a($C,"registerServer");function VC(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=[],pt.get(Qt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:pt.get(Qt.CONFIG_PARAMS.HTTP_PORT),secure:pt.get(Qt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),pt.get(Qt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:pt.get(Qt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&pt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:gQ(pt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(VC,"getPorts");function KC(e,t){let r=[];for(let{port:n,secure:s}of VC(t))r.push(RQ(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?FC[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,$C(e,n,!1)),UT[n]=HT(FC,n);return r}a(KC,"httpServer");function BT(e,t){let r=kC.get(e)??[];kC.set(e,[...r,t])}a(BT,"setPortServerMap");function RQ(e,t,r,n){if(BT(e,{protocol_name:t?"HTTPS":"HTTP",name:xT()}),!MT[e]){let s=r?"operationsApi_network":"http",i=pt.get(s+"_keepAliveTimeout"),o=pt.get(s+"_timeout"),c=pt.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:pt.get(Qt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=pt.get(s+"_mtls"),f=pt.get(s+"_mtls_required"),d;t&&(d=pt.get(s+"_http2")??!r,Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:ATe(),SNICallback:EQ(r?"operations-api":"server",u)}));let h=bTe(),_=MT[e]=(t?d?mTe:pTe:_Te)(l,async(p,S)=>{try{let A=performance.now(),E=new mQ(p,S);r&&(E.isOperationsServer=!0);let R=await UT[e](E);if(!R){if(E._nodeResponse.statusCode)return;R=yQ(E)}if(R.headers?.set||(R.headers=new HC(R.headers)),h?R.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):R.headers?.set?.("Server","HarperDB"),R.status===-1){for(let se of R.headers||[])S.setHeader(se[0],se[1]);return p.baseRequest=E,S.baseResponse=R,MT[e].emit("unhandled",p,S)}let N=R.status||200,v=performance.now(),k=v-A,F=R.body,K,re=!1;if(!R.handlesHeaders){let se=R.headers||new HC;F?F.length>=0?(typeof F=="string"?se.set("Content-Length",Buffer.byteLength(F)):se.set("Content-Length",F.length),K=!0):F instanceof ETe&&(F.size?se.set("Content-Length",F.size):F.on&&(re=!0,F.on("size",pe=>{S.headersSent||S.setHeader("Content-Length",pe)})),F=F.stream()):(se.set("Content-Length","0"),K=!0);let Y=`hdb;dur=${k.toFixed(2)}`;if(R.wasCacheMiss&&(Y+=", miss"),yTe(se,"Server-Timing",Y,!0),!S.headersSent)if(re){if(S.statusCode=N,se)if(se[Symbol.iterator])for(let[pe,Te]of se)S.setHeader(pe,Te);else for(let pe in se)S.setHeader(pe,se[pe])}else S.writeHead(N,se&&(se[Symbol.iterator]?Array.from(se):se));K&&S.end(F)}let oe=E.handlerPath,Z=E.method;if(ap(k,"duration",oe,Z,R.wasCacheMiss==null?void 0:R.wasCacheMiss?"cache-miss":"cache-hit"),cQ(N<400,"success",oe,Z),cQ(1,"response_"+N,oe,Z),!K)if(F instanceof ReadableStream&&(F=lQ.fromWeb(F)),(F[Symbol.iterator]||F[Symbol.asyncIterator])&&(F=lQ.from(F)),F?.pipe){F.pipe(S),F.destroy&&S.on("close",()=>{F.destroy()});let se=0;F.on("data",Y=>{se+=Y.length}),F.on("end",()=>{ap(performance.now()-v,"transfer",oe,Z),ap(se,"bytes-sent",oe,Z)})}else F?.then?F.then(se=>{S.end(se)},g):S.end(F)}catch(A){g(A)}function g(A){let E=A.headers;S.writeHead(A.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),S.end(A.toString()),A.statusCode?A.statusCode===500?In.warn(A):In.info(A):In.error(A)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",p=>{p._parent.startTime&&ap(performance.now()-p._parent.startTime,"tls-handshake",e),ap(p.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),$C(_,e)}return MT[e]}a(RQ,"getHTTPServer");function HT(e,t){let r=yQ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"next_callback")}}return r}a(HT,"makeCallbackChain");function yQ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new HC}}a(yQ,"unhandled");function PTe(e,t){KC(e,{requestOnly:!0,...t})}a(PTe,"onRequest");function DTe(e,t){let r;if(t.securePort){BT(t.securePort,{protocol_name:"TLS",name:xT()});let n=EQ("server",t.mtls);r=TTe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),Ki[t.securePort]=r}return t.port&&(BT(t.port,{protocol_name:"TCP",name:xT()}),r=fTe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Ki[t.port]=r),r}a(DTe,"onSocket");Object.defineProperty(hTe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var dQ=[],GC={};function bQ(e,t){for(let{port:r}of VC(t))dQ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),GC[r]=HT(dQ,r)}a(bQ,"onUpgrade");var fQ=[],_Q={};function LTe(e,t){let r=[];for(let{port:n,secure:s}of VC(t)){BT(n,{protocol_name:s?"WSS":"WS",name:xT()});let i=RQ(n,s,t?.isOperationsServer,t?.mtls);cp[n]||(cp[n]=new STe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),cp[n].on("connection",(o,c)=>{let l=new mQ(c);l.isWebSocket=!0;let u=UT[n](l);_Q[n](o,l,u)}),bQ((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):cp[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),cp[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{GC[n]&&GC[n](o,c,l)})),r.push(i),fQ[t?.runFirst?"unshift":"push"]({listener:e,port:n}),_Q[n]=HT(fQ,n),UT[n]=HT(FC,n)}return r}a(LTe,"onWebSocket");function hQ(e,t){t.writeHead(404),t.end(`Not found
133
- `)}a(hQ,"defaultNotFound")});module.exports=nI();
132
+ `))}},25).unref()}o.close?.(()=>{if(mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Bd()==0)try{mQ(SQ(mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,vT),o.cantCleanupProperly||wn.warn("Had to forcefully exit the thread",vT),process.exit(0)},5e3).unref()})}if(TQ||process.env.DEV_MODE)try{require("inspector").close()}catch(i){wn.info("Could not close debugger",i)}}}).ref();let e;lp&&!CTe&&(e=RQ()),Promise.resolve(e).then(()=>{if(Bd()===0)try{NTe(GC)}catch(t){console.error("Error displaying start-up log",t)}up?.postMessage({type:jt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(AQ,"startServers");function RQ(){let e=[];for(let t in Vi){let r=Vi[t];if(t.includes?.("/")&&Bd()==0){STe(t)&&mQ(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=mt.get(jt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Bd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?lp?n={fd:lp(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:lp?n={fd:lp(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.trace("Listening on port "+t,vT)}).on("error",c)}))}return Promise.all(e)}a(RQ,"listenOnPorts");!kC&&!dTe?.noServerStart&&AQ();function VC(e,t,r){let n=e?.read?e:new fTe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Vi[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Vi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(wn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(VC,"deliverSocket");var dQ=new Map;function PTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=dQ.get(s),r){case"connection":i=VC(void 0,t),dQ.set(s,i),i.write=(c,l,u)=>(up.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(up.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),up.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(PTe,"proxyRequest");var{getComponentName:xT}=(ph(),D(hh));function KC(e,t,r=!0){t||(t=mt.get(jt.CONFIG_PARAMS.HTTP_PORT));let n=Vi[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",pQ),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Vi[t]=e;e.on("unhandled",pQ)}a(KC,"registerServer");function YC(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=[],mt.get(jt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:mt.get(jt.CONFIG_PARAMS.HTTP_PORT),secure:mt.get(jt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),mt.get(jt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:mt.get(jt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:SQ(mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(YC,"getPorts");function WC(e,t){let r=[];for(let{port:n,secure:s}of YC(t))r.push(yQ(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?qC[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,KC(e,n,!1)),UT[n]=HT(qC,n);return r}a(WC,"httpServer");function BT(e,t){let r=GC.get(e)??[];GC.set(e,[...r,t])}a(BT,"setPortServerMap");function yQ(e,t,r,n){if(BT(e,{protocol_name:t?"HTTPS":"HTTP",name:xT()}),!MT[e]){let s=r?"operationsApi_network":"http",i=mt.get(s+"_keepAliveTimeout"),o=mt.get(s+"_timeout"),c=mt.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:mt.get(jt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=mt.get(s+"_mtls"),f=mt.get(s+"_mtls_required"),d;t&&(d=mt.get(s+"_http2")??!r,Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:RTe(),SNICallback:gQ(r?"operations-api":"server",u)}));let h=OTe(),_=MT[e]=(t?d?ETe:mTe:hTe)(l,async(p,S)=>{try{let R=performance.now(),E=new EQ(p,S);r&&(E.isOperationsServer=!0);let A=await UT[e](E);if(!A){if(E._nodeResponse.statusCode)return;A=bQ(E)}if(A.headers?.set||(A.headers=new FC(A.headers)),h?A.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):A.headers?.set?.("Server","HarperDB"),A.status===-1){for(let ne of A.headers||[])S.setHeader(ne[0],ne[1]);return p.baseRequest=E,S.baseResponse=A,MT[e].emit("unhandled",p,S)}let O=A.status||200,v=performance.now(),F=v-R,G=A.body,Y,te=!1;if(!A.handlesHeaders){let ne=A.headers||new FC;G?G.length>=0?(typeof G=="string"?ne.set("Content-Length",Buffer.byteLength(G)):ne.set("Content-Length",G.length),Y=!0):G instanceof gTe&&(G.size?ne.set("Content-Length",G.size):G.on&&(te=!0,G.on("size",pe=>{S.headersSent||S.setHeader("Content-Length",pe)})),G=G.stream()):(ne.set("Content-Length","0"),Y=!0);let Q=`hdb;dur=${F.toFixed(2)}`;if(A.wasCacheMiss&&(Q+=", miss"),bTe(ne,"Server-Timing",Q,!0),!S.headersSent)if(te){if(S.statusCode=O,ne)if(ne[Symbol.iterator])for(let[pe,Re]of ne)S.setHeader(pe,Re);else for(let pe in ne)S.setHeader(pe,ne[pe])}else S.writeHead(O,ne&&(ne[Symbol.iterator]?Array.from(ne):ne));Y&&S.end(G)}let se=E.handlerPath,X=E.method;if(ap(F,"duration",se,X,A.wasCacheMiss==null?void 0:A.wasCacheMiss?"cache-miss":"cache-hit"),lQ(O<400,"success",se,X),lQ(1,"response_"+O,se,X),!Y)if(G instanceof ReadableStream&&(G=uQ.fromWeb(G)),(G[Symbol.iterator]||G[Symbol.asyncIterator])&&(G=uQ.from(G)),G?.pipe){G.pipe(S),G.destroy&&S.on("close",()=>{G.destroy()});let ne=0;G.on("data",Q=>{ne+=Q.length}),G.on("end",()=>{ap(performance.now()-v,"transfer",se,X),ap(ne,"bytes-sent",se,X)})}else G?.then?G.then(ne=>{S.end(ne)},g):S.end(G)}catch(R){g(R)}function g(R){let E=R.headers;S.writeHead(R.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),S.end(R.toString()),R.statusCode?R.statusCode===500?wn.warn(R):wn.info(R):wn.error(R)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",p=>{p._parent.startTime&&ap(performance.now()-p._parent.startTime,"tls-handshake",e),ap(p.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),KC(_,e)}return MT[e]}a(yQ,"getHTTPServer");function HT(e,t){let r=bQ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"next_callback")}}return r}a(HT,"makeCallbackChain");function bQ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new FC}}a(bQ,"unhandled");function DTe(e,t){WC(e,{requestOnly:!0,...t})}a(DTe,"onRequest");function LTe(e,t){let r;if(t.securePort){BT(t.securePort,{protocol_name:"TLS",name:xT()});let n=gQ("server",t.mtls);r=ATe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),Vi[t.securePort]=r}return t.port&&(BT(t.port,{protocol_name:"TCP",name:xT()}),r=_Te(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Vi[t.port]=r),r}a(LTe,"onSocket");Object.defineProperty(pTe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var fQ=[],$C={};function OQ(e,t){for(let{port:r}of YC(t))fQ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),$C[r]=HT(fQ,r)}a(OQ,"onUpgrade");var _Q=[],hQ={};function MTe(e,t){let r=[];for(let{port:n,secure:s}of YC(t)){BT(n,{protocol_name:s?"WSS":"WS",name:xT()});let i=yQ(n,s,t?.isOperationsServer,t?.mtls);cp[n]||(cp[n]=new TTe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),cp[n].on("connection",(o,c)=>{let l=new EQ(c);l.isWebSocket=!0;let u=UT[n](l);hQ[n](o,l,u)}),OQ((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):cp[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),cp[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{$C[n]&&$C[n](o,c,l)})),r.push(i),_Q[t?.runFirst?"unshift":"push"]({listener:e,port:n}),hQ[n]=HT(_Q,n),UT[n]=HT(qC,n)}return r}a(MTe,"onWebSocket");function pQ(e,t){t.writeHead(404),t.end(`Not found
133
+ `)}a(pQ,"defaultNotFound")});module.exports=sI();