harperdb 4.6.24 → 4.6.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +78 -78
- package/bin/lite.js +72 -72
- package/launchServiceScripts/launchNatsIngestService.js +72 -72
- package/launchServiceScripts/launchNatsReplyService.js +72 -72
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +72 -72
- package/npm-shrinkwrap.json +475 -465
- package/package.json +3 -3
- package/server/Server.d.ts +2 -1
- package/server/jobs/jobProcess.js +72 -72
- package/server/threads/threadServer.js +72 -72
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.5e611ac2.js → main.ccedd5b8.js} +2 -2
- package/utility/scripts/restartHdb.js +72 -72
- /package/studio/build-local/static/js/{main.5e611ac2.js.LICENSE.txt → main.ccedd5b8.js.LICENSE.txt} +0 -0
package/bin/lite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var z4=Object.create;var qf=Object.defineProperty;var j4=Object.getOwnPropertyDescriptor;var Q4=Object.getOwnPropertyNames;var J4=Object.getPrototypeOf,X4=Object.prototype.hasOwnProperty;var o=(e,t)=>qf(e,"name",{value:t,configurable:!0});var ce=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),we=(e,t)=>{for(var r in t)qf(e,r,{get:t[r],enumerable:!0})},rM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Q4(t))!X4.call(e,s)&&s!==r&&qf(e,s,{get:()=>t[s],enumerable:!(n=j4(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?z4(J4(e)):{},rM(t||!e||!e.__esModule?qf(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>rM(qf({},"__esModule",{value:!0}),e);var bt=M((PIe,iM)=>{var{join:Z4,dirname:nM}=require("node:path"),{existsSync:e3,readFileSync:t3}=require("node:fs");function r3(){let t=__dirname,r,n=0;for(;!e3(r=Z4(t,"package.json"));)if(t===(t=nM(t))||n++>10)throw new Error("Could not find package root");return r}o(r3,"findPackageJson");var sM=r3(),n3=JSON.parse(t3(sM,"utf8")),s3=nM(sM);iM.exports={packageJson:n3,PACKAGE_ROOT:s3}});var LE=M((DIe,oM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=bt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let R=!1,T=!1;if(T=s(n(m,p))){let y=new Set;e.sync(h.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{y.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,p,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(R=!0)}),e.sync(h.map(N=>`${N}/**/*.js`),{cwd:n(m,p)}).forEach(N=>{if(!y.has(N.replace(/.js$/,".ts")))try{l(n(m,p,N))}catch{}})}else R=!0;if(R){console.log("Compiling TypeScript...");let y=d("npx",["tsc"],{cwd:m});if(y.stdout?.length&&console.log(y.stdout.toString()),y.stderr?.length&&console.log(y.stderr.toString()),T){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",Z=>{console.error("Error trying to compile TypeScript",Z)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let _=oM.constructor,g=_._findPath;_._findPath=function(R,T,y){if(R.startsWith(".")&&!y&&T.length===1&&T[0].startsWith(m)&&!T[0].includes("node_modules")){let N=r(m,T[0]),O;N.startsWith(p)?O=n(m,r(p,N)):O=n(m,p,N),(R.endsWith(".js")||R.endsWith(".ts"))&&(R=R.slice(0,-3));let F=n(O,R),Z=F+".js";if(s(Z))return Z;if(F.includes(".")&&s(F))return F}return g(R,T,y)}}});var Xs=M($n=>{"use strict";global.Resource=$n.Resource=void 0;global.tables=$n.tables={};global.databases=$n.databases={};global.getUser=$n.getUser=void 0;global.authenticateUser=$n.authenticateUser=void 0;global.server=$n.server={};global.contentTypes=$n.contentTypes=null;global.threads=$n.threads=[];global.logger={};global.RequestTarget=$n.RequestTarget=void 0;global.operation=$n.operation=void 0;$n._assignPackageExport=(e,t)=>{global[e]=$n[e]=t}});var $f={};we($f,{server:()=>Le});var aM,Le,Dr=ce(()=>{aM=w(Xs()),Le={};(0,aM._assignPackageExport)("server",Le)});var W={};we(W,{AUTH_AUDIT_STATUS:()=>Zs,AUTH_AUDIT_TYPES:()=>ya,BOOT_PROPS_FILE_NAME:()=>O3,BOOT_PROP_PARAMS:()=>uM,CLUSTERING_FLAG:()=>Jy,CLUSTERING_PROCESSES:()=>h3,CLUSTER_MESSAGE_TYPE_ENUM:()=>Qy,CLUSTER_OPERATIONS:()=>V3,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>dM,DATABASES_DIR_NAME:()=>Uc,DATABASES_PARAM_CONFIG:()=>z3,DEFAULT_DATABASE_NAME:()=>E3,ESCAPED_FORWARD_SLASH_REGEX:()=>I3,FORWARD_SLASH_REGEX:()=>A3,FUNC_VAL:()=>iX,GEO_CONVERSION_ENUM:()=>Y3,HDB_COMPONENT_CONFIG_FILE:()=>a3,HDB_CONFIG_FILE:()=>i3,HDB_DEFAULT_CONFIG_FILE:()=>o3,HDB_FILE_PERMISSIONS:()=>P3,HDB_HOME_DIR_NAME:()=>w3,HDB_PID_FILE:()=>p3,HDB_PROCESS_SERVICES:()=>m3,HDB_PROC_NAME:()=>c3,HDB_RESTART_SCRIPT:()=>l3,HDB_ROOT_DIR_NAME:()=>Ky,HDB_SETTINGS_NAMES:()=>jy,HDB_SUPPORT_ADDRESS:()=>lM,INFO_TABLE_HASH_ATTRIBUTE:()=>x3,INSERT_MAX_CHARACTER_SIZE:()=>v3,INSTALL_PROMPTS:()=>M3,ITC_EVENT_TYPES:()=>Zy,JOB_STATUS_ENUM:()=>k3,JOB_TYPE_ENUM:()=>j3,JWT_ENUM:()=>Yf,LAUNCH_SERVICE_SCRIPTS:()=>g3,LEGACY_CONFIG_PARAMS:()=>W3,LEGACY_DATABASES_DIR_NAME:()=>vE,LICENSE_FILE_NAME:()=>H3,LICENSE_KEY_DIR_NAME:()=>zy,LICENSE_VALUES:()=>Q3,LOG_LEVELS:()=>Vf,LOG_NAMES:()=>_3,MEM_SETTING_KEY:()=>N3,METADATA_PROPERTY:()=>Z3,NODE_ERROR_CODES:()=>X3,OPERATIONS_ENUM:()=>q,PERMS_CRUD_ENUM:()=>nX,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>rX,PRE_4_0_0_VERSION:()=>oX,PROCESS_DESCRIPTORS:()=>f3,PROCESS_NAME_ENV_PROP:()=>D3,RAM_ALLOCATION_ENUM:()=>J3,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>xE,REG_KEY_FILE_NAME:()=>F3,RESTART_TIMEOUT_MS:()=>C3,ROLE_TYPES_ENUM:()=>S3,S3_BUCKET_AUTH_KEYS:()=>q3,SEARCH_NOT_FOUND_MESSAGE:()=>R3,SEARCH_WILDCARDS:()=>sX,SERVICE_ACTIONS_ENUM:()=>K3,SUPPORT_HELP_MSG:()=>T3,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>B3,SYSTEM_SCHEMA_NAME:()=>Kf,SYSTEM_TABLE_NAMES:()=>gu,THREAD_TYPES:()=>eA,TIME_STAMP_NAMES:()=>tX,TIME_STAMP_NAMES_ENUM:()=>eX,TRANSACTIONS_DIR_NAME:()=>L3,UNICODE_FORWARD_SLASH:()=>b3,UNICODE_PERIOD:()=>y3,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>U3,VALID_S3_FILE_TYPES:()=>G3,VALID_SQL_OPS_ENUM:()=>$3,VALUE_SEARCH_COMPARATORS:()=>UE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Xy});var DE,ME,i3,o3,Ky,a3,c3,l3,cM,Vy,Yy,Wy,u3,d3,f3,m3,h3,p3,E3,_3,Vf,g3,S3,lM,T3,R3,y3,A3,b3,I3,N3,Kf,w3,zy,O3,C3,P3,Uc,vE,L3,D3,uM,M3,v3,U3,gu,x3,B3,F3,H3,k3,q,G3,q3,$3,V3,K3,Y3,jy,W3,U,dM,z3,j3,Qy,Q3,J3,X3,Z3,Jy,fM,mM,eX,tX,rX,UE,Xy,nX,sX,iX,xE,Yf,Zy,eA,oX,Zs,ya,k=ce(()=>{DE=require("node:path"),ME=w(bt()),i3="harperdb-config.yaml",o3="defaultConfig.yaml",Ky="hdb",a3="config.yaml",c3="harperdb.js",l3="restartHdb.js",cM="HarperDB",Vy="Custom Functions",Yy="Clustering Hub",Wy="Clustering Leaf",u3="Clustering Ingest Service",d3="Clustering Reply Service",f3={HDB:cM,CLUSTERING_HUB:Yy,CLUSTERING_LEAF:Wy,CLUSTERING_INGEST_SERVICE:u3,CLUSTERING_REPLY_SERVICE:d3,CUSTOM_FUNCTIONS:Vy,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},m3={harperdb:cM,"clustering hub":Yy,"clustering leaf":Wy,"custom functions":Vy,custom_functions:Vy,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},h3={CLUSTERING_HUB_PROC_DESCRIPTOR:Yy,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wy},p3="hdb.pid",E3="data",_3={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Vf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},g3={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},S3={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},lM="support@harperdb.io",T3=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${lM}`,R3="None of the specified records were found.",y3="U+002E",A3=/\//g,b3="U+002F",I3=/U\+002F/g,N3="--max-old-space-size=",Kf="system",w3=".harperdb",zy="keys",O3="hdb_boot_properties.file",C3=6e4,P3=448,Uc="database",vE="schema",L3="transactions",D3="PROCESS_NAME",uM={SETTINGS_PATH_KEY:"settings_path"},M3={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},v3=250,U3={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gu={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},x3="info_id",B3={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},F3="060493.ks",H3=".license",k3={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},q={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},G3={CSV:".csv",JSON:".json"},q3={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},$3={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},V3={[q.INSERT]:q.INSERT,[q.UPDATE]:q.UPDATE,[q.UPSERT]:q.UPSERT,[q.DELETE]:q.DELETE},K3={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},Y3={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},jy={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},W3={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},U={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},dM={settings_path:uM.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];dM[t.toLowerCase()]=t}z3={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},j3={csv_file_load:"csv_file_load",csv_data_load:q.CSV_DATA_LOAD,csv_url_load:q.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},Qy={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},Q3={VERSION_DEFAULT:"2.2.0"},J3={DEVELOPMENT:8192,DEFAULT:512},X3={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Z3=Symbol("metadata"),Jy="__clustering__",fM="__createdtime__",mM="__updatedtime__",eX={CREATED_TIME:fM,UPDATED_TIME:mM},tX=[fM,mM],rX=15984864e5,UE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Xy={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},nX={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},sX=["*","%"],iX="func_val",xE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Zy={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},eA={HTTP:"http"},oX="3.x.x",Zs={SUCCESS:"success",FAILURE:"failure"},ya={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var xc=M((vIe,EM)=>{"use strict";var hM=require("minimist");EM.exports=aX;function aX(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=pM(process.env),n=pM(hM(process.argv))):(r=process.env,n=hM(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(aX,"assignCMDENVVariables");function pM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(pM,"objKeysToLowerCase")});var tA=M((xIe,_M)=>{"use strict";var cX=require("util"),lX=require("path"),uX=require("child_process"),dX=cX.promisify(uX.execFile),fX=1e3*1e3*10;_M.exports={findPs:mX};async function mX(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await dX("ps",["wwxo",`pid,${r}`],{maxBuffer:fX});for(let s of n.trim().split(`
|
|
2
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:lX.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(mX,"findPs")});var Vt=M((FIe,SM)=>{"use strict";var hX="__dbis__",pX="__txns__",EX="__environment_name__",_X="__dbi_defintion__",gX={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},SX=["__createdtime__","__updatedtime__"],TX="\uFFFF",gM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RX=Object.values(gM);SM.exports={AUDIT_STORE_NAME:pX,INTERNAL_DBIS_NAME:hX,DBI_DEFINITION_NAME:_X,SEARCH_TYPES:gX,TIMESTAMP_NAMES:SX,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:EX,TRANSACTIONS_DBI_NAMES_ENUM:gM,TRANSACTIONS_DBIS:RX,OVERFLOW_MARKER:TX}});var It=M((HIe,NM)=>{"use strict";var Jf=(k(),v(W)),yX=ie(),Rn=oe(),Xf=require("path"),AX=require("minimist"),TM=require("fs-extra"),RM=require("lodash");Rn.initSync();var{CONFIG_PARAMS:Aa,DATABASES_PARAM_CONFIG:Wf,SYSTEM_SCHEMA_NAME:BE}=Jf,zf,jf,Qf;function yM(){if(zf!==void 0)return zf;if(Rn.getHdbBasePath()!==void 0)return zf=Rn.get(Aa.STORAGE_PATH)||Xf.join(Rn.getHdbBasePath(),Jf.DATABASES_DIR_NAME),zf}o(yM,"getBaseSchemaPath");function AM(){if(jf!==void 0)return jf;if(Rn.getHdbBasePath()!==void 0)return jf=IM(BE),jf}o(AM,"getSystemSchemaPath");function bM(){if(Qf!==void 0)return Qf;if(Rn.getHdbBasePath()!==void 0)return Qf=Rn.get(Jf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Xf.join(Rn.getHdbBasePath(),Jf.TRANSACTIONS_DIR_NAME),Qf}o(bM,"getTransactionAuditStoreBasePath");function bX(e,t){let r=Rn.get(Aa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Xf.join(bM(),e.toString())}o(bX,"getTransactionAuditStorePath");function IM(e,t){e=e.toString(),t=t&&t.toString();let r=Rn.get(Jf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Xf.join(yM(),e)}o(IM,"getSchemaPath");function IX(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,AX(process.argv));let n=r[Aa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!yX.isObject(n))throw a;i=n}for(let a of i){let c=a[BE];if(!c)continue;let l=Rn.get(Aa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Wf.PATH];if(u)return RM.set(l,[BE,Wf.TABLES,t,Wf.PATH],u),Rn.setProperty(Aa.DATABASES,l),u;let d=c?.[Wf.PATH];if(d)return RM.set(l,[BE,Wf.PATH],d),Rn.setProperty(Aa.DATABASES,l),d}}let s=r[Aa.STORAGE_PATH.toUpperCase()];if(s){if(!TM.pathExistsSync(s))throw new Error(s+" does not exist");let i=Xf.join(s,e);return TM.mkdirsSync(i),Rn.setProperty(Aa.STORAGE_PATH,s),i}return AM()}o(IX,"initSystemSchemaPaths");function NX(){zf=void 0,jf=void 0,Qf=void 0}o(NX,"resetPaths");NM.exports={getBaseSchemaPath:yM,getSystemSchemaPath:AM,getTransactionAuditStorePath:bX,getTransactionAuditStoreBasePath:bM,getSchemaPath:IM,initSystemSchemaPaths:IX,resetPaths:NX}});var tn=M((GIe,UM)=>{"use strict";var wM=(k(),v(W)),OM=Vt(),CM={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},PM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),LM={500:PM("There was an error processing your request."),400:"Invalid request"},wX=LM[CM.INTERNAL_SERVER_ERROR],OX={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},CX={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},PX={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},LX={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${OM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${OM.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},DX={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${wM.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${wM.INSERT_MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},DM={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},MX={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},vX={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},UX={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},xX={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},BX={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},MM={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},vM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},FX={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},HX={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},kX={...DM,...PX,...OX,...MX,...vX,...UX,...xX,...BX,...DX,...MM,...vM,...FX,...HX,...CX};UM.exports={CHECK_LOGS_WRAPPER:PM,HDB_ERROR_MSGS:kX,DEFAULT_ERROR_MSGS:LM,DEFAULT_ERROR_RESP:wX,HTTP_STATUS_CODES:CM,LMDB_ERRORS_ENUM:LX,AUTHENTICATION_ERROR_MSGS:DM,VALIDATION_ERROR_MSGS:MM,ITC_ERRORS:vM}});var yn=M((KIe,kM)=>{"use strict";var GX=tn().LMDB_ERRORS_ENUM,$Ie=require("lmdb"),qX=Vt(),VIe=require("buffer").Buffer,{OVERFLOW_MARKER:xM,MAX_SEARCH_KEY_LENGTH:FE}=qX,BM=["number","string","symbol","boolean","bigint"];function $X(e){if(e=e?.primaryStore||e,!e)throw new Error(GX.ENV_REQUIRED)}o($X,"validateEnv");function VX(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(VX,"stringifyData");function KX(e){return e instanceof Date?e.valueOf():e}o(KX,"convertKeyValueToWrite");function YX(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(BM.includes(typeof e))return e.length>FE?[e.slice(0,FE)+xM]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(BM.includes(typeof i))i.length>FE?r.push(i.slice(0,FE)+xM):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(YX,"getIndexedValues");var HE=0,FM=0;function HM(){FM=Date.now()-performance.now()}o(HM,"adjustStartTime");HM();var WX=6e4;setInterval(HM,WX).unref();function zX(){let e=performance.now()+FM;return e>HE?(HE=e,e):(HE+=488e-6,HE)}o(zX,"getNextMonotonicTime");kM.exports={validateEnv:$X,stringifyData:VX,convertKeyValueToWrite:KX,getNextMonotonicTime:zX,getIndexedValues:YX}});var Zf=M((WIe,GM)=>{"use strict";var jX=(k(),v(W)).OPERATIONS_ENUM,rA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=jX.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};GM.exports=rA});var ge=M((jIe,VM)=>{"use strict";var Su=tn(),QX=Q(),JX=(k(),v(W)),kE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,qM),this.statusCode=n||Su.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Su.DEFAULT_ERROR_MSGS[n]?Su.DEFAULT_ERROR_MSGS[n]:Su.DEFAULT_ERROR_MSGS[Su.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&QX[s](i)}},nA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},sA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function qM(e,t,r,n=JX.LOG_LEVELS.ERROR,s=null,i=!1){if($M(e))return e;let a=new kE(e,t,r,n,s);return i&&delete a.stack,a}o(qM,"handleHDBError");function Tu(e){this.message=e}o(Tu,"Violation");Tu.prototype=Object.create(Error.prototype);Tu.prototype.constructor=Tu;Tu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var iA=class extends Tu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function $M(e){return e.__proto__.constructor.name===kE.name}o($M,"isHDBError");VM.exports={isHDBError:$M,handleHDBError:qM,ClientError:nA,ServerError:sA,AccessViolation:iA,Violation:Tu,hdbErrors:Su}});var em=M((XIe,zM)=>{"use strict";var JIe=Zf(),GE=(k(),v(W)),oA=ie(),KM=Q(),XX=require("uuid"),{handleHDBError:qE,hdbErrors:ZX}=ge(),{HDB_ERROR_MSGS:$E,HTTP_STATUS_CODES:VE}=ZX;zM.exports=YM;function YM(e,t,r){for(let s=0;s<t.length;s++)WM(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];e6(i,r,e.operation)}}o(YM,"processRows");YM.validateAttribute=WM;function WM(e){if(Buffer.byteLength(String(e))>GE.INSERT_MAX_CHARACTER_SIZE)throw qE(new Error,$E.ATTR_NAME_LENGTH_ERR(e),VE.BAD_REQUEST,void 0,void 0,!0);if(oA.isEmptyOrZeroLength(e)||oA.isEmpty(e.trim()))throw qE(new Error,$E.ATTR_NAME_NULLISH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(WM,"validateAttribute");function e6(e,t,r){if(!e.hasOwnProperty(t)||oA.isEmptyOrZeroLength(e[t])){if(r===GE.OPERATIONS_ENUM.INSERT||r===GE.OPERATIONS_ENUM.UPSERT){e[t]=XX.v4();return}throw KM.error("Update transaction aborted due to record with no hash value:",e),qE(new Error,$E.RECORD_MISSING_HASH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>GE.INSERT_MAX_CHARACTER_SIZE)throw KM.error(e),qE(new Error,$E.HASH_VAL_LENGTH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(e6,"validateHash")});function tv(e){cA=e}function s6(){n6=setInterval(function(){for(let e of aA)if(e.stale){let t=e.getContext()?.url;XM.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},r6).unref()}var lA,JM,XM,ZM,ev,jM,aA,t6,Eo,tm,QM,cA,_o,KE,r6,n6,rm=ce(()=>{lA=w(yn()),JM=w(ge()),XM=w(Q()),ZM=w(oe());k();ev=w(ie()),jM=100,aA=new Set,t6=(0,ev.convertToMS)(ZM.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Eo={CLOSED:0,OPEN:1,LINGERING:2};o(tv,"replicationConfirmation");_o=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Eo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Eo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),aA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(aA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(tm&&!this.overloadChecked&&performance.now()-QM>t6)throw new JM.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Eo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Eo.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,lA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let h=f;h<this.validated;h++)this.writes[h]?.validate?.(this.timestamp);let m;for(let h=f;h<this.validated;h++){let p=this.writes[h];p&&(p.before||p.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let h=0;h<2;h++){let p;for(let _=f;_<this.validated;_++){let g=this.writes[_];if(!g)continue;let R=g[h===0?"before":"beforeIntermediate"];if(R){let T=R();p?p.push?p.push(T):p=[p,T]:p=T}}p&&await(p.push?Promise.all(p):p)}}catch(h){throw this.abort(),h}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Eo.LINGERING:Eo.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<jM>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return tm||(tm=s,QM=performance.now(),tm.then(()=>{tm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,h=this.writes[this.writes.length-1];cA&&h&&i.push(cA(m,h.store.getEntry(h.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+jM/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Eo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},KE=class extends _o{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lA.getNextMonotonicTime)())}getReadTxn(){}},r6=3e4;o(s6,"startMonitoringTxns");s6()});var rv,Vn,uA,Ru=ce(()=>{rv=require("events"),Vn=class extends rv.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new uA;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},uA=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Ft(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Eo.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _o;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var nv,Bc=ce(()=>{nv=w(Xs());rm();o(Ft,"transaction");(0,nv._assignPackageExport)("transaction",Ft);Ft.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ft.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var fA={};we(fA,{add:()=>YE,applyReverse:()=>sv,getRecordAtTime:()=>dA,rebuildUpdateBefore:()=>WE});function YE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function WE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,YE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function sv(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=i6[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=iv}}function dA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Nt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":sv(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===iv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Nt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var i6,iv,zE=ce(()=>{Li();o(YE,"add");YE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};i6={add:YE};o(WE,"rebuildUpdateBefore");o(sv,"applyReverse");iv={};o(dA,"getRecordAtTime")});var ei=M(QE=>{var jE=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])jE.logsAtLevel(e)&&(QE[e]=jE[e]);QE.loggerWithTag=e=>jE.loggerWithTag(e,!0);QE.setLogLevel=jE.setLogLevel});var fv={};we(fv,{parse:()=>pA,streamAsJSON:()=>sm,stringify:()=>Fc});function sm(e){return new mA({value:e})}function ov(e){return console.error(e),JSON.stringify(nm(e))}function av(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Fc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===uv)return dv(e);if(t.resolution)return t.resolution.then(()=>Fc(e));throw t}}function dv(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=dv(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Fc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function pA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),c6.test(e)?o6.parse(e):JSON.parse(e)):null}var cv,hA,lv,o6,a6,uv,nm,mA,c6,EA=ce(()=>{cv=require("stream"),hA=w(Q()),lv=w(require("json-bigint-fixes")),o6=(0,lv.default)({useNativeBigInt:!0}),a6=1e4,uv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw uv};({errorToString:nm}=hA);o(sm,"streamAsJSON");mA=class extends cv.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(hA.warn("Error serializing in stream",c),a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),ov)}catch(s){yield ov(s)}else yield Fc(t)}else yield Fc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);av(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(nm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>a6?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return av(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(nm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(ov,"handleError");o(av,"when");o(Fc,"stringify");o(dv,"jsStringify");c6=/[[,:]\s*-?\d{16,}/;o(pA,"parse")});var yv={};we(yv,{asyncSerialization:()=>RA,contentTypes:()=>TA,findBestSerializer:()=>XE,getDeserializer:()=>To,hasAsyncSerialization:()=>yA,registerContentHandlers:()=>am,serialize:()=>cm,serializeMessage:()=>ba,toCsvStream:()=>JE});function l6(e){try{return e?.[0]===123?SA(e):e}catch{return e}}function am(e){e.register(u6,{serializers:[{regex:/^application\/json$/,serializer:sm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Hc.EncoderStream(om).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?kc.Readable.from((0,Di.encodeIter)(t,om)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),JE(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Di.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Hc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function XE(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let p of d){let _=p.indexOf("=");m[p.substring(0,_)]=p.substring(_+1)}f=+m.q;let h=rn.get(u);if(h){let p=(h.q||1)*f;p>s&&(n=h,i=h.type||u,s=p,a=m)}}if(!n){if(r)throw new pv.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(rn.keys()).join(", "),406);n=rn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function cm(e,t,r){let n=hv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof Rs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=XE(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),gA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,So.createBrotliCompress)({params:{[So.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?So.constants.BROTLI_MODE_TEXT:So.constants.BROTLI_MODE_GENERIC,[So.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>hv?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,So.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function ba(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;go=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=XE(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=im(e);return go?.length>0?(go.length===1?go[0]:Promise.all(go)).then(()=>ba(e,t,!0)):n}finally{go=void 0}}function RA(e){if(go)go.push(e);else throw new Error("Unable to serialize asynchronously")}function yA(){return!!go}function d6(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function m6(e){return f6.includes(e)}function h6(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function To(e="",t=!1){let r=h6(e),n=r.type&&rn.get(r.type)?.deserialize||p6(r);return t?s=>d6(s).then(n):n}function p6(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!m6(e.parameters.charset)&&gA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return SA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function E6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function JE(e,t){let r=kc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new gv.Transform(n,s);return r.pipe(i)}var Di,Hc,So,pv,kc,Ev,_A,_v,gA,gv,Sv,Tv,im,SA,om,rn,TA,mv,Rv,u6,hv,go,f6,Ro=ce(()=>{EA();Di=require("msgpackr"),Hc=require("cbor-x"),So=require("zlib"),pv=w(ge()),kc=w(require("stream"));Dr();Ev=w(Xs()),_A=w(oe());k();_v=w(require("yaml")),gA=w(ei());Kn();gv=require("json2csv"),Sv=w(require("fastify-plugin")),Tv=_A.default.get(U.SERIALIZATION_BIGINT)!==!1,im=Tv?Fc:JSON.stringify,SA=Tv?pA:JSON.parse,om={useRecords:!1,useToJSON:!0},rn=new Map,TA=rn;Le.contentTypes=TA;(0,Ev._assignPackageExport)("contentTypes",TA);rn.set("application/json",{serializeStream:sm,serialize:im,deserialize(e){return SA(e)},q:.8});mv=new Hc.Encoder(om);rn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Hc.EncoderStream(om).end(e)},serialize:mv.encode,deserialize:mv.decode,q:1});rn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kc.Readable.from((0,Di.encodeIter)(e,om)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});rn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),JE(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),JE(e,e?.getColumns?.())},q:.1});rn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return kc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});rn.set("text/yaml",{serialize(e){return _v.stringify(e,{aliasDuplicateObjects:!1})},q:.7});rn.set("text/event-stream",{serializeStream:o(function(e){return kc.Readable.from(E6(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
1
|
+
var J4=Object.create;var qf=Object.defineProperty;var X4=Object.getOwnPropertyDescriptor;var Z4=Object.getOwnPropertyNames;var e3=Object.getPrototypeOf,t3=Object.prototype.hasOwnProperty;var o=(e,t)=>qf(e,"name",{value:t,configurable:!0});var le=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Oe=(e,t)=>{for(var r in t)qf(e,r,{get:t[r],enumerable:!0})},oM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Z4(t))!t3.call(e,s)&&s!==r&&qf(e,s,{get:()=>t[s],enumerable:!(n=X4(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?J4(e3(e)):{},oM(t||!e||!e.__esModule?qf(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>oM(qf({},"__esModule",{value:!0}),e);var bt=M((MIe,lM)=>{var{join:r3,dirname:aM}=require("node:path"),{existsSync:n3,readFileSync:s3}=require("node:fs");function i3(){let t=__dirname,r,n=0;for(;!n3(r=r3(t,"package.json"));)if(t===(t=aM(t))||n++>10)throw new Error("Could not find package root");return r}o(i3,"findPackageJson");var cM=i3(),o3=JSON.parse(s3(cM,"utf8")),a3=aM(cM);lM.exports={packageJson:o3,PACKAGE_ROOT:a3}});var LE=M((UIe,uM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=bt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let y=!1,T=!1;if(T=s(n(m,p))){let R=new Set;e.sync(h.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let C=0,G=0;try{R.add(N),C=i(n(m,N)).mtimeMs-5e3,G=i(n(m,p,N.replace(/.ts$/,".js"))).mtimeMs}catch{}C>G&&(y=!0)}),e.sync(h.map(N=>`${N}/**/*.js`),{cwd:n(m,p)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,p,N))}catch{}})}else y=!0;if(y){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),T){let N=n(t(),"harperdb-tsc.pid"),C=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),C=!0}catch{}if(!C){console.log("Starting background TypeScript compilation...");let G=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});G.on("error",z=>{console.error("Error trying to compile TypeScript",z)}),G.pid&&c(N,String(G.pid),"utf-8"),G.unref()}}}}let _=uM.constructor,g=_._findPath;_._findPath=function(y,T,R){if(y.startsWith(".")&&!R&&T.length===1&&T[0].startsWith(m)&&!T[0].includes("node_modules")){let N=r(m,T[0]),C;N.startsWith(p)?C=n(m,r(p,N)):C=n(m,p,N),(y.endsWith(".js")||y.endsWith(".ts"))&&(y=y.slice(0,-3));let G=n(C,y),z=G+".js";if(s(z))return z;if(G.includes(".")&&s(G))return G}return g(y,T,R)}}});var Xs=M($n=>{"use strict";global.Resource=$n.Resource=void 0;global.tables=$n.tables={};global.databases=$n.databases={};global.getUser=$n.getUser=void 0;global.authenticateUser=$n.authenticateUser=void 0;global.server=$n.server={};global.contentTypes=$n.contentTypes=null;global.threads=$n.threads=[];global.logger={};global.RequestTarget=$n.RequestTarget=void 0;global.operation=$n.operation=void 0;$n._assignPackageExport=(e,t)=>{global[e]=$n[e]=t}});var $f={};Oe($f,{server:()=>De});var dM,De,Dr=le(()=>{dM=w(Xs()),De={};(0,dM._assignPackageExport)("server",De)});var Y={};Oe(Y,{AUTH_AUDIT_STATUS:()=>Zs,AUTH_AUDIT_TYPES:()=>ya,BOOT_PROPS_FILE_NAME:()=>L3,BOOT_PROP_PARAMS:()=>hM,CLUSTERING_FLAG:()=>eA,CLUSTERING_PROCESSES:()=>_3,CLUSTER_MESSAGE_TYPE_ENUM:()=>Zy,CLUSTER_OPERATIONS:()=>W3,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>pM,DATABASES_DIR_NAME:()=>Uc,DATABASES_PARAM_CONFIG:()=>J3,DEFAULT_DATABASE_NAME:()=>S3,ESCAPED_FORWARD_SLASH_REGEX:()=>O3,FORWARD_SLASH_REGEX:()=>N3,FUNC_VAL:()=>cX,GEO_CONVERSION_ENUM:()=>j3,HDB_COMPONENT_CONFIG_FILE:()=>u3,HDB_CONFIG_FILE:()=>c3,HDB_DEFAULT_CONFIG_FILE:()=>l3,HDB_FILE_PERMISSIONS:()=>M3,HDB_HOME_DIR_NAME:()=>P3,HDB_PID_FILE:()=>g3,HDB_PROCESS_SERVICES:()=>E3,HDB_PROC_NAME:()=>d3,HDB_RESTART_SCRIPT:()=>f3,HDB_ROOT_DIR_NAME:()=>zy,HDB_SETTINGS_NAMES:()=>Xy,HDB_SUPPORT_ADDRESS:()=>mM,INFO_TABLE_HASH_ATTRIBUTE:()=>H3,INSERT_MAX_CHARACTER_SIZE:()=>B3,INSTALL_PROMPTS:()=>x3,ITC_EVENT_TYPES:()=>rA,JOB_STATUS_ENUM:()=>$3,JOB_TYPE_ENUM:()=>X3,JWT_ENUM:()=>Yf,LAUNCH_SERVICE_SCRIPTS:()=>R3,LEGACY_CONFIG_PARAMS:()=>Q3,LEGACY_DATABASES_DIR_NAME:()=>vE,LICENSE_FILE_NAME:()=>q3,LICENSE_KEY_DIR_NAME:()=>Jy,LICENSE_VALUES:()=>Z3,LOG_LEVELS:()=>Vf,LOG_NAMES:()=>T3,MEM_SETTING_KEY:()=>C3,METADATA_PROPERTY:()=>rX,NODE_ERROR_CODES:()=>tX,OPERATIONS_ENUM:()=>q,PERMS_CRUD_ENUM:()=>oX,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>iX,PRE_4_0_0_VERSION:()=>lX,PROCESS_DESCRIPTORS:()=>p3,PROCESS_NAME_ENV_PROP:()=>U3,RAM_ALLOCATION_ENUM:()=>eX,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>xE,REG_KEY_FILE_NAME:()=>G3,RESTART_TIMEOUT_MS:()=>D3,ROLE_TYPES_ENUM:()=>y3,S3_BUCKET_AUTH_KEYS:()=>K3,SEARCH_NOT_FOUND_MESSAGE:()=>b3,SEARCH_WILDCARDS:()=>aX,SERVICE_ACTIONS_ENUM:()=>z3,SUPPORT_HELP_MSG:()=>A3,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>k3,SYSTEM_SCHEMA_NAME:()=>Kf,SYSTEM_TABLE_NAMES:()=>gu,THREAD_TYPES:()=>nA,TIME_STAMP_NAMES:()=>sX,TIME_STAMP_NAMES_ENUM:()=>nX,TRANSACTIONS_DIR_NAME:()=>v3,UNICODE_FORWARD_SLASH:()=>w3,UNICODE_PERIOD:()=>I3,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>F3,VALID_S3_FILE_TYPES:()=>V3,VALID_SQL_OPS_ENUM:()=>Y3,VALUE_SEARCH_COMPARATORS:()=>UE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>tA});var DE,ME,c3,l3,zy,u3,d3,f3,fM,Wy,jy,Qy,m3,h3,p3,E3,_3,g3,S3,T3,Vf,R3,y3,mM,A3,b3,I3,N3,w3,O3,C3,Kf,P3,Jy,L3,D3,M3,Uc,vE,v3,U3,hM,x3,B3,F3,gu,H3,k3,G3,q3,$3,q,V3,K3,Y3,W3,z3,j3,Xy,Q3,U,pM,J3,X3,Zy,Z3,eX,tX,rX,eA,EM,_M,nX,sX,iX,UE,tA,oX,aX,cX,xE,Yf,rA,nA,lX,Zs,ya,k=le(()=>{DE=require("node:path"),ME=w(bt()),c3="harperdb-config.yaml",l3="defaultConfig.yaml",zy="hdb",u3="config.yaml",d3="harperdb.js",f3="restartHdb.js",fM="HarperDB",Wy="Custom Functions",jy="Clustering Hub",Qy="Clustering Leaf",m3="Clustering Ingest Service",h3="Clustering Reply Service",p3={HDB:fM,CLUSTERING_HUB:jy,CLUSTERING_LEAF:Qy,CLUSTERING_INGEST_SERVICE:m3,CLUSTERING_REPLY_SERVICE:h3,CUSTOM_FUNCTIONS:Wy,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"},E3={harperdb:fM,"clustering hub":jy,"clustering leaf":Qy,"custom functions":Wy,custom_functions:Wy,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},_3={CLUSTERING_HUB_PROC_DESCRIPTOR:jy,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qy},g3="hdb.pid",S3="data",T3={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Vf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},R3={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,DE.join)(ME.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},y3={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},mM="support@harperdb.io",A3=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${mM}`,b3="None of the specified records were found.",I3="U+002E",N3=/\//g,w3="U+002F",O3=/U\+002F/g,C3="--max-old-space-size=",Kf="system",P3=".harperdb",Jy="keys",L3="hdb_boot_properties.file",D3=6e4,M3=448,Uc="database",vE="schema",v3="transactions",U3="PROCESS_NAME",hM={SETTINGS_PATH_KEY:"settings_path"},x3={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"},B3=250,F3={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gu={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},H3="info_id",k3={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"},G3="060493.ks",q3=".license",$3={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},q={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},V3={CSV:".csv",JSON:".json"},K3={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Y3={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},W3={[q.INSERT]:q.INSERT,[q.UPDATE]:q.UPDATE,[q.UPSERT]:q.UPSERT,[q.DELETE]:q.DELETE},z3={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"},j3={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Xy={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"},Q3={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},U={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},pM={settings_path:hM.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];pM[t.toLowerCase()]=t}J3={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},X3={csv_file_load:"csv_file_load",csv_data_load:q.CSV_DATA_LOAD,csv_url_load:q.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},Zy={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"},Z3={VERSION_DEFAULT:"2.2.0"},eX={DEVELOPMENT:8192,DEFAULT:512},tX={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},rX=Symbol("metadata"),eA="__clustering__",EM="__createdtime__",_M="__updatedtime__",nX={CREATED_TIME:EM,UPDATED_TIME:_M},sX=[EM,_M],iX=15984864e5,UE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},tA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},oX={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},aX=["*","%"],cX="func_val",xE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},rA={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"},nA={HTTP:"http"},lX="3.x.x",Zs={SUCCESS:"success",FAILURE:"failure"},ya={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var xc=M((BIe,TM)=>{"use strict";var gM=require("minimist");TM.exports=uX;function uX(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=SM(process.env),n=SM(gM(process.argv))):(r=process.env,n=gM(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(uX,"assignCMDENVVariables");function SM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(SM,"objKeysToLowerCase")});var sA=M((HIe,RM)=>{"use strict";var dX=require("util"),fX=require("path"),mX=require("child_process"),hX=dX.promisify(mX.execFile),pX=1e3*1e3*10;RM.exports={findPs:EX};async function EX(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await hX("ps",["wwxo",`pid,${r}`],{maxBuffer:pX});for(let s of n.trim().split(`
|
|
2
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:fX.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(EX,"findPs")});var Vt=M((GIe,AM)=>{"use strict";var _X="__dbis__",gX="__txns__",SX="__environment_name__",TX="__dbi_defintion__",RX={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"},yX=["__createdtime__","__updatedtime__"],AX="\uFFFF",yM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},bX=Object.values(yM);AM.exports={AUDIT_STORE_NAME:gX,INTERNAL_DBIS_NAME:_X,DBI_DEFINITION_NAME:TX,SEARCH_TYPES:RX,TIMESTAMP_NAMES:yX,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:SX,TRANSACTIONS_DBI_NAMES_ENUM:yM,TRANSACTIONS_DBIS:bX,OVERFLOW_MARKER:AX}});var It=M((qIe,PM)=>{"use strict";var Jf=(k(),v(Y)),IX=ie(),yn=ae(),Xf=require("path"),NX=require("minimist"),bM=require("fs-extra"),IM=require("lodash");yn.initSync();var{CONFIG_PARAMS:Aa,DATABASES_PARAM_CONFIG:Wf,SYSTEM_SCHEMA_NAME:BE}=Jf,zf,jf,Qf;function NM(){if(zf!==void 0)return zf;if(yn.getHdbBasePath()!==void 0)return zf=yn.get(Aa.STORAGE_PATH)||Xf.join(yn.getHdbBasePath(),Jf.DATABASES_DIR_NAME),zf}o(NM,"getBaseSchemaPath");function wM(){if(jf!==void 0)return jf;if(yn.getHdbBasePath()!==void 0)return jf=CM(BE),jf}o(wM,"getSystemSchemaPath");function OM(){if(Qf!==void 0)return Qf;if(yn.getHdbBasePath()!==void 0)return Qf=yn.get(Jf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Xf.join(yn.getHdbBasePath(),Jf.TRANSACTIONS_DIR_NAME),Qf}o(OM,"getTransactionAuditStoreBasePath");function wX(e,t){let r=yn.get(Aa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Xf.join(OM(),e.toString())}o(wX,"getTransactionAuditStorePath");function CM(e,t){e=e.toString(),t=t&&t.toString();let r=yn.get(Jf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Xf.join(NM(),e)}o(CM,"getSchemaPath");function OX(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,NX(process.argv));let n=r[Aa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!IX.isObject(n))throw a;i=n}for(let a of i){let c=a[BE];if(!c)continue;let l=yn.get(Aa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Wf.PATH];if(u)return IM.set(l,[BE,Wf.TABLES,t,Wf.PATH],u),yn.setProperty(Aa.DATABASES,l),u;let d=c?.[Wf.PATH];if(d)return IM.set(l,[BE,Wf.PATH],d),yn.setProperty(Aa.DATABASES,l),d}}let s=r[Aa.STORAGE_PATH.toUpperCase()];if(s){if(!bM.pathExistsSync(s))throw new Error(s+" does not exist");let i=Xf.join(s,e);return bM.mkdirsSync(i),yn.setProperty(Aa.STORAGE_PATH,s),i}return wM()}o(OX,"initSystemSchemaPaths");function CX(){zf=void 0,jf=void 0,Qf=void 0}o(CX,"resetPaths");PM.exports={getBaseSchemaPath:NM,getSystemSchemaPath:wM,getTransactionAuditStorePath:wX,getTransactionAuditStoreBasePath:OM,getSchemaPath:CM,initSystemSchemaPaths:OX,resetPaths:CX}});var rn=M((VIe,HM)=>{"use strict";var LM=(k(),v(Y)),DM=Vt(),MM={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},vM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),UM={500:vM("There was an error processing your request."),400:"Invalid request"},PX=UM[MM.INTERNAL_SERVER_ERROR],LX={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},DX={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},MX={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},vX={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 ${DM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${DM.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"},UX={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${LM.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 ${LM.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"},xM={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"},xX={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},BX={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},FX={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},HX={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},kX={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},BM={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},FM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},GX={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"},qX={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},$X={...xM,...MX,...LX,...xX,...BX,...FX,...HX,...kX,...UX,...BM,...FM,...GX,...qX,...DX};HM.exports={CHECK_LOGS_WRAPPER:vM,HDB_ERROR_MSGS:$X,DEFAULT_ERROR_MSGS:UM,DEFAULT_ERROR_RESP:PX,HTTP_STATUS_CODES:MM,LMDB_ERRORS_ENUM:vX,AUTHENTICATION_ERROR_MSGS:xM,VALIDATION_ERROR_MSGS:BM,ITC_ERRORS:FM}});var An=M((zIe,VM)=>{"use strict";var VX=rn().LMDB_ERRORS_ENUM,YIe=require("lmdb"),KX=Vt(),WIe=require("buffer").Buffer,{OVERFLOW_MARKER:kM,MAX_SEARCH_KEY_LENGTH:FE}=KX,GM=["number","string","symbol","boolean","bigint"];function YX(e){if(e=e?.primaryStore||e,!e)throw new Error(VX.ENV_REQUIRED)}o(YX,"validateEnv");function WX(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(WX,"stringifyData");function zX(e){return e instanceof Date?e.valueOf():e}o(zX,"convertKeyValueToWrite");function jX(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(GM.includes(typeof e))return e.length>FE?[e.slice(0,FE)+kM]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(GM.includes(typeof i))i.length>FE?r.push(i.slice(0,FE)+kM):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(jX,"getIndexedValues");var HE=0,qM=0;function $M(){qM=Date.now()-performance.now()}o($M,"adjustStartTime");$M();var QX=6e4;setInterval($M,QX).unref();function JX(){let e=performance.now()+qM;return e>HE?(HE=e,e):(HE+=488e-6,HE)}o(JX,"getNextMonotonicTime");VM.exports={validateEnv:YX,stringifyData:WX,convertKeyValueToWrite:zX,getNextMonotonicTime:JX,getIndexedValues:jX}});var Zf=M((QIe,KM)=>{"use strict";var XX=(k(),v(Y)).OPERATIONS_ENUM,iA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=XX.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};KM.exports=iA});var _e=M((XIe,zM)=>{"use strict";var Su=rn(),ZX=Q(),e6=(k(),v(Y)),kE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,YM),this.statusCode=n||Su.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Su.DEFAULT_ERROR_MSGS[n]?Su.DEFAULT_ERROR_MSGS[n]:Su.DEFAULT_ERROR_MSGS[Su.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&ZX[s](i)}},oA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},aA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function YM(e,t,r,n=e6.LOG_LEVELS.ERROR,s=null,i=!1){if(WM(e))return e;let a=new kE(e,t,r,n,s);return i&&delete a.stack,a}o(YM,"handleHDBError");function Tu(e){this.message=e}o(Tu,"Violation");Tu.prototype=Object.create(Error.prototype);Tu.prototype.constructor=Tu;Tu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var cA=class extends Tu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function WM(e){return e.__proto__.constructor.name===kE.name}o(WM,"isHDBError");zM.exports={isHDBError:WM,handleHDBError:YM,ClientError:oA,ServerError:aA,AccessViolation:cA,Violation:Tu,hdbErrors:Su}});var em=M((tNe,XM)=>{"use strict";var eNe=Zf(),GE=(k(),v(Y)),lA=ie(),jM=Q(),t6=require("uuid"),{handleHDBError:qE,hdbErrors:r6}=_e(),{HDB_ERROR_MSGS:$E,HTTP_STATUS_CODES:VE}=r6;XM.exports=QM;function QM(e,t,r){for(let s=0;s<t.length;s++)JM(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];n6(i,r,e.operation)}}o(QM,"processRows");QM.validateAttribute=JM;function JM(e){if(Buffer.byteLength(String(e))>GE.INSERT_MAX_CHARACTER_SIZE)throw qE(new Error,$E.ATTR_NAME_LENGTH_ERR(e),VE.BAD_REQUEST,void 0,void 0,!0);if(lA.isEmptyOrZeroLength(e)||lA.isEmpty(e.trim()))throw qE(new Error,$E.ATTR_NAME_NULLISH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(JM,"validateAttribute");function n6(e,t,r){if(!e.hasOwnProperty(t)||lA.isEmptyOrZeroLength(e[t])){if(r===GE.OPERATIONS_ENUM.INSERT||r===GE.OPERATIONS_ENUM.UPSERT){e[t]=t6.v4();return}throw jM.error("Update transaction aborted due to record with no hash value:",e),qE(new Error,$E.RECORD_MISSING_HASH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>GE.INSERT_MAX_CHARACTER_SIZE)throw jM.error(e),qE(new Error,$E.HASH_VAL_LENGTH_ERR,VE.BAD_REQUEST,void 0,void 0,!0)}o(n6,"validateHash")});function iv(e){dA=e}function a6(){o6=setInterval(function(){for(let e of uA)if(e.stale){let t=e.getContext()?.url;rv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},i6).unref()}var fA,tv,rv,nv,sv,ZM,uA,s6,Eo,tm,ev,dA,_o,KE,i6,o6,rm=le(()=>{fA=w(An()),tv=w(_e()),rv=w(Q()),nv=w(ae());k();sv=w(ie()),ZM=100,uA=new Set,s6=(0,sv.convertToMS)(nv.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Eo={CLOSED:0,OPEN:1,LINGERING:2};o(iv,"replicationConfirmation");_o=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Eo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Eo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),uA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(tm&&!this.overloadChecked&&performance.now()-ev>s6)throw new tv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Eo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Eo.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,fA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let h=f;h<this.validated;h++)this.writes[h]?.validate?.(this.timestamp);let m;for(let h=f;h<this.validated;h++){let p=this.writes[h];p&&(p.before||p.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let h=0;h<2;h++){let p;for(let _=f;_<this.validated;_++){let g=this.writes[_];if(!g)continue;let y=g[h===0?"before":"beforeIntermediate"];if(y){let T=y();p?p.push?p.push(T):p=[p,T]:p=T}}p&&await(p.push?Promise.all(p):p)}}catch(h){throw this.abort(),h}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Eo.LINGERING:Eo.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<ZM>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return tm||(tm=s,ev=performance.now(),tm.then(()=>{tm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,h=this.writes[this.writes.length-1];dA&&h&&i.push(dA(m,h.store.getEntry(h.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+ZM/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Eo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},KE=class extends _o{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,fA.getNextMonotonicTime)())}getReadTxn(){}},i6=3e4;o(a6,"startMonitoringTxns");a6()});var ov,Vn,mA,Ru=le(()=>{ov=require("events"),Vn=class extends ov.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new mA;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)}},mA=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Ft(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Eo.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _o;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var av,Bc=le(()=>{av=w(Xs());rm();o(Ft,"transaction");(0,av._assignPackageExport)("transaction",Ft);Ft.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ft.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var pA={};Oe(pA,{add:()=>YE,applyReverse:()=>cv,getRecordAtTime:()=>hA,rebuildUpdateBefore:()=>WE});function YE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function WE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,YE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function cv(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=c6[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=lv}}function hA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Nt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":cv(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===lv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Nt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var c6,lv,zE=le(()=>{Li();o(YE,"add");YE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};c6={add:YE};o(WE,"rebuildUpdateBefore");o(cv,"applyReverse");lv={};o(hA,"getRecordAtTime")});var ei=M(QE=>{var jE=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])jE.logsAtLevel(e)&&(QE[e]=jE[e]);QE.loggerWithTag=e=>jE.loggerWithTag(e,!0);QE.setLogLevel=jE.setLogLevel});var Ev={};Oe(Ev,{parse:()=>gA,streamAsJSON:()=>sm,stringify:()=>Fc});function sm(e){return new EA({value:e})}function uv(e){return console.error(e),JSON.stringify(nm(e))}function dv(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Fc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===hv)return pv(e);if(t.resolution)return t.resolution.then(()=>Fc(e));throw t}}function pv(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+=pv(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Fc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function gA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),d6.test(e)?l6.parse(e):JSON.parse(e)):null}var fv,_A,mv,l6,u6,hv,nm,EA,d6,SA=le(()=>{fv=require("stream"),_A=w(Q()),mv=w(require("json-bigint-fixes")),l6=(0,mv.default)({useNativeBigInt:!0}),u6=1e4,hv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw hv};({errorToString:nm}=_A);o(sm,"streamAsJSON");EA=class extends fv.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(_A.warn("Error serializing in stream",c),a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:nm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),uv)}catch(s){yield uv(s)}else yield Fc(t)}else yield Fc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);dv(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(nm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>u6?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 dv(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(nm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(uv,"handleError");o(dv,"when");o(Fc,"stringify");o(pv,"jsStringify");d6=/[[,:]\s*-?\d{16,}/;o(gA,"parse")});var Nv={};Oe(Nv,{asyncSerialization:()=>bA,contentTypes:()=>AA,findBestSerializer:()=>XE,getDeserializer:()=>To,hasAsyncSerialization:()=>IA,registerContentHandlers:()=>am,serialize:()=>cm,serializeMessage:()=>ba,toCsvStream:()=>JE});function f6(e){try{return e?.[0]===123?yA(e):e}catch{return e}}function am(e){e.register(m6,{serializers:[{regex:/^application\/json$/,serializer:sm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Hc.EncoderStream(om).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?kc.Readable.from((0,Di.encodeIter)(t,om)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),JE(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Di.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Hc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function XE(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let p of d){let _=p.indexOf("=");m[p.substring(0,_)]=p.substring(_+1)}f=+m.q;let h=nn.get(u);if(h){let p=(h.q||1)*f;p>s&&(n=h,i=h.type||u,s=p,a=m)}}if(!n){if(r)throw new Sv.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(nn.keys()).join(", "),406);n=nn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function cm(e,t,r){let n=gv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof Rs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=XE(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),RA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,So.createBrotliCompress)({params:{[So.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?So.constants.BROTLI_MODE_TEXT:So.constants.BROTLI_MODE_GENERIC,[So.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>gv?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,So.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function ba(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;go=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=XE(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=im(e);return go?.length>0?(go.length===1?go[0]:Promise.all(go)).then(()=>ba(e,t,!0)):n}finally{go=void 0}}function bA(e){if(go)go.push(e);else throw new Error("Unable to serialize asynchronously")}function IA(){return!!go}function h6(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 E6(e){return p6.includes(e)}function _6(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function To(e="",t=!1){let r=_6(e),n=r.type&&nn.get(r.type)?.deserialize||g6(r);return t?s=>h6(s).then(n):n}function g6(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!E6(e.parameters.charset)&&RA.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 yA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function S6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function JE(e,t){let r=kc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new yv.Transform(n,s);return r.pipe(i)}var Di,Hc,So,Sv,kc,Tv,TA,Rv,RA,yv,Av,bv,im,yA,om,nn,AA,_v,Iv,m6,gv,go,p6,Ro=le(()=>{SA();Di=require("msgpackr"),Hc=require("cbor-x"),So=require("zlib"),Sv=w(_e()),kc=w(require("stream"));Dr();Tv=w(Xs()),TA=w(ae());k();Rv=w(require("yaml")),RA=w(ei());Kn();yv=require("json2csv"),Av=w(require("fastify-plugin")),bv=TA.default.get(U.SERIALIZATION_BIGINT)!==!1,im=bv?Fc:JSON.stringify,yA=bv?gA:JSON.parse,om={useRecords:!1,useToJSON:!0},nn=new Map,AA=nn;De.contentTypes=AA;(0,Tv._assignPackageExport)("contentTypes",AA);nn.set("application/json",{serializeStream:sm,serialize:im,deserialize(e){return yA(e)},q:.8});_v=new Hc.Encoder(om);nn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Hc.EncoderStream(om).end(e)},serialize:_v.encode,deserialize:_v.decode,q:1});nn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kc.Readable.from((0,Di.encodeIter)(e,om)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});nn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),JE(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),JE(e,e?.getColumns?.())},q:.1});nn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return kc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});nn.set("text/yaml",{serialize(e){return Rv.stringify(e,{aliasDuplicateObjects:!1})},q:.7});nn.set("text/event-stream",{serializeStream:o(function(e){return kc.Readable.from(S6(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
3
3
|
`),e.data){let r=e.data;typeof r=="object"&&(r=im(r)),t+="data: "+r+`
|
|
4
4
|
`}return e.id&&(t+="id: "+e.id+`
|
|
5
5
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -8,124 +8,124 @@ var z4=Object.create;var qf=Object.defineProperty;var j4=Object.getOwnPropertyDe
|
|
|
8
8
|
|
|
9
9
|
`:`data: ${e}
|
|
10
10
|
|
|
11
|
-
`},"serialize"),compressible:!1,q:.8});rn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Rv={type:"application/json",serializeStream:sm,serialize:im,deserialize:l6,q:.5};rn.set("*/*",Rv);rn.set("",Rv);o(l6,"tryJSONParse");o(am,"registerContentHandlers");u6=(0,Sv.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=XE(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(XE,"findBestSerializer");hv=_A.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(cm,"serialize");o(ba,"serializeMessage");o(RA,"asyncSerialization");o(yA,"hasAsyncSerialization");o(d6,"streamToBuffer");f6=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(m6,"isBufferEncoding");o(h6,"parseContentType");o(To,"getDeserializer");o(p6,"deserializerUnknownType");o(E6,"transformIterable");o(JE,"toCsvStream")});var o_={};we(o_,{Blob:()=>Rs,blobsWereEncoded:()=>qc,cleanupOrphans:()=>P6,databasePaths:()=>bA,decodeBlobsWithWrites:()=>i_,decodeFromDatabase:()=>Ao,decodeWithBlobCallback:()=>fm,deleteBlob:()=>r_,deleteBlobsInObject:()=>Na,deleteRootBlobPathsForDB:()=>wA,encodeBlobsAsBuffers:()=>w6,encodeBlobsWithFilePath:()=>s_,findBlobsInObject:()=>Gc,getFileId:()=>n_,getFilePathForBlob:()=>Lv,getRootBlobPathsForDB:()=>Nu,isSaving:()=>R6,saveBlob:()=>dm,setDeletionDelay:()=>T6,startPreCommitBlobsForRecord:()=>OA});function Cv(){}function r_(e){let t=Lv(e);t&&setTimeout(()=>{(0,Ge.unlink)(t,r=>{r&&Ht.default.debug?.("Error trying to remove blob file",r)})},Pv)}function T6(e){Pv=e}function dm(e,t=!1){let r=Mr.get(e);if(!r)r={storageIndex:0,fileId:null,store:An},Mr.set(e,r);else{if(r.fileId)return r;r.store=An}return r.deleteOnFailure=t,A6(r),r.source?AA(e,r.source,r):r.contentBuffer?y6(e,r):AA(e,Ia.Readable.from(e.stream()),r),r}function AA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,Ge.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(g6),h=(0,t_.createDeflate)(),(0,Ia.pipeline)(t,h,f,_)):(m||f.write(_6),(0,Ia.pipeline)(t,f,_));function p(g){let R=BigInt(g),T=new Uint8Array(yr),y=new DataView(T.buffer);return R|=BigInt(a?NA:Ov)<<48n,y.setBigInt64(0,R),T}o(p,"createHeader");function _(g){let R=f.fd;if(g){if(i.unlock(d,0),R&&((0,Ge.close)(R),f.fd=null),r.deleteOnFailure)(0,Ge.unlink)(n,T=>{T&&Ht.default.debug?.("Error while deleting aborted blob file",T)});else try{if((0,Ge.statSync)(n).size===0){let T=Buffer.from(g.toString());(0,Ge.writeFile)(n,Buffer.concat([p(BigInt(T.length)+0xff000000000000n),T]),y=>{y&&Ht.default.debug?.("Error write error message to blob file",y)})}}catch(T){Ht.default.debug?.("Error checking blob file after abort",T)}u(g)}else{if(!m){m=!0;let T=h?h.bytesWritten:f.bytesWritten-yr;e.size=T,(0,Ge.write)(R,p(T),0,yr,0,_);return}i.unlock(d,0),c?(0,Ge.fdatasync)(R,T=>{T&&u(T),l(),(0,Ge.close)(R),f.fd=null}):(l(),(0,Ge.close)(R),f.fd=null)}}o(_,"finished")}),e}function n_(e){return Mr.get(e)?.fileId}function R6(e){return Mr.get(e)?.saving}function Lv(e){let t=Mr.get(e);return t?.fileId&&Iu(t)}function Nu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=bA.get(e);if(!t){if(!e.databaseName)return Ht.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,um.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,vi.join)(n,e.databaseName)):t=[(0,vi.join)((0,um.getHdbBasePath)(),"blobs",e.databaseName)],bA.set(e,t)}return t}async function wA(e){let t=Nu(e);t&&await Promise.all(t.map(r=>Dv(r)))}async function Dv(e){if((0,Ge.existsSync)(e)){for(let t of await(0,bn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Dv((0,vi.join)(e,t.name));else try{await(0,bn.unlink)((0,vi.join)(e,t.name))}catch(r){Ht.default.warn?.("Error deleting file",r)}try{await(0,bn.rmdir)(e)}catch(t){Ht.default.warn?.("Error deleting directory",t)}}}function Iu({storageIndex:e,fileId:t,store:r}){let n=Nu(r);return(0,vi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function y6(e,t){let r=t.contentBuffer,n=r.length;if(!(n<wv))return e.size=n,AA(e,Ia.Readable.from([r]),t)}function A6(e){let t=Nu(e.store),r=b6(),n=t?.length>1?I6(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Iu(e),a=(0,vi.dirname)(i);(0,Ge.existsSync)(a)||(0,IA.ensureDirSync)(a),e.filePath=i}function b6(){let e=Iv.get(An);if(!e){let t=0,r=Nu(An);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,Ge.existsSync)(n))for(let c of(0,Ge.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,vi.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(An.getUserSharedBuffer("blob-file-id",e.buffer)),Iv.set(An,e)}return Number(Atomics.add(e,0,1n))}function I6(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(e_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,N6(e)),e.frequencyTable[t%e_]}async function N6(e){if(!bn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,bn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,IA.ensureDirSync)(s),a=await(0,bn.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(e_),n=t.map(s=>1/s);for(let s=0;s<e_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function s_(e,t,r){yu=t,An=r,qc=!1;try{return e()}finally{yu=void 0,An=void 0}}function w6(e){qr=[];let t;try{t=e()}catch(n){throw qr=void 0,n}let r=qr.length<2?qr[0]:Promise.all(qr);return qr=void 0,r?r.then(()=>e()):t}function i_(e,t,r){try{qr=[],yo=r,An=t,e()}catch(s){throw yo=void 0,qr=void 0,s}yo=void 0;let n=qr.length<2?qr[0]:Promise.all(qr);return qr=void 0,n}function fm(e,t,r){An=r;try{return yo=t,e()}finally{yo=void 0}}function Ao(e,t){return An=t,e()}function Na(e){Gc(e,t=>{r_(t)})}function Gc(e,t){if(e instanceof Rs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Gc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Gc(e[r],t)}}function OA(e,t){let r=[];for(let n in e){let s=e[n];s instanceof bu&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(An=t,Promise.all(r.map(n=>dm(n,!0).saving??Promise.resolve())))}function C6(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function P6(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,a=Nu(r);if(a)for(let d of a)await c(d);return await l(),Ht.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,Ge.existsSync)(d))return;for(let f of await(0,bn.readdir)(d,{withFileTypes:!0})){let m=(0,vi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Ht.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let h=(0,Nv.getHeapStatistics)();h.used_heap_size>h.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Ht.default.error?.("Error searching path for blobs",d,f)}}o(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,um.get)(U.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Ht.default.warn?.("Checking for references to potential orphaned blobs in table",m);let h=e[m];for(let p of h.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{p.metadataFlags&$r&&p.value&&u(p.value),d++%f===0?await(0,Au.setTimeout)(1):await(0,Au.setImmediate)()}catch(_){Ht.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",_)}}Ht.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let h=Nt(m),p=n.tableStores[h.tableId],_=p?.getEntry(h.recordId);(!_||_.version!==h.version||!_.value)&&u(h.getValue(p)),d++%f===0?await(0,Au.setTimeout)(1):await(0,Au.setImmediate)()}catch(h){Ht.default.error?.("Error searching audit log for references to potential orphaned blobs failed",h)}Ht.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,bn.unlink)(m)}catch(h){Ht.default.warn?.("Error deleting file",h)}Ht.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}o(l,"removePathsThatAreNotReferenced");function u(d){Gc(d,f=>{if(f instanceof bu){let m=Mr.get(f);if(m.fileId!=null){let h=Iu(m);i.has(h)&&i.delete(h)}}})}o(u,"checkObjectForReferences")}var Mi,bn,Ge,t_,Ia,IA,um,vi,Ht,Nv,Au,wv,yr,Ov,NA,Av,_6,g6,bv,Mr,yo,Rs,yu,qr,An,qc,lm,ZE,S6,bu,Pv,bA,Iv,e_,O6,Kn=ce(()=>{Mi=require("msgpackr"),bn=require("node:fs/promises"),Ge=require("node:fs"),t_=require("node:zlib"),Ia=require("node:stream"),IA=require("fs-extra"),um=w(oe());k();vi=require("path"),Ht=w(ei());Ro();Li();Nv=require("node:v8"),Au=require("node:timers/promises"),wv=8192,yr=8,Ov=0,NA=1,Av=255,_6=new Uint8Array([0,Ov,255,255,255,255,255,255]),g6=new Uint8Array([0,NA,255,255,255,255,255,255]),bv=0xffffffffffff,Mr=new WeakMap,Rs=global.Blob||C6(),qc=!1,lm=new Uint8Array(8),ZE=new DataView(lm.buffer),S6=6e4;o(Cv,"InstanceOfBlobWithNoConstructor");Cv.prototype=Rs.prototype;bu=class e extends Cv{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Mr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(yA()&&RA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Mr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=Iu(t),a,c=o(async()=>{let l,u=yr;try{if(l=await(0,bn.readFile)(i),l.length>=yr){l.copy(lm,0,0,yr);let f=ZE.getBigUint64(0);if(Number(f>>48n)===Av)throw new Error("Error in blob: "+l.subarray(yr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<bv&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,h=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!0,p(c()))))return a=!0,m.unlock(h,0),p(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===NA?new Promise((f,m)=>{(0,t_.deflate)(l.subarray(yr),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(yr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Mr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(_){_.enqueue(r),_.close()}});let i=Iu(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((R,T)=>{(0,Ge.open)(i,"r",(y,N)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Ht.default.debug?.("File does not exist yet, waiting for it to be created",i,_),_-- >0))return setTimeout(()=>{p(),g(R,T)},20).unref();T(y),h.#e?.forEach(O=>O(y))}else a=N,R(N)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,R=100;return new Promise(o(function T(y,N){function O(Z){(0,Ge.close)(a),clearTimeout(d),u&&u.close(),N(Z),h.#e?.forEach(G=>G(Z))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,Ge.read)(a,F,0,F.length,c,(Z,G,Y)=>{if(l+=G,Z)return O(Z);if(c===0){if(G<yr){R-- >0&&f!==!1?(p(),Ht.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>T(y,N),20).unref()):(Ht.default.debug?.("File was empty, throwing error",i,R),O(new Error(`Blob ${t.fileId} was empty`)));return}Y.copy(lm,0,0,yr);let K=ZE.getBigUint64(0);if(Number(K>>48n)===Av)return O(new Error("Error in blob: "+Y.subarray(yr,G)));if(g=Number(K&0xffffffffffffn),g<bv&&h.size!==g&&(h.size=g,h.#t))for(let $ of h.#t)$(g);Y=Y.subarray(yr,G),l-=yr}else if(G===0){let K=Buffer.allocUnsafe(8);return(0,Ge.read)(a,K,0,yr,0,$=>{if($)return O($);if(lm.set(K),g=Number(ZE.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},S6).unref():(u=(0,Ge.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(y,N))}),T(y,N)):m?O(new Error("Blob is incomplete")):(m=!0,T(y,N));return}(0,Ge.close)(a),_.close(),y()})}else Y=Y.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,T(y,N);s&&l>=s&&(l>s&&(Y=Y.subarray(0,s-c)),l=g=s),n&&n>c&&(Y=Y.subarray(n-c))}c+=G;try{_.enqueue(Y)}catch(K){return Ht.default.debug?.("Error enqueuing chunk",K),y()}l===g&&((0,Ge.close)(a),_.close()),y()})},"readMore"))},"pull"),cancel(){(0,Ge.close)(a),clearTimeout(d),u&&u.close()}});function p(){if(f===void 0){let _=t.store,g=t.fileId+":blob";f=!_.attemptLock(g,0,()=>{f=!1}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=Mr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};Mr.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Mr.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Mr.get(this)?.saving??Promise.resolve()}},Pv=500;o(r_,"deleteBlob");o(T6,"setDeletionDelay");global.createBlob=function(e,t){let r=new bu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Mr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Ia.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Ia.Readable.from(e);else throw new Error("Invalid source type");return r};o(dm,"saveBlob");o(AA,"writeBlobWithStream");o(n_,"getFileId");o(R6,"isSaving");o(Lv,"getFilePathForBlob");bA=new Map;o(Nu,"getRootBlobPathsForDB");o(wA,"deleteRootBlobPathsForDB");o(Dv,"rimrafSteadily");o(Iu,"getFilePath");o(y6,"writeBlobWithBuffer");o(A6,"generateFilePath");Iv=new Map;o(b6,"getNextFileId");e_=128;o(I6,"getNextStorageIndex");o(N6,"createFrequencyTableForStoragePaths");o(s_,"encodeBlobsWithFilePath");o(w6,"encodeBlobsAsBuffers");o(i_,"decodeBlobsWithWrites");o(fm,"decodeWithBlobCallback");o(Ao,"decodeFromDatabase");o(Na,"deleteBlobsInObject");o(Gc,"findBlobsInObject");o(OA,"startPreCommitBlobsForRecord");O6=new Mi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Mi.addExtension)({Class:Rs,type:11,unpack:o(function(e){let t=O6.unpack(e),r=new bu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Mr.set(r,{storageIndex:t[1],fileId:t[2],store:An}),yo)return yo(r)??r;if(!An)throw new Error("No store specified, cannot load blob from storage")}else Mr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=Mr.get(e);if(yu!==void 0&&(qc=!0,t?.recordId!==void 0&&t.recordId!==yu))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<wv)return r.size=t.contentBuffer.length,(0,Mi.pack)([r,t.contentBuffer])}if(yu!==void 0){if(t=dm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=yu,(0,Mi.pack)([r,t.storageIndex,t.fileId])}if(t){if(yo)return yo(e),(0,Mi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Ge.readFileSync)(Iu(t));if(n.length>=yr&&(n.copy(lm,0,0,yr),Number(ZE.getBigUint64(0)&0xffffffffffffn)===n.length-yr))return Buffer.concat([(0,Mi.pack)([r]),n]);if(qr)qr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&qr)return qr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Mi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(C6,"polyfillBlob");o(P6,"cleanupOrphans")});var Bv={};we(Bv,{onStorageReclamation:()=>mm,runReclamationHandlers:()=>DA,setAvailableSpaceRatioGetter:()=>D6});function mm(e,t,r){(r||(0,c_.getWorkerIndex)()===(0,c_.getWorkerCount)()-1)&&(a_.has(e)||a_.set(e,[]),a_.get(e).push({priority:0,handler:t}),LA||(LA=setTimeout(DA,vv).unref()))}async function DA(){for(let[e,t]of a_)try{let r=await xv(e),n=L6/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(PA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){PA.default.error?.("Error running storage reclamation handlers",r)}LA=setTimeout(DA,vv).unref()}function D6(e){xv=e??Uv}var CA,c_,PA,l_,Mv,a_,L6,vv,LA,Uv,xv,u_=ce(()=>{CA=require("node:fs/promises"),c_=w(nt()),PA=w(ei());k();l_=w(oe()),Mv=w(ie());l_.default.initSync();a_=new Map,L6=l_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,vv=(0,Mv.convertToMS)(l_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(mm,"onStorageReclamation");Uv=o(async e=>{if(CA.statfs){let t=await(0,CA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),xv=Uv;o(DA,"runReclamationHandlers");o(D6,"setAvailableSpaceRatioGetter")});var Qv={};we(Qv,{ACTION_32_BIT:()=>p_,ACTION_64_BIT:()=>x6,AUDIT_STORE_OPTIONS:()=>Em,Decoder:()=>Vc,HAS_BLOBS:()=>$r,HAS_CURRENT_RESIDENCY_ID:()=>Kc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Sm,HAS_ORIGINATING_OPERATION:()=>gm,HAS_PREVIOUS_RESIDENCY_ID:()=>Yc,REMOTE_SEQUENCE_UPDATE:()=>E_,createAuditEntry:()=>Wc,getLastRemoved:()=>v6,openAuditStore:()=>m_,readAuditEntry:()=>Nt,removeAuditEntry:()=>h_,setAuditRetention:()=>U6,transactionKeyEncoder:()=>Yv});function m_(e){let t=e.auditStore=e.openDB(MA.AUDIT_STORE_NAME,{create:!1,...Em});t||(t=e.auditStore=e.openDB(MA.AUDIT_STORE_NAME,Em),Hv(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=UA;mm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,h;try{for(let{key:p,value:_}of t.getRange({start:1,snapshot:!1,end:Date.now()-vA/(1+i*i)})){try{m=h_(t,p,_)}catch(g){wu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=M6){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,vA/10):(Hv(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,pm.getWorkerIndex)()===(0,pm.getWorkerCount)()-1&&c(),(0,pm.getWorkerIndex)()===0&&!Fv)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Fv=!0,wu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function h_(e,t,r){let n=B6(r),s;if(n&$r){s=Nt(r);let i=e.tableStores[s.tableId];if(i){let a=s.type==="message"?null:i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Ao(()=>Na(s.getValue(i)),i.rootStore)}}if((n&15)===xA){s=s||Nt(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Hv(e,t){BA[0]=t,e.put(Symbol.for("last-removed"),Wv)}function v6(e){let t=e.get(Symbol.for("last-removed"));if(t)return Wv.set(t),BA[0]}function U6(e,t=UA){vA=e,UA=t}function Wc(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=zv[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?wa.setFloat64(0,n):ys.set(FA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}R(s),R(t),g(r),wa.setFloat64(p,e),p+=8,l&Kc&&R(u),l&Yc&&R(d),l&Sm&&(wa.setFloat64(p,f),p+=8),l&gm&&R(jv[m]),i?g(i):ys[p++]=0,l?wa.setUint32(n?8:0,h|l|3221225472):ys[n?8:0]=h;let _=ys.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let y=p;p+=1,p=(0,$c.writeKey)(T,ys,p);let N=p-y-1;N>127?N>16383?(wu.error("Key or username was too large for audit entry",T),p=y+1,ys[y]=0):(ys.copyWithin(y+2,y+1,p),wa.setUint16(y,N|32768),p++):ys[y]=N}function R(T){T<128?ys[p++]=T:T<16384?(wa.setUint16(p,T|32768),p+=2):T<1056964608?(wa.setUint32(p,T|3221225472),p+=4):(ys[p]=255,wa.setUint32(p+1,T),p+=5)}}function B6(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Vc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Nt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Vc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,h,p,_;if(i&Kc&&(m=n.readInt()),i&Yc&&(h=n.readInt()),i&Sm&&(p=n.readFloat64()),i&gm){let y=n.readInt();_=jv[y]}l=n.readInt();let g=n.position,R=n.position+=l,T;return{type:zv[i&7],tableId:c,nodeId:a,get recordId(){return(0,$c.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,$c.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(y,N,O){if(i&d_||i&hm&&!N)return T||(T=Ao(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),T;if(i&hm&&O)return dA(y.getEntry(this.recordId),O,y)},getBinaryValue(){return i&(d_|hm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return wu.error("Reading audit entry error",n,e),{}}}var $c,f_,MA,pm,Kv,wu,ys,wa,Yv,Em,vA,M6,BA,Wv,UA,Fv,d_,hm,kv,xA,Gv,qv,$v,Vv,p_,x6,E_,Kc,Yc,gm,Sm,$r,zv,jv,Vc,Li=ce(()=>{$c=require("ordered-binary"),f_=w(oe()),MA=w(Vt());k();pm=w(nt()),Kv=w(ie());zc();wu=w(Q());zE();Kn();u_();(0,f_.initSync)();ys=Buffer.alloc(2816),wa=new DataView(ys.buffer,ys.byteOffset,2816),Yv={writeKey(e,t,r){return e===_m?(t.set(_m,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,$c.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,$c.readKey)(e,t,r)}},Em={encoding:"binary",keyEncoder:Yv},vA=(0,Kv.convertToMS)((0,f_.get)(U.LOGGING_AUDITRETENTION))||86400*3,M6=1e3,BA=new Float64Array(1),Wv=new Uint8Array(BA.buffer),UA=1e4,Fv=!1;o(m_,"openAuditStore");o(h_,"removeAuditEntry");o(Hv,"updateLastRemoved");o(v6,"getLastRemoved");o(U6,"setAuditRetention");d_=16,hm=32,kv=1,xA=2,Gv=3,qv=4,$v=5,Vv=6,p_=14,x6=15,E_=11,Kc=512,Yc=1024,gm=2048,Sm=4096,$r=8192,zv={put:kv|d_,[kv]:"put",delete:xA,[xA]:"delete",message:Gv|d_,[Gv]:"message",invalidate:qv|hm,[qv]:"invalidate",patch:$v|hm,[$v]:"patch",relocate:Vv,[Vv]:"relocate"},jv={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Wc,"createAuditEntry");o(B6,"readAction");o(Nt,"readAuditEntry");Vc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var tU={};we(tU,{ENTRY:()=>H6,HAS_EXPIRATION:()=>T_,HAS_RESIDENCY_ID:()=>$A,HAS_STRUCTURE_UPDATE:()=>R_,LAST_TIMESTAMP_PLACEHOLDER:()=>_m,LOCAL_TIMESTAMP:()=>F6,METADATA:()=>Ou,NEW_TIMESTAMP_PLACEHOLDER:()=>Xv,NO_TIMESTAMP:()=>g_,PENDING_LOCAL_TIME:()=>VA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>FA,RecordEncoder:()=>qA,TIMESTAMP_ASSIGN_LAST:()=>G6,TIMESTAMP_ASSIGN_NEW:()=>Zv,TIMESTAMP_ASSIGN_PREVIOUS:()=>eU,TIMESTAMP_PLACEHOLDER:()=>__,TIMESTAMP_RECORD_PREVIOUS:()=>HA,entryMap:()=>Oa,handleLocalTimeForGets:()=>y_,lastMetadata:()=>lt,recordUpdater:()=>KA,removeEntry:()=>Jc});function $6(){return ym[0]=ym[0]^64,k6.getFloat64(0)}function y_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,lt=null;let l=r.call(this,a,c);return l&&(lt&&(l.metadataFlags=lt[Ou],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Oa.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){lt=null;let l=n.call(this,a,c);return lt&&l&&(Oa.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[Ou],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Qc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Qc.length;u++){let d=Qc[u].deref();(!d||d.isDone||d.isCommitted)&&Qc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function KA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){l==null?jc=g_:f?jc=i?.localTime?HA|eU:g_:jc=l?i?.localTime?HA|16384:Zv|16384:g_;let h=u?.expiresAt;if(h>=0&&(c|=T_),Rm=c,kA=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:jc>0},_,g=0;try{let R=i?.residencyId,T=u?.residencyId;T&&(GA=T,Rm|=$A,g|=Kc),R!==T&&(g|=Yc,R||(R=0)),c&T_&&(g|=Sm),u?.originatingOperation&&(g|=gm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&$r&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Na(i.value);let y;if(s!==void 0&&(y=s_(()=>e.put(n,s,p),n,e.rootStore),qc&&(g|=$r)),l){let N=u?.user?.username;if(m&&(s_(()=>e.encoder.encode(m),n,e.rootStore),qc&&(g|=$r)),e.encoder.hasStructureUpdate&&(g|=R_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let Z=Nt(F).previousLocalTime;return y=r.put(O,Wc(a,t,n,Z,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Tm,g,T,R,h),{ifVersion:_}),y}}y=r.put(s===void 0?Xv:_m,Wc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Tm,g,T,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:_})}return y}catch(R){throw R.message+=" id: "+n+" options: "+p,R}}}function Jc(e,t,r){if(t)return t.value&&t.metadataFlags&$r&&!e.auditStore?.getBinaryFast(t.localTime)&&Na(t.value),e.remove(t.key,r)}var Jv,S_,__,_m,FA,Xv,F6,Ou,H6,ym,k6,g_,Zv,G6,eU,HA,T_,$A,VA,R_,Oa,q6,Tm,jc,Rm,kA,GA,lt,qA,Qc,zc=ce(()=>{Jv=require("msgpackr");Li();S_=w(Q());Kn();Kn();__=new Uint8Array([1,1,1,1,4,64,0,0]),_m=new Uint8Array([1,1,1,1,1,0,0,0]),FA=new Uint8Array([1,1,1,1,3,64,0,0]),Xv=new Uint8Array([1,1,1,1,0,64,0,0]),F6=Symbol("local-timestamp"),Ou=Symbol("metadata"),H6=Symbol("entry"),ym=new Uint8Array(8),k6=new DataView(ym.buffer,0,8),g_=0,Zv=0,G6=1,eU=3,HA=4,T_=16,$A=32,VA=1,R_=256,Oa=new WeakMap,jc=0,Rm=-1,kA=-1,GA=0,lt=null,qA=class extends Jv.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Oa.get(this)?.version}getExpiresAt(){return Oa.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(jc||Rm>=0){let c=0,l=jc;l&&(c+=8,jc=0);let u=Rm,d=kA,f=GA;u>=0&&(c+=4,Rm=-1,d>=0&&(c+=8,kA=-1),f&&(c+=4,GA=0));let m=q6=n.call(this,i,a|2048|c);Tm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(__[4]=l,__[5]=l>>8,m.set(__,h),h+=8),qc&&(u|=$r),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|p_<<24),h+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(h,d),h+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,f)),m}else return Tm=n.call(this,i,a),Tm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(ym,0,c),c+=8;else for(let m=0;m<8;m++)ym[m]=t[c++];l=$6(),i=t[c]}let u,d;i<32&&(i===p_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&T_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&$A&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Ao(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[Ou]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:Ao(()=>super.decode(t,r),this.rootStore)}catch(c){return S_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o($6,"getTimestamp");o(y_,"handleLocalTimeForGets");Qc=[];setInterval(()=>{for(let e=0;e<Qc.length;e++){let t=Qc[e].deref();!t||t.isDone||t.isCommitted?Qc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(S_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):S_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(KA,"recordUpdater");o(Jc,"removeEntry")});function zA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let h=1;h<e.length;h++){let p=e[h],_=u(p);f=f.concat(_)}let m=new Set;return f.filter(h=>{let p=h.key??h;return m.has(p)?!1:(m.add(p),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?zA(f.conditions,f.operator,r,n,s,i,a,c):Du(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,h){return f.map((p,_)=>{if(p.conditions){let T=p.operator==="or",y=d(p.conditions,!T,h);return T?(N,O)=>y.some(F=>F(N,O)):(N,O)=>y.every(F=>F(N,O))}let g=(p.attribute||p[0])===r.primaryKey,R=bm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=X6(r.primaryStore,p.estimated_count,h)),R}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Du(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new Vr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],N=xi(n.attributes,y);if(N.relationship){if(c.length<2)throw new Vr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,Z=Du({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let G=!!xi(O.attributes,N.relationship.to)?.elements;Z=z6(Z,N,O.primaryStore,G,F)}if(N.relationship.from){let G=o(Y=>(Y?.key!==void 0&&(Y=Y.key),Du({attribute:N.relationship.from,value:Y},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,Z=j6(Z,N,O.primaryStore,F,G)):Z=Z.flatMap(G)}return Z}else if(c.length===1)c=c[0];else throw new Vr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,h,p,_;l instanceof Date&&(l=l.getTime());let g;switch(jA[u]||u){case"lt":m=!0,h=l;break;case"le":m=!0,h=l,p=!0;break;case"gt":m=l,_=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,h=l.slice(0),h[h.length-1]=Ui.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),h=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),h=l[1],h instanceof Date&&(h=h.getTime()),p=u==="gele"||u==="gtle"||u==="between",_=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,h=l,p=!0;break;case"ne":if(l===null){m=l,_=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new Vr.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>As.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,_=!1,R=bm(e,n,null,i,d)),typeof h=="string"&&h.length>As.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,p=!0,R=R??bm(e,n,null,i,d)),r){let y=m;m=h,h=y,y=!_,_=!p,p=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new Vr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Vr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new Vr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Vr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??bm(e,n,null,i,d),!R)throw new Vr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:m,end:h,inclusiveEnd:p,exclusiveStart:_,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(T).map(R?function({key:N,value:O}){return this?.isSync?O&&R(O)?N:Ca.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(O&&R(O)?N:Ca.SKIP)}catch(G){Z(G)}}))}:N=>N.value==null&&!(N.metadataFlags&(In|Xc))?Ca.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,a).map(y=>{if(typeof y=="object"&&y){let{key:N,...O}=y,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return y}):f.getRange(T).map(R?function({key:y,value:N}){let O;return typeof y=="string"&&y.length>As.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:y},this.isSync?R(O)?N:Ca.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(R(O)?N:Ca.SKIP)}catch(G){Z(G)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:N}){return this.isSync?N&&R(N)?y:Ca.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&R(N)?y:Ca.SKIP)}catch(Z){F(Z)}}))})}function xi(e,t){if(Array.isArray(t))if(t.length>1){let r=xi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?xi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function z6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function j6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function bm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=xi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=bm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,h?.[d]?.joined,c[1]===m.primaryKey,i);if(!p)return;if(h){h.filters||(h.filters=[]),h.filters.push(p);return}let _=t.propertyResolvers?.[d];_.to&&(p.to=_.to);let g,R=o((y,N)=>{let O,F;return _?_.returnDirect?(O=_(y,r,N),F=lt):(F=_(y,r,N,!0),Array.isArray(F)?(O=F.map(Z=>Z.value),F=null):O=F?.value):O=y[d],{subObject:O,subEntry:F}},"getSubObject"),T=o((y,N)=>{if(_&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let Y of p.idFilter.idSet)e={attribute:_.from??t.primaryKey,value:Y};g=u(_.from??t.primaryKey,p.idFilter,!0,!0)}else g=u(_.from??t.primaryKey,p.idFilter,!1,!0);let G=g(y);return g.idFilter&&(T.idFilter=g.idFilter),G}let{subObject:O,subEntry:F}=R(y,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let Y=R(G).subObject;return Array.isArray(Y)?Y.filter(p).map(K=>K[m.primaryKey]):Y}}),O.some(p)):p(O,F):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),jA[a]||a){case As.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Ui.compareKeys)(d,l[0])>=0&&(0,Ui.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Ui.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Ui.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Ui.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Ui.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Ui.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Vr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,h){let p;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&b_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function R(T){let y=T[d],N;if(typeof y!="object"||!y||h?N=f(y):Array.isArray(y)?N=y.some(f):y instanceof Date&&(N=f(y.getTime())),m&&(g++,!N&&!R.idFilter&&++_/g*i>p)){let O=Du(e,r.transaction.getReadTxn(),!1,t),F;R.to?F=O.flatMap(G=>t.primaryStore.get(G)[R.to]):F=O.map(Mu);let Z=new Set(F);R.idFilter=G=>Z.has(Mu(G)),R.idFilter.idSet=Z}return N}return o(R,"recordFilter"),s&&(R.idFilter=f),R}o(u,"attributeComparator")}function b_(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/bo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=jA[n]||n,n===As.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=xi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=b_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*bo(e.indices[i.relationship.from])/(bo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=bo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=Y6*bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=K6*bo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=bo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=V6*bo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function I_(e,t){if(e)if(Io=e,Cu.lastIndex=0,Q6.test(e))try{if(t&&(t.conditions=[]),ti=t??new Lu,Am(ti,""),vr!==Io.length&&Kt("Unable to parse query, unexpected end of query"),ti.parseErrorMessage&&(ti.parseError=new YA(t.parseErrorMessage),!t))throw ti.parseError;return ti}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${vr} in '${Io}'`,ti.parseErrorMessage&&(r.message+=", "+ti.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Kt(e){let t=`${e} at position ${vr}`;ti.parseErrorMessage=ti.parseErrorMessage?ti.parseErrorMessage+", "+t:t}function Am(e,t){let r=Cu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Io);){vr=r.lastIndex;let[,d,f]=n;a?(d&&Kt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Kt(`invalid FIQL operator ${d}`),l=rU):(l=decodeURIComponent,i="equals",d||Kt("attribute must be specified before equality comparator"),s=Pu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=W6[f],l=WA[i]?rU:decodeURIComponent,d||Kt(`attribute must be specified before comparator ${f}`),s=Pu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Kt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Kt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Kt("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&nU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else A_(e,u),e.conditions.push(p)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Kt("conditions/comparisons are not allowed in a property list"):e.push(Pu(d)),s=void 0;break;case"(":Cu.lastIndex=vr;let h=Am(d?[]:new Lu,")");switch(d){case"":A_(e,u),e.conditions.push(h);break;case"limit":switch(h.length){case 1:e.limit=+h[0];break;case 2:e.offset=+h[0],e.limit=h[1]-e.offset;break;default:Kt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(h[0])&&h.length===1&&!h[0].name?(e.select=h[0],e.select.asArray=!0):h.length===1?e.select=h[0]:h.length===2&&h[1]===""?e.select=h.slice(0,1):e.select=h;break;case"group-by":Kt("group by is not implemented yet");case"sort":e.sort=sU(h);break;default:Kt(`unknown query function call ${d}`)}Io[vr]===","?r.lastIndex=++vr:a=!0,s=null;break;case"{":e.conditions&&Kt("property sets are not allowed in a queries"),d||Kt("property sets must have a defined parent property name"),Cu.lastIndex=vr,m=Am([],"}"),m.name=d,e.push(m),Io[vr]===","?r.lastIndex=++vr:a=!0;break;case"[":if(Cu.lastIndex=vr,d?(m=Am(new Lu,"]"),m.name=d):m=Am(e.conditions?new Lu:[],"]"),e.conditions)if(A_(e,u),Io[vr]==="="){l=decodeURIComponent,i="equals",s=Pu(d),r.lastIndex=++vr;break}else e.conditions.push(m),s=null;else e.push(m);Io[vr]===","?r.lastIndex=++vr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let p={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&nU(p,d),A_(e,u),e.conditions.push(p)}else d&&Kt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Pu(d));return e}else Kt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Kt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?J6:Cu,r.lastIndex=vr),vr===Io.length)return e}t&&Kt(`expected '${t}', but encountered end of string`)}function A_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Kt("Can not mix operators within a condition grouping"):e.operator=t)}function Pu(e){return e.indexOf(".")>-1?e.split(".").map(Pu):decodeURIComponent(e)}function rU(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Vr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function nU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Vr.ClientError("wildcard can only be used at the end of a string")}function sU(e){let t=iU(e[0]);return e.length>1&&(t.next=sU(e.slice(1))),t}function iU(e){if(Array.isArray(e)){let t=iU(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Kt(`Unknown sort type ${e}`)}function Mu(e){return Array.isArray(e)?e.join("\0"):e}function bo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function X6(e,t,r){return t*r/bo(e)}var Vr,As,Ui,Ca,V6,K6,Y6,W6,WA,jA,YA,Q6,Cu,J6,vr,ti,Io,Lu,N_=ce(()=>{Vr=w(ge()),As=w(Vt()),Ui=require("ordered-binary"),Ca=require("lmdb");w_();zc();V6=.3,K6=.1,Y6=.05,W6={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},WA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(zA,"executeConditions");o(Du,"searchByIndex");o(xi,"findAttribute");o(z6,"joinTo");o(j6,"joinFrom");jA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(bm,"filterByType");o(b_,"estimateCondition");YA=class extends Vr.Violation{static{o(this,"SyntaxViolation")}},Q6=/[()[\]|!<>.]|(=\w*=)/,Cu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,J6=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(I_,"parseQuery");o(Kt,"recordError");o(Am,"parseBlock");o(A_,"assignOperator");o(Pu,"decodeProperty");o(rU,"typedDecoding");o(nU,"wildcardDecoding");o(sU,"toSortObject");o(iU,"toSortEntry");Lu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Mu,"flattenKey");o(bo,"estimatedEntryCount");o(X6,"intersectionEstimate")});var oU,ri,O_=ce(()=>{oU=w(Xs());Pa();ri=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,oU._assignPackageExport)("Resource",Ur)});var dU={};we(dU,{MultiPartId:()=>C_,Resource:()=>Ur,contextStorage:()=>Uu,snakeCase:()=>e8,transformForSelect:()=>xu});function e8(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function aU(e,t){if(Zc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Zc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new C_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Zc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Zc=!0,null;e[e.length-1]==="/"&&(Zc=!0)}return t.coerceId(decodeURIComponent(e))}function Nn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof _o?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new vu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let _=c.indexOf("?");_>-1&&(l=this.parseQuery(c.slice(_+1),s),c=c.slice(0,_),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ri,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ri,l.id=c,c==null&&(u=!0);l||(l=new ri,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Uu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,h=p;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(h=o(_=>Uu.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return Ft(a,()=>{let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)},f);function p(_){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?_.allowRead(a.user,l,a):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(a.user,d,a):_.allowUpdate(a.user,d,a):t.type==="create"?_.allowCreate(a.user,d,a):_.allowDelete(a.user,l,a);if(g?.then)return g.then(R=>{if(!R)throw new vu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new vu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Yn(e,t){let r=new vu.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function QA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function xu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):QA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(QA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(QA(l,r,n)),f;for(let m of e){let h=d(m);h===void 0&&a&&(h=null),h?.then?(f||(f=[]),f.push(h.then(p=>u[m.name||m]=p))):u[m.name||m]=h}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=xu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var cU,lU,vu,uU,Uu,Z6,Ur,Zc,C_,Pa=ce(()=>{cU=require("crypto");rm();Ru();lU=w(Xs()),vu=w(ge());Bc();N_();uU=require("async_hooks");O_();Uu=new uU.AsyncLocalStorage,Z6={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ur=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Nn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=xu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Nn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Yn(t,"put")},{hasContent:!0,type:"update"});static patch=Nn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Yn(t,"patch")},{hasContent:!0,type:"update"});static delete=Nn(function(t,r,n,s){return t.delete?t.delete(r):Yn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,cU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Uu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),Ft(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Yn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Nn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Yn(t,"delete")},{hasContent:!1,type:"update"});static post=Nn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Nn(function(t,r,n,s){return t.update(r,s)},{hasContent:!0,type:"create"});static connect=Nn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Yn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Nn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Yn(t,"subscribe")},{type:"read"});static publish=Nn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Yn(t,"publish")},{hasContent:!0,type:"create"});static search=Nn(function(t,r,n){let s=t.search?t.search(r):Yn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=xu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Nn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Yn(t,"search")},{hasContent:!0,type:"read"});static copy=Nn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Yn(t,"copy")},{hasContent:!0,type:"create"});static move=Nn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Yn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Yn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return I_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&Z6[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:aU(t,this),isCollection:Zc}}let i=aU(t,this);return Zc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Vn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Vn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,lU._assignPackageExport)("Resource",Ur);o(e8,"snakeCase");o(aU,"pathToId");C_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Nn,"transactional");o(Yn,"missingMethod");o(QA,"selectFromObject");o(xu,"transformForSelect")});var el,JA=ce(()=>{el=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var hU={};we(hU,{Resources:()=>P_,keyArrayToString:()=>Bu,resetResources:()=>t8,resources:()=>bs});function t8(){return bs=new P_,Le.resources=bs,bs}function Bu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var fU,mU,P_,bs,Fu=ce(()=>{Bc();JA();fU=w(Q()),mU=w(ge());Dr();P_=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new mU.ServerError(`Conflicting paths for ${t}`);fU.default.error(c),i.Resource=new el(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ft(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(t8,"resetResources");o(Bu,"keyArrayToString")});function eb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=EU,r8(e.primaryStore,e.auditStore)):(c=pU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{_U(pU[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Bu(t);let d=new ZA(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function _U(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),gU(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Nt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Bu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,XA.info)("omitting",c,m.startTime,n);continue}try{let h;m.supportsTransactions&&m.txnInProgress!==i.version&&(h=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,h)}catch(h){console.error(h),(0,XA.info)(h)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function r8(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=EU[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{_U(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function gU(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function SU(e){return e.nextTransaction||(eb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),gU(e)),e.nextTransaction}var XA,pU,EU,ZA,tb=ce(()=>{XA=w(Q());Ru();Fu();Li();pU=Object.create(null),EU=Object.create(null);o(eb,"addSubscription");ZA=class extends Vn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(_U,"notifyFromTransactionData");o(r8,"listenToCommits");o(gU,"nextTransaction");o(SU,"whenNextTransaction")});var RU=M((awe,TU)=>{"use strict";var rb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};TU.exports=rb});var AU=M((lwe,yU)=>{"use strict";var nb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};yU.exports=nb});var Im=M((dwe,IU)=>{"use strict";var bU=oe(),n8=(k(),v(W)),{RecordEncoder:s8}=(zc(),v(tU));bU.initSync();var i8=bU.get(n8.CONFIG_PARAMS.STORAGE_CACHING)!==!1,sb=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=i8&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:s8})}};IU.exports=sb});var Nm=M((mwe,NU)=>{"use strict";var Wn=oe(),Is=(k(),v(W));Wn.initSync();var L_=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Wn.get(Is.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};NU.exports=L_;L_.MAX_DBS=1e4});var Tt=M((pwe,xU)=>{"use strict";var ob=require("lmdb"),ni=require("fs-extra"),zn=require("path"),D_=yn(),CU=Q(),wn=tn().LMDB_ERRORS_ENUM,M_=AU(),ab=Im(),PU=Nm(),La=Vt(),wU=(k(),v(W)),{table:o8,resetDatabases:a8}=(Me(),v(Et)),OU=oe(),si=La.INTERNAL_DBIS_NAME,LU=La.DBI_DEFINITION_NAME,c8="data.mdb",l8="lock.mdb",wm=".mdb",u8="-lock",ib=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ns(t,r),this.key_type=this.dbi[La.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[La.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new ob.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function v_(e,t){if(e===void 0)throw new Error(wn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(wn.ENV_NAME_REQUIRED)}o(v_,"pathEnvNameValidation");async function cb(e,t,r=!0){try{await ni.access(e)}catch(n){throw n.code==="ENOENT"?new Error(wn.INVALID_BASE_PATH):n}try{let n=zn.join(e,t+wm);return await ni.access(n,ni.constants.R_OK|ni.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ni.access(zn.join(e,t,c8),ni.constants.R_OK|ni.constants.F_OK),zn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(wn.INVALID_ENVIRONMENT)}else throw new Error(wn.INVALID_ENVIRONMENT);throw n}}o(cb,"validateEnvironmentPath");function U_(e,t){if(D_.validateEnv(e),t===void 0)throw new Error(wn.DBI_NAME_REQUIRED)}o(U_,"validateEnvDBIName");async function d8(e,t,r=!1,n=!1){v_(e,t);let s=zn.basename(e);t=t.toString();let i=OU.get(wU.CONFIG_PARAMS.DATABASES);i||OU.setProperty(wU.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await cb(e,t,n),DU(e,t,r)}catch(a){if(a.message===wn.INVALID_ENVIRONMENT){let c=zn.join(e,t);await ni.mkdirp(n?c:e);let l=new PU(n?c:c+wm,!1),u=ob.open(l);u.dbis=Object.create(null);let d=new ab(!1);u.openDB(si,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=lb(e,t,r);return u[La.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(d8,"createEnvironment");async function f8(e,t,r,n=!0){v_(e,t),t=t.toString();let s=zn.join(e,t);return o8({table:t,database:zn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(f8,"copyEnvironment");async function DU(e,t,r=!1){v_(e,t),t=t.toString();let n=lb(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await cb(e,t),i=zn.join(e,t+wm),a=s!=i,c=new PU(s,a),l=ob.open(c);l.dbis=Object.create(null);let u=vU(l);for(let d=0;d<u.length;d++)Ns(l,u[d]);return l[La.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(DU,"openEnvironment");async function m8(e,t,r=!1){v_(e,t),t=t.toString();let n=zn.join(e,t+wm),s=await cb(e,t);if(global.lmdb_map!==void 0){let i=lb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await MU(a),delete global.lmdb_map[i]}}await ni.remove(s),await ni.remove(s===n?s+u8:zn.join(zn.dirname(s),l8))}o(m8,"deleteEnvironment");async function MU(e){D_.validateEnv(e);let t=e[La.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(MU,"closeEnvironment");function lb(e,t,r=!1){let s=`${zn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(lb,"getCachedEnvironmentName");function h8(e){D_.validateEnv(e);let t=Object.create(null),r=Ns(e,si);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==si)try{t[n]=Object.assign(new M_,s)}catch{CU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(h8,"listDBIDefinitions");function vU(e){D_.validateEnv(e);let t=[],r=Ns(e,si);for(let{key:n}of r.getRange({start:!1}))n!==si&&t.push(n);return t}o(vU,"listDBIs");function p8(e,t){let n=Ns(e,si).getEntry(t),s=new M_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{CU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(p8,"getDBIDefinition");function UU(e,t,r,n=!r){if(U_(e,t),t=t.toString(),t===si)throw new Error(wn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ns(e,t)}catch(s){if(s.message===wn.DBI_DOES_NOT_EXIST){let i=new ab(r,n===!0),a=e.openDB(t,i),c=new M_(r===!0,n);return a[LU]=c,Ns(e,si).putSync(t,c),e.dbis[t]=a,a}throw s}}o(UU,"createDBI");function Ns(e,t){if(U_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==si?r=p8(e,t):r=new M_,r===void 0)throw new Error(wn.DBI_DOES_NOT_EXIST);let n;try{let s=new ab(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(wn.DBI_DOES_NOT_EXIST):s}return n[LU]=r,e.dbis[t]=n,n}o(Ns,"openDBI");function E8(e,t){U_(e,t),t=t.toString();let r=Ns(e,t),n=r.getStats();return r[La.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(E8,"statDBI");async function _8(e,t){try{let r=zn.join(e,t+wm);return(await ni.stat(r)).size}catch{throw new Error(wn.INVALID_ENVIRONMENT)}}o(_8,"environmentDataSize");function g8(e,t){if(U_(e,t),t=t.toString(),t===si)throw new Error(wn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ns(e,si).removeSync(t)}o(g8,"dropDBI");function S8(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ns(e,i)}catch(a){if(a.message===wn.DBI_DOES_NOT_EXIST)UU(e,i,i!==t,i===t),n=!0;else throw a}}n&&a8()}o(S8,"initializeDBIs");xU.exports={openDBI:Ns,openEnvironment:DU,createEnvironment:d8,listDBIs:vU,listDBIDefinitions:h8,createDBI:UU,dropDBI:g8,statDBI:E8,deleteEnvironment:m8,initializeDBIs:S8,TransactionCursor:ib,environmentDataSize:_8,copyEnvironment:f8,closeEnvironment:MU}});var HU=M((_we,FU)=>{"use strict";var ub=Tt(),T8=Q(),BU=tn().LMDB_ERRORS_ENUM;FU.exports=R8;async function R8(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await ub.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==BU.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await ub.closeEnvironment(global.lmdb_map[n]),await ub.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==BU.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){T8.error(t)}}o(R8,"cleanLMDBMap")});var No=M((Swe,y8)=>{y8.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ii=M((Twe,qU)=>{var A8=No(),{promisify:b8}=require("util"),{getDatabases:GU}=(Me(),v(Et));qU.exports={setSchemaDataToGlobal:kU,getTableSchema:I8,getSystemSchema:N8,setSchemaDataToGlobalAsync:b8(kU)};function kU(e){global.hdb_schema=GU(),e&&e()}o(kU,"setSchemaDataToGlobal");function I8(e,t,r){let n=GU()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(I8,"getTableSchema");function N8(){return A8}o(N8,"getSystemSchema")});var t0=M((Awe,e0)=>{"use strict";var db=require("recursive-iterator"),w8=require("alasql"),fb=require("clone"),$U=ie(),{handleHDBError:VU,hdbErrors:O8}=ge(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:YU}=O8,{getDatabases:C8}=(Me(),v(Et)),P8=["DISTINCT_ARRAY"],WU=Symbol("validateTables"),mb=Symbol("validateTable"),ywe=Symbol("getAllColumns"),zU=Symbol("validateAllColumns"),x_=Symbol("findColumn"),jU=Symbol("validateOrderBy"),Om=Symbol("validateSegment"),hb=Symbol("validateColumn"),QU=Symbol("setColumnsForTable"),JU=Symbol("checkColumnsForAsterisk"),XU=Symbol("validateGroupBy"),ZU=Symbol("hasColumns"),pb=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WU](),this[JU](),this[zU]()}[WU](){if(this[ZU]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mb](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mb](t.table)})}}[ZU](){let t=!1,r=new db(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[mb](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=C8();if(!r[t.databaseid])throw VU(new Error,KU.SCHEMA_NOT_FOUND(t.databaseid),YU.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw VU(new Error,KU.TABLE_NOT_FOUND(t.databaseid,t.tableid),YU.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=fb(s);i.table=fb(t),this.attributes.push(i)})}[x_](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[JU](){let t=new db(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[QU](r.tableid)}[QU](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new w8.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[zU](){this[Om](this.statement.columns,!1),this[Om](this.statement.joins,!1),this[Om](this.statement.where,!1),this[XU](this.statement.group,!1),this[Om](this.statement.order,!0)}[Om](t,r){if(!t)return;let n=new db(t),s=[];for(let{node:i,path:a}of n)!$U.isEmpty(i)&&!$U.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jU](i):s.push(this[hb](i)));return s}[XU](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&P8.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=fb(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[x_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[x_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[jU](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[hb](t)}[hb](t){let r=this[x_](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};e0.exports=pb});var n0=M((Iwe,r0)=>{"use strict";var Eb=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};r0.exports=Eb});var i0=M((wwe,s0)=>{"use strict";var _b=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};s0.exports=_b});var a0=M((Cwe,o0)=>{"use strict";var gb=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};o0.exports=gb});var l0=M((Lwe,c0)=>{"use strict";var Sb=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};c0.exports=Sb});var rl=M((xwe,f0)=>{"use strict";var L8=Tt(),D8=i0(),M8=a0(),v8=l0(),Bi=yn(),Cm=tn().LMDB_ERRORS_ENUM,U8=Vt(),wo=(k(),v(W)),x8=ie(),B8=require("uuid"),Mwe=require("lmdb"),{handleHDBError:F8,hdbErrors:H8}=ge(),{OVERFLOW_MARKER:vwe,MAX_SEARCH_KEY_LENGTH:Uwe}=U8,u0=oe();u0.initSync();var B_=u0.get(wo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Tb=wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,tl=wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function k8(e,t,r,n,s=Bi.getNextMonotonicTime()){bb(e,t,r,n),Rb(e,t,r);let i=new D8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];d0(u,!0,s);let d=G8(e,t,r,u),f=u[t];a.push(d),c.push(f)}return yb(a,c,n,i,s)}o(k8,"insertRecords");function G8(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][wo.FUNC_VAL],n[a]=c)}let l=Bi.getIndexedValues(c),u=e.dbis[a];if(l){B_&&u.prefetch(l.map(d=>({key:d,value:s})),F_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}B_&&e.dbis[t].prefetch([s],F_),e.dbis[t].put(s,n,n[tl])})}o(G8,"insertRecord");function q8(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(q8,"removeSkippedRecords");function d0(e,t,r){let n=r>0;(n||!Number.isInteger(e[tl]))&&(e[tl]=r||(r=Bi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Tb]))&&(e[Tb]=r||Bi.getNextMonotonicTime()):delete e[Tb]}o(d0,"setTimestamps");function Rb(e,t,r){r.indexOf(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),L8.initializeDBIs(e,t,r)}o(Rb,"initializeTransaction");async function $8(e,t,r,n,s=Bi.getNextMonotonicTime()){bb(e,t,r,n),Rb(e,t,r);let i=new M8,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=Ab(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return yb(c,l,n,i,s,a)}o($8,"updateRecords");async function V8(e,t,r,n,s=Bi.getNextMonotonicTime()){try{bb(e,t,r,n)}catch(l){throw F8(l,l.message,H8.HTTP_STATUS_CODES.BAD_REQUEST)}Rb(e,t,r);let i=new v8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;x8.isEmpty(u[t])?(d=B8.v4(),u[t]=d):d=u[t];let f=Ab(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return yb(a,c,n,i,s)}o(V8,"upsertRecords");async function yb(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Bi.getNextMonotonicTime(),q8(r,i),n}o(yb,"finalizeWrite");function Ab(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(d0(r,!d,a),Number.isInteger(r[tl])&&u[tl]>r[tl])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let _=r[p],g=e.dbis[p];if(g===void 0)continue;let R=u[p];if(typeof _=="function"){let y=_([[u]]);Array.isArray(y)&&(_=y[0][wo.FUNC_VAL],r[p]=_)}if(_===R)continue;let T=Bi.getIndexedValues(R);if(T){B_&&g.prefetch(T.map(y=>({key:y,value:n})),F_);for(let y=0,N=T.length;y<N;y++)g.remove(T[y],n)}if(T=Bi.getIndexedValues(_),T){B_&&g.prefetch(T.map(y=>({key:y,value:n})),F_);for(let y=0,N=T.length;y<N;y++)g.put(T[y],n)}}let h={...u,...r};c.put(n,h,h[tl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:Ab(e,t,r,n,s,i,a))}o(Ab,"updateUpsertRecord");function K8(e,t,r){if(Bi.validateEnv(e),t===void 0)throw new Error(Cm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cm.WRITE_ATTRIBUTES_REQUIRED):new Error(Cm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(K8,"validateBasic");function bb(e,t,r,n){if(K8(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Cm.RECORDS_REQUIRED):new Error(Cm.RECORDS_MUST_BE_ARRAY)}o(bb,"validateWrite");function F_(){}o(F_,"noop");f0.exports={insertRecords:k8,updateRecords:$8,upsertRecords:V8}});var ut=M((Fwe,m0)=>{"use strict";var On=require("validate.js");On.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||On.validators.type.checks[t](e)?null:` must be a '${t}' value`};On.validators.type.checks={Object:o(function(e){return On.isObject(e)&&!On.isArray(e)},"Object"),Array:On.isArray,Integer:On.isInteger,Number:On.isNumber,String:On.isString,Date:On.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};On.validators.hasValidFileExt=function(e,t){return On.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};m0.exports={validateObject:Y8,validateObjectAsync:W8,validateBySchema:z8};function Y8(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=On(e,t,{format:"flat"});return r?new Error(r):null}o(Y8,"validateObject");async function W8(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await On.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(W8,"validateObjectAsync");function z8(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(z8,"validateBySchema")});var p0=M((kwe,h0)=>{"use strict";var j8=require("uuid"),Ib=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||j8.v4(),this.schema_table=`${this.schema}.${this.table}`}};h0.exports=Ib});var H_=M((qwe,E0)=>{"use strict";var Q8=p0(),Nb=class extends Q8{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};E0.exports=Nb});var g0=M((Vwe,_0)=>{"use strict";_0.exports=X8;var J8="inserted";function X8(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===J8?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(X8,"returnObject")});var k_=M((Wwe,T0)=>{"use strict";var Z8=(k(),v(W)),wb=Tt(),eZ=rl(),{getSystemSchemaPath:tZ,getSchemaPath:rZ}=It(),Ywe=No(),{validateBySchema:nZ}=ut(),Pm=require("joi"),sZ=H_(),iZ=g0(),{handleHDBError:oZ,hdbErrors:aZ,ClientError:cZ}=ge(),S0=ie(),{HTTP_STATUS_CODES:lZ}=aZ,uZ="inserted";T0.exports=dZ;async function dZ(e){let t=nZ(e,Pm.object({database:Pm.string(),schema:Pm.string(),table:Pm.string().required(),attribute:Pm.string().required()}));if(t)throw new cZ(t.message);let r=!e.skip_table_check&&S0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw oZ(new Error,r,lZ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=S0.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new sZ(e.schema,e.table,e.attribute,e.id);try{let i=await wb.openEnvironment(rZ(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);wb.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await wb.openEnvironment(tZ(),Z8.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await eZ.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return iZ(uZ,c,{records:[s]},l)}catch(i){throw i}}o(dZ,"lmdbCreateAttribute")});var Hi=M((jwe,A0)=>{"use strict";var y0=ie(),R0=(k(),v(W)),Hu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fi=require("joi"),Da={schema_format:{pattern:Hu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},fZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number(),Fi.array()).required(),mZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()),hZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()).required();function pZ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Da.schema_length.maximum?`'${e}' maximum of 250 characters`:Hu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(pZ,"checkValidTable");function EZ(e,t){return y0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(EZ,"validateSchemaExists");function _Z(e,t){let r=t.state.ancestors[0].schema;return y0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(_Z,"validateTableExists");function gZ(e,t){return e.toLowerCase()===R0.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${R0.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(gZ,"validateSchemaName");A0.exports={commonValidators:Da,schemaRegex:Hu,hdbSchemaTable:fZ,validateSchemaExists:EZ,validateTableExists:_Z,validateSchemaName:gZ,checkValidTable:pZ,hdbDatabase:mZ,hdbTable:hZ}});var Cb=M((Jwe,I0)=>{var{hdbTable:SZ,hdbDatabase:b0}=Hi(),TZ=ut(),Ob=require("joi"),RZ={undefined:"undefined",null:"null"},yZ=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||RZ[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),AZ=Ob.object({database:b0,schema:b0,table:SZ,records:Ob.array().items(Ob.object().custom(yZ)).required()});I0.exports=function(e){return TZ.validateBySchema(e,AZ)}});var Lm=M((eOe,w0)=>{"use strict";var Oo=ie(),N0=Q(),Zwe=Cb(),{getDatabases:bZ}=(Me(),v(Et)),{ClientError:nl}=ge();w0.exports=IZ;function IZ(e){if(Oo.isEmpty(e))throw new nl("invalid update parameters defined.");if(Oo.isEmptyOrZeroLength(e.schema))throw new nl("invalid schema specified.");if(Oo.isEmptyOrZeroLength(e.table))throw new nl("invalid table specified.");if(!Array.isArray(e.records))throw new nl("records must be an array");let t=bZ()[e.schema]?.[e.table];if(Oo.isEmpty(t))throw new nl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Oo.isEmptyOrZeroLength(a[r]))throw N0.error("a valid hash attribute must be provided with update record:",a),new nl("a valid hash attribute must be provided with update record, check log for more info");if(!Oo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw N0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new nl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Oo.isEmpty(a[r])&&a[r]!==""&&n.has(Oo.autoCast(a[r]))&&(a.skip=!0),n.add(Oo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(IZ,"insertUpdateValidate")});var G_=M((rOe,C0)=>{"use strict";var O0=ie(),NZ=(k(),v(W)),wZ=Q(),OZ=k_(),CZ=H_(),PZ=Co(),{SchemaEventMsg:LZ}=oi(),DZ="already exists in";C0.exports=MZ;async function MZ(e,t,r){if(O0.isEmptyOrZeroLength(r))return r;let n=[];O0.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await vZ(e,t.schema,t.name,i)})),s}o(MZ,"lmdbCheckForNewAttributes");async function vZ(e,t,r,n){let s=new CZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await UZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DZ))wZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(vZ,"createNewAttribute");async function UZ(e){let t;return t=await OZ(e),PZ.signalSchemaChange(new LZ(process.pid,NZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(UZ,"createAttribute")});var ku=M((sOe,P0)=>{"use strict";var Pb=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};P0.exports=Pb});var D0=M((oOe,L0)=>{"use strict";var xZ=ku(),BZ=(k(),v(W)).OPERATIONS_ENUM,Lb=class extends xZ{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(BZ.INSERT,r,n,s,i),this.records=t}};L0.exports=Lb});var v0=M((cOe,M0)=>{"use strict";var FZ=ku(),HZ=(k(),v(W)).OPERATIONS_ENUM,Db=class extends FZ{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(HZ.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};M0.exports=Db});var x0=M((uOe,U0)=>{"use strict";var kZ=ku(),GZ=(k(),v(W)).OPERATIONS_ENUM,Mb=class extends kZ{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(GZ.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};U0.exports=Mb});var F0=M((fOe,B0)=>{"use strict";var qZ=ku(),$Z=(k(),v(W)).OPERATIONS_ENUM,vb=class extends qZ{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super($Z.DELETE,n,s,t,i),this.original_records=r}};B0.exports=vb});var Dm=M((pOe,q0)=>{"use strict";var hOe=require("path"),H0=Tt(),VZ=D0(),KZ=v0(),YZ=x0(),WZ=F0(),Gu=Vt(),k0=ie(),{CONFIG_PARAMS:zZ}=(k(),v(W)),G0=oe();G0.initSync();var q_=(k(),v(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:jZ}=It();q0.exports=QZ;async function QZ(e,t){if(G0.get(zZ.LOGGING_AUDITLOG)===!1)return;let r=jZ(e.schema,e.table),n=await H0.openEnvironment(r,e.table,!0),s=JZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){H0.initializeDBIs(n,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Gu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),k0.isEmpty(s.user_name)||n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(QZ,"writeTransaction");function JZ(e,t){let r=k0.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===q_.INSERT)return new VZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new KZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new YZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new WZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(JZ,"createTransactionObject")});var Ub=M((gOe,$0)=>{"use strict";var XZ=Lm(),_Oe=Zf(),Mm=(k(),v(W)),ZZ=em(),e5=rl().insertRecords,t5=Tt(),r5=Q(),n5=G_(),{getSchemaPath:s5}=It(),i5=Dm();$0.exports=o5;async function o5(e){try{let{schemaTable:t,attributes:r}=XZ(e);ZZ(e,r,t.hash_attribute),e.schema!==Mm.SYSTEM_SCHEMA_NAME&&(r.includes(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await n5(e.hdb_auth_header,t,r),s=s5(e.schema,e.table),i=await t5.openEnvironment(s,e.table),a=await e5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await i5(e,a)}catch(c){r5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(o5,"lmdbCreateRecords")});var Y0=M((TOe,K0)=>{"use strict";var V0=(k(),v(W)),a5=Ub(),c5=Zf(),l5=require("fs-extra"),{getSchemaPath:u5}=It();K0.exports=d5;async function d5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new c5(V0.SYSTEM_SCHEMA_NAME,V0.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await a5(r),await l5.mkdirp(u5(e.schema))}o(d5,"lmdbCreateSchema")});var z0=M((yOe,W0)=>{"use strict";var xb=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};W0.exports=xb});var X0=M((wOe,J0)=>{"use strict";var j0=Tt(),Bb=yn(),Fb=tn().LMDB_ERRORS_ENUM,f5=Vt(),Q0=Q(),bOe=ie(),m5=require("lmdb"),h5=z0(),p5=(k(),v(W)),{OVERFLOW_MARKER:IOe,MAX_SEARCH_KEY_LENGTH:NOe}=f5,E5=p5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _5(e,t,r,n){if(Bb.validateEnv(e),t===void 0)throw new Error(Fb.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Fb.IDS_REQUIRED):new Error(Fb.IDS_MUST_BE_ITERABLE);try{let s=j0.listDBIs(e);j0.initializeDBIs(e,t,s);let i=new h5,a,c=[],l=[];for(let m=0,h=r.length;m<h;m++)try{a=r[m];let p=e.dbis[t].get(a);if(!p||n&&p[E5]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,m5.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let R=s[g];if(!p.hasOwnProperty(R)||R===t)continue;let T=e.dbis[R],y=p[R];if(y!=null)try{let N=Bb.getIndexedValues(y);if(N)for(let O=0,F=N.length;O<F;O++)T.remove(N[O],a)}catch{Q0.warn(`cannot delete from attribute: ${R}, ${y}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){Q0.warn(p),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,h=d.length;m<h;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let h=u[m];i.original_records.splice(h-f,1),f++}return i.txn_time=Bb.getNextMonotonicTime(),i}catch(s){throw s}}o(_5,"deleteRecords");J0.exports={deleteRecords:_5}});var vm=M((COe,ex)=>{"use strict";var qu=ie(),g5=X0(),S5=Tt(),{getSchemaPath:T5}=It(),R5=Dm(),y5=Q();ex.exports=A5;async function A5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(qu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(qu.isEmptyOrZeroLength(e.hash_values)&&!qu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];qu.isEmpty(l)||e.hash_values.push(l)}}if(qu.isEmptyOrZeroLength(e.hash_values))return Z0([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(qu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=T5(e.schema,e.table),i=await S5.openEnvironment(s,e.table),a=await g5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await R5(e,a)}catch(c){y5.error(`unable to write transaction due to ${c.message}`)}return Z0(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(A5,"lmdbDeleteRecords");function Z0(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(Z0,"createDeleteResponse")});var kb=M((DOe,tx)=>{"use strict";var b5=(k(),v(W)),LOe=yn();function Hb(e,t){let r=Object.create(null);if(t.length===1&&b5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(Hb,"parseRow");function I5(e,t,r,n){let s=Hb(r,e);n.push(s)}o(I5,"searchAll");function N5(e,t,r,n){let s=Hb(r,e);n[t]=s}o(N5,"searchAllToMap");function w5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(w5,"iterateDBI");function sl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(sl,"pushResults");function O5(e,t,r,n,s,i){t.toString().endsWith(e)&&sl(t,r,n,s,i)}o(O5,"endsWith");function C5(e,t,r,n,s,i){t.toString().includes(e)&&sl(t,r,n,s,i)}o(C5,"contains");function P5(e,t,r,n,s,i){t>e&&sl(t,r,n,s,i)}o(P5,"greaterThanCompare");function L5(e,t,r,n,s,i){t>=e&&sl(t,r,n,s,i)}o(L5,"greaterThanEqualCompare");function D5(e,t,r,n,s,i){t<e&&sl(t,r,n,s,i)}o(D5,"lessThanCompare");function M5(e,t,r,n,s,i){t<=e&&sl(t,r,n,s,i)}o(M5,"lessThanEqualCompare");tx.exports={parseRow:Hb,searchAll:I5,searchAllToMap:N5,iterateDBI:w5,endsWith:O5,contains:C5,greaterThanCompare:P5,greaterThanEqualCompare:L5,lessThanCompare:D5,lessThanEqualCompare:M5,pushResults:sl}});var $u=M((BOe,cx)=>{"use strict";var Ma=Tt(),vOe=Q(),jn=yn(),$_=Vt(),Zt=tn().LMDB_ERRORS_ENUM,UOe=ie(),v5=(k(),v(W)),V_=kb(),{parseRow:U5}=V_,xOe=require("lmdb"),{OVERFLOW_MARKER:rx,MAX_SEARCH_KEY_LENGTH:x5}=$_;function nx(e,t,r,n=!1,s=void 0,i=void 0){return il(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(nx,"iterateFullIndex");function Um(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return il(e,t,r,(d,f,m,h)=>{let T={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(T.values=!1,f.getRange(T).map(y=>({value:y}))):f.getRange(T)})}o(Um,"iterateRangeBetween");function il(e,t,r,n){let s=e.database||e,i=Ma.openDBI(s,r);i[$_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ma.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(il,"setupTransaction");function sx(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(rx)){if(!s)if(r)s=Ma.openDBI(e,r);else{let l=Ma.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Ma.openDBI(e,l[u]),!s[$_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(sx,"getOverflowCheck");function B5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return il(e,t,t,(a,c,l)=>(K_(r),r=xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>U5(u.value,r))))}o(B5,"searchAll");function F5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);K_(r),r=xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of nx(e,t,t,n,s,i))a.set(c,V_.parseRow(l,r));return a}o(F5,"searchAllToMap");function H5(e,t,r=!1,n=void 0,s=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=nx(e,void 0,t,r,n,s),c=a.transaction,l=sx(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(H5,"iterateDBI");function k5(e,t){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return Ma.statDBI(e,t).entryCount}o(k5,"countAll");function G5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),il(e,t,r,(c,l,u,d)=>(n=jn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(G5,"equals");function q5(e,t,r){return va(e,t,r),Ma.openDBI(e,t).getValuesCount(r)}o(q5,"count");function $5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),il(e,null,r,(c,l)=>{n=jn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:h}=m;if(h!==f){if(h.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o($5,"startsWith");function V5(e,t,r,n,s=!1,i=void 0,a=void 0){return ix(e,t,r,n,s,i,a,!0)}o(V5,"endsWith");function ix(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return va(e,r,n),il(e,null,r,(l,u,d,f)=>{let m=sx(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let p=h.toString();return p.endsWith(rx)?u.getValues(h,{transaction:l}).map(_=>{let g=m(h,_);if(c?g.endsWith(n):g.includes(n))return{key:g,value:_}}).filter(_=>_):(c?p.endsWith(n):p.includes(n))?u[$_.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(_=>({key:h,value:_})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(ix,"contains");function K5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!0,!1)}o(K5,"greaterThan");function Y5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!1,!1)}o(Y5,"greaterThanEqual");function W5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!0)}o(W5,"lessThan");function z5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!1)}o(z5,"lessThanEqual");function j5(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(jn.validateEnv(e),r===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Zt.END_VALUE_REQUIRED);if(n=jn.convertKeyValueToWrite(n),s=jn.convertKeyValueToWrite(s),n>s)throw new Error(Zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Um(e,t,r,n,s,i,a,c)}o(j5,"between");function Q5(e,t,r,n){jn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),r=xm(s,r),n===void 0)throw new Error(Zt.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=V_.parseRow(c,r)),a}o(Q5,"searchByHash");function J5(e,t,r){jn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(J5,"checkHashExists");function X5(e,t,r,n,s=[]){return ax(e,t,r,n,s),ox(e,t,r,n,s).map(i=>i[1])}o(X5,"batchSearchByHash");function Z5(e,t,r,n,s=[]){ax(e,t,r,n,s);let i=new Map;for(let[a,c]of ox(e,t,r,n,s))i.set(a,c);return i}o(Z5,"batchSearchByHashToMap");function ox(e,t,r,n,s=[]){return il(e,t,t,(i,a,c)=>{r=xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,V_.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(ox,"batchHashSearch");function ax(e,t,r,n,s){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),n==null)throw new Error(Zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Zt.IDS_MUST_BE_ITERABLE)}o(ax,"initializeBatchSearchByHash");function K_(e){if(!Array.isArray(e))throw e===void 0?new Error(Zt.FETCH_ATTRIBUTES_REQUIRED):new Error(Zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(K_,"validateFetchAttributes");function va(e,t,r){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Zt.SEARCH_VALUE_REQUIRED);if(r?.length>x5)throw new Error(Zt.SEARCH_VALUE_TOO_LARGE)}o(va,"validateComparisonFunctions");function xm(e,t){return t.length===1&&v5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ma.listDBIs(e)),t}o(xm,"setGetWholeRowAttributes");cx.exports={searchAll:B5,searchAllToMap:F5,count:q5,countAll:k5,equals:G5,startsWith:$5,endsWith:V5,contains:ix,searchByHash:Q5,setGetWholeRowAttributes:xm,batchSearchByHash:X5,batchSearchByHashToMap:Z5,checkHashExists:J5,iterateDBI:H5,greaterThan:K5,greaterThanEqual:Y5,lessThan:W5,lessThanEqual:z5,between:j5}});var Vu=M((HOe,mx)=>{var lx=require("lodash"),ux=ut(),qe=require("joi"),e9=ie(),{hdbSchemaTable:Bm,checkValidTable:dx,hdbTable:fx,hdbDatabase:Y_}=Hi(),{handleHDBError:t9,hdbErrors:r9}=ge(),{getDatabases:n9}=(Me(),v(Et)),{HTTP_STATUS_CODES:s9}=r9,i9=qe.object({database:Y_,schema:Y_,table:fx,search_attribute:Bm,search_value:qe.any().required(),get_attributes:qe.array().min(1).items(qe.alternatives(Bm,qe.object())).optional(),desc:qe.bool(),limit:qe.number().integer().min(1),offset:qe.number().integer().min(0)}),o9=qe.object({database:Y_,schema:Y_,table:fx,operator:qe.string().valid("and","or").default("and").lowercase(),offset:qe.number().integer().min(0),limit:qe.number().integer().min(1),get_attributes:qe.array().min(1).items(qe.alternatives(Bm,qe.object())).optional(),sort:qe.object({attribute:qe.alternatives(Bm,qe.array().min(1)),descending:qe.bool().optional()}).optional(),conditions:qe.array().min(1).items(qe.alternatives(qe.object({operator:qe.string().valid("and","or").default("and").lowercase(),conditions:qe.array()}),qe.object({search_attribute:qe.alternatives(Bm,qe.array().min(1)),search_type:qe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:qe.when("search_type",{switch:[{is:"equals",then:qe.any()},{is:"between",then:qe.array().items(qe.alternatives([qe.string(),qe.number()])).length(2)}],otherwise:qe.alternatives(qe.string(),qe.number())}).required()}))).required()});mx.exports=function(e,t){let r=null;switch(t){case"value":r=ux.validateBySchema(e,i9);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(dx("database",e.schema)),i(dx("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=ux.validateBySchema(e,o9);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=e9.checkGlobalSchemaTable(e.schema,e.table);if(s)return t9(new Error,s,s9.NOT_FOUND);let a=n9()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=o(d=>{for(let f=0,m=d.conditions.length;f<m;f++){let h=d.conditions[f];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=lx.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!lx.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var Gb=M((GOe,hx)=>{"use strict";var a9=Tt(),c9=Vu(),{getSchemaPath:l9}=It();hx.exports=u9;function u9(e){let t=c9(e,"hashes");if(t)throw t;let r=l9(e.schema,e.table);return a9.openEnvironment(r,e.table)}o(u9,"initialize")});var qb=M(($Oe,px)=>{"use strict";var d9=$u(),f9=Gb();px.exports=m9;async function m9(e){let t=await f9(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return d9.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(m9,"lmdbGetDataByHash")});var Ku=M((KOe,Ex)=>{"use strict";var $b=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Ex.exports=$b});var gx=M((zOe,_x)=>{"use strict";var WOe=Ku(),h9=$u(),p9=Gb();_x.exports=E9;async function E9(e){let t=await p9(e),r=global.hdb_schema[e.schema][e.table];return h9.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(E9,"lmdbSearchByHash")});var ai=M((QOe,Sx)=>{"use strict";var Vb=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};Sx.exports=Vb});var W_=M((XOe,Ix)=>{"use strict";var nn=$u(),_9=Tt(),g9=ie(),$e=Vt(),ol=(k(),v(W)),S9=No(),Tx=tn().LMDB_ERRORS_ENUM,{getSchemaPath:T9}=It(),Po=ol.SEARCH_WILDCARDS;async function R9(e,t,r){let n;e.schema===ol.SYSTEM_SCHEMA_NAME?n=S9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=bx(e,n.hash_attribute,r,t);return yx(e,s,n.hash_attribute,r)}o(R9,"prepSearch");async function yx(e,t,r,n){let s=T9(e.schema,e.table),i=await _9.openEnvironment(s,e.table),a=Ax(i,e,t,r),c=a.transaction||i;if([$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,$e.SEARCH_TYPES.SEARCH_ALL,$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(y9(e,r)===!1){let d=e.search_attribute;if(d===r)return n?Rx(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?Rx(a,f):a.map(f)}let u=e.search_attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?nn.batchSearchByHashToMap(c,r,e.get_attributes,u):nn.batchSearchByHash(c,r,e.get_attributes,u)}o(yx,"executeSearch");function Ax(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case $e.SEARCH_TYPES.EQUALS:s=nn.equals(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.CONTAINS:s=nn.contains(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.ENDS_WITH:case $e.SEARCH_TYPES._ENDS_WITH:s=nn.endsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.STARTS_WITH:case $e.SEARCH_TYPES._STARTS_WITH:s=nn.startsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return nn.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return nn.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.SEARCH_ALL:return nn.searchAll(e,n,t.get_attributes,a,c,l);case $e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return nn.searchAllToMap(e,n,t.get_attributes,a,c,l);case $e.SEARCH_TYPES.BETWEEN:s=nn.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN:case $e.SEARCH_TYPES._GREATER_THAN:s=nn.greaterThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN_EQUAL:case $e.SEARCH_TYPES._GREATER_THAN_EQUAL:s=nn.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.LESS_THAN:case $e.SEARCH_TYPES._LESS_THAN:s=nn.lessThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.LESS_THAN_EQUAL:case $e.SEARCH_TYPES._LESS_THAN_EQUAL:s=nn.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;default:return Object.create(null)}return s}o(Ax,"searchByType");function Rx(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(Rx,"createMapFromIterable");function y9(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(y9,"checkToFetchMore");function bx(e,t,r,n){if(g9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Po.indexOf(s)>-1)return r===!0?$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:$e.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Po[0])<0&&s.indexOf(Po[1])<0)return c===!0?r===!0?$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:$e.SEARCH_TYPES.EQUALS;if(Po.indexOf(i)>=0&&Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),$e.SEARCH_TYPES.CONTAINS;if(Po.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),$e.SEARCH_TYPES.ENDS_WITH;if(Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),$e.SEARCH_TYPES.STARTS_WITH;if(s.includes(Po[0])||s.includes(Po[1]))return $e.SEARCH_TYPES.EQUALS;throw new Error(Tx.UNKNOWN_SEARCH_TYPE)}else switch(n){case ol.VALUE_SEARCH_COMPARATORS.BETWEEN:return $e.SEARCH_TYPES.BETWEEN;case ol.VALUE_SEARCH_COMPARATORS.GREATER:return $e.SEARCH_TYPES.GREATER_THAN;case ol.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return $e.SEARCH_TYPES.GREATER_THAN_EQUAL;case ol.VALUE_SEARCH_COMPARATORS.LESS:return $e.SEARCH_TYPES.LESS_THAN;case ol.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return $e.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Tx.UNKNOWN_SEARCH_TYPE)}}o(bx,"createSearchTypeFromSearchObject");Ix.exports={executeSearch:yx,createSearchTypeFromSearchObject:bx,prepSearch:R9,searchByType:Ax}});var wx=M((tCe,Nx)=>{"use strict";var eCe=ai(),A9=Vu(),b9=ie(),I9=(k(),v(W)),N9=W_();Nx.exports=w9;function w9(e,t){if(!b9.isEmpty(t)&&I9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A9(e,"value");if(n)throw n;return N9.prepSearch(e,t,!0)}o(w9,"lmdbGetDataByValue")});var Fm=M((sCe,Ox)=>{"use strict";var nCe=ai(),O9=Vu(),C9=ie(),P9=(k(),v(W)),L9=W_();Ox.exports=D9;async function D9(e,t){if(!C9.isEmpty(t)&&P9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=O9(e,"value");if(n)throw n;return L9.prepSearch(e,t,!1)}o(D9,"lmdbSearchByValue")});var Px=M((aCe,Cx)=>{"use strict";var oCe=Vt(),Kb=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},Yb=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Wb=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Cx.exports={SearchByConditionsObject:Kb,SearchCondition:Yb,SortAttribute:Wb}});var Ux=M((dCe,vx)=>{"use strict";var lCe=Px().SearchByConditionsObject,M9=ai(),v9=Vu(),zb=$u(),z_=Vt(),{Resource:uCe}=(Pa(),v(dU)),Mx=W_(),U9=kb(),x9=require("lodash"),{getSchemaPath:B9}=It(),Lx=Tt(),{handleHDBError:F9,hdbErrors:H9}=ge(),{HTTP_STATUS_CODES:k9}=H9,G9=1e8;vx.exports=q9;async function q9(e){let t=v9(e,"conditions");if(t)throw F9(t,t.message,k9.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=B9(e.schema,e.table),n=await Lx.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Lx.openDBI(n,u.search_attribute);let i=x9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===z_.SEARCH_TYPES.EQUALS?u.estimated_count=zb.count(n,u.search_attribute,u.search_value):d===z_.SEARCH_TYPES.CONTAINS||d===z_.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=G9}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await Dx(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(Mx.filterByType),f=d.length,m=zb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:a,lazy:!0})),f>0&&(l=l.filter(h=>{for(let p=0;p<f;p++)if(!d[p](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(h=>U9.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await Dx(a,e,m,s.hash_attribute);c=c.concat(h)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=zb.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(q9,"lmdbSearchByConditions");async function Dx(e,t,r,n){let s=new M9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===z_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Mx.searchByType(e,s,i,n).map(a=>a.value)}o(Dx,"executeConditionSearch")});var Hm=M((mCe,xx)=>{"use strict";var $9=(k(),v(W)).OPERATIONS_ENUM,jb=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=$9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};xx.exports=jb});var Qb=M((pCe,Vx)=>{"use strict";var kx=ai(),Gx=Hm(),qx=Fm(),$x=vm(),Cn=(k(),v(W)),Bx=ie(),Fx=Tt(),{getTransactionAuditStorePath:V9,getSchemaPath:K9}=It(),Hx=Q();Vx.exports=Y9;async function Y9(e){try{if(Bx.isEmpty(global.hdb_schema[e.schema])||Bx.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await W9(e),await z9(e);let t=K9(e.schema,e.table);try{await Fx.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Hx.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=V9(e.schema,e.table);await Fx.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Hx.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Y9,"lmdbDropTable");async function W9(e){let t=new kx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await qx(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new Gx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $x(s)}o(W9,"deleteAttributesFromSystem");async function z9(e){let t=new kx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await qx(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Gx(Cn.SYSTEM_SCHEMA_NAME,Cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $x(s)}catch(i){throw i}}o(z9,"dropTableFromSystem")});var Yx=M((_Ce,Kx)=>{"use strict";var j9=require("fs-extra"),Q9=ai(),J9=Ku(),X9=Hm(),Z9=Qb(),e7=vm(),t7=qb(),r7=Fm(),Lo=(k(),v(W)),{getSchemaPath:n7}=It(),{handleHDBError:s7,hdbErrors:i7}=ge(),{HDB_ERROR_MSGS:o7,HTTP_STATUS_CODES:a7}=i7;Kx.exports=c7;async function c7(e){let t;try{t=await l7(e.schema);let r=new Q9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await r7(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Z9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new X9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await e7(s);let i=n7(t);await j9.remove(i)}catch(r){throw r}}o(c7,"lmdbDropSchema");async function l7(e){let t=new J9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await t7(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw s7(new Error,o7.SCHEMA_NOT_FOUND(e),a7.NOT_FOUND,void 0,void 0,!0);return n}o(l7,"validateDropSchema")});var km=M((SCe,Wx)=>{"use strict";var Jb=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Wx.exports=Jb});var Zb=M((yCe,zx)=>{"use strict";var u7=require("fs-extra"),j_=Tt(),{getTransactionAuditStorePath:d7}=It(),Xb=Vt(),RCe=km();zx.exports=f7;async function f7(e){let t;try{let r=d7(e.schema,e.table);await u7.mkdirp(r),t=await j_.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),j_.createDBI(t,Xb.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(f7,"createTransactionsAuditEnvironment")});var Jx=M((ICe,Qx)=>{"use strict";var eI=(k(),v(W)),jx=Tt(),m7=rl(),{getSystemSchemaPath:h7,getSchemaPath:p7}=It(),bCe=No(),E7=k_(),tI=H_(),_7=Q(),g7=Zb();Qx.exports=S7;async function S7(e,t){let r=p7(t.schema,t.table),n=new tI(t.schema,t.table,eI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new tI(t.schema,t.table,eI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new tI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jx.createEnvironment(r,t.table),e!==void 0){let a=await jx.openEnvironment(h7(),eI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await m7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await rI(n),await rI(s),await rI(i)}await g7(t)}catch(a){throw a}}o(S7,"lmdbCreateTable");async function rI(e){try{await E7(e)}catch(t){_7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(rI,"createAttribute")});var Zx=M((wCe,Xx)=>{"use strict";var T7=Lm(),R7=em(),y7=G_(),Gm=(k(),v(W)),A7=rl().updateRecords,b7=Tt(),{getSchemaPath:I7}=It(),N7=Dm(),w7=Q();Xx.exports=O7;async function O7(e){try{let{schemaTable:t,attributes:r}=T7(e);R7(e,r,t.hash_attribute),e.schema!==Gm.SYSTEM_SCHEMA_NAME&&(r.includes(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await y7(e.hdb_auth_header,t,r),s=I7(e.schema,e.table),i=await b7.openEnvironment(s,e.table),a=await A7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await N7(e,a)}catch(c){w7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(O7,"lmdbUpdateRecords")});var tB=M((CCe,eB)=>{"use strict";var C7=(k(),v(W)).OPERATIONS_ENUM,nI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=C7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};eB.exports=nI});var nB=M((DCe,rB)=>{"use strict";var LCe=tB(),P7=Lm(),L7=em(),D7=G_(),qm=(k(),v(W)),M7=rl().upsertRecords,v7=Tt(),{getSchemaPath:U7}=It(),x7=Dm(),B7=Q(),{handleHDBError:F7,hdbErrors:H7}=ge();rB.exports=k7;async function k7(e){let t;try{t=P7(e)}catch(l){throw F7(l,l.message,H7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;L7(e,n,r.hash_attribute),e.schema!==qm.SYSTEM_SCHEMA_NAME&&(n.includes(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await D7(e.hdb_auth_header,r,n),i=U7(e.schema,e.table),a=await v7.openEnvironment(i,e.table),c=await M7(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await x7(e,c)}catch(l){B7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(k7,"lmdbUpsertRecords")});var iB=M((vCe,sB)=>{"use strict";var sI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};sB.exports=sI});var aB=M((xCe,oB)=>{"use strict";var iI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};oB.exports=iI});var uB=M((HCe,lB)=>{"use strict";var oI=Tt(),{getTransactionAuditStorePath:G7}=It(),FCe=iB(),$m=Vt(),q7=ie(),cB=aB(),$7=require("util").promisify,V7=$7(setTimeout),K7=1e4,Y7=100;lB.exports=W7;async function W7(e){let t=G7(e.schema,e.table),r=await oI.openEnvironment(t,e.table,!0),n=oI.listDBIs(r);oI.initializeDBIs(r,$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new cB;do s=await z7(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await V7(Y7);while(s.transactions_deleted>0);return i}o(W7,"deleteAuditLogsBefore");async function z7(e,t){let r=new cB;try{let n=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];q7.isEmpty(c)||(s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>K7)break}return await s,r}catch(n){throw n}}o(z7,"deleteTransactions")});var fB=M((GCe,dB)=>{"use strict";var aI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};dB.exports=aI});var hB=M((VCe,mB)=>{"use strict";var j7=ai(),Q7=Hm(),$Ce=fB(),ki=(k(),v(W)),J7=ie(),cI=Tt(),X7=No(),Z7=Fm(),eee=vm(),{getSchemaPath:tee}=It();mB.exports=ree;async function ree(e,t=!0){let r;e.schema===ki.SYSTEM_SCHEMA_NAME?r=X7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await see(e),s=tee(e.schema,e.table),i=await cI.openEnvironment(s,e.table);return t===!0&&await nee(e,i,r.hash_attribute),cI.dropDBI(i,e.attribute),n}o(ree,"lmdbDropAttribute");async function nee(e,t,r){let n=cI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(nee,"removeAttributeFromAllObjects");async function see(e){let t=new j7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Z7(t)).filter(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(J7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Q7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return eee(i)}o(see,"dropAttributeFromSystem")});var TB=M((WCe,SB)=>{"use strict";var lI=Tt(),Yu=Vt(),YCe=yn(),uI=(k(),v(W)),pB=ie(),{getTransactionAuditStorePath:iee}=It(),oee=$u(),Q_=ku(),aee=Q();SB.exports=cee;async function cee(e){let t=iee(e.schema,e.table),r=await lI.openEnvironment(t,e.table,!0),n=lI.listDBIs(r);lI.initializeDBIs(r,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return EB(r,e.search_values);case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,uee(r,e.search_values,s);case uI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lee(r,e.search_values);default:return EB(r)}}o(cee,"readAuditLog");function EB(e,t=[0,Date.now()]){pB.isEmpty(t[0])&&(t[0]=0),pB.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Q_,s))}o(EB,"searchTransactionsByTimestamp");function lee(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,gB(e,i))}return Object.fromEntries(r)}o(lee,"searchTransactionsByUsername");function uee(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=oee.equals(e,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=gB(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);_B(l,"records",r,d,a),_B(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(uee,"searchTransactionsByHashValues");function _B(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Q_(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Q_(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(_B,"loopRecords");function gB(e,t){let r=[];try{let n=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new Q_,i);r.push(a)}}catch(i){aee.warn(i)}return r}catch(n){throw n}}o(gB,"batchSearchTransactions")});var yB=M((JCe,RB)=>{"use strict";var{getSchemaPath:jCe}=It(),QCe=Tt(),{database:dee}=(Me(),v(Et));RB.exports={writeTransaction:fee};async function fee(e,t,r){return dee({database:e,table:t}).transaction(r)}o(fee,"writeTransaction")});var NB=M((ZCe,IB)=>{"use strict";var{getSchemaPath:AB}=It(),bB=Tt();IB.exports={flush:mee,resetReadTxn:hee};async function mee(e,t){return(await bB.openEnvironment(AB(e,t),t.toString())).flushed}o(mee,"flush");async function hee(e,t){try{(await bB.openEnvironment(AB(e,t),t.toString())).resetReadTxn()}catch{}}o(hee,"resetReadTxn")});var PB=M((tPe,CB)=>{"use strict";var{Readable:pee}=require("stream"),{getDatabases:Eee}=(Me(),v(Et)),{readSync:_ee,openSync:gee,createReadStream:wB}=require("fs"),{open:See}=require("lmdb"),OB=Im(),Tee=Nm(),{AUDIT_STORE_OPTIONS:Ree}=(Li(),v(Qv)),{INTERNAL_DBIS_NAME:yee,AUDIT_STORE_NAME:Aee}=Vt();CB.exports=Iee;var dI=32768,bee=100;async function Iee(e){let t=e.database||e.schema||"data",r=Eee()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=See({noSync:!0,maxDbs:Tee.MAX_DBS}),m,h=f.openDB(yee,new OB(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,y){y.encoding="binary",y.encoder=void 0;let N=f.openDB(T,y),O=d.openDB(T,y);for(let{key:F,version:Z,value:G}of O.getRange({start:null,transaction:p,versions:O.useVersions}))m=N.put(F,G,Z),_++%bee===0&&(await new Promise(Y=>setTimeout(Y,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:T,value:y}of d.getRange({transaction:p,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){h.put(T,y);let[,N]=T.split("/"),O=!N,F=new OB(!O,O);await g(T,F)}e.include_audit&&await g(Aee,{...Ree}),await m;let R=wB(f.path);return R.headers=l(),R.on("close",()=>{p.done(),f.close()}),R}let a=r[Object.keys(r)[0]].primaryStore,c=gee(a.path);return a.transaction(()=>{let u=Buffer.alloc(dI);_ee(c,u,0,dI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=wB(null,{fd:c,start:dI}),m=new pee.from((async function*(){yield u;for await(let h of f)d.openTimer&&(d.openTimer=0),yield h;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(Iee,"getBackup")});var MB=M((nPe,DB)=>{"use strict";var Nee=Q(),{handleHDBError:wee}=ge(),Oee=n0(),Cee=k_(),Pee=Ub(),Lee=Y0(),Dee=vm(),Mee=qb(),vee=gx(),Uee=wx(),xee=Fm(),Bee=Ux(),Fee=Yx(),Hee=Jx(),kee=Zx(),Gee=nB(),qee=uB(),$ee=Qb(),Vee=hB(),Kee=TB(),Yee=yB(),LB=NB(),Wee=PB(),fI=class extends Oee{static{o(this,"LMDBBridge")}async searchByConditions(t){return Bee(t)}async getDataByHash(t){return await Mee(t)}async searchByHash(t){return await vee(t)}async getDataByValue(t,r){return await Uee(t,r)}async searchByValue(t){return await xee(t)}async createSchema(t){return await Lee(t)}async dropSchema(t){return await Fee(t)}async createTable(t,r){return await Hee(t,r)}async dropTable(t){return await $ee(t)}async createAttribute(t){return await Cee(t)}async createRecords(t){return await Pee(t)}async updateRecords(t){return await kee(t)}async upsertRecords(t){try{return await Gee(t)}catch(r){throw wee(r,null,null,Nee.ERR,r)}}async deleteRecords(t){return await Dee(t)}async dropAttribute(t){return await Vee(t)}async deleteAuditLogsBefore(t){return await qee(t)}async readAuditLog(t){return await Kee(t)}writeTransaction(t,r,n){return Yee.writeTransaction(t,r,n)}flush(t,r){return LB.flush(t,r)}resetReadTxn(t,r){return LB.resetReadTxn(t,r)}getBackup(t){return Wee(t)}};DB.exports=fI});function Pn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Km(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(h=>typeof h=="string")||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="number"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a number, attempt to assign ${h}`);Pn(this)[u]=m},"set");break;case"Int":d=o(function(m){let h=m?.__op__?m.value:m;if(!(h>>0===h||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Long":d=o(function(m){let h=m?.__op__?m.value:m;if(!(Math.round(h)===m&&Math.abs(h)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="bigint"||m==null&&l.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be a number, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new Qn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Rs||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Pn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Pn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be an object, attempt to assign ${m}`);Pn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let p=m[u];if(p?.__op__){let _=this.getRecord()?.[u];return p.update(_)}return p}let h=this.getRecord()?.[u];if(h&&typeof h=="object"){let p=mI(h,l);if(p)return m||this._setChanges(m=Object.create(null)),m[u]=p}return h},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");Pn(this)[l]=u}),a("deleteProperty",function(l){Pn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let h=u[f];m=m.update(h)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?xB:UB);break}c=l}while(c&&c!==UB&&c!==xB)}function BB(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(vB[t])return vB[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=mI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function zee(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function mI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends cl{static{o(this,"TrackedObject")}},Km(r,t)),new r(e)):new cl(e);case Array:let n=new X_(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=mI(a,t?.elements)),n[s]=a}return n;default:return e}}function Z_(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=Z_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function ll(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=ll(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=fA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ll(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)jee.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function J_(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[al]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(J_(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(J_(s))return!0}else return!0}else return!0}}return!1}var Qn,vB,UB,xB,cl,jee,al,X_,Vm,hI=ce(()=>{Qn=w(ge());zE();Kn();o(Pn,"getChanges");o(Km,"assignTrackedAccessors");vB=Object.prototype,UB=new Proxy({},{get:BB}),xB=new Proxy({},{get:BB,set:zee});o(BB,"getProxiedProperty");o(zee,"setProxiedProperty");o(mI,"trackObject");cl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Km(cl,{},!0);o(Z_,"collapseData");jee=Object.prototype.hasOwnProperty;o(ll,"updateAndFreeze");o(J_,"hasChanges");al=Symbol.for("has-array-changes"),X_=class extends Array{static{o(this,"TrackedArray")}#e;[al];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[al]=!0,super.splice(...t)}push(...t){return this[al]=!0,super.push(...t)}pop(){return this[al]=!0,super.pop()}unshift(...t){return this[al]=!0,super.unshift(...t)}shift(){return this[al]=!0,super.shift()}};X_.prototype.constructor=Array;Vm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var KB={};we(KB,{ResourceBridge:()=>_I});function gI({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function FB(e,t){let r=Gi(e),n=gI(e,r);if(!r)throw new ci.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;Ft(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Z_(d)}catch(f){d={message:(0,VB.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Gi(e){let t=e.database||e.schema||Jee,r=st()[t];if(!r)throw(0,ci.handleHDBError)(new Error,Qee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function HB(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*kB(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var GB,eg,ci,qB,pI,EI,$B,VB,Qee,Jee,Xee,Zee,_I,YB=ce(()=>{GB=w(MB()),eg=w(Vu()),ci=w(ge());Me();qB=w(Lm());k();pI=w(Co()),EI=w(oi()),$B=w(ie());Bc();hI();VB=w(Q()),{HDB_ERROR_MSGS:Qee}=ci.hdbErrors,Jee="data",Xee=1e4,Zee=10,_I=class extends GB.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let a of t.conditions||[])a?.attribute!==void 0&&(a.search_attribute=a.attribute),a?.comparator!==void 0&&(a.search_type=a.comparator),a?.value!==void 0&&(a.search_value=a.value);let r=(0,eg.default)(t,"conditions");if(r)throw(0,ci.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Gi(t);if(!n)throw new ci.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(a){if("conditions"in a&&a.conditions)return a.conditions=a.conditions.map(i),a;{let c=a;return{attribute:c.search_attribute??c.attribute,comparator:c.search_type??c.comparator,value:c.search_value!==void 0?c.search_value:c.value}}}return o(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:gI(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ci.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Gi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Gi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Gi(t).dropTable()}createSchema(t){return Wu({database:t.schema,table:null}),pI.signalSchemaChange(new EI.SchemaEventMsg(process.pid,q.CREATE_SCHEMA,t.schema))}async dropSchema(t){await SI(t.schema),pI.signalSchemaChange(new EI.SchemaEventMsg(process.pid,q.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,qB.default)(t),s,i=st()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),Ft(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Z_(m));for(let h in d)if(Object.prototype.hasOwnProperty.call(d,h)){let p=d[h];if(typeof p=="function")try{let _=p([[m]]);Array.isArray(_)&&(p=_[0].func_val,d[h]=p)}catch(_){throw _.message+="Trying to set key "+h+" on object"+JSON.stringify(d),_}}if(m)for(let h in m)Object.prototype.hasOwnProperty.call(d,h)||(d[h]=m[h]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=st()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Ft(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return HB(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=st()[t.schema][t.table];if(!r.createdTimeProperty)throw new ci.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:UE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,$B.asyncSetTimeout)(Zee),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Xee===0&&await u();return l.length>0&&await u(),s?HB(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,eg.default)(t,"hashes");if(r)throw r;return FB(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of FB(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Xy[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=t.attribute),t.value!==void 0&&(t.search_value=t.value);let n=(0,eg.default)(t,"value");if(n)throw n;let s=Gi(t);if(!s)throw new ci.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===UE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:gI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Gi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Gi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Gi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Gi(t),n={};switch(t.search_type){case xE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case xE.USERNAME:{let s=t.search_values;for await(let i of kB(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return kB(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(gI,"getSelect");o(FB,"getRecords");o(Gi,"getTable");o(HB,"createDeleteResponse");o(kB,"groupRecordsInHistory")});var Jn=M((hPe,WB)=>{"use strict";var{ResourceBridge:ete}=(YB(),v(KB)),tte=oe();tte.initSync();var tg;function rte(){return tg||(tg=new ete,tg)}o(rte,"getBridge");WB.exports=rte()});var JB=M((EPe,QB)=>{"use strict";var zB=require("lodash"),Ym=require("mathjs"),nte=require("jsonata"),jB=ie();QB.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?zB.uniqWith(e,zB.isEqual):e,"distinct_array"),searchJSON:ste,mad:Wm.bind(null,Ym.mad),mean:Wm.bind(null,Ym.mean),mode:Wm.bind(null,Ym.mode),prod:Wm.bind(null,Ym.prod),median:Wm.bind(null,Ym.median)};function Wm(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Wm,"aggregateFunction");function ste(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(jB.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),jB.isEmpty(this.__ala__.res[r])){let n=nte(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(ste,"searchJSON")});var ZB=M((gPe,XB)=>{"use strict";var lr=require("moment"),TI="YYYY-MM-DDTHH:mm:ss.SSSZZ";lr.suppressDeprecationWarnings=!0;XB.exports={current_date:o(()=>lr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>lr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return lr(e).utc().format("YYYY");case"month":return lr(e).utc().format("MM");case"day":return lr(e).utc().format("DD");case"hour":return lr(e).utc().format("HH");case"minute":return lr(e).utc().format("mm");case"second":return lr(e).utc().format("ss");case"millisecond":return lr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>lr(e).utc().format(TI),"date"),date_format:o((e,t)=>lr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>lr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>lr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=lr(e).utc(),s=lr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>lr().utc().valueOf(),"now"),get_server_time:o(()=>lr().format(TI),"get_server_time"),offset_utc:o((e,t)=>lr(e).utc().utcOffset(t).format(TI),"offset_utc")}});var nF=M((TPe,rF)=>{"use strict";var ite=require("@turf/area"),ote=require("@turf/length"),ate=require("@turf/circle"),cte=require("@turf/difference"),lte=require("@turf/distance"),ute=require("@turf/boolean-contains"),dte=require("@turf/boolean-equal"),fte=require("@turf/boolean-disjoint"),mte=require("@turf/helpers"),eF=(k(),v(W)),Ke=ie(),Do=Q();rF.exports={geoArea:hte,geoLength:pte,geoCircle:Ete,geoDifference:_te,geoDistance:tF,geoNear:gte,geoContains:Ste,geoEqual:Tte,geoCrosses:Rte,geoConvert:yte};function hte(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return ite.default(e)}catch(t){return Do.trace(t,e),NaN}}o(hte,"geoArea");function pte(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return ote.default(e,{units:t||"kilometers"})}catch(r){return Do.trace(r,e),NaN}}o(pte,"geoLength");function Ete(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return ate.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(Ete,"geoCircle");function _te(e,t){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return cte(e,t)}catch(r){return Do.trace(r,e,t),NaN}}o(_te,"geoDifference");function tF(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return lte.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(tF,"geoDistance");function gte(e,t,r,n){if(Ke.isEmpty(e)||Ke.isEmpty(t))return!1;if(Ke.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return tF(e,t,n)<=r}catch(s){return Do.trace(s,e,t),!1}}o(gte,"geoNear");function Ste(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return ute.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Ste,"geoContains");function Tte(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return dte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Tte,"geoEqual");function Rte(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return!fte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Rte,"geoCrosses");function yte(e,t,r){if(Ke.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ke.isEmpty(t))throw new Error("geo_type is required");if(Ke.isEmpty(eF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(eF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),mte[t](e,r)}o(yte,"geoConvert")});var rg=M((yPe,sF)=>{var ul=JB(),Xn=ZB(),qi=nF();sF.exports=e=>{e.aggr.mad=e.aggr.MAD=ul.mad,e.aggr.mean=e.aggr.MEAN=ul.mean,e.aggr.mode=e.aggr.MODE=ul.mode,e.aggr.prod=e.aggr.PROD=ul.prod,e.aggr.median=e.aggr.MEDIAN=ul.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ul.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ul.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Xn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Xn.current_time,e.fn.extract=e.fn.EXTRACT=Xn.extract,e.fn.date=e.fn.DATE=Xn.date,e.fn.date_format=e.fn.DATE_FORMAT=Xn.date_format,e.fn.date_add=e.fn.DATE_ADD=Xn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Xn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Xn.date_diff,e.fn.now=e.fn.NOW=Xn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Xn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Xn.get_server_time,e.fn.getdate=e.fn.GETDATE=Xn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Xn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=qi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qi.geoNear}});var cF=M((APe,aF)=>{"use strict";var zm=require("lodash"),Ln=require("alasql");Ln.options.cache=!1;var Ate=rg(),iF=require("clone"),ng=require("recursive-iterator"),Fe=Q(),Xe=ie(),zu=Jn(),bte=(k(),v(W)),{hdbErrors:Ite}=ge(),{getDatabases:oF}=(Me(),v(Et)),Nte="IS NULL",li="There was a problem performing this search. Please check the logs and try again.";Ate(Ln);var RI=class{static{o(this,"SQLSearch")}constructor(t,r){if(Xe.isEmpty(t))throw Fe.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Xe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Xe.isEmptyOrZeroLength(n))return Fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Fe.error(n),new Error(li)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Fe.error(n),new Error(li)}if(Object.keys(this.data).length===0)return Fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Fe.error("Error thrown from processJoins in SQLSearch class method search."),Fe.error(n),new Error(li)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Fe.error(n),new Error(li)}try{return t=await this._finalSQL(),t}catch(n){throw Fe.error("Error thrown from finalSQL in SQLSearch class method search."),Fe.error(n),new Error(li)}}_getColumns(){let t=new ng(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(iF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=zm.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=oF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(Xe.isEmpty(this.statement.where)){Fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ng(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Xe.isEmpty(r)&&r.right)if(Xe.isNotEmptyAndHasValue(r.right.value)){let n=Xe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Ln.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Xe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Ln.yy.LogicValue({value:i}):n instanceof Ln.yy.StringValue&&Xe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ln.yy.NumValue({value:i}))});if(t){Fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ng(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Xe.isEmpty(bte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Xe.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(Xe.isEmptyOrZeroLength(r.left.columnid)||Xe.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Xe.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!Xe.isEmpty(r.right.value)||!Xe.isEmpty(r.left.value)?n.add(Xe.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from)&&Xe.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&zm.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Xe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Xe.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&!Xe.isEmptyOrZeroLength(this.columns.columns))return t;if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ln.promise(r)}catch(r){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(iF(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Xe.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Nte)>-1&&this.tables.forEach(s=>{let i={columnid:oF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=zm.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!Xe.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await zu.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Fe.error(d),new Error(li)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.search_value=d;let m=await zu.getDataByValue(f);for(let[h,p]of m)this.data[i].__mergedData[h]?this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]):(this.data[i].__mergedData[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(d){throw Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Fe.error(d),new Error(li)}else if(!Xe.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let h=d[f];c.search_attribute=h.attribute,c.search_value=h.search_value;let p=await zu.getDataByValue(c,h.operation);if(l)for(let[_]of p)this.data[i].__mergedData[_]||(this.data[i].__mergedData[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,g]of p)this.data[i].__mergedData[_]?this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]):(this.data[i].__mergedData[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,_))}}catch(d){throw Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Fe.error(d),new Error(li)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await zu.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Fe.error(d),new Error(li)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Ln.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Ln.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ln.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Ln.yy.FuncValue:new Ln.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let p=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(p+=" ON "+h.on.toString()),i.push(p),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(h=>{let p=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hashName,_=h.as?h.as_orig:h.tableid_orig;a.push({key:`'${_}.${p}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${p}\` AS "${_}.${p}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,p=this._convertColumnsToIndexes(h,s);m=await Ln.promise(p,t),t=null}catch(h){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Fe.error(h),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let h=0,p=m.length;h<p;h++){let _=m[h];a.forEach(g=>{_[g.key]!==null&&_[g.key]!==void 0&&g.keys.add(_[g.key])})}a.forEach(h=>{let p=Object.keys(this.data[`${h.schema}_${h.table}`].__mergedData),_=zm.difference(p,[...h.keys].map(g=>g.toString()));for(let g=0,R=_.length;g<R;g++){let T=_[g];delete this.data[`${h.schema}_${h.table}`].__mergedData[T]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new ng(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=zm.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Fe.error(i),new Error(li)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await zu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],h=l.get(m);for(let p=0;p<u;p++){let _=s.columns[p],g=h[_]===void 0?null:h[_];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Fe.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Fe.trace(`Final SQL: ${s}`),n=await Ln.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Fe.error(Ite.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let a=await zu.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw Fe.error("There was an error when processing this SQL operation. Check your logs"),Fe.error(a),new Error(li)}}return Object.values(Object.values(this.data)[0].__mergedData)}};aF.exports=RI});var sn=M((IPe,lF)=>{"use strict";var wte=t0();lF.exports={searchByConditions:Cte,searchByHash:Pte,searchByValue:Lte,search:Dte};var yI=Jn(),{transformReq:AI}=ie(),Ote=cF();async function Cte(e){return AI(e),yI.searchByConditions(e)}o(Cte,"searchByConditions");async function Pte(e){AI(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of yI.searchByHash(e))r&&t.push(r);return t}o(Pte,"searchByHash");async function Lte(e){AI(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of yI.searchByValue(e))t.push(r);return t}o(Lte,"searchByValue");function Dte(e,t){try{let r=new wte(e);r.validate(),new Ote(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Dte,"search")});var $i=M((wPe,mF)=>{"use strict";var jm=require("crypto"),Mte=oe(),{CONFIG_PARAMS:vte}=(k(),v(W)),dF="aes-256-cbc",Ute=32,xte=16,bI=64,fF=32,Bte=bI+fF,uF=new Map;mF.exports={encrypt:Fte,decrypt:Hte,createNatsTableStreamName:kte};function Fte(e){let t=jm.randomBytes(Ute),r=jm.randomBytes(xte),n=jm.createCipheriv(dF,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Fte,"encrypt");function Hte(e){let t=e.substr(0,bI),r=e.substr(bI,fF),n=e.substr(Bte,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=jm.createDecipheriv(dF,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Hte,"decrypt");function kte(e,t){let r=Mte.get(vte.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=uF.get(r);return n||(n=jm.createHash("md5").update(r).digest("hex"),uF.set(r,n)),n}o(kte,"createNatsTableStreamName")});var Ua=M((PPe,_F)=>{"use strict";var CPe=sn(),Qm=Q(),{validateBySchema:hF}=ut(),dl=require("joi"),Gte=$i(),sg=ie(),{handleHDBError:ig,hdbErrors:qte,ClientError:pF}=ge(),{HDB_ERROR_MSGS:og,HTTP_STATUS_CODES:II}=qte,EF=oe();EF.initSync();var{getDatabases:NI}=(Me(),v(Et)),$te=require("fs-extra"),Vte=(k(),v(W));_F.exports={describeAll:Kte,describeTable:ag,describeSchema:Yte};async function Kte(e={}){try{let t=sg.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=NI(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let h in m)try{let p;if(t||s||r)p=await ag({schema:f,table:h,exactCount:u});else if(n&&n[f].describe&&n[f].tables[h].describe){let _=n[f].tables[h].attribute_permissions;p=await ag({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){Qm.error(p)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return Qm.error("Got an error in describeAll"),Qm.error(t),ig(new Error,og.DESCRIBE_ALL_ERR)}}o(Kte,"describeAll");async function ag(e,t){sg.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=hF(e,dl.object({database:dl.string(),table:dl.string().required(),exact_count:dl.boolean().strict()}));if(i)throw new pF(i.message);let c=NI()[r];if(!c)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),II.NOT_FOUND);let l=c[n];if(!l)throw ig(new Error,og.TABLE_NOT_FOUND(e.schema,e.table),II.NOT_FOUND);function u(h){d.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(p=>({type:p.type,name:p.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let h={};s.forEach(p=>{p.describe&&(h[p.attribute_name]=!0)}),l.attributes.forEach(p=>{h[p.name]&&u(p)})}else l.attributes?.forEach(h=>u(h));let f;try{f=(await $te.stat(l.primaryStore.env.path)).size}catch(h){Qm.warn("unable to get database size",h)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),EF.get(Vte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Gte.createNatsTableStreamName(m.schema,m.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=h.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=h.estimatedRange;let p=l.auditStore;if(p)for(let _ of p.getKeys({reverse:!0,limit:1}))m.last_updated_record=_[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let _ of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=_}catch(h){Qm.warn(`unable to stat table dbi due to ${h}`)}return m}o(ag,"descTable");async function Yte(e){sg.transformReq(e);let t=hF(e,dl.object({database:dl.string(),exact_count:dl.boolean().strict()}));if(t)throw new pF(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=NI()[n];if(!i)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),II.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),sg.isEmpty(l)||l.describe){let u=await ag({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Yte,"describeSchema")});var Dn=M((DPe,RF)=>{"use strict";var lg=Cb(),Kr=ie(),Wte=require("util"),ug=Jn(),zte=ii(),gF=Q(),{handleHDBError:fl,hdbErrors:jte}=ge(),{HTTP_STATUS_CODES:ml}=jte,Qte=Wte.promisify(zte.getTableSchema),Jte="updated",SF="inserted",TF="upserted";RF.exports={insert:Zte,update:ere,upsert:tre,validation:Xte,flush:rre};async function Xte(e){if(Kr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Kr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Qte(e.schema,e.table),r=lg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Kr.isEmptyOrZeroLength(c[n]))throw gF.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Kr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw gF.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Kr.isEmpty(c[n])&&c[n]!==""&&s.has(Kr.autoCast(c[n]))&&(c.skip=!0),s.add(Kr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Xte,"validation");async function Zte(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.createRecords(e);return cg(SF,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Zte,"insertData");async function ere(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.updateRecords(e);return Kr.isEmpty(n.existing_rows)?cg(Jte,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):cg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(ere,"updateData");async function tre(e){if(e.operation!=="upsert")throw fl(new Error,"invalid operation, must be upsert",ml.INTERNAL_SERVER_ERROR);let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.upsertRecords(e);return cg(TF,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(tre,"upsertData");function cg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===SF?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===TF?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(cg,"returnObject");function rre(e){return Kr.transformReq(e),ug.flush(e.schema,e.table)}o(rre,"flush")});var OI=M((vPe,bF)=>{var nre=ut(),wI=require("joi"),{hdbTable:sre,hdbDatabase:yF}=Hi(),AF={schema:yF,database:yF,table:sre},ire={date:wI.date().iso().required()},ore={timestamp:wI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};bF.exports=function(e,t){let r=t==="timestamp"?{...AF,...ore}:{...AF,...ire},n=wI.object(r);return nre.validateBySchema(e,n)}});var wF=M((UPe,NF)=>{var are=ut(),CI=require("joi"),{hdbTable:cre,hdbDatabase:IF}=Hi(),lre=CI.object({schema:IF,database:IF,table:cre,hash_values:CI.array().required(),ids:CI.array()});NF.exports=function(e){return are.validateBySchema(e,lre)}});var MI=M((xPe,OF)=>{"use strict";var PI=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},LI=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=a}},DI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};OF.exports={InsertObject:PI,NoSQLSeachObject:LI,DeleteResponseObject:DI}});var El=M((FPe,MF)=>{"use strict";var PF=OI(),ure=wF(),hl=ie(),CF=require("moment"),LF=Q(),{promisify:dre,callbackify:fre}=require("util"),pl=(k(),v(W)),mre=ii(),vI=dre(mre.getTableSchema),UI=Jn(),{DeleteResponseObject:hre}=MI(),{handleHDBError:xa,hdbErrors:pre}=ge(),{HDB_ERROR_MSGS:dg,HTTP_STATUS_CODES:Ba}=pre,Ere="records successfully deleted",_re=fre(DF);MF.exports={delete:_re,deleteRecord:DF,deleteFilesBefore:gre,deleteAuditLogsBefore:Sre};async function gre(e){let t=PF(e,"date");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),!CF(e.date,CF.ISO_8601).isValid())throw xa(new Error,dg.INVALID_DATE,Ba.BAD_REQUEST,pl.LOG_LEVELS.ERROR,dg.INVALID_DATE,!0);let n=hl.checkSchemaTableExist(e.schema,e.table);if(n)throw xa(new Error,n,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,n,!0);let s=await UI.deleteRecordsBefore(e);if(await vI(e.schema,e.table),LF.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(gre,"deleteFilesBefore");async function Sre(e){let t=PF(e,"timestamp");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),isNaN(e.timestamp))throw xa(new Error,dg.INVALID_VALUE("Timestamp"),Ba.BAD_REQUEST,pl.LOG_LEVELS.ERROR,dg.INVALID_VALUE("Timestamp"),!0);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,r,!0);let n=await UI.deleteAuditLogsBefore(e);return await vI(e.schema,e.table),LF.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Sre,"deleteAuditLogsBefore");async function DF(e){e.ids&&(e.hash_values=e.ids);let t=ure(e);if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);hl.transformReq(e);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,r,!0);try{await vI(e.schema,e.table);let n=await UI.deleteRecords(e);return hl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Ere}`),n}catch(n){if(n.message===pl.SEARCH_NOT_FOUND_MESSAGE){let s=new hre;return s.message=pl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(DF,"deleteRecord")});var fg={};we(fg,{HASH_FUNCTION:()=>xr,hash:()=>FI,validate:()=>HI});function xI(e=Xm){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Jm.randomBytes(e)).map(r=>t[r%t.length]).join("")}function FI(e,t=xr[UF?.toUpperCase()]??xr.SHA256){return BI[t](e)}function HI(e,t,r=xr[UF?.toUpperCase()]??xr.SHA256){return e?Tre[r](e,t):!1}var Jm,ju,vF,UF,Xm,xF,xr,BI,Tre,mg=ce(()=>{Jm=w(require("node:crypto")),ju=w(require("argon2")),vF=w(oe());k();UF=(0,vF.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Xm=16,xF=9,xr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(xI,"generateSalt");BI={[xr.MD5]:(e,t=void 0)=>{t=t??xI(xF);let r=Jm.createHash(xr.MD5).update(e+t).digest("hex");return t+r},[xr.SHA256]:(e,t=void 0)=>{t=t??xI(Xm);let r=Jm.createHash(xr.SHA256).update(e+t).digest("hex");return t+r},[xr.ARGON2ID]:async e=>{let t=xI(Xm),r=await ju.hash(e,{type:ju.argon2id,salt:Buffer.from(t)});return t+r}},Tre={[xr.MD5]:(e,t)=>{let r=e.slice(0,xF);return e===BI[xr.MD5](t,r)},[xr.SHA256]:(e,t)=>{let r=e.slice(0,Xm);return e===BI[xr.SHA256](t,r)},[xr.ARGON2ID]:async(e,t)=>await ju.verify(e.slice(Xm),t)};o(FI,"hash");o(HI,"validate")});var FF=M((qPe,BF)=>{var kI=ut(),on={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Rre(e){return on.password.presence=!0,on.username.presence=!0,on.role.presence=!0,on.active.presence=!0,kI.validateObject(e,on)}o(Rre,"addUserValidation");function yre(e){return on.password.presence=!1,on.username.presence=!0,on.role.presence=!1,on.active.presence=!1,kI.validateObject(e,on)}o(yre,"alterUserValidation");function Are(e){return on.password.presence=!1,on.username.presence=!0,on.role.presence=!1,on.active.presence=!1,kI.validateObject(e,on)}o(Are,"dropUserValidation");BF.exports={addUserValidation:Rre,alterUserValidation:yre,dropUserValidation:Are}});var Ot=M((KPe,kF)=>{"use strict";var{platform:VPe}=require("os"),bre="nats-server.zip",GI="nats-server",Ire=process.platform==="win32"?`${GI}.exe`:GI,Nre=/^[^\s.,*>]+$/,HF="__request__",wre=o(e=>`${e}.${HF}`,"REQUEST_SUBJECT"),Ore={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Cre={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Pre={HUB:"hub.pid",LEAF:"leaf.pid"},Lre={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Dre={SUCCESS:"success",ERROR:"error"},Mre={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},vre={TXN:"txn",MSGID:"msgid"},Qu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Ure={[Qu.ERR]:1,[Qu.WRN]:2,[Qu.INF]:3,[Qu.DBG]:4,[Qu.TRC]:5},xre={debug:"-D",trace:"-DVV"};kF.exports={NATS_SERVER_ZIP:bre,NATS_SERVER_NAME:GI,NATS_BINARY_NAME:Ire,PID_FILES:Pre,NATS_CONFIG_FILES:Cre,SERVER_SUFFIX:Lre,NATS_TERM_CONSTRAINTS_RX:Nre,REQUEST_SUFFIX:HF,UPDATE_REMOTE_RESPONSE_STATUSES:Dre,CLUSTER_STATUS_STATUSES:Mre,REQUEST_SUBJECT:wre,SUBJECT_PREFIXES:vre,MSG_HEADERS:Ore,LOG_LEVELS:Qu,LOG_LEVEL_FLAGS:xre,LOG_LEVEL_HIERARCHY:Ure}});var qI=M(an=>{"use strict";var Bre={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
11
|
+
`},"serialize"),compressible:!1,q:.8});nn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Iv={type:"application/json",serializeStream:sm,serialize:im,deserialize:f6,q:.5};nn.set("*/*",Iv);nn.set("",Iv);o(f6,"tryJSONParse");o(am,"registerContentHandlers");m6=(0,Av.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=XE(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(XE,"findBestSerializer");gv=TA.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(cm,"serialize");o(ba,"serializeMessage");o(bA,"asyncSerialization");o(IA,"hasAsyncSerialization");o(h6,"streamToBuffer");p6=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(E6,"isBufferEncoding");o(_6,"parseContentType");o(To,"getDeserializer");o(g6,"deserializerUnknownType");o(S6,"transformIterable");o(JE,"toCsvStream")});var o_={};Oe(o_,{Blob:()=>Rs,blobsWereEncoded:()=>qc,cleanupOrphans:()=>M6,databasePaths:()=>wA,decodeBlobsWithWrites:()=>i_,decodeFromDatabase:()=>Ao,decodeWithBlobCallback:()=>fm,deleteBlob:()=>r_,deleteBlobsInObject:()=>Na,deleteRootBlobPathsForDB:()=>PA,encodeBlobsAsBuffers:()=>P6,encodeBlobsWithFilePath:()=>s_,findBlobsInObject:()=>Gc,getFileId:()=>n_,getFilePathForBlob:()=>Uv,getRootBlobPathsForDB:()=>Nu,isSaving:()=>b6,saveBlob:()=>dm,setDeletionDelay:()=>A6,startPreCommitBlobsForRecord:()=>LA});function Mv(){}function r_(e){let t=Uv(e);t&&setTimeout(()=>{(0,qe.unlink)(t,r=>{r&&Ht.default.debug?.("Error trying to remove blob file",r)})},vv)}function A6(e){vv=e}function dm(e,t=!1){let r=Mr.get(e);if(!r)r={storageIndex:0,fileId:null,store:bn},Mr.set(e,r);else{if(r.fileId)return r;r.store=bn}return r.deleteOnFailure=t,N6(r),r.source?NA(e,r.source,r):r.contentBuffer?I6(e,r):NA(e,Ia.Readable.from(e.stream()),r),r}function NA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,qe.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(R6),h=(0,t_.createDeflate)(),(0,Ia.pipeline)(t,h,f,_)):(m||f.write(T6),(0,Ia.pipeline)(t,f,_));function p(g){let y=BigInt(g),T=new Uint8Array(yr),R=new DataView(T.buffer);return y|=BigInt(a?CA:Dv)<<48n,R.setBigInt64(0,y),T}o(p,"createHeader");function _(g){let y=f.fd;if(g){if(i.unlock(d,0),y&&((0,qe.close)(y),f.fd=null),r.deleteOnFailure)(0,qe.unlink)(n,T=>{T&&Ht.default.debug?.("Error while deleting aborted blob file",T)});else try{if((0,qe.statSync)(n).size===0){let T=Buffer.from(g.toString());(0,qe.writeFile)(n,Buffer.concat([p(BigInt(T.length)+0xff000000000000n),T]),R=>{R&&Ht.default.debug?.("Error write error message to blob file",R)})}}catch(T){Ht.default.debug?.("Error checking blob file after abort",T)}u(g)}else{if(!m){m=!0;let T=h?h.bytesWritten:f.bytesWritten-yr;e.size=T,(0,qe.write)(y,p(T),0,yr,0,_);return}i.unlock(d,0),c?(0,qe.fdatasync)(y,T=>{T&&u(T),l(),(0,qe.close)(y),f.fd=null}):(l(),(0,qe.close)(y),f.fd=null)}}o(_,"finished")}),e}function n_(e){return Mr.get(e)?.fileId}function b6(e){return Mr.get(e)?.saving}function Uv(e){let t=Mr.get(e);return t?.fileId&&Iu(t)}function Nu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=wA.get(e);if(!t){if(!e.databaseName)return Ht.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,um.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,vi.join)(n,e.databaseName)):t=[(0,vi.join)((0,um.getHdbBasePath)(),"blobs",e.databaseName)],wA.set(e,t)}return t}async function PA(e){let t=Nu(e);t&&await Promise.all(t.map(r=>xv(r)))}async function xv(e){if((0,qe.existsSync)(e)){for(let t of await(0,In.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await xv((0,vi.join)(e,t.name));else try{await(0,In.unlink)((0,vi.join)(e,t.name))}catch(r){Ht.default.warn?.("Error deleting file",r)}try{await(0,In.rmdir)(e)}catch(t){Ht.default.warn?.("Error deleting directory",t)}}}function Iu({storageIndex:e,fileId:t,store:r}){let n=Nu(r);return(0,vi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function I6(e,t){let r=t.contentBuffer,n=r.length;if(!(n<Lv))return e.size=n,NA(e,Ia.Readable.from([r]),t)}function N6(e){let t=Nu(e.store),r=w6(),n=t?.length>1?O6(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Iu(e),a=(0,vi.dirname)(i);(0,qe.existsSync)(a)||(0,OA.ensureDirSync)(a),e.filePath=i}function w6(){let e=Cv.get(bn);if(!e){let t=0,r=Nu(bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,qe.existsSync)(n))for(let c of(0,qe.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,vi.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(bn.getUserSharedBuffer("blob-file-id",e.buffer)),Cv.set(bn,e)}return Number(Atomics.add(e,0,1n))}function O6(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(e_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,C6(e)),e.frequencyTable[t%e_]}async function C6(e){if(!In.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,In.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,OA.ensureDirSync)(s),a=await(0,In.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(e_),n=t.map(s=>1/s);for(let s=0;s<e_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function s_(e,t,r){yu=t,bn=r,qc=!1;try{return e()}finally{yu=void 0,bn=void 0}}function P6(e){qr=[];let t;try{t=e()}catch(n){throw qr=void 0,n}let r=qr.length<2?qr[0]:Promise.all(qr);return qr=void 0,r?r.then(()=>e()):t}function i_(e,t,r){try{qr=[],yo=r,bn=t,e()}catch(s){throw yo=void 0,qr=void 0,s}yo=void 0;let n=qr.length<2?qr[0]:Promise.all(qr);return qr=void 0,n}function fm(e,t,r){bn=r;try{return yo=t,e()}finally{yo=void 0}}function Ao(e,t){return bn=t,e()}function Na(e){Gc(e,t=>{r_(t)})}function Gc(e,t){if(e instanceof Rs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Gc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Gc(e[r],t)}}function LA(e,t){let r=[];for(let n in e){let s=e[n];s instanceof bu&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(bn=t,Promise.all(r.map(n=>dm(n,!0).saving??Promise.resolve())))}function D6(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function M6(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,a=Nu(r);if(a)for(let d of a)await c(d);return await l(),Ht.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,qe.existsSync)(d))return;for(let f of await(0,In.readdir)(d,{withFileTypes:!0})){let m=(0,vi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Ht.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let h=(0,Pv.getHeapStatistics)();h.used_heap_size>h.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Ht.default.error?.("Error searching path for blobs",d,f)}}o(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,um.get)(U.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Ht.default.warn?.("Checking for references to potential orphaned blobs in table",m);let h=e[m];for(let p of h.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{p.metadataFlags&$r&&p.value&&u(p.value),d++%f===0?await(0,Au.setTimeout)(1):await(0,Au.setImmediate)()}catch(_){Ht.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",_)}}Ht.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let h=Nt(m),p=n.tableStores[h.tableId],_=p?.getEntry(h.recordId);(!_||_.version!==h.version||!_.value)&&u(h.getValue(p)),d++%f===0?await(0,Au.setTimeout)(1):await(0,Au.setImmediate)()}catch(h){Ht.default.error?.("Error searching audit log for references to potential orphaned blobs failed",h)}Ht.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,In.unlink)(m)}catch(h){Ht.default.warn?.("Error deleting file",h)}Ht.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}o(l,"removePathsThatAreNotReferenced");function u(d){Gc(d,f=>{if(f instanceof bu){let m=Mr.get(f);if(m.fileId!=null){let h=Iu(m);i.has(h)&&i.delete(h)}}})}o(u,"checkObjectForReferences")}var Mi,In,qe,t_,Ia,OA,um,vi,Ht,Pv,Au,Lv,yr,Dv,CA,wv,T6,R6,Ov,Mr,yo,Rs,yu,qr,bn,qc,lm,ZE,y6,bu,vv,wA,Cv,e_,L6,Kn=le(()=>{Mi=require("msgpackr"),In=require("node:fs/promises"),qe=require("node:fs"),t_=require("node:zlib"),Ia=require("node:stream"),OA=require("fs-extra"),um=w(ae());k();vi=require("path"),Ht=w(ei());Ro();Li();Pv=require("node:v8"),Au=require("node:timers/promises"),Lv=8192,yr=8,Dv=0,CA=1,wv=255,T6=new Uint8Array([0,Dv,255,255,255,255,255,255]),R6=new Uint8Array([0,CA,255,255,255,255,255,255]),Ov=0xffffffffffff,Mr=new WeakMap,Rs=global.Blob||D6(),qc=!1,lm=new Uint8Array(8),ZE=new DataView(lm.buffer),y6=6e4;o(Mv,"InstanceOfBlobWithNoConstructor");Mv.prototype=Rs.prototype;bu=class e extends Mv{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Mr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(IA()&&bA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Mr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=Iu(t),a,c=o(async()=>{let l,u=yr;try{if(l=await(0,In.readFile)(i),l.length>=yr){l.copy(lm,0,0,yr);let f=ZE.getBigUint64(0);if(Number(f>>48n)===wv)throw new Error("Error in blob: "+l.subarray(yr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<Ov&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,h=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!0,p(c()))))return a=!0,m.unlock(h,0),p(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===CA?new Promise((f,m)=>{(0,t_.deflate)(l.subarray(yr),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(yr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Mr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(_){_.enqueue(r),_.close()}});let i=Iu(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((y,T)=>{(0,qe.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Ht.default.debug?.("File does not exist yet, waiting for it to be created",i,_),_-- >0))return setTimeout(()=>{p(),g(y,T)},20).unref();T(R),h.#e?.forEach(C=>C(R))}else a=N,y(N)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,y=100;return new Promise(o(function T(R,N){function C(z){(0,qe.close)(a),clearTimeout(d),u&&u.close(),N(z),h.#e?.forEach(F=>F(z))}o(C,"onError");let G=Buffer.allocUnsafe(262144);(0,qe.read)(a,G,0,G.length,c,(z,F,$)=>{if(l+=F,z)return C(z);if(c===0){if(F<yr){y-- >0&&f!==!1?(p(),Ht.default.debug?.("File was empty, waiting for data to be written",i,y),setTimeout(()=>T(R,N),20).unref()):(Ht.default.debug?.("File was empty, throwing error",i,y),C(new Error(`Blob ${t.fileId} was empty`)));return}$.copy(lm,0,0,yr);let J=ZE.getBigUint64(0);if(Number(J>>48n)===wv)return C(new Error("Error in blob: "+$.subarray(yr,F)));if(g=Number(J&0xffffffffffffn),g<Ov&&h.size!==g&&(h.size=g,h.#t))for(let K of h.#t)K(g);$=$.subarray(yr,F),l-=yr}else if(F===0){let J=Buffer.allocUnsafe(8);return(0,qe.read)(a,J,0,yr,0,K=>{if(K)return C(K);if(lm.set(J),g=Number(ZE.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{C(new Error(`File read timed out reading from ${i}`))},y6).unref():(u=(0,qe.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(R,N))}),T(R,N)):m?C(new Error("Blob is incomplete")):(m=!0,T(R,N));return}(0,qe.close)(a),_.close(),R()})}else $=$.subarray(0,F);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=F,T(R,N);s&&l>=s&&(l>s&&($=$.subarray(0,s-c)),l=g=s),n&&n>c&&($=$.subarray(n-c))}c+=F;try{_.enqueue($)}catch(J){return Ht.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,qe.close)(a),_.close()),R()})},"readMore"))},"pull"),cancel(){(0,qe.close)(a),clearTimeout(d),u&&u.close()}});function p(){if(f===void 0){let _=t.store,g=t.fileId+":blob";f=!_.attemptLock(g,0,()=>{f=!1}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=Mr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};Mr.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Mr.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Mr.get(this)?.saving??Promise.resolve()}},vv=500;o(r_,"deleteBlob");o(A6,"setDeletionDelay");global.createBlob=function(e,t){let r=new bu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Mr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Ia.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Ia.Readable.from(e);else throw new Error("Invalid source type");return r};o(dm,"saveBlob");o(NA,"writeBlobWithStream");o(n_,"getFileId");o(b6,"isSaving");o(Uv,"getFilePathForBlob");wA=new Map;o(Nu,"getRootBlobPathsForDB");o(PA,"deleteRootBlobPathsForDB");o(xv,"rimrafSteadily");o(Iu,"getFilePath");o(I6,"writeBlobWithBuffer");o(N6,"generateFilePath");Cv=new Map;o(w6,"getNextFileId");e_=128;o(O6,"getNextStorageIndex");o(C6,"createFrequencyTableForStoragePaths");o(s_,"encodeBlobsWithFilePath");o(P6,"encodeBlobsAsBuffers");o(i_,"decodeBlobsWithWrites");o(fm,"decodeWithBlobCallback");o(Ao,"decodeFromDatabase");o(Na,"deleteBlobsInObject");o(Gc,"findBlobsInObject");o(LA,"startPreCommitBlobsForRecord");L6=new Mi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Mi.addExtension)({Class:Rs,type:11,unpack:o(function(e){let t=L6.unpack(e),r=new bu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Mr.set(r,{storageIndex:t[1],fileId:t[2],store:bn}),yo)return yo(r)??r;if(!bn)throw new Error("No store specified, cannot load blob from storage")}else Mr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=Mr.get(e);if(yu!==void 0&&(qc=!0,t?.recordId!==void 0&&t.recordId!==yu))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<Lv)return r.size=t.contentBuffer.length,(0,Mi.pack)([r,t.contentBuffer])}if(yu!==void 0){if(t=dm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=yu,(0,Mi.pack)([r,t.storageIndex,t.fileId])}if(t){if(yo)return yo(e),(0,Mi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,qe.readFileSync)(Iu(t));if(n.length>=yr&&(n.copy(lm,0,0,yr),Number(ZE.getBigUint64(0)&0xffffffffffffn)===n.length-yr))return Buffer.concat([(0,Mi.pack)([r]),n]);if(qr)qr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&qr)return qr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Mi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(D6,"polyfillBlob");o(M6,"cleanupOrphans")});var Gv={};Oe(Gv,{onStorageReclamation:()=>mm,runReclamationHandlers:()=>UA,setAvailableSpaceRatioGetter:()=>U6});function mm(e,t,r){(r||(0,c_.getWorkerIndex)()===(0,c_.getWorkerCount)()-1)&&(a_.has(e)||a_.set(e,[]),a_.get(e).push({priority:0,handler:t}),vA||(vA=setTimeout(UA,Fv).unref()))}async function UA(){for(let[e,t]of a_)try{let r=await kv(e),n=v6/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(MA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){MA.default.error?.("Error running storage reclamation handlers",r)}vA=setTimeout(UA,Fv).unref()}function U6(e){kv=e??Hv}var DA,c_,MA,l_,Bv,a_,v6,Fv,vA,Hv,kv,u_=le(()=>{DA=require("node:fs/promises"),c_=w(st()),MA=w(ei());k();l_=w(ae()),Bv=w(ie());l_.default.initSync();a_=new Map,v6=l_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,Fv=(0,Bv.convertToMS)(l_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(mm,"onStorageReclamation");Hv=o(async e=>{if(DA.statfs){let t=await(0,DA.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"),kv=Hv;o(UA,"runReclamationHandlers");o(U6,"setAvailableSpaceRatioGetter")});var eU={};Oe(eU,{ACTION_32_BIT:()=>p_,ACTION_64_BIT:()=>H6,AUDIT_STORE_OPTIONS:()=>Em,Decoder:()=>Vc,HAS_BLOBS:()=>$r,HAS_CURRENT_RESIDENCY_ID:()=>Kc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Sm,HAS_ORIGINATING_OPERATION:()=>gm,HAS_PREVIOUS_RESIDENCY_ID:()=>Yc,REMOTE_SEQUENCE_UPDATE:()=>E_,createAuditEntry:()=>Wc,getLastRemoved:()=>B6,openAuditStore:()=>m_,readAuditEntry:()=>Nt,removeAuditEntry:()=>h_,setAuditRetention:()=>F6,transactionKeyEncoder:()=>Qv});function m_(e){let t=e.auditStore=e.openDB(xA.AUDIT_STORE_NAME,{create:!1,...Em});t||(t=e.auditStore=e.openDB(xA.AUDIT_STORE_NAME,Em),$v(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=FA;mm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,h;try{for(let{key:p,value:_}of t.getRange({start:1,snapshot:!1,end:Date.now()-BA/(1+i*i)})){try{m=h_(t,p,_)}catch(g){wu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=x6){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,BA/10):($v(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,pm.getWorkerIndex)()===(0,pm.getWorkerCount)()-1&&c(),(0,pm.getWorkerIndex)()===0&&!qv)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(qv=!0,wu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function h_(e,t,r){let n=k6(r),s;if(n&$r){s=Nt(r);let i=e.tableStores[s.tableId];if(i){let a=s.type==="message"?null:i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Ao(()=>Na(s.getValue(i)),i.rootStore)}}if((n&15)===HA){s=s||Nt(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function $v(e,t){kA[0]=t,e.put(Symbol.for("last-removed"),Jv)}function B6(e){let t=e.get(Symbol.for("last-removed"));if(t)return Jv.set(t),kA[0]}function F6(e,t=FA){BA=e,FA=t}function Wc(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=Xv[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?wa.setFloat64(0,n):ys.set(GA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}y(s),y(t),g(r),wa.setFloat64(p,e),p+=8,l&Kc&&y(u),l&Yc&&y(d),l&Sm&&(wa.setFloat64(p,f),p+=8),l&gm&&y(Zv[m]),i?g(i):ys[p++]=0,l?wa.setUint32(n?8:0,h|l|3221225472):ys[n?8:0]=h;let _=ys.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let R=p;p+=1,p=(0,$c.writeKey)(T,ys,p);let N=p-R-1;N>127?N>16383?(wu.error("Key or username was too large for audit entry",T),p=R+1,ys[R]=0):(ys.copyWithin(R+2,R+1,p),wa.setUint16(R,N|32768),p++):ys[R]=N}function y(T){T<128?ys[p++]=T:T<16384?(wa.setUint16(p,T|32768),p+=2):T<1056964608?(wa.setUint32(p,T|3221225472),p+=4):(ys[p]=255,wa.setUint32(p+1,T),p+=5)}}function k6(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Vc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Nt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Vc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,h,p,_;if(i&Kc&&(m=n.readInt()),i&Yc&&(h=n.readInt()),i&Sm&&(p=n.readFloat64()),i&gm){let R=n.readInt();_=Zv[R]}l=n.readInt();let g=n.position,y=n.position+=l,T;return{type:Xv[i&7],tableId:c,nodeId:a,get recordId(){return(0,$c.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return y>g?(0,$c.readKey)(e,g,y):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(R,N,C){if(i&d_||i&hm&&!N)return T||(T=Ao(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),T;if(i&hm&&C)return hA(R.getEntry(this.recordId),C,R)},getBinaryValue(){return i&(d_|hm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return wu.error("Reading audit entry error",n,e),{}}}var $c,f_,xA,pm,jv,wu,ys,wa,Qv,Em,BA,x6,kA,Jv,FA,qv,d_,hm,Vv,HA,Kv,Yv,Wv,zv,p_,H6,E_,Kc,Yc,gm,Sm,$r,Xv,Zv,Vc,Li=le(()=>{$c=require("ordered-binary"),f_=w(ae()),xA=w(Vt());k();pm=w(st()),jv=w(ie());zc();wu=w(Q());zE();Kn();u_();(0,f_.initSync)();ys=Buffer.alloc(2816),wa=new DataView(ys.buffer,ys.byteOffset,2816),Qv={writeKey(e,t,r){return e===_m?(t.set(_m,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,$c.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,$c.readKey)(e,t,r)}},Em={encoding:"binary",keyEncoder:Qv},BA=(0,jv.convertToMS)((0,f_.get)(U.LOGGING_AUDITRETENTION))||86400*3,x6=1e3,kA=new Float64Array(1),Jv=new Uint8Array(kA.buffer),FA=1e4,qv=!1;o(m_,"openAuditStore");o(h_,"removeAuditEntry");o($v,"updateLastRemoved");o(B6,"getLastRemoved");o(F6,"setAuditRetention");d_=16,hm=32,Vv=1,HA=2,Kv=3,Yv=4,Wv=5,zv=6,p_=14,H6=15,E_=11,Kc=512,Yc=1024,gm=2048,Sm=4096,$r=8192,Xv={put:Vv|d_,[Vv]:"put",delete:HA,[HA]:"delete",message:Kv|d_,[Kv]:"message",invalidate:Yv|hm,[Yv]:"invalidate",patch:Wv|hm,[Wv]:"patch",relocate:zv,[zv]:"relocate"},Zv={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Wc,"createAuditEntry");o(k6,"readAction");o(Nt,"readAuditEntry");Vc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var iU={};Oe(iU,{ENTRY:()=>q6,HAS_EXPIRATION:()=>T_,HAS_RESIDENCY_ID:()=>YA,HAS_STRUCTURE_UPDATE:()=>R_,LAST_TIMESTAMP_PLACEHOLDER:()=>_m,LOCAL_TIMESTAMP:()=>G6,METADATA:()=>Ou,NEW_TIMESTAMP_PLACEHOLDER:()=>rU,NO_TIMESTAMP:()=>g_,PENDING_LOCAL_TIME:()=>WA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>GA,RecordEncoder:()=>KA,TIMESTAMP_ASSIGN_LAST:()=>V6,TIMESTAMP_ASSIGN_NEW:()=>nU,TIMESTAMP_ASSIGN_PREVIOUS:()=>sU,TIMESTAMP_PLACEHOLDER:()=>__,TIMESTAMP_RECORD_PREVIOUS:()=>qA,entryMap:()=>Oa,handleLocalTimeForGets:()=>y_,lastMetadata:()=>ut,recordUpdater:()=>zA,removeEntry:()=>Jc});function Y6(){return ym[0]=ym[0]^64,$6.getFloat64(0)}function y_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ut=null;let l=r.call(this,a,c);return l&&(ut&&(l.metadataFlags=ut[Ou],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&Oa.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ut=null;let l=n.call(this,a,c);return ut&&l&&(Oa.set(l,ut),ut=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ut&&(l.metadataFlags=ut[Ou],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Qc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Qc.length;u++){let d=Qc[u].deref();(!d||d.isDone||d.isCommitted)&&Qc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function zA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){l==null?jc=g_:f?jc=i?.localTime?qA|sU:g_:jc=l?i?.localTime?qA|16384:nU|16384:g_;let h=u?.expiresAt;if(h>=0&&(c|=T_),Rm=c,$A=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:jc>0},_,g=0;try{let y=i?.residencyId,T=u?.residencyId;T&&(VA=T,Rm|=YA,g|=Kc),y!==T&&(g|=Yc,y||(y=0)),c&T_&&(g|=Sm),u?.originatingOperation&&(g|=gm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&$r&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Na(i.value);let R;if(s!==void 0&&(R=s_(()=>e.put(n,s,p),n,e.rootStore),qc&&(g|=$r)),l){let N=u?.user?.username;if(m&&(s_(()=>e.encoder.encode(m),n,e.rootStore),qc&&(g|=$r)),e.encoder.hasStructureUpdate&&(g|=R_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let C=i?.localTime,G=r.get(C);if(G){let z=Nt(G).previousLocalTime;return R=r.put(C,Wc(a,t,n,z,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Tm,g,T,y,h),{ifVersion:_}),R}}R=r.put(s===void 0?rU:_m,Wc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Tm,g,T,y,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:_})}return R}catch(y){throw y.message+=" id: "+n+" options: "+p,y}}}function Jc(e,t,r){if(t)return t.value&&t.metadataFlags&$r&&!e.auditStore?.getBinaryFast(t.localTime)&&Na(t.value),e.remove(t.key,r)}var tU,S_,__,_m,GA,rU,G6,Ou,q6,ym,$6,g_,nU,V6,sU,qA,T_,YA,WA,R_,Oa,K6,Tm,jc,Rm,$A,VA,ut,KA,Qc,zc=le(()=>{tU=require("msgpackr");Li();S_=w(Q());Kn();Kn();__=new Uint8Array([1,1,1,1,4,64,0,0]),_m=new Uint8Array([1,1,1,1,1,0,0,0]),GA=new Uint8Array([1,1,1,1,3,64,0,0]),rU=new Uint8Array([1,1,1,1,0,64,0,0]),G6=Symbol("local-timestamp"),Ou=Symbol("metadata"),q6=Symbol("entry"),ym=new Uint8Array(8),$6=new DataView(ym.buffer,0,8),g_=0,nU=0,V6=1,sU=3,qA=4,T_=16,YA=32,WA=1,R_=256,Oa=new WeakMap,jc=0,Rm=-1,$A=-1,VA=0,ut=null,KA=class extends tU.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Oa.get(this)?.version}getExpiresAt(){return Oa.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(jc||Rm>=0){let c=0,l=jc;l&&(c+=8,jc=0);let u=Rm,d=$A,f=VA;u>=0&&(c+=4,Rm=-1,d>=0&&(c+=8,$A=-1),f&&(c+=4,VA=0));let m=K6=n.call(this,i,a|2048|c);Tm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(__[4]=l,__[5]=l>>8,m.set(__,h),h+=8),qc&&(u|=$r),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|p_<<24),h+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(h,d),h+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,f)),m}else return Tm=n.call(this,i,a),Tm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ut=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(ym,0,c),c+=8;else for(let m=0;m<8;m++)ym[m]=t[c++];l=Y6(),i=t[c]}let u,d;i<32&&(i===p_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&T_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&YA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Ao(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[Ou]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:Ao(()=>super.decode(t,r),this.rootStore)}catch(c){return S_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(Y6,"getTimestamp");o(y_,"handleLocalTimeForGets");Qc=[];setInterval(()=>{for(let e=0;e<Qc.length;e++){let t=Qc[e].deref();!t||t.isDone||t.isCommitted?Qc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(S_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):S_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(zA,"recordUpdater");o(Jc,"removeEntry")});function JA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let h=1;h<e.length;h++){let p=e[h],_=u(p);f=f.concat(_)}let m=new Set;return f.filter(h=>{let p=h.key??h;return m.has(p)?!1:(m.add(p),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?JA(f.conditions,f.operator,r,n,s,i,a,c):Du(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,h){return f.map((p,_)=>{if(p.conditions){let T=p.operator==="or",R=d(p.conditions,!T,h);return T?(N,C)=>R.some(G=>G(N,C)):(N,C)=>R.every(G=>G(N,C))}let g=(p.attribute||p[0])===r.primaryKey,y=bm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=t8(r.primaryStore,p.estimated_count,h)),y}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Du(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new Vr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=xi(n.attributes,R);if(N.relationship){if(c.length<2)throw new Vr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let C=N.definition?.tableClass||N.elements?.definition?.tableClass,G=new Map,z=Du({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,C,s,G);if(N.relationship.to){i[c[0]]=G;let F=!!xi(C.attributes,N.relationship.to)?.elements;z=J6(z,N,C.primaryStore,F,G)}if(N.relationship.from){let F=o($=>($?.key!==void 0&&($=$.key),Du({attribute:N.relationship.from,value:$},t,r,n,s,G)),"searchEntry");N.elements?(i[c[0]]=G,z=X6(z,N,C.primaryStore,G,F)):z=z.flatMap(F)}return z}else if(c.length===1)c=c[0];else throw new Vr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,h,p,_;l instanceof Date&&(l=l.getTime());let g;switch(XA[u]||u){case"lt":m=!0,h=l;break;case"le":m=!0,h=l,p=!0;break;case"gt":m=l,_=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,h=l.slice(0),h[h.length-1]=Ui.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),h=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),h=l[1],h instanceof Date&&(h=h.getTime()),p=u==="gele"||u==="gtle"||u==="between",_=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,h=l,p=!0;break;case"ne":if(l===null){m=l,_=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new Vr.ClientError(`Unknown query comparator "${u}"`)}let y;if(typeof m=="string"&&m.length>As.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,_=!1,y=bm(e,n,null,i,d)),typeof h=="string"&&h.length>As.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,p=!0,y=y??bm(e,n,null,i,d)),r){let R=m;m=h,h=R,R=!_,_=!p,p=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new Vr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Vr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new Vr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Vr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(y=y??bm(e,n,null,i,d),!y)throw new Vr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:m,end:h,inclusiveEnd:p,exclusiveStart:_,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(T).map(y?function({key:N,value:C}){return this?.isSync?C&&y(C)?N:Ca.SKIP:new Promise((G,z)=>setImmediate(()=>{try{G(C&&y(C)?N:Ca.SKIP)}catch(F){z(F)}}))}:N=>N.value==null&&!(N.metadataFlags&(Nn|Xc))?Ca.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...C}=R,G=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(G?.value),{...C,...G}}return R}):f.getRange(T).map(y?function({key:R,value:N}){let C;return typeof R=="string"&&R.length>As.MAX_SEARCH_KEY_LENGTH?C=n.primaryStore.get(N):C={[c]:R},this.isSync?y(C)?N:Ca.SKIP:new Promise((G,z)=>setImmediate(()=>{try{G(y(C)?N:Ca.SKIP)}catch(F){z(F)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&y(N)?R:Ca.SKIP:new Promise((C,G)=>setImmediate(()=>{try{C(N&&y(N)?R:Ca.SKIP)}catch(z){G(z)}}))})}function xi(e,t){if(Array.isArray(t))if(t.length>1){let r=xi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?xi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function J6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function X6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function bm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=xi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=bm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,h?.[d]?.joined,c[1]===m.primaryKey,i);if(!p)return;if(h){h.filters||(h.filters=[]),h.filters.push(p);return}let _=t.propertyResolvers?.[d];_.to&&(p.to=_.to);let g,y=o((R,N)=>{let C,G;return _?_.returnDirect?(C=_(R,r,N),G=ut):(G=_(R,r,N,!0),Array.isArray(G)?(C=G.map(z=>z.value),G=null):C=G?.value):C=R[d],{subObject:C,subEntry:G}},"getSubObject"),T=o((R,N)=>{if(_&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let $ of p.idFilter.idSet)e={attribute:_.from??t.primaryKey,value:$};g=u(_.from??t.primaryKey,p.idFilter,!0,!0)}else g=u(_.from??t.primaryKey,p.idFilter,!1,!0);let F=g(R);return g.idFilter&&(T.idFilter=g.idFilter),F}let{subObject:C,subEntry:G}=y(R,N);return C?Array.isArray(C)?(!n?.[d]&&n&&(n[d]={fromRecord(F){let $=y(F).subObject;return Array.isArray($)?$.filter(p).map(J=>J[m.primaryKey]):$}}),C.some(p)):p(C,G):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),XA[a]||a){case As.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Ui.compareKeys)(d,l[0])>=0&&(0,Ui.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Ui.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Ui.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Ui.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Ui.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Ui.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Vr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,h){let p;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&b_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function y(T){let R=T[d],N;if(typeof R!="object"||!R||h?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!y.idFilter&&++_/g*i>p)){let C=Du(e,r.transaction.getReadTxn(),!1,t),G;y.to?G=C.flatMap(F=>t.primaryStore.get(F)[y.to]):G=C.map(Mu);let z=new Set(G);y.idFilter=F=>z.has(Mu(F)),y.idFilter.idSet=z}return N}return o(y,"recordFilter"),s&&(y.idFilter=f),y}o(u,"attributeComparator")}function b_(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/bo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=XA[n]||n,n===As.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=xi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=b_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*bo(e.indices[i.relationship.from])/(bo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=bo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=j6*bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=z6*bo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=bo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=W6*bo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function I_(e,t){if(e)if(Io=e,Cu.lastIndex=0,Z6.test(e))try{if(t&&(t.conditions=[]),ti=t??new Lu,Am(ti,""),vr!==Io.length&&Kt("Unable to parse query, unexpected end of query"),ti.parseErrorMessage&&(ti.parseError=new jA(t.parseErrorMessage),!t))throw ti.parseError;return ti}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${vr} in '${Io}'`,ti.parseErrorMessage&&(r.message+=", "+ti.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Kt(e){let t=`${e} at position ${vr}`;ti.parseErrorMessage=ti.parseErrorMessage?ti.parseErrorMessage+", "+t:t}function Am(e,t){let r=Cu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Io);){vr=r.lastIndex;let[,d,f]=n;a?(d&&Kt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Kt(`invalid FIQL operator ${d}`),l=oU):(l=decodeURIComponent,i="equals",d||Kt("attribute must be specified before equality comparator"),s=Pu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=Q6[f],l=QA[i]?oU:decodeURIComponent,d||Kt(`attribute must be specified before comparator ${f}`),s=Pu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Kt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Kt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Kt("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&aU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else A_(e,u),e.conditions.push(p)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Kt("conditions/comparisons are not allowed in a property list"):e.push(Pu(d)),s=void 0;break;case"(":Cu.lastIndex=vr;let h=Am(d?[]:new Lu,")");switch(d){case"":A_(e,u),e.conditions.push(h);break;case"limit":switch(h.length){case 1:e.limit=+h[0];break;case 2:e.offset=+h[0],e.limit=h[1]-e.offset;break;default:Kt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(h[0])&&h.length===1&&!h[0].name?(e.select=h[0],e.select.asArray=!0):h.length===1?e.select=h[0]:h.length===2&&h[1]===""?e.select=h.slice(0,1):e.select=h;break;case"group-by":Kt("group by is not implemented yet");case"sort":e.sort=cU(h);break;default:Kt(`unknown query function call ${d}`)}Io[vr]===","?r.lastIndex=++vr:a=!0,s=null;break;case"{":e.conditions&&Kt("property sets are not allowed in a queries"),d||Kt("property sets must have a defined parent property name"),Cu.lastIndex=vr,m=Am([],"}"),m.name=d,e.push(m),Io[vr]===","?r.lastIndex=++vr:a=!0;break;case"[":if(Cu.lastIndex=vr,d?(m=Am(new Lu,"]"),m.name=d):m=Am(e.conditions?new Lu:[],"]"),e.conditions)if(A_(e,u),Io[vr]==="="){l=decodeURIComponent,i="equals",s=Pu(d),r.lastIndex=++vr;break}else e.conditions.push(m),s=null;else e.push(m);Io[vr]===","?r.lastIndex=++vr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let p={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&aU(p,d),A_(e,u),e.conditions.push(p)}else d&&Kt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Pu(d));return e}else Kt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Kt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?e8:Cu,r.lastIndex=vr),vr===Io.length)return e}t&&Kt(`expected '${t}', but encountered end of string`)}function A_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Kt("Can not mix operators within a condition grouping"):e.operator=t)}function Pu(e){return e.indexOf(".")>-1?e.split(".").map(Pu):decodeURIComponent(e)}function oU(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Vr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function aU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Vr.ClientError("wildcard can only be used at the end of a string")}function cU(e){let t=lU(e[0]);return e.length>1&&(t.next=cU(e.slice(1))),t}function lU(e){if(Array.isArray(e)){let t=lU(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Kt(`Unknown sort type ${e}`)}function Mu(e){return Array.isArray(e)?e.join("\0"):e}function bo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function t8(e,t,r){return t*r/bo(e)}var Vr,As,Ui,Ca,W6,z6,j6,Q6,QA,XA,jA,Z6,Cu,e8,vr,ti,Io,Lu,N_=le(()=>{Vr=w(_e()),As=w(Vt()),Ui=require("ordered-binary"),Ca=require("lmdb");w_();zc();W6=.3,z6=.1,j6=.05,Q6={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},QA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(JA,"executeConditions");o(Du,"searchByIndex");o(xi,"findAttribute");o(J6,"joinTo");o(X6,"joinFrom");XA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(bm,"filterByType");o(b_,"estimateCondition");jA=class extends Vr.Violation{static{o(this,"SyntaxViolation")}},Z6=/[()[\]|!<>.]|(=\w*=)/,Cu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,e8=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(I_,"parseQuery");o(Kt,"recordError");o(Am,"parseBlock");o(A_,"assignOperator");o(Pu,"decodeProperty");o(oU,"typedDecoding");o(aU,"wildcardDecoding");o(cU,"toSortObject");o(lU,"toSortEntry");Lu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Mu,"flattenKey");o(bo,"estimatedEntryCount");o(t8,"intersectionEstimate")});var uU,ri,O_=le(()=>{uU=w(Xs());Pa();ri=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,uU._assignPackageExport)("Resource",Ur)});var pU={};Oe(pU,{MultiPartId:()=>C_,Resource:()=>Ur,contextStorage:()=>Uu,snakeCase:()=>n8,transformForSelect:()=>xu});function n8(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function dU(e,t){if(Zc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Zc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new C_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Zc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Zc=!0,null;e[e.length-1]==="/"&&(Zc=!0)}return t.coerceId(decodeURIComponent(e))}function wn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof _o?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new vu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let _=c.indexOf("?");_>-1&&(l=this.parseQuery(c.slice(_+1),s),c=c.slice(0,_),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ri,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ri,l.id=c,c==null&&(u=!0);l||(l=new ri,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Uu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,h=p;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(h=o(_=>Uu.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return Ft(a,()=>{let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)},f);function p(_){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?_.allowRead(a.user,l,a):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(a.user,d,a):_.allowUpdate(a.user,d,a):t.type==="create"?_.allowCreate(a.user,d,a):_.allowDelete(a.user,l,a);if(g?.then)return g.then(y=>{if(!y)throw new vu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new vu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Yn(e,t){let r=new vu.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function ZA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function xu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):ZA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(ZA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(ZA(l,r,n)),f;for(let m of e){let h=d(m);h===void 0&&a&&(h=null),h?.then?(f||(f=[]),f.push(h.then(p=>u[m.name||m]=p))):u[m.name||m]=h}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=xu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var fU,mU,vu,hU,Uu,r8,Ur,Zc,C_,Pa=le(()=>{fU=require("crypto");rm();Ru();mU=w(Xs()),vu=w(_e());Bc();N_();hU=require("async_hooks");O_();Uu=new hU.AsyncLocalStorage,r8={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ur=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=wn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=xu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=wn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Yn(t,"put")},{hasContent:!0,type:"update"});static patch=wn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Yn(t,"patch")},{hasContent:!0,type:"update"});static delete=wn(function(t,r,n,s){return t.delete?t.delete(r):Yn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,fU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Uu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),Ft(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Yn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=wn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Yn(t,"delete")},{hasContent:!1,type:"update"});static post=wn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=wn(function(t,r,n,s){return t.update(r,s)},{hasContent:!0,type:"create"});static connect=wn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Yn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=wn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Yn(t,"subscribe")},{type:"read"});static publish=wn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Yn(t,"publish")},{hasContent:!0,type:"create"});static search=wn(function(t,r,n){let s=t.search?t.search(r):Yn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=xu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=wn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Yn(t,"search")},{hasContent:!0,type:"read"});static copy=wn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Yn(t,"copy")},{hasContent:!0,type:"create"});static move=wn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Yn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Yn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return I_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&r8[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:dU(t,this),isCollection:Zc}}let i=dU(t,this);return Zc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Vn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Vn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,mU._assignPackageExport)("Resource",Ur);o(n8,"snakeCase");o(dU,"pathToId");C_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(wn,"transactional");o(Yn,"missingMethod");o(ZA,"selectFromObject");o(xu,"transformForSelect")});var el,eb=le(()=>{el=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var gU={};Oe(gU,{Resources:()=>P_,keyArrayToString:()=>Bu,resetResources:()=>s8,resources:()=>bs});function s8(){return bs=new P_,De.resources=bs,bs}function Bu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EU,_U,P_,bs,Fu=le(()=>{Bc();eb();EU=w(Q()),_U=w(_e());Dr();P_=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new _U.ServerError(`Conflicting paths for ${t}`);EU.default.error(c),i.Resource=new el(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ft(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(s8,"resetResources");o(Bu,"keyArrayToString")});function nb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=TU,i8(e.primaryStore,e.auditStore)):(c=SU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{RU(SU[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Bu(t);let d=new rb(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function RU(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),yU(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Nt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Bu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,tb.info)("omitting",c,m.startTime,n);continue}try{let h;m.supportsTransactions&&m.txnInProgress!==i.version&&(h=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,h)}catch(h){console.error(h),(0,tb.info)(h)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function i8(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=TU[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{RU(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function yU(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function AU(e){return e.nextTransaction||(nb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),yU(e)),e.nextTransaction}var tb,SU,TU,rb,sb=le(()=>{tb=w(Q());Ru();Fu();Li();SU=Object.create(null),TU=Object.create(null);o(nb,"addSubscription");rb=class extends Vn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(RU,"notifyFromTransactionData");o(i8,"listenToCommits");o(yU,"nextTransaction");o(AU,"whenNextTransaction")});var IU=M((uwe,bU)=>{"use strict";var ib=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};bU.exports=ib});var wU=M((fwe,NU)=>{"use strict";var ob=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};NU.exports=ob});var Im=M((hwe,CU)=>{"use strict";var OU=ae(),o8=(k(),v(Y)),{RecordEncoder:a8}=(zc(),v(iU));OU.initSync();var c8=OU.get(o8.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ab=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=c8&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:a8})}};CU.exports=ab});var Nm=M((Ewe,PU)=>{"use strict";var Wn=ae(),Is=(k(),v(Y));Wn.initSync();var L_=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Wn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Wn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Wn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Wn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Wn.get(Is.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};PU.exports=L_;L_.MAX_DBS=1e4});var Tt=M((gwe,kU)=>{"use strict";var lb=require("lmdb"),ni=require("fs-extra"),zn=require("path"),D_=An(),MU=Q(),On=rn().LMDB_ERRORS_ENUM,M_=wU(),ub=Im(),vU=Nm(),La=Vt(),LU=(k(),v(Y)),{table:l8,resetDatabases:u8}=(Me(),v(_t)),DU=ae(),si=La.INTERNAL_DBIS_NAME,UU=La.DBI_DEFINITION_NAME,d8="data.mdb",f8="lock.mdb",wm=".mdb",m8="-lock",cb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ns(t,r),this.key_type=this.dbi[La.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[La.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new lb.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function v_(e,t){if(e===void 0)throw new Error(On.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(On.ENV_NAME_REQUIRED)}o(v_,"pathEnvNameValidation");async function db(e,t,r=!0){try{await ni.access(e)}catch(n){throw n.code==="ENOENT"?new Error(On.INVALID_BASE_PATH):n}try{let n=zn.join(e,t+wm);return await ni.access(n,ni.constants.R_OK|ni.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ni.access(zn.join(e,t,d8),ni.constants.R_OK|ni.constants.F_OK),zn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(On.INVALID_ENVIRONMENT)}else throw new Error(On.INVALID_ENVIRONMENT);throw n}}o(db,"validateEnvironmentPath");function U_(e,t){if(D_.validateEnv(e),t===void 0)throw new Error(On.DBI_NAME_REQUIRED)}o(U_,"validateEnvDBIName");async function h8(e,t,r=!1,n=!1){v_(e,t);let s=zn.basename(e);t=t.toString();let i=DU.get(LU.CONFIG_PARAMS.DATABASES);i||DU.setProperty(LU.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await db(e,t,n),xU(e,t,r)}catch(a){if(a.message===On.INVALID_ENVIRONMENT){let c=zn.join(e,t);await ni.mkdirp(n?c:e);let l=new vU(n?c:c+wm,!1),u=lb.open(l);u.dbis=Object.create(null);let d=new ub(!1);u.openDB(si,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=fb(e,t,r);return u[La.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(h8,"createEnvironment");async function p8(e,t,r,n=!0){v_(e,t),t=t.toString();let s=zn.join(e,t);return l8({table:t,database:zn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(p8,"copyEnvironment");async function xU(e,t,r=!1){v_(e,t),t=t.toString();let n=fb(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 db(e,t),i=zn.join(e,t+wm),a=s!=i,c=new vU(s,a),l=lb.open(c);l.dbis=Object.create(null);let u=FU(l);for(let d=0;d<u.length;d++)Ns(l,u[d]);return l[La.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(xU,"openEnvironment");async function E8(e,t,r=!1){v_(e,t),t=t.toString();let n=zn.join(e,t+wm),s=await db(e,t);if(global.lmdb_map!==void 0){let i=fb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await BU(a),delete global.lmdb_map[i]}}await ni.remove(s),await ni.remove(s===n?s+m8:zn.join(zn.dirname(s),f8))}o(E8,"deleteEnvironment");async function BU(e){D_.validateEnv(e);let t=e[La.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(BU,"closeEnvironment");function fb(e,t,r=!1){let s=`${zn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(fb,"getCachedEnvironmentName");function _8(e){D_.validateEnv(e);let t=Object.create(null),r=Ns(e,si);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==si)try{t[n]=Object.assign(new M_,s)}catch{MU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(_8,"listDBIDefinitions");function FU(e){D_.validateEnv(e);let t=[],r=Ns(e,si);for(let{key:n}of r.getRange({start:!1}))n!==si&&t.push(n);return t}o(FU,"listDBIs");function g8(e,t){let n=Ns(e,si).getEntry(t),s=new M_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{MU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(g8,"getDBIDefinition");function HU(e,t,r,n=!r){if(U_(e,t),t=t.toString(),t===si)throw new Error(On.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ns(e,t)}catch(s){if(s.message===On.DBI_DOES_NOT_EXIST){let i=new ub(r,n===!0),a=e.openDB(t,i),c=new M_(r===!0,n);return a[UU]=c,Ns(e,si).putSync(t,c),e.dbis[t]=a,a}throw s}}o(HU,"createDBI");function Ns(e,t){if(U_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==si?r=g8(e,t):r=new M_,r===void 0)throw new Error(On.DBI_DOES_NOT_EXIST);let n;try{let s=new ub(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(On.DBI_DOES_NOT_EXIST):s}return n[UU]=r,e.dbis[t]=n,n}o(Ns,"openDBI");function S8(e,t){U_(e,t),t=t.toString();let r=Ns(e,t),n=r.getStats();return r[La.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(S8,"statDBI");async function T8(e,t){try{let r=zn.join(e,t+wm);return(await ni.stat(r)).size}catch{throw new Error(On.INVALID_ENVIRONMENT)}}o(T8,"environmentDataSize");function R8(e,t){if(U_(e,t),t=t.toString(),t===si)throw new Error(On.CANNOT_DROP_INTERNAL_DBIS_NAME);Ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ns(e,si).removeSync(t)}o(R8,"dropDBI");function y8(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ns(e,i)}catch(a){if(a.message===On.DBI_DOES_NOT_EXIST)HU(e,i,i!==t,i===t),n=!0;else throw a}}n&&u8()}o(y8,"initializeDBIs");kU.exports={openDBI:Ns,openEnvironment:xU,createEnvironment:h8,listDBIs:FU,listDBIDefinitions:_8,createDBI:HU,dropDBI:R8,statDBI:S8,deleteEnvironment:E8,initializeDBIs:y8,TransactionCursor:cb,environmentDataSize:T8,copyEnvironment:p8,closeEnvironment:BU}});var $U=M((Twe,qU)=>{"use strict";var mb=Tt(),A8=Q(),GU=rn().LMDB_ERRORS_ENUM;qU.exports=b8;async function b8(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await mb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==GU.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mb.closeEnvironment(global.lmdb_map[n]),await mb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==GU.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){A8.error(t)}}o(b8,"cleanLMDBMap")});var No=M((ywe,I8)=>{I8.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ii=M((Awe,YU)=>{var N8=No(),{promisify:w8}=require("util"),{getDatabases:KU}=(Me(),v(_t));YU.exports={setSchemaDataToGlobal:VU,getTableSchema:O8,getSystemSchema:C8,setSchemaDataToGlobalAsync:w8(VU)};function VU(e){global.hdb_schema=KU(),e&&e()}o(VU,"setSchemaDataToGlobal");function O8(e,t,r){let n=KU()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(O8,"getTableSchema");function C8(){return N8}o(C8,"getSystemSchema")});var i0=M((Nwe,s0)=>{"use strict";var hb=require("recursive-iterator"),P8=require("alasql"),pb=require("clone"),WU=ie(),{handleHDBError:zU,hdbErrors:L8}=_e(),{HDB_ERROR_MSGS:jU,HTTP_STATUS_CODES:QU}=L8,{getDatabases:D8}=(Me(),v(_t)),M8=["DISTINCT_ARRAY"],JU=Symbol("validateTables"),Eb=Symbol("validateTable"),Iwe=Symbol("getAllColumns"),XU=Symbol("validateAllColumns"),x_=Symbol("findColumn"),ZU=Symbol("validateOrderBy"),Om=Symbol("validateSegment"),_b=Symbol("validateColumn"),e0=Symbol("setColumnsForTable"),t0=Symbol("checkColumnsForAsterisk"),r0=Symbol("validateGroupBy"),n0=Symbol("hasColumns"),gb=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[JU](),this[t0](),this[XU]()}[JU](){if(this[n0]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Eb](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Eb](t.table)})}}[n0](){let t=!1,r=new hb(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Eb](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=D8();if(!r[t.databaseid])throw zU(new Error,jU.SCHEMA_NOT_FOUND(t.databaseid),QU.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zU(new Error,jU.TABLE_NOT_FOUND(t.databaseid,t.tableid),QU.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=pb(s);i.table=pb(t),this.attributes.push(i)})}[x_](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[t0](){let t=new hb(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[e0](r.tableid)}[e0](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new P8.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[XU](){this[Om](this.statement.columns,!1),this[Om](this.statement.joins,!1),this[Om](this.statement.where,!1),this[r0](this.statement.group,!1),this[Om](this.statement.order,!0)}[Om](t,r){if(!t)return;let n=new hb(t),s=[];for(let{node:i,path:a}of n)!WU.isEmpty(i)&&!WU.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ZU](i):s.push(this[_b](i)));return s}[r0](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&M8.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=pb(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[x_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[x_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ZU](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[_b](t)}[_b](t){let r=this[x_](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};s0.exports=gb});var a0=M((Owe,o0)=>{"use strict";var Sb=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};o0.exports=Sb});var l0=M((Pwe,c0)=>{"use strict";var Tb=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};c0.exports=Tb});var d0=M((Dwe,u0)=>{"use strict";var Rb=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};u0.exports=Rb});var m0=M((vwe,f0)=>{"use strict";var yb=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};f0.exports=yb});var rl=M((Hwe,E0)=>{"use strict";var v8=Tt(),U8=l0(),x8=d0(),B8=m0(),Bi=An(),Cm=rn().LMDB_ERRORS_ENUM,F8=Vt(),wo=(k(),v(Y)),H8=ie(),k8=require("uuid"),xwe=require("lmdb"),{handleHDBError:G8,hdbErrors:q8}=_e(),{OVERFLOW_MARKER:Bwe,MAX_SEARCH_KEY_LENGTH:Fwe}=F8,h0=ae();h0.initSync();var B_=h0.get(wo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ab=wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,tl=wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function $8(e,t,r,n,s=Bi.getNextMonotonicTime()){wb(e,t,r,n),bb(e,t,r);let i=new U8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];p0(u,!0,s);let d=V8(e,t,r,u),f=u[t];a.push(d),c.push(f)}return Ib(a,c,n,i,s)}o($8,"insertRecords");function V8(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][wo.FUNC_VAL],n[a]=c)}let l=Bi.getIndexedValues(c),u=e.dbis[a];if(l){B_&&u.prefetch(l.map(d=>({key:d,value:s})),F_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}B_&&e.dbis[t].prefetch([s],F_),e.dbis[t].put(s,n,n[tl])})}o(V8,"insertRecord");function K8(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(K8,"removeSkippedRecords");function p0(e,t,r){let n=r>0;(n||!Number.isInteger(e[tl]))&&(e[tl]=r||(r=Bi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Ab]))&&(e[Ab]=r||Bi.getNextMonotonicTime()):delete e[Ab]}o(p0,"setTimestamps");function bb(e,t,r){r.indexOf(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),v8.initializeDBIs(e,t,r)}o(bb,"initializeTransaction");async function Y8(e,t,r,n,s=Bi.getNextMonotonicTime()){wb(e,t,r,n),bb(e,t,r);let i=new x8,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=Nb(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return Ib(c,l,n,i,s,a)}o(Y8,"updateRecords");async function W8(e,t,r,n,s=Bi.getNextMonotonicTime()){try{wb(e,t,r,n)}catch(l){throw G8(l,l.message,q8.HTTP_STATUS_CODES.BAD_REQUEST)}bb(e,t,r);let i=new B8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;H8.isEmpty(u[t])?(d=k8.v4(),u[t]=d):d=u[t];let f=Nb(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return Ib(a,c,n,i,s)}o(W8,"upsertRecords");async function Ib(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Bi.getNextMonotonicTime(),K8(r,i),n}o(Ib,"finalizeWrite");function Nb(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(p0(r,!d,a),Number.isInteger(r[tl])&&u[tl]>r[tl])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let _=r[p],g=e.dbis[p];if(g===void 0)continue;let y=u[p];if(typeof _=="function"){let R=_([[u]]);Array.isArray(R)&&(_=R[0][wo.FUNC_VAL],r[p]=_)}if(_===y)continue;let T=Bi.getIndexedValues(y);if(T){B_&&g.prefetch(T.map(R=>({key:R,value:n})),F_);for(let R=0,N=T.length;R<N;R++)g.remove(T[R],n)}if(T=Bi.getIndexedValues(_),T){B_&&g.prefetch(T.map(R=>({key:R,value:n})),F_);for(let R=0,N=T.length;R<N;R++)g.put(T[R],n)}}let h={...u,...r};c.put(n,h,h[tl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:Nb(e,t,r,n,s,i,a))}o(Nb,"updateUpsertRecord");function z8(e,t,r){if(Bi.validateEnv(e),t===void 0)throw new Error(Cm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cm.WRITE_ATTRIBUTES_REQUIRED):new Error(Cm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(z8,"validateBasic");function wb(e,t,r,n){if(z8(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Cm.RECORDS_REQUIRED):new Error(Cm.RECORDS_MUST_BE_ARRAY)}o(wb,"validateWrite");function F_(){}o(F_,"noop");E0.exports={insertRecords:$8,updateRecords:Y8,upsertRecords:W8}});var dt=M((Gwe,_0)=>{"use strict";var Cn=require("validate.js");Cn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Cn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Cn.validators.type.checks={Object:o(function(e){return Cn.isObject(e)&&!Cn.isArray(e)},"Object"),Array:Cn.isArray,Integer:Cn.isInteger,Number:Cn.isNumber,String:Cn.isString,Date:Cn.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Cn.validators.hasValidFileExt=function(e,t){return Cn.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};_0.exports={validateObject:j8,validateObjectAsync:Q8,validateBySchema:J8};function j8(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Cn(e,t,{format:"flat"});return r?new Error(r):null}o(j8,"validateObject");async function Q8(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Cn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(Q8,"validateObjectAsync");function J8(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(J8,"validateBySchema")});var S0=M(($we,g0)=>{"use strict";var X8=require("uuid"),Ob=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||X8.v4(),this.schema_table=`${this.schema}.${this.table}`}};g0.exports=Ob});var H_=M((Kwe,T0)=>{"use strict";var Z8=S0(),Cb=class extends Z8{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};T0.exports=Cb});var y0=M((Wwe,R0)=>{"use strict";R0.exports=tZ;var eZ="inserted";function tZ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===eZ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(tZ,"returnObject")});var k_=M((Qwe,b0)=>{"use strict";var rZ=(k(),v(Y)),Pb=Tt(),nZ=rl(),{getSystemSchemaPath:sZ,getSchemaPath:iZ}=It(),jwe=No(),{validateBySchema:oZ}=dt(),Pm=require("joi"),aZ=H_(),cZ=y0(),{handleHDBError:lZ,hdbErrors:uZ,ClientError:dZ}=_e(),A0=ie(),{HTTP_STATUS_CODES:fZ}=uZ,mZ="inserted";b0.exports=hZ;async function hZ(e){let t=oZ(e,Pm.object({database:Pm.string(),schema:Pm.string(),table:Pm.string().required(),attribute:Pm.string().required()}));if(t)throw new dZ(t.message);let r=!e.skip_table_check&&A0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw lZ(new Error,r,fZ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=A0.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 aZ(e.schema,e.table,e.attribute,e.id);try{let i=await Pb.openEnvironment(iZ(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}`);Pb.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await Pb.openEnvironment(sZ(),rZ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await nZ.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return cZ(mZ,c,{records:[s]},l)}catch(i){throw i}}o(hZ,"lmdbCreateAttribute")});var Hi=M((Xwe,w0)=>{"use strict";var N0=ie(),I0=(k(),v(Y)),Hu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fi=require("joi"),Da={schema_format:{pattern:Hu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},pZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number(),Fi.array()).required(),EZ=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()),_Z=Fi.alternatives(Fi.string().min(1).max(Da.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Da.schema_format.message}),Fi.number()).required();function gZ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Da.schema_length.maximum?`'${e}' maximum of 250 characters`:Hu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(gZ,"checkValidTable");function SZ(e,t){return N0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(SZ,"validateSchemaExists");function TZ(e,t){let r=t.state.ancestors[0].schema;return N0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(TZ,"validateTableExists");function RZ(e,t){return e.toLowerCase()===I0.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${I0.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(RZ,"validateSchemaName");w0.exports={commonValidators:Da,schemaRegex:Hu,hdbSchemaTable:pZ,validateSchemaExists:SZ,validateTableExists:TZ,validateSchemaName:RZ,checkValidTable:gZ,hdbDatabase:EZ,hdbTable:_Z}});var Db=M((eOe,C0)=>{var{hdbTable:yZ,hdbDatabase:O0}=Hi(),AZ=dt(),Lb=require("joi"),bZ={undefined:"undefined",null:"null"},IZ=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||bZ[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),NZ=Lb.object({database:O0,schema:O0,table:yZ,records:Lb.array().items(Lb.object().custom(IZ)).required()});C0.exports=function(e){return AZ.validateBySchema(e,NZ)}});var Lm=M((nOe,L0)=>{"use strict";var Oo=ie(),P0=Q(),rOe=Db(),{getDatabases:wZ}=(Me(),v(_t)),{ClientError:nl}=_e();L0.exports=OZ;function OZ(e){if(Oo.isEmpty(e))throw new nl("invalid update parameters defined.");if(Oo.isEmptyOrZeroLength(e.schema))throw new nl("invalid schema specified.");if(Oo.isEmptyOrZeroLength(e.table))throw new nl("invalid table specified.");if(!Array.isArray(e.records))throw new nl("records must be an array");let t=wZ()[e.schema]?.[e.table];if(Oo.isEmpty(t))throw new nl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Oo.isEmptyOrZeroLength(a[r]))throw P0.error("a valid hash attribute must be provided with update record:",a),new nl("a valid hash attribute must be provided with update record, check log for more info");if(!Oo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw P0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new nl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Oo.isEmpty(a[r])&&a[r]!==""&&n.has(Oo.autoCast(a[r]))&&(a.skip=!0),n.add(Oo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(OZ,"insertUpdateValidate")});var G_=M((iOe,M0)=>{"use strict";var D0=ie(),CZ=(k(),v(Y)),PZ=Q(),LZ=k_(),DZ=H_(),MZ=Co(),{SchemaEventMsg:vZ}=oi(),UZ="already exists in";M0.exports=xZ;async function xZ(e,t,r){if(D0.isEmptyOrZeroLength(r))return r;let n=[];D0.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 BZ(e,t.schema,t.name,i)})),s}o(xZ,"lmdbCheckForNewAttributes");async function BZ(e,t,r,n){let s=new DZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await FZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(UZ))PZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(BZ,"createNewAttribute");async function FZ(e){let t;return t=await LZ(e),MZ.signalSchemaChange(new vZ(process.pid,CZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(FZ,"createAttribute")});var ku=M((aOe,v0)=>{"use strict";var Mb=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};v0.exports=Mb});var x0=M((lOe,U0)=>{"use strict";var HZ=ku(),kZ=(k(),v(Y)).OPERATIONS_ENUM,vb=class extends HZ{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(kZ.INSERT,r,n,s,i),this.records=t}};U0.exports=vb});var F0=M((dOe,B0)=>{"use strict";var GZ=ku(),qZ=(k(),v(Y)).OPERATIONS_ENUM,Ub=class extends GZ{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(qZ.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};B0.exports=Ub});var k0=M((mOe,H0)=>{"use strict";var $Z=ku(),VZ=(k(),v(Y)).OPERATIONS_ENUM,xb=class extends $Z{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(VZ.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};H0.exports=xb});var q0=M((pOe,G0)=>{"use strict";var KZ=ku(),YZ=(k(),v(Y)).OPERATIONS_ENUM,Bb=class extends KZ{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(YZ.DELETE,n,s,t,i),this.original_records=r}};G0.exports=Bb});var Dm=M((gOe,Y0)=>{"use strict";var _Oe=require("path"),$0=Tt(),WZ=x0(),zZ=F0(),jZ=k0(),QZ=q0(),Gu=Vt(),V0=ie(),{CONFIG_PARAMS:JZ}=(k(),v(Y)),K0=ae();K0.initSync();var q_=(k(),v(Y)).OPERATIONS_ENUM,{getTransactionAuditStorePath:XZ}=It();Y0.exports=ZZ;async function ZZ(e,t){if(K0.get(JZ.LOGGING_AUDITLOG)===!1)return;let r=XZ(e.schema,e.table),n=await $0.openEnvironment(r,e.table,!0),s=e5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){$0.initializeDBIs(n,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Gu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),V0.isEmpty(s.user_name)||n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(ZZ,"writeTransaction");function e5(e,t){let r=V0.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===q_.INSERT)return new WZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new zZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new jZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new QZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(e5,"createTransactionObject")});var Fb=M((ROe,W0)=>{"use strict";var t5=Lm(),TOe=Zf(),Mm=(k(),v(Y)),r5=em(),n5=rl().insertRecords,s5=Tt(),i5=Q(),o5=G_(),{getSchemaPath:a5}=It(),c5=Dm();W0.exports=l5;async function l5(e){try{let{schemaTable:t,attributes:r}=t5(e);r5(e,r,t.hash_attribute),e.schema!==Mm.SYSTEM_SCHEMA_NAME&&(r.includes(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await o5(e.hdb_auth_header,t,r),s=a5(e.schema,e.table),i=await s5.openEnvironment(s,e.table),a=await n5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await c5(e,a)}catch(c){i5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(l5,"lmdbCreateRecords")});var Q0=M((AOe,j0)=>{"use strict";var z0=(k(),v(Y)),u5=Fb(),d5=Zf(),f5=require("fs-extra"),{getSchemaPath:m5}=It();j0.exports=h5;async function h5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new d5(z0.SYSTEM_SCHEMA_NAME,z0.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await u5(r),await f5.mkdirp(m5(e.schema))}o(h5,"lmdbCreateSchema")});var X0=M((IOe,J0)=>{"use strict";var Hb=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};J0.exports=Hb});var rx=M((POe,tx)=>{"use strict";var Z0=Tt(),kb=An(),Gb=rn().LMDB_ERRORS_ENUM,p5=Vt(),ex=Q(),wOe=ie(),E5=require("lmdb"),_5=X0(),g5=(k(),v(Y)),{OVERFLOW_MARKER:OOe,MAX_SEARCH_KEY_LENGTH:COe}=p5,S5=g5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function T5(e,t,r,n){if(kb.validateEnv(e),t===void 0)throw new Error(Gb.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Gb.IDS_REQUIRED):new Error(Gb.IDS_MUST_BE_ITERABLE);try{let s=Z0.listDBIs(e);Z0.initializeDBIs(e,t,s);let i=new _5,a,c=[],l=[];for(let m=0,h=r.length;m<h;m++)try{a=r[m];let p=e.dbis[t].get(a);if(!p||n&&p[S5]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,E5.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let y=s[g];if(!p.hasOwnProperty(y)||y===t)continue;let T=e.dbis[y],R=p[y];if(R!=null)try{let N=kb.getIndexedValues(R);if(N)for(let C=0,G=N.length;C<G;C++)T.remove(N[C],a)}catch{ex.warn(`cannot delete from attribute: ${y}, ${R}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){ex.warn(p),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,h=d.length;m<h;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let h=u[m];i.original_records.splice(h-f,1),f++}return i.txn_time=kb.getNextMonotonicTime(),i}catch(s){throw s}}o(T5,"deleteRecords");tx.exports={deleteRecords:T5}});var vm=M((DOe,sx)=>{"use strict";var qu=ie(),R5=rx(),y5=Tt(),{getSchemaPath:A5}=It(),b5=Dm(),I5=Q();sx.exports=N5;async function N5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(qu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(qu.isEmptyOrZeroLength(e.hash_values)&&!qu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];qu.isEmpty(l)||e.hash_values.push(l)}}if(qu.isEmptyOrZeroLength(e.hash_values))return nx([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(qu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=A5(e.schema,e.table),i=await y5.openEnvironment(s,e.table),a=await R5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await b5(e,a)}catch(c){I5.error(`unable to write transaction due to ${c.message}`)}return nx(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(N5,"lmdbDeleteRecords");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}}o(nx,"createDeleteResponse")});var $b=M((UOe,ix)=>{"use strict";var w5=(k(),v(Y)),vOe=An();function qb(e,t){let r=Object.create(null);if(t.length===1&&w5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(qb,"parseRow");function O5(e,t,r,n){let s=qb(r,e);n.push(s)}o(O5,"searchAll");function C5(e,t,r,n){let s=qb(r,e);n[t]=s}o(C5,"searchAllToMap");function P5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(P5,"iterateDBI");function sl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(sl,"pushResults");function L5(e,t,r,n,s,i){t.toString().endsWith(e)&&sl(t,r,n,s,i)}o(L5,"endsWith");function D5(e,t,r,n,s,i){t.toString().includes(e)&&sl(t,r,n,s,i)}o(D5,"contains");function M5(e,t,r,n,s,i){t>e&&sl(t,r,n,s,i)}o(M5,"greaterThanCompare");function v5(e,t,r,n,s,i){t>=e&&sl(t,r,n,s,i)}o(v5,"greaterThanEqualCompare");function U5(e,t,r,n,s,i){t<e&&sl(t,r,n,s,i)}o(U5,"lessThanCompare");function x5(e,t,r,n,s,i){t<=e&&sl(t,r,n,s,i)}o(x5,"lessThanEqualCompare");ix.exports={parseRow:qb,searchAll:O5,searchAllToMap:C5,iterateDBI:P5,endsWith:L5,contains:D5,greaterThanCompare:M5,greaterThanEqualCompare:v5,lessThanCompare:U5,lessThanEqualCompare:x5,pushResults:sl}});var $u=M((kOe,fx)=>{"use strict";var Ma=Tt(),BOe=Q(),jn=An(),$_=Vt(),Zt=rn().LMDB_ERRORS_ENUM,FOe=ie(),B5=(k(),v(Y)),V_=$b(),{parseRow:F5}=V_,HOe=require("lmdb"),{OVERFLOW_MARKER:ox,MAX_SEARCH_KEY_LENGTH:H5}=$_;function ax(e,t,r,n=!1,s=void 0,i=void 0){return il(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(ax,"iterateFullIndex");function Um(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return il(e,t,r,(d,f,m,h)=>{let T={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(T.values=!1,f.getRange(T).map(R=>({value:R}))):f.getRange(T)})}o(Um,"iterateRangeBetween");function il(e,t,r,n){let s=e.database||e,i=Ma.openDBI(s,r);i[$_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ma.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(il,"setupTransaction");function cx(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(ox)){if(!s)if(r)s=Ma.openDBI(e,r);else{let l=Ma.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Ma.openDBI(e,l[u]),!s[$_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(cx,"getOverflowCheck");function k5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return il(e,t,t,(a,c,l)=>(K_(r),r=xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>F5(u.value,r))))}o(k5,"searchAll");function G5(e,t,r,n=!1,s=void 0,i=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);K_(r),r=xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of ax(e,t,t,n,s,i))a.set(c,V_.parseRow(l,r));return a}o(G5,"searchAllToMap");function q5(e,t,r=!1,n=void 0,s=void 0){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=ax(e,void 0,t,r,n,s),c=a.transaction,l=cx(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(q5,"iterateDBI");function $5(e,t){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);return Ma.statDBI(e,t).entryCount}o($5,"countAll");function V5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),il(e,t,r,(c,l,u,d)=>(n=jn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(V5,"equals");function K5(e,t,r){return va(e,t,r),Ma.openDBI(e,t).getValuesCount(r)}o(K5,"count");function Y5(e,t,r,n,s=!1,i=void 0,a=void 0){return va(e,r,n),il(e,null,r,(c,l)=>{n=jn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:h}=m;if(h!==f){if(h.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(Y5,"startsWith");function W5(e,t,r,n,s=!1,i=void 0,a=void 0){return lx(e,t,r,n,s,i,a,!0)}o(W5,"endsWith");function lx(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return va(e,r,n),il(e,null,r,(l,u,d,f)=>{let m=cx(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let p=h.toString();return p.endsWith(ox)?u.getValues(h,{transaction:l}).map(_=>{let g=m(h,_);if(c?g.endsWith(n):g.includes(n))return{key:g,value:_}}).filter(_=>_):(c?p.endsWith(n):p.includes(n))?u[$_.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(_=>({key:h,value:_})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(lx,"contains");function z5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!0,!1)}o(z5,"greaterThan");function j5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Um(e,t,r,n,l,s,i,a,!1,!1)}o(j5,"greaterThanEqual");function Q5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!0)}o(Q5,"lessThan");function J5(e,t,r,n,s=!1,i=void 0,a=void 0){va(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Um(e,t,r,l,n,s,i,a,!1,!1)}o(J5,"lessThanEqual");function X5(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(jn.validateEnv(e),r===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Zt.END_VALUE_REQUIRED);if(n=jn.convertKeyValueToWrite(n),s=jn.convertKeyValueToWrite(s),n>s)throw new Error(Zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Um(e,t,r,n,s,i,a,c)}o(X5,"between");function Z5(e,t,r,n){jn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),r=xm(s,r),n===void 0)throw new Error(Zt.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=V_.parseRow(c,r)),a}o(Z5,"searchByHash");function e9(e,t,r){jn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(e9,"checkHashExists");function t9(e,t,r,n,s=[]){return dx(e,t,r,n,s),ux(e,t,r,n,s).map(i=>i[1])}o(t9,"batchSearchByHash");function r9(e,t,r,n,s=[]){dx(e,t,r,n,s);let i=new Map;for(let[a,c]of ux(e,t,r,n,s))i.set(a,c);return i}o(r9,"batchSearchByHashToMap");function ux(e,t,r,n,s=[]){return il(e,t,t,(i,a,c)=>{r=xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,V_.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(ux,"batchHashSearch");function dx(e,t,r,n,s){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.HASH_ATTRIBUTE_REQUIRED);if(K_(r),n==null)throw new Error(Zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Zt.IDS_MUST_BE_ITERABLE)}o(dx,"initializeBatchSearchByHash");function K_(e){if(!Array.isArray(e))throw e===void 0?new Error(Zt.FETCH_ATTRIBUTES_REQUIRED):new Error(Zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(K_,"validateFetchAttributes");function va(e,t,r){if(jn.validateEnv(e),t===void 0)throw new Error(Zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Zt.SEARCH_VALUE_REQUIRED);if(r?.length>H5)throw new Error(Zt.SEARCH_VALUE_TOO_LARGE)}o(va,"validateComparisonFunctions");function xm(e,t){return t.length===1&&B5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ma.listDBIs(e)),t}o(xm,"setGetWholeRowAttributes");fx.exports={searchAll:k5,searchAllToMap:G5,count:K5,countAll:$5,equals:V5,startsWith:Y5,endsWith:W5,contains:lx,searchByHash:Z5,setGetWholeRowAttributes:xm,batchSearchByHash:t9,batchSearchByHashToMap:r9,checkHashExists:e9,iterateDBI:q5,greaterThan:z5,greaterThanEqual:j5,lessThan:Q5,lessThanEqual:J5,between:X5}});var Vu=M((qOe,_x)=>{var mx=require("lodash"),hx=dt(),$e=require("joi"),n9=ie(),{hdbSchemaTable:Bm,checkValidTable:px,hdbTable:Ex,hdbDatabase:Y_}=Hi(),{handleHDBError:s9,hdbErrors:i9}=_e(),{getDatabases:o9}=(Me(),v(_t)),{HTTP_STATUS_CODES:a9}=i9,c9=$e.object({database:Y_,schema:Y_,table:Ex,search_attribute:Bm,search_value:$e.any().required(),get_attributes:$e.array().min(1).items($e.alternatives(Bm,$e.object())).optional(),desc:$e.bool(),limit:$e.number().integer().min(1),offset:$e.number().integer().min(0)}),l9=$e.object({database:Y_,schema:Y_,table:Ex,operator:$e.string().valid("and","or").default("and").lowercase(),offset:$e.number().integer().min(0),limit:$e.number().integer().min(1),get_attributes:$e.array().min(1).items($e.alternatives(Bm,$e.object())).optional(),sort:$e.object({attribute:$e.alternatives(Bm,$e.array().min(1)),descending:$e.bool().optional()}).optional(),conditions:$e.array().min(1).items($e.alternatives($e.object({operator:$e.string().valid("and","or").default("and").lowercase(),conditions:$e.array()}),$e.object({search_attribute:$e.alternatives(Bm,$e.array().min(1)),search_type:$e.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:$e.when("search_type",{switch:[{is:"equals",then:$e.any()},{is:"between",then:$e.array().items($e.alternatives([$e.string(),$e.number()])).length(2)}],otherwise:$e.alternatives($e.string(),$e.number())}).required()}))).required()});_x.exports=function(e,t){let r=null;switch(t){case"value":r=hx.validateBySchema(e,c9);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(px("database",e.schema)),i(px("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=hx.validateBySchema(e,l9);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=n9.checkGlobalSchemaTable(e.schema,e.table);if(s)return s9(new Error,s,a9.NOT_FOUND);let a=o9()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=o(d=>{for(let f=0,m=d.conditions.length;f<m;f++){let h=d.conditions[f];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=mx.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!mx.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var Vb=M((VOe,gx)=>{"use strict";var u9=Tt(),d9=Vu(),{getSchemaPath:f9}=It();gx.exports=m9;function m9(e){let t=d9(e,"hashes");if(t)throw t;let r=f9(e.schema,e.table);return u9.openEnvironment(r,e.table)}o(m9,"initialize")});var Kb=M((YOe,Sx)=>{"use strict";var h9=$u(),p9=Vb();Sx.exports=E9;async function E9(e){let t=await p9(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return h9.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(E9,"lmdbGetDataByHash")});var Ku=M((zOe,Tx)=>{"use strict";var Yb=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Tx.exports=Yb});var yx=M((JOe,Rx)=>{"use strict";var QOe=Ku(),_9=$u(),g9=Vb();Rx.exports=S9;async function S9(e){let t=await g9(e),r=global.hdb_schema[e.schema][e.table];return _9.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(S9,"lmdbSearchByHash")});var ai=M((ZOe,Ax)=>{"use strict";var Wb=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};Ax.exports=Wb});var W_=M((tCe,Cx)=>{"use strict";var sn=$u(),T9=Tt(),R9=ie(),Ve=Vt(),ol=(k(),v(Y)),y9=No(),bx=rn().LMDB_ERRORS_ENUM,{getSchemaPath:A9}=It(),Po=ol.SEARCH_WILDCARDS;async function b9(e,t,r){let n;e.schema===ol.SYSTEM_SCHEMA_NAME?n=y9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Ox(e,n.hash_attribute,r,t);return Nx(e,s,n.hash_attribute,r)}o(b9,"prepSearch");async function Nx(e,t,r,n){let s=A9(e.schema,e.table),i=await T9.openEnvironment(s,e.table),a=wx(i,e,t,r),c=a.transaction||i;if([Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ve.SEARCH_TYPES.SEARCH_ALL,Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(I9(e,r)===!1){let d=e.search_attribute;if(d===r)return n?Ix(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?Ix(a,f):a.map(f)}let u=e.search_attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?sn.batchSearchByHashToMap(c,r,e.get_attributes,u):sn.batchSearchByHash(c,r,e.get_attributes,u)}o(Nx,"executeSearch");function wx(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ve.SEARCH_TYPES.EQUALS:s=sn.equals(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.CONTAINS:s=sn.contains(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.ENDS_WITH:case Ve.SEARCH_TYPES._ENDS_WITH:s=sn.endsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.STARTS_WITH:case Ve.SEARCH_TYPES._STARTS_WITH:s=sn.startsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return sn.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return sn.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.SEARCH_ALL:return sn.searchAll(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return sn.searchAllToMap(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.BETWEEN:s=sn.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN:case Ve.SEARCH_TYPES._GREATER_THAN:s=sn.greaterThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ve.SEARCH_TYPES._GREATER_THAN_EQUAL:s=sn.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN:case Ve.SEARCH_TYPES._LESS_THAN:s=sn.lessThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN_EQUAL:case Ve.SEARCH_TYPES._LESS_THAN_EQUAL:s=sn.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;default:return Object.create(null)}return s}o(wx,"searchByType");function Ix(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(Ix,"createMapFromIterable");function I9(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(I9,"checkToFetchMore");function Ox(e,t,r,n){if(R9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Po.indexOf(s)>-1)return r===!0?Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ve.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Po[0])<0&&s.indexOf(Po[1])<0)return c===!0?r===!0?Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ve.SEARCH_TYPES.EQUALS;if(Po.indexOf(i)>=0&&Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),Ve.SEARCH_TYPES.CONTAINS;if(Po.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ve.SEARCH_TYPES.ENDS_WITH;if(Po.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),Ve.SEARCH_TYPES.STARTS_WITH;if(s.includes(Po[0])||s.includes(Po[1]))return Ve.SEARCH_TYPES.EQUALS;throw new Error(bx.UNKNOWN_SEARCH_TYPE)}else switch(n){case ol.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ve.SEARCH_TYPES.BETWEEN;case ol.VALUE_SEARCH_COMPARATORS.GREATER:return Ve.SEARCH_TYPES.GREATER_THAN;case ol.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ve.SEARCH_TYPES.GREATER_THAN_EQUAL;case ol.VALUE_SEARCH_COMPARATORS.LESS:return Ve.SEARCH_TYPES.LESS_THAN;case ol.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ve.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(bx.UNKNOWN_SEARCH_TYPE)}}o(Ox,"createSearchTypeFromSearchObject");Cx.exports={executeSearch:Nx,createSearchTypeFromSearchObject:Ox,prepSearch:b9,searchByType:wx}});var Lx=M((sCe,Px)=>{"use strict";var nCe=ai(),N9=Vu(),w9=ie(),O9=(k(),v(Y)),C9=W_();Px.exports=P9;function P9(e,t){if(!w9.isEmpty(t)&&O9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N9(e,"value");if(n)throw n;return C9.prepSearch(e,t,!0)}o(P9,"lmdbGetDataByValue")});var Fm=M((aCe,Dx)=>{"use strict";var oCe=ai(),L9=Vu(),D9=ie(),M9=(k(),v(Y)),v9=W_();Dx.exports=U9;async function U9(e,t){if(!D9.isEmpty(t)&&M9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=L9(e,"value");if(n)throw n;return v9.prepSearch(e,t,!1)}o(U9,"lmdbSearchByValue")});var vx=M((uCe,Mx)=>{"use strict";var lCe=Vt(),zb=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},jb=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Qb=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Mx.exports={SearchByConditionsObject:zb,SearchCondition:jb,SortAttribute:Qb}});var Hx=M((hCe,Fx)=>{"use strict";var fCe=vx().SearchByConditionsObject,x9=ai(),B9=Vu(),Jb=$u(),z_=Vt(),{Resource:mCe}=(Pa(),v(pU)),Bx=W_(),F9=$b(),H9=require("lodash"),{getSchemaPath:k9}=It(),Ux=Tt(),{handleHDBError:G9,hdbErrors:q9}=_e(),{HTTP_STATUS_CODES:$9}=q9,V9=1e8;Fx.exports=K9;async function K9(e){let t=B9(e,"conditions");if(t)throw G9(t,t.message,$9.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=k9(e.schema,e.table),n=await Ux.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Ux.openDBI(n,u.search_attribute);let i=H9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===z_.SEARCH_TYPES.EQUALS?u.estimated_count=Jb.count(n,u.search_attribute,u.search_value):d===z_.SEARCH_TYPES.CONTAINS||d===z_.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=V9}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await xx(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(Bx.filterByType),f=d.length,m=Jb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:a,lazy:!0})),f>0&&(l=l.filter(h=>{for(let p=0;p<f;p++)if(!d[p](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(h=>F9.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await xx(a,e,m,s.hash_attribute);c=c.concat(h)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=Jb.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(K9,"lmdbSearchByConditions");async function xx(e,t,r,n){let s=new x9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===z_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Bx.searchByType(e,s,i,n).map(a=>a.value)}o(xx,"executeConditionSearch")});var Hm=M((ECe,kx)=>{"use strict";var Y9=(k(),v(Y)).OPERATIONS_ENUM,Xb=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Y9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};kx.exports=Xb});var Zb=M((gCe,zx)=>{"use strict";var Vx=ai(),Kx=Hm(),Yx=Fm(),Wx=vm(),Pn=(k(),v(Y)),Gx=ie(),qx=Tt(),{getTransactionAuditStorePath:W9,getSchemaPath:z9}=It(),$x=Q();zx.exports=j9;async function j9(e){try{if(Gx.isEmpty(global.hdb_schema[e.schema])||Gx.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Q9(e),await J9(e);let t=z9(e.schema,e.table);try{await qx.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$x.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=W9(e.schema,e.table);await qx.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$x.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(j9,"lmdbDropTable");async function Q9(e){let t=new Vx(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 Yx(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new Kx(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Wx(s)}o(Q9,"deleteAttributesFromSystem");async function J9(e){let t=new Vx(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 Yx(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Kx(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Wx(s)}catch(i){throw i}}o(J9,"dropTableFromSystem")});var Qx=M((TCe,jx)=>{"use strict";var X9=require("fs-extra"),Z9=ai(),e7=Ku(),t7=Hm(),r7=Zb(),n7=vm(),s7=Kb(),i7=Fm(),Lo=(k(),v(Y)),{getSchemaPath:o7}=It(),{handleHDBError:a7,hdbErrors:c7}=_e(),{HDB_ERROR_MSGS:l7,HTTP_STATUS_CODES:u7}=c7;jx.exports=d7;async function d7(e){let t;try{t=await f7(e.schema);let r=new Z9(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await i7(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await r7(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new t7(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await n7(s);let i=o7(t);await X9.remove(i)}catch(r){throw r}}o(d7,"lmdbDropSchema");async function f7(e){let t=new e7(Lo.SYSTEM_SCHEMA_NAME,Lo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Lo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await s7(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw a7(new Error,l7.SCHEMA_NOT_FOUND(e),u7.NOT_FOUND,void 0,void 0,!0);return n}o(f7,"validateDropSchema")});var km=M((yCe,Jx)=>{"use strict";var eI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Jx.exports=eI});var rI=M((ICe,Xx)=>{"use strict";var m7=require("fs-extra"),j_=Tt(),{getTransactionAuditStorePath:h7}=It(),tI=Vt(),bCe=km();Xx.exports=p7;async function p7(e){let t;try{let r=h7(e.schema,e.table);await m7.mkdirp(r),t=await j_.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{j_.createDBI(t,tI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),j_.createDBI(t,tI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),j_.createDBI(t,tI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(p7,"createTransactionsAuditEnvironment")});var tB=M((OCe,eB)=>{"use strict";var nI=(k(),v(Y)),Zx=Tt(),E7=rl(),{getSystemSchemaPath:_7,getSchemaPath:g7}=It(),wCe=No(),S7=k_(),sI=H_(),T7=Q(),R7=rI();eB.exports=y7;async function y7(e,t){let r=g7(t.schema,t.table),n=new sI(t.schema,t.table,nI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new sI(t.schema,t.table,nI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new sI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Zx.createEnvironment(r,t.table),e!==void 0){let a=await Zx.openEnvironment(_7(),nI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await E7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await iI(n),await iI(s),await iI(i)}await R7(t)}catch(a){throw a}}o(y7,"lmdbCreateTable");async function iI(e){try{await S7(e)}catch(t){T7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(iI,"createAttribute")});var nB=M((PCe,rB)=>{"use strict";var A7=Lm(),b7=em(),I7=G_(),Gm=(k(),v(Y)),N7=rl().updateRecords,w7=Tt(),{getSchemaPath:O7}=It(),C7=Dm(),P7=Q();rB.exports=L7;async function L7(e){try{let{schemaTable:t,attributes:r}=A7(e);b7(e,r,t.hash_attribute),e.schema!==Gm.SYSTEM_SCHEMA_NAME&&(r.includes(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await I7(e.hdb_auth_header,t,r),s=O7(e.schema,e.table),i=await w7.openEnvironment(s,e.table),a=await N7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await C7(e,a)}catch(c){P7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(L7,"lmdbUpdateRecords")});var iB=M((DCe,sB)=>{"use strict";var D7=(k(),v(Y)).OPERATIONS_ENUM,oI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=D7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sB.exports=oI});var aB=M((UCe,oB)=>{"use strict";var vCe=iB(),M7=Lm(),v7=em(),U7=G_(),qm=(k(),v(Y)),x7=rl().upsertRecords,B7=Tt(),{getSchemaPath:F7}=It(),H7=Dm(),k7=Q(),{handleHDBError:G7,hdbErrors:q7}=_e();oB.exports=$7;async function $7(e){let t;try{t=M7(e)}catch(l){throw G7(l,l.message,q7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;v7(e,n,r.hash_attribute),e.schema!==qm.SYSTEM_SCHEMA_NAME&&(n.includes(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(qm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await U7(e.hdb_auth_header,r,n),i=F7(e.schema,e.table),a=await B7.openEnvironment(i,e.table),c=await x7(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await H7(e,c)}catch(l){k7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o($7,"lmdbUpsertRecords")});var lB=M((BCe,cB)=>{"use strict";var aI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};cB.exports=aI});var dB=M((HCe,uB)=>{"use strict";var cI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};uB.exports=cI});var hB=M((qCe,mB)=>{"use strict";var lI=Tt(),{getTransactionAuditStorePath:V7}=It(),GCe=lB(),$m=Vt(),K7=ie(),fB=dB(),Y7=require("util").promisify,W7=Y7(setTimeout),z7=1e4,j7=100;mB.exports=Q7;async function Q7(e){let t=V7(e.schema,e.table),r=await lI.openEnvironment(t,e.table,!0),n=lI.listDBIs(r);lI.initializeDBIs(r,$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fB;do s=await J7(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 W7(j7);while(s.transactions_deleted>0);return i}o(Q7,"deleteAuditLogsBefore");async function J7(e,t){let r=new fB;try{let n=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];K7.isEmpty(c)||(s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[$m.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>z7)break}return await s,r}catch(n){throw n}}o(J7,"deleteTransactions")});var EB=M((VCe,pB)=>{"use strict";var uI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};pB.exports=uI});var gB=M((WCe,_B)=>{"use strict";var X7=ai(),Z7=Hm(),YCe=EB(),ki=(k(),v(Y)),eee=ie(),dI=Tt(),tee=No(),ree=Fm(),nee=vm(),{getSchemaPath:see}=It();_B.exports=iee;async function iee(e,t=!0){let r;e.schema===ki.SYSTEM_SCHEMA_NAME?r=tee[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await aee(e),s=see(e.schema,e.table),i=await dI.openEnvironment(s,e.table);return t===!0&&await oee(e,i,r.hash_attribute),dI.dropDBI(i,e.attribute),n}o(iee,"lmdbDropAttribute");async function oee(e,t,r){let n=dI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(oee,"removeAttributeFromAllObjects");async function aee(e){let t=new X7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await ree(t)).filter(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(eee.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(a=>a[ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Z7(ki.SYSTEM_SCHEMA_NAME,ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return nee(i)}o(aee,"dropAttributeFromSystem")});var bB=M((QCe,AB)=>{"use strict";var fI=Tt(),Yu=Vt(),jCe=An(),mI=(k(),v(Y)),SB=ie(),{getTransactionAuditStorePath:cee}=It(),lee=$u(),Q_=ku(),uee=Q();AB.exports=dee;async function dee(e){let t=cee(e.schema,e.table),r=await fI.openEnvironment(t,e.table,!0),n=fI.listDBIs(r);fI.initializeDBIs(r,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case mI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return TB(r,e.search_values);case mI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,mee(r,e.search_values,s);case mI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return fee(r,e.search_values);default:return TB(r)}}o(dee,"readAuditLog");function TB(e,t=[0,Date.now()]){SB.isEmpty(t[0])&&(t[0]=0),SB.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Q_,s))}o(TB,"searchTransactionsByTimestamp");function fee(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,yB(e,i))}return Object.fromEntries(r)}o(fee,"searchTransactionsByUsername");function mee(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=lee.equals(e,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=yB(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);RB(l,"records",r,d,a),RB(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(mee,"searchTransactionsByHashValues");function RB(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Q_(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Q_(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(RB,"loopRecords");function yB(e,t){let r=[];try{let n=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new Q_,i);r.push(a)}}catch(i){uee.warn(i)}return r}catch(n){throw n}}o(yB,"batchSearchTransactions")});var NB=M((ePe,IB)=>{"use strict";var{getSchemaPath:XCe}=It(),ZCe=Tt(),{database:hee}=(Me(),v(_t));IB.exports={writeTransaction:pee};async function pee(e,t,r){return hee({database:e,table:t}).transaction(r)}o(pee,"writeTransaction")});var PB=M((rPe,CB)=>{"use strict";var{getSchemaPath:wB}=It(),OB=Tt();CB.exports={flush:Eee,resetReadTxn:_ee};async function Eee(e,t){return(await OB.openEnvironment(wB(e,t),t.toString())).flushed}o(Eee,"flush");async function _ee(e,t){try{(await OB.openEnvironment(wB(e,t),t.toString())).resetReadTxn()}catch{}}o(_ee,"resetReadTxn")});var vB=M((sPe,MB)=>{"use strict";var{Readable:gee}=require("stream"),{getDatabases:See}=(Me(),v(_t)),{readSync:Tee,openSync:Ree,createReadStream:LB}=require("fs"),{open:yee}=require("lmdb"),DB=Im(),Aee=Nm(),{AUDIT_STORE_OPTIONS:bee}=(Li(),v(eU)),{INTERNAL_DBIS_NAME:Iee,AUDIT_STORE_NAME:Nee}=Vt();MB.exports=Oee;var hI=32768,wee=100;async function Oee(e){let t=e.database||e.schema||"data",r=See()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=yee({noSync:!0,maxDbs:Aee.MAX_DBS}),m,h=f.openDB(Iee,new DB(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(T,R),C=d.openDB(T,R);for(let{key:G,version:z,value:F}of C.getRange({start:null,transaction:p,versions:C.useVersions}))m=N.put(G,F,z),_++%wee===0&&(await new Promise($=>setTimeout($,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of d.getRange({transaction:p,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){h.put(T,R);let[,N]=T.split("/"),C=!N,G=new DB(!C,C);await g(T,G)}e.include_audit&&await g(Nee,{...bee}),await m;let y=LB(f.path);return y.headers=l(),y.on("close",()=>{p.done(),f.close()}),y}let a=r[Object.keys(r)[0]].primaryStore,c=Ree(a.path);return a.transaction(()=>{let u=Buffer.alloc(hI);Tee(c,u,0,hI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=LB(null,{fd:c,start:hI}),m=new gee.from((async function*(){yield u;for await(let h of f)d.openTimer&&(d.openTimer=0),yield h;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(Oee,"getBackup")});var BB=M((oPe,xB)=>{"use strict";var Cee=Q(),{handleHDBError:Pee}=_e(),Lee=a0(),Dee=k_(),Mee=Fb(),vee=Q0(),Uee=vm(),xee=Kb(),Bee=yx(),Fee=Lx(),Hee=Fm(),kee=Hx(),Gee=Qx(),qee=tB(),$ee=nB(),Vee=aB(),Kee=hB(),Yee=Zb(),Wee=gB(),zee=bB(),jee=NB(),UB=PB(),Qee=vB(),pI=class extends Lee{static{o(this,"LMDBBridge")}async searchByConditions(t){return kee(t)}async getDataByHash(t){return await xee(t)}async searchByHash(t){return await Bee(t)}async getDataByValue(t,r){return await Fee(t,r)}async searchByValue(t){return await Hee(t)}async createSchema(t){return await vee(t)}async dropSchema(t){return await Gee(t)}async createTable(t,r){return await qee(t,r)}async dropTable(t){return await Yee(t)}async createAttribute(t){return await Dee(t)}async createRecords(t){return await Mee(t)}async updateRecords(t){return await $ee(t)}async upsertRecords(t){try{return await Vee(t)}catch(r){throw Pee(r,null,null,Cee.ERR,r)}}async deleteRecords(t){return await Uee(t)}async dropAttribute(t){return await Wee(t)}async deleteAuditLogsBefore(t){return await Kee(t)}async readAuditLog(t){return await zee(t)}writeTransaction(t,r,n){return jee.writeTransaction(t,r,n)}flush(t,r){return UB.flush(t,r)}resetReadTxn(t,r){return UB.resetReadTxn(t,r)}getBackup(t){return Qee(t)}};xB.exports=pI});function Ln(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Km(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(h=>typeof h=="string")||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="number"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a number, attempt to assign ${h}`);Ln(this)[u]=m},"set");break;case"Int":d=o(function(m){let h=m?.__op__?m.value:m;if(!(h>>0===h||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Long":d=o(function(m){let h=m?.__op__?m.value:m;if(!(Math.round(h)===m&&Math.abs(h)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="bigint"||m==null&&l.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),m?.__op__?m.value=h:m=h;else throw new Qn.ClientError(`${u} must be a number, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new Qn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Rs||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Ln(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new Qn.ClientError(`${u} must be an object, attempt to assign ${m}`);Ln(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let p=m[u];if(p?.__op__){let _=this.getRecord()?.[u];return p.update(_)}return p}let h=this.getRecord()?.[u];if(h&&typeof h=="object"){let p=EI(h,l);if(p)return m||this._setChanges(m=Object.create(null)),m[u]=p}return h},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");Ln(this)[l]=u}),a("deleteProperty",function(l){Ln(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let h=u[f];m=m.update(h)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?kB:HB);break}c=l}while(c&&c!==HB&&c!==kB)}function GB(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(FB[t])return FB[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=EI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Jee(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function EI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends cl{static{o(this,"TrackedObject")}},Km(r,t)),new r(e)):new cl(e);case Array:let n=new X_(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=EI(a,t?.elements)),n[s]=a}return n;default:return e}}function Z_(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=Z_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function ll(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=ll(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=pA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ll(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Xee.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function J_(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[al]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(J_(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(J_(s))return!0}else return!0}else return!0}}return!1}var Qn,FB,HB,kB,cl,Xee,al,X_,Vm,_I=le(()=>{Qn=w(_e());zE();Kn();o(Ln,"getChanges");o(Km,"assignTrackedAccessors");FB=Object.prototype,HB=new Proxy({},{get:GB}),kB=new Proxy({},{get:GB,set:Jee});o(GB,"getProxiedProperty");o(Jee,"setProxiedProperty");o(EI,"trackObject");cl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Km(cl,{},!0);o(Z_,"collapseData");Xee=Object.prototype.hasOwnProperty;o(ll,"updateAndFreeze");o(J_,"hasChanges");al=Symbol.for("has-array-changes"),X_=class extends Array{static{o(this,"TrackedArray")}#e;[al];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[al]=!0,super.splice(...t)}push(...t){return this[al]=!0,super.push(...t)}pop(){return this[al]=!0,super.pop()}unshift(...t){return this[al]=!0,super.unshift(...t)}shift(){return this[al]=!0,super.shift()}};X_.prototype.constructor=Array;Vm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var jB={};Oe(jB,{ResourceBridge:()=>TI});function RI({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 qB(e,t){let r=Gi(e),n=RI(e,r);if(!r)throw new ci.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;Ft(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Z_(d)}catch(f){d={message:(0,zB.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Gi(e){let t=e.database||e.schema||ete,r=it()[t];if(!r)throw(0,ci.handleHDBError)(new Error,Zee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function $B(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*VB(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var KB,eg,ci,YB,gI,SI,WB,zB,Zee,ete,tte,rte,TI,QB=le(()=>{KB=w(BB()),eg=w(Vu()),ci=w(_e());Me();YB=w(Lm());k();gI=w(Co()),SI=w(oi()),WB=w(ie());Bc();_I();zB=w(Q()),{HDB_ERROR_MSGS:Zee}=ci.hdbErrors,ete="data",tte=1e4,rte=10,TI=class extends KB.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let a of t.conditions||[])a?.attribute!==void 0&&(a.search_attribute=a.attribute),a?.comparator!==void 0&&(a.search_type=a.comparator),a?.value!==void 0&&(a.search_value=a.value);let r=(0,eg.default)(t,"conditions");if(r)throw(0,ci.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Gi(t);if(!n)throw new ci.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(a){if("conditions"in a&&a.conditions)return a.conditions=a.conditions.map(i),a;{let c=a;return{attribute:c.search_attribute??c.attribute,comparator:c.search_type??c.comparator,value:c.search_value!==void 0?c.search_value:c.value}}}return o(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:RI(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ci.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Gi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Gi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Gi(t).dropTable()}createSchema(t){return Wu({database:t.schema,table:null}),gI.signalSchemaChange(new SI.SchemaEventMsg(process.pid,q.CREATE_SCHEMA,t.schema))}async dropSchema(t){await yI(t.schema),gI.signalSchemaChange(new SI.SchemaEventMsg(process.pid,q.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,YB.default)(t),s,i=it()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),Ft(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Z_(m));for(let h in d)if(Object.prototype.hasOwnProperty.call(d,h)){let p=d[h];if(typeof p=="function")try{let _=p([[m]]);Array.isArray(_)&&(p=_[0].func_val,d[h]=p)}catch(_){throw _.message+="Trying to set key "+h+" on object"+JSON.stringify(d),_}}if(m)for(let h in m)Object.prototype.hasOwnProperty.call(d,h)||(d[h]=m[h]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=it()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Ft(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return $B(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=it()[t.schema][t.table];if(!r.createdTimeProperty)throw new ci.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:UE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,WB.asyncSetTimeout)(rte),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%tte===0&&await u();return l.length>0&&await u(),s?$B(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,eg.default)(t,"hashes");if(r)throw r;return qB(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of qB(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&tA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=t.attribute),t.value!==void 0&&(t.search_value=t.value);let n=(0,eg.default)(t,"value");if(n)throw n;let s=Gi(t);if(!s)throw new ci.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===UE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:RI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Gi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Gi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Gi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Gi(t),n={};switch(t.search_type){case xE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case xE.USERNAME:{let s=t.search_values;for await(let i of VB(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return VB(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(RI,"getSelect");o(qB,"getRecords");o(Gi,"getTable");o($B,"createDeleteResponse");o(VB,"groupRecordsInHistory")});var Jn=M((_Pe,JB)=>{"use strict";var{ResourceBridge:nte}=(QB(),v(jB)),ste=ae();ste.initSync();var tg;function ite(){return tg||(tg=new nte,tg)}o(ite,"getBridge");JB.exports=ite()});var tF=M((SPe,eF)=>{"use strict";var XB=require("lodash"),Ym=require("mathjs"),ote=require("jsonata"),ZB=ie();eF.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?XB.uniqWith(e,XB.isEqual):e,"distinct_array"),searchJSON:ate,mad:Wm.bind(null,Ym.mad),mean:Wm.bind(null,Ym.mean),mode:Wm.bind(null,Ym.mode),prod:Wm.bind(null,Ym.prod),median:Wm.bind(null,Ym.median)};function Wm(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Wm,"aggregateFunction");function ate(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(ZB.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ZB.isEmpty(this.__ala__.res[r])){let n=ote(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(ate,"searchJSON")});var nF=M((RPe,rF)=>{"use strict";var lr=require("moment"),AI="YYYY-MM-DDTHH:mm:ss.SSSZZ";lr.suppressDeprecationWarnings=!0;rF.exports={current_date:o(()=>lr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>lr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return lr(e).utc().format("YYYY");case"month":return lr(e).utc().format("MM");case"day":return lr(e).utc().format("DD");case"hour":return lr(e).utc().format("HH");case"minute":return lr(e).utc().format("mm");case"second":return lr(e).utc().format("ss");case"millisecond":return lr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>lr(e).utc().format(AI),"date"),date_format:o((e,t)=>lr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>lr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>lr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=lr(e).utc(),s=lr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>lr().utc().valueOf(),"now"),get_server_time:o(()=>lr().format(AI),"get_server_time"),offset_utc:o((e,t)=>lr(e).utc().utcOffset(t).format(AI),"offset_utc")}});var aF=M((APe,oF)=>{"use strict";var cte=require("@turf/area"),lte=require("@turf/length"),ute=require("@turf/circle"),dte=require("@turf/difference"),fte=require("@turf/distance"),mte=require("@turf/boolean-contains"),hte=require("@turf/boolean-equal"),pte=require("@turf/boolean-disjoint"),Ete=require("@turf/helpers"),sF=(k(),v(Y)),Ye=ie(),Do=Q();oF.exports={geoArea:_te,geoLength:gte,geoCircle:Ste,geoDifference:Tte,geoDistance:iF,geoNear:Rte,geoContains:yte,geoEqual:Ate,geoCrosses:bte,geoConvert:Ite};function _te(e){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return cte.default(e)}catch(t){return Do.trace(t,e),NaN}}o(_te,"geoArea");function gte(e,t){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return lte.default(e,{units:t||"kilometers"})}catch(r){return Do.trace(r,e),NaN}}o(gte,"geoLength");function Ste(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return ute.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(Ste,"geoCircle");function Tte(e,t){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return dte(e,t)}catch(r){return Do.trace(r,e,t),NaN}}o(Tte,"geoDifference");function iF(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return fte.default(e,t,{units:r||"kilometers"})}catch(n){return Do.trace(n,e,t),NaN}}o(iF,"geoDistance");function Rte(e,t,r,n){if(Ye.isEmpty(e)||Ye.isEmpty(t))return!1;if(Ye.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iF(e,t,n)<=r}catch(s){return Do.trace(s,e,t),!1}}o(Rte,"geoNear");function yte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return mte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(yte,"geoContains");function Ate(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return hte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(Ate,"geoEqual");function bte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return!pte.default(e,t)}catch(r){return Do.trace(r,e,t),!1}}o(bte,"geoCrosses");function Ite(e,t,r){if(Ye.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ye.isEmpty(t))throw new Error("geo_type is required");if(Ye.isEmpty(sF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(sF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ye.autoCastJSON(e)),Ete[t](e,r)}o(Ite,"geoConvert")});var rg=M((IPe,cF)=>{var ul=tF(),Xn=nF(),qi=aF();cF.exports=e=>{e.aggr.mad=e.aggr.MAD=ul.mad,e.aggr.mean=e.aggr.MEAN=ul.mean,e.aggr.mode=e.aggr.MODE=ul.mode,e.aggr.prod=e.aggr.PROD=ul.prod,e.aggr.median=e.aggr.MEDIAN=ul.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ul.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ul.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Xn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Xn.current_time,e.fn.extract=e.fn.EXTRACT=Xn.extract,e.fn.date=e.fn.DATE=Xn.date,e.fn.date_format=e.fn.DATE_FORMAT=Xn.date_format,e.fn.date_add=e.fn.DATE_ADD=Xn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Xn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Xn.date_diff,e.fn.now=e.fn.NOW=Xn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Xn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Xn.get_server_time,e.fn.getdate=e.fn.GETDATE=Xn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Xn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=qi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qi.geoNear}});var fF=M((NPe,dF)=>{"use strict";var zm=require("lodash"),Dn=require("alasql");Dn.options.cache=!1;var Nte=rg(),lF=require("clone"),ng=require("recursive-iterator"),He=Q(),Xe=ie(),zu=Jn(),wte=(k(),v(Y)),{hdbErrors:Ote}=_e(),{getDatabases:uF}=(Me(),v(_t)),Cte="IS NULL",li="There was a problem performing this search. Please check the logs and try again.";Nte(Dn);var bI=class{static{o(this,"SQLSearch")}constructor(t,r){if(Xe.isEmpty(t))throw He.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Xe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Xe.isEmptyOrZeroLength(n))return He.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw He.error("Error thrown from checkEmptySQL in SQLSearch class method search."),He.error(n),new Error(li)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw He.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),He.error(n),new Error(li)}if(Object.keys(this.data).length===0)return He.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw He.error("Error thrown from processJoins in SQLSearch class method search."),He.error(n),new Error(li)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw He.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),He.error(n),new Error(li)}try{return t=await this._finalSQL(),t}catch(n){throw He.error("Error thrown from finalSQL in SQLSearch class method search."),He.error(n),new Error(li)}}_getColumns(){let t=new ng(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(lF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=zm.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=uF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(Xe.isEmpty(this.statement.where)){He.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ng(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Xe.isEmpty(r)&&r.right)if(Xe.isNotEmptyAndHasValue(r.right.value)){let n=Xe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Dn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Xe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Dn.yy.LogicValue({value:i}):n instanceof Dn.yy.StringValue&&Xe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Dn.yy.NumValue({value:i}))});if(t){He.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ng(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Xe.isEmpty(wte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Xe.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(Xe.isEmptyOrZeroLength(r.left.columnid)||Xe.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Xe.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!Xe.isEmpty(r.right.value)||!Xe.isEmpty(r.left.value)?n.add(Xe.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from)&&Xe.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&zm.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Xe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Xe.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&!Xe.isEmptyOrZeroLength(this.columns.columns))return t;if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Dn.promise(r)}catch(r){throw He.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),He.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(lF(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Xe.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Cte)>-1&&this.tables.forEach(s=>{let i={columnid:uF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=zm.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!Xe.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await zu.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),He.error(d),new Error(li)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.search_value=d;let m=await zu.getDataByValue(f);for(let[h,p]of m)this.data[i].__mergedData[h]?this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]):(this.data[i].__mergedData[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(d){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),He.error(d),new Error(li)}else if(!Xe.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let h=d[f];c.search_attribute=h.attribute,c.search_value=h.search_value;let p=await zu.getDataByValue(c,h.operation);if(l)for(let[_]of p)this.data[i].__mergedData[_]||(this.data[i].__mergedData[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,g]of p)this.data[i].__mergedData[_]?this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]):(this.data[i].__mergedData[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,_))}}catch(d){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),He.error(d),new Error(li)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await zu.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),He.error(d),new Error(li)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Dn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Dn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Dn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Dn.yy.FuncValue:new Dn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let p=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(p+=" ON "+h.on.toString()),i.push(p),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(h=>{let p=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hashName,_=h.as?h.as_orig:h.tableid_orig;a.push({key:`'${_}.${p}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${p}\` AS "${_}.${p}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,p=this._convertColumnsToIndexes(h,s);m=await Dn.promise(p,t),t=null}catch(h){throw He.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),He.error(h),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let h=0,p=m.length;h<p;h++){let _=m[h];a.forEach(g=>{_[g.key]!==null&&_[g.key]!==void 0&&g.keys.add(_[g.key])})}a.forEach(h=>{let p=Object.keys(this.data[`${h.schema}_${h.table}`].__mergedData),_=zm.difference(p,[...h.keys].map(g=>g.toString()));for(let g=0,y=_.length;g<y;g++){let T=_[g];delete this.data[`${h.schema}_${h.table}`].__mergedData[T]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new ng(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=zm.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw He.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),He.error(i),new Error(li)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await zu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],h=l.get(m);for(let p=0;p<u;p++){let _=s.columns[p],g=h[_]===void 0?null:h[_];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getData."),He.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();He.trace(`Final SQL: ${s}`),n=await Dn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),He.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw He.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),He.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return He.error(Ote.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),He.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let a=await zu.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw He.error("There was an error when processing this SQL operation. Check your logs"),He.error(a),new Error(li)}}return Object.values(Object.values(this.data)[0].__mergedData)}};dF.exports=bI});var on=M((OPe,mF)=>{"use strict";var Pte=i0();mF.exports={searchByConditions:Dte,searchByHash:Mte,searchByValue:vte,search:Ute};var II=Jn(),{transformReq:NI}=ie(),Lte=fF();async function Dte(e){return NI(e),II.searchByConditions(e)}o(Dte,"searchByConditions");async function Mte(e){NI(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of II.searchByHash(e))r&&t.push(r);return t}o(Mte,"searchByHash");async function vte(e){NI(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of II.searchByValue(e))t.push(r);return t}o(vte,"searchByValue");function Ute(e,t){try{let r=new Pte(e);r.validate(),new Lte(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Ute,"search")});var $i=M((PPe,_F)=>{"use strict";var jm=require("crypto"),xte=ae(),{CONFIG_PARAMS:Bte}=(k(),v(Y)),pF="aes-256-cbc",Fte=32,Hte=16,wI=64,EF=32,kte=wI+EF,hF=new Map;_F.exports={encrypt:Gte,decrypt:qte,createNatsTableStreamName:$te};function Gte(e){let t=jm.randomBytes(Fte),r=jm.randomBytes(Hte),n=jm.createCipheriv(pF,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Gte,"encrypt");function qte(e){let t=e.substr(0,wI),r=e.substr(wI,EF),n=e.substr(kte,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=jm.createDecipheriv(pF,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(qte,"decrypt");function $te(e,t){let r=xte.get(Bte.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hF.get(r);return n||(n=jm.createHash("md5").update(r).digest("hex"),hF.set(r,n)),n}o($te,"createNatsTableStreamName")});var Ua=M((MPe,RF)=>{"use strict";var DPe=on(),Qm=Q(),{validateBySchema:gF}=dt(),dl=require("joi"),Vte=$i(),sg=ie(),{handleHDBError:ig,hdbErrors:Kte,ClientError:SF}=_e(),{HDB_ERROR_MSGS:og,HTTP_STATUS_CODES:OI}=Kte,TF=ae();TF.initSync();var{getDatabases:CI}=(Me(),v(_t)),Yte=require("fs-extra"),Wte=(k(),v(Y));RF.exports={describeAll:zte,describeTable:ag,describeSchema:jte};async function zte(e={}){try{let t=sg.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=CI(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let h in m)try{let p;if(t||s||r)p=await ag({schema:f,table:h,exactCount:u});else if(n&&n[f].describe&&n[f].tables[h].describe){let _=n[f].tables[h].attribute_permissions;p=await ag({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){Qm.error(p)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return Qm.error("Got an error in describeAll"),Qm.error(t),ig(new Error,og.DESCRIBE_ALL_ERR)}}o(zte,"describeAll");async function ag(e,t){sg.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=gF(e,dl.object({database:dl.string(),table:dl.string().required(),exact_count:dl.boolean().strict()}));if(i)throw new SF(i.message);let c=CI()[r];if(!c)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),OI.NOT_FOUND);let l=c[n];if(!l)throw ig(new Error,og.TABLE_NOT_FOUND(e.schema,e.table),OI.NOT_FOUND);function u(h){d.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(p=>({type:p.type,name:p.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let h={};s.forEach(p=>{p.describe&&(h[p.attribute_name]=!0)}),l.attributes.forEach(p=>{h[p.name]&&u(p)})}else l.attributes?.forEach(h=>u(h));let f;try{f=(await Yte.stat(l.primaryStore.env.path)).size}catch(h){Qm.warn("unable to get database size",h)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),TF.get(Wte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Vte.createNatsTableStreamName(m.schema,m.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=h.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=h.estimatedRange;let p=l.auditStore;if(p)for(let _ of p.getKeys({reverse:!0,limit:1}))m.last_updated_record=_[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let _ of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=_}catch(h){Qm.warn(`unable to stat table dbi due to ${h}`)}return m}o(ag,"descTable");async function jte(e){sg.transformReq(e);let t=gF(e,dl.object({database:dl.string(),exact_count:dl.boolean().strict()}));if(t)throw new SF(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=CI()[n];if(!i)throw ig(new Error,og.SCHEMA_NOT_FOUND(e.schema),OI.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),sg.isEmpty(l)||l.describe){let u=await ag({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(jte,"describeSchema")});var Mn=M((UPe,IF)=>{"use strict";var lg=Db(),Kr=ie(),Qte=require("util"),ug=Jn(),Jte=ii(),yF=Q(),{handleHDBError:fl,hdbErrors:Xte}=_e(),{HTTP_STATUS_CODES:ml}=Xte,Zte=Qte.promisify(Jte.getTableSchema),ere="updated",AF="inserted",bF="upserted";IF.exports={insert:rre,update:nre,upsert:sre,validation:tre,flush:ire};async function tre(e){if(Kr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Kr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Zte(e.schema,e.table),r=lg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Kr.isEmptyOrZeroLength(c[n]))throw yF.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Kr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw yF.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Kr.isEmpty(c[n])&&c[n]!==""&&s.has(Kr.autoCast(c[n]))&&(c.skip=!0),s.add(Kr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(tre,"validation");async function rre(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.createRecords(e);return cg(AF,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(rre,"insertData");async function nre(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.updateRecords(e);return Kr.isEmpty(n.existing_rows)?cg(ere,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):cg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(nre,"updateData");async function sre(e){if(e.operation!=="upsert")throw fl(new Error,"invalid operation, must be upsert",ml.INTERNAL_SERVER_ERROR);let t=lg(e);if(t)throw fl(new Error,t.message,ml.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw fl(new Error,r,ml.BAD_REQUEST);let n=await ug.upsertRecords(e);return cg(bF,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(sre,"upsertData");function cg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===AF?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===bF?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(cg,"returnObject");function ire(e){return Kr.transformReq(e),ug.flush(e.schema,e.table)}o(ire,"flush")});var LI=M((BPe,OF)=>{var ore=dt(),PI=require("joi"),{hdbTable:are,hdbDatabase:NF}=Hi(),wF={schema:NF,database:NF,table:are},cre={date:PI.date().iso().required()},lre={timestamp:PI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OF.exports=function(e,t){let r=t==="timestamp"?{...wF,...lre}:{...wF,...cre},n=PI.object(r);return ore.validateBySchema(e,n)}});var LF=M((FPe,PF)=>{var ure=dt(),DI=require("joi"),{hdbTable:dre,hdbDatabase:CF}=Hi(),fre=DI.object({schema:CF,database:CF,table:dre,hash_values:DI.array().required(),ids:DI.array()});PF.exports=function(e){return ure.validateBySchema(e,fre)}});var xI=M((HPe,DF)=>{"use strict";var MI=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},vI=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=a}},UI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};DF.exports={InsertObject:MI,NoSQLSeachObject:vI,DeleteResponseObject:UI}});var El=M((GPe,BF)=>{"use strict";var vF=LI(),mre=LF(),hl=ie(),MF=require("moment"),UF=Q(),{promisify:hre,callbackify:pre}=require("util"),pl=(k(),v(Y)),Ere=ii(),BI=hre(Ere.getTableSchema),FI=Jn(),{DeleteResponseObject:_re}=xI(),{handleHDBError:xa,hdbErrors:gre}=_e(),{HDB_ERROR_MSGS:dg,HTTP_STATUS_CODES:Ba}=gre,Sre="records successfully deleted",Tre=pre(xF);BF.exports={delete:Tre,deleteRecord:xF,deleteFilesBefore:Rre,deleteAuditLogsBefore:yre};async function Rre(e){let t=vF(e,"date");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),!MF(e.date,MF.ISO_8601).isValid())throw xa(new Error,dg.INVALID_DATE,Ba.BAD_REQUEST,pl.LOG_LEVELS.ERROR,dg.INVALID_DATE,!0);let n=hl.checkSchemaTableExist(e.schema,e.table);if(n)throw xa(new Error,n,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,n,!0);let s=await FI.deleteRecordsBefore(e);if(await BI(e.schema,e.table),UF.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Rre,"deleteFilesBefore");async function yre(e){let t=vF(e,"timestamp");if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),isNaN(e.timestamp))throw xa(new Error,dg.INVALID_VALUE("Timestamp"),Ba.BAD_REQUEST,pl.LOG_LEVELS.ERROR,dg.INVALID_VALUE("Timestamp"),!0);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,r,!0);let n=await FI.deleteAuditLogsBefore(e);return await BI(e.schema,e.table),UF.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(yre,"deleteAuditLogsBefore");async function xF(e){e.ids&&(e.hash_values=e.ids);let t=mre(e);if(t)throw xa(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);hl.transformReq(e);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw xa(new Error,r,Ba.NOT_FOUND,pl.LOG_LEVELS.ERROR,r,!0);try{await BI(e.schema,e.table);let n=await FI.deleteRecords(e);return hl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Sre}`),n}catch(n){if(n.message===pl.SEARCH_NOT_FOUND_MESSAGE){let s=new _re;return s.message=pl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(xF,"deleteRecord")});var fg={};Oe(fg,{HASH_FUNCTION:()=>xr,hash:()=>GI,validate:()=>qI});function HI(e=Xm){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Jm.randomBytes(e)).map(r=>t[r%t.length]).join("")}function GI(e,t=xr[HF?.toUpperCase()]??xr.SHA256){return kI[t](e)}function qI(e,t,r=xr[HF?.toUpperCase()]??xr.SHA256){return e?Are[r](e,t):!1}var Jm,ju,FF,HF,Xm,kF,xr,kI,Are,mg=le(()=>{Jm=w(require("node:crypto")),ju=w(require("argon2")),FF=w(ae());k();HF=(0,FF.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Xm=16,kF=9,xr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(HI,"generateSalt");kI={[xr.MD5]:(e,t=void 0)=>{t=t??HI(kF);let r=Jm.createHash(xr.MD5).update(e+t).digest("hex");return t+r},[xr.SHA256]:(e,t=void 0)=>{t=t??HI(Xm);let r=Jm.createHash(xr.SHA256).update(e+t).digest("hex");return t+r},[xr.ARGON2ID]:async e=>{let t=HI(Xm),r=await ju.hash(e,{type:ju.argon2id,salt:Buffer.from(t)});return t+r}},Are={[xr.MD5]:(e,t)=>{let r=e.slice(0,kF);return e===kI[xr.MD5](t,r)},[xr.SHA256]:(e,t)=>{let r=e.slice(0,Xm);return e===kI[xr.SHA256](t,r)},[xr.ARGON2ID]:async(e,t)=>await ju.verify(e.slice(Xm),t)};o(GI,"hash");o(qI,"validate")});var qF=M((KPe,GF)=>{var $I=dt(),an={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function bre(e){return an.password.presence=!0,an.username.presence=!0,an.role.presence=!0,an.active.presence=!0,$I.validateObject(e,an)}o(bre,"addUserValidation");function Ire(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,$I.validateObject(e,an)}o(Ire,"alterUserValidation");function Nre(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,$I.validateObject(e,an)}o(Nre,"dropUserValidation");GF.exports={addUserValidation:bre,alterUserValidation:Ire,dropUserValidation:Nre}});var Ot=M((zPe,VF)=>{"use strict";var{platform:WPe}=require("os"),wre="nats-server.zip",VI="nats-server",Ore=process.platform==="win32"?`${VI}.exe`:VI,Cre=/^[^\s.,*>]+$/,$F="__request__",Pre=o(e=>`${e}.${$F}`,"REQUEST_SUBJECT"),Lre={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Dre={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Mre={HUB:"hub.pid",LEAF:"leaf.pid"},vre={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Ure={SUCCESS:"success",ERROR:"error"},xre={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Bre={TXN:"txn",MSGID:"msgid"},Qu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Fre={[Qu.ERR]:1,[Qu.WRN]:2,[Qu.INF]:3,[Qu.DBG]:4,[Qu.TRC]:5},Hre={debug:"-D",trace:"-DVV"};VF.exports={NATS_SERVER_ZIP:wre,NATS_SERVER_NAME:VI,NATS_BINARY_NAME:Ore,PID_FILES:Mre,NATS_CONFIG_FILES:Dre,SERVER_SUFFIX:vre,NATS_TERM_CONSTRAINTS_RX:Cre,REQUEST_SUFFIX:$F,UPDATE_REMOTE_RESPONSE_STATUSES:Ure,CLUSTER_STATUS_STATUSES:xre,REQUEST_SUBJECT:Pre,SUBJECT_PREFIXES:Bre,MSG_HEADERS:Lre,LOG_LEVELS:Qu,LOG_LEVEL_FLAGS:Hre,LOG_LEVEL_HIERARCHY:Fre}});var KI=M(cn=>{"use strict";var kre={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
12
12
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
13
|
-
`)},Fre="certificate.pem",Hre="privateKey.pem",kre="caCertificate.pem",Gre="natsCertificate.pem",qre="natsCaCertificate.pem",Ct={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},$re={tls_certificate:Ct.SERVER,tlsCertificateAuthority:Ct.CA,customFunctions_tls_certificate:Ct.SERVER,customFunctionsTlsCertificateAuthority:Ct.CA,operationsApi_tls_certificate:Ct["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ct["OPERATIONS-CA"]},Vre={[Ct.SERVER]:2,[Ct.DEFAULT]:1},Kre={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Yre={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Wre={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},zre={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},jre={[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=Fre;an.PRIVATEKEY_PEM_NAME=Hre;an.CA_PEM_NAME=kre;an.CERT_NAME=Ct;an.CERT_CONFIG_NAME_MAP=$re;an.CERT_PREFERENCE_APP=Vre;an.CERT_PREFERENCE_OPS=Kre;an.CERT_PREFERENCE_REP=Yre;an.CA_CERT_PREFERENCE_REP=Wre;an.CA_CERT_PREFERENCE_OPS=zre;an.CA_CERT_PREFERENCE_APP=jre;an.CERTIFICATE_VALUES=Bre;an.NATS_CERTIFICATE_PEM_NAME=Gre;an.NATS_CA_PEM_NAME=qre});var VI=M((jPe,YF)=>{"use strict";var VF=require("fs-extra"),Re=require("joi"),Qre=require("os"),{boolean:ke,string:Rt,number:ur,array:Fa}=Re.types(),{totalmem:GF}=require("os"),_l=require("path"),Jre=Q(),$I=ie(),zPe=qI(),qF=(k(),v(W)),Xre=ut(),$F="log",Zre="components",ene="Invalid logging.rotation.maxSize unit. Available units are G, M or K",tne="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",rne="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",nne="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",sne="rootPath config parameter is undefined",Mn=Re.alternatives([ur.min(0),Rt]).optional().empty(null),hg=Re.alternatives([Fa.items(Rt,{host:Rt.required(),port:Mn},{hostname:Rt.required(),port:Mn}).empty(null),Fa.items(Rt)]),Vi,KF=!1;YF.exports={configValidator:ine,routesValidator:dne,routeConstraints:hg};function ine(e,t=!1){if(KF=t,Vi=e.rootPath,$I.isEmpty(Vi))throw sne;let r=ke.optional(),n=ur.min(0).max(1e3).empty(null).default(une),s=Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zm),i=Rt.optional().empty(null),a=Rt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Re.string().empty(null).default(Zm),l=Re.custom(ane).empty(null).default(Zm),u=e.clustering?.enabled,d=Re.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Re.object({enabled:r,hubServer:Re.object({cluster:Re.object({name:Re.required().empty(null),network:Re.object({port:Mn,routes:hg}).required()}).required(),leafNodes:Re.object({network:Re.object({port:Mn}).required()}).required(),network:Re.object({port:Mn}).required()}).required(),leafServer:Re.object({network:Re.object({port:Mn,routes:hg}).required(),streams:Re.object({maxAge:ur.min(120).allow(null).optional(),maxBytes:ur.min(1).allow(null).optional(),maxMsgs:ur.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Re.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:ke.optional(),databaseLevel:ke.optional(),tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.required(),verify:ke.optional()}),user:Rt.optional().empty(null)}).optional():f=Re.object({enabled:r,tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.optional()})}).optional(),Re.object({authentication:Re.alternatives(Re.object({authorizeLocal:ke,cacheTTL:ur.required(),cookie:Re.object({domains:Fa.items(Rt).optional(),expires:Rt.optional()}),enableSessions:ke,hashFunction:Rt.valid("md5","sha256","argon2id").optional().empty(null)}),ke).optional(),analytics:Re.object({aggregatePeriod:ur,replicate:ke.optional()}),replication:Re.object({hostname:Re.alternatives(Rt,ur).optional().empty(null),url:Rt.optional().empty(null),port:Mn,securePort:Mn,routes:Fa.optional().empty(null),databases:Re.alternatives(Rt,Fa),enableRootCAs:ke.optional(),copyTablesToCatchUp:ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Re.object({enabled:r}).required(),logging:Re.object({auditAuthEvents:Re.object({logFailed:ke,logSuccessful:ke}),file:ke.required(),level:Re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Re.object({enabled:ke.optional(),compress:ke.optional(),interval:Rt.custom(lne).optional().empty(null),maxSize:Rt.custom(cne).optional().empty(null),path:Rt.optional().empty(null).default(Zm)}).required(),root:s,stdStreams:ke.required(),auditLog:ke.required()}).required(),operationsApi:Re.object({network:Re.object({cors:ke.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),keepAliveTimeout:ur.min(1).optional(),port:Mn,domainSocket:Re.optional().empty("hdb/operations-server").default(Zm),securePort:Mn,timeout:ur.min(1).optional()}).optional(),tls:Re.alternatives([Re.array().items(d),d])}).required(),rootPath:Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Re.object({network:Re.object({port:Mn,securePort:Mn,mtls:Re.alternatives([ke.optional(),Re.object({user:Rt.optional(),certificateAuthority:i,required:ke.optional()})])}).required(),webSocket:ke.optional(),requireAuthentication:ke.optional()}),http:Re.object({compressionThreshold:ur.optional(),cors:ke.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),port:Mn,securePort:Mn,maxHeaderSize:ur.optional(),mtls:Re.alternatives([ke.optional(),Re.object({user:Rt.optional(),certificateAuthority:i,required:ke.optional()})]),threadRange:Re.alternatives([Fa.optional(),Rt.optional()])}).required(),threads:Re.alternatives(n.optional(),Re.object({count:n.optional(),debug:Re.alternatives(ke.optional(),Re.object({startingPort:ur.min(1).optional(),host:Rt.optional(),waitForDebugger:ke.optional()})),maxHeapMemory:ur.min(0).optional()})),storage:Re.object({writeAsync:ke.required(),overlappingSync:ke.optional(),caching:ke.optional(),compression:Re.alternatives([ke.optional(),Re.object({dictionary:Rt.optional(),threshold:ur.optional()})]),compactOnStart:ke.optional(),compactOnStartKeepBackup:ke.optional(),noReadAhead:ke.optional(),path:l,prefetchWrites:ke.optional(),maxFreeSpaceToLoad:ur.optional(),maxFreeSpaceToRetain:ur.optional()}).required(),ignoreScripts:ke.optional(),tls:Re.alternatives([Re.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(ine,"configValidator");function one(e){return KF||VF.existsSync(e)?null:`Specified path ${e} does not exist.`}o(one,"doesPathExist");function ane(e,t){Re.assert(e,Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=one(e);if(r)return t.message(r)}o(ane,"validatePath");function cne(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ene);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(rne):e}o(cne,"validateRotationMaxSize");function lne(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(tne);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(nne):e}o(lne,"validateRotationInterval");function une(e,t){let r=t.state.path.join("."),n=Qre.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||GF();return i=Math.round(Math.min(i,GF())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Jre.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(une,"setDefaultThreads");function Zm(e,t){let r=t.state.path.join(".");if(!$I.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if($I.isEmpty(Vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return _l.join(Vi,Zre);case"logging.root":return _l.join(Vi,$F);case"clustering.leafServer.streams.path":return _l.join(Vi,"clustering","leaf");case"storage.path":let n=_l.join(Vi,qF.LEGACY_DATABASES_DIR_NAME);return VF.existsSync(n)?n:_l.join(Vi,qF.DATABASES_DIR_NAME);case"logging.rotation.path":return _l.join(Vi,$F);case"operationsApi.network.domainSocket":return r==null?null:_l.join(Vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(Zm,"setDefaultRoot");function dne(e){let t=Re.object({routes:hg});return Xre.validateBySchema({routes:e},t)}o(dne,"routesValidator")});var wt=M(er=>{"use strict";var ws=(k(),v(W)),Ar=ie(),dr=Q(),{configValidator:fne,routesValidator:WF}=VI(),cn=require("fs-extra"),jF=require("yaml"),es=require("path"),mne=require("is-number"),QF=require("properties-reader"),hne=require("lodash"),{handleHDBError:pne}=ge(),{HTTP_STATUS_CODES:Ene,HDB_ERROR_MSGS:Ju}=tn(),{server:_ne}=(Dr(),v($f)),{PACKAGE_ROOT:JF}=bt(),{DATABASES_PARAM_CONFIG:eh,CONFIG_PARAMS:Zn,CONFIG_PARAM_MAP:ui}=ws,gne="Unable to get config value because config is uninitialized",Sne="Config successfully initialized",Tne="Error backing up config file",Rne="Empty parameter sent to getConfigValue",XF=es.join(JF,"config","yaml",ws.HDB_DEFAULT_CONFIG_FILE),yne=es.join(JF,"config","yaml","defaultNatsConfig.yaml"),Ane="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",zF={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},pg,kt,Eg;er.createConfigFile=bne;er.getDefaultConfig=Ine;er.getConfigValue=eH;er.initConfig=_g;er.flattenConfig=Xu;er.updateConfigValue=tH;er.updateConfigObject=wne;er.getConfiguration=Pne;er.setConfiguration=Lne;er.readConfigFile=zI;er.getClusteringRoutes=Dne;er.initOldConfig=rH;er.getConfigFromFile=Mne;er.getConfigFilePath=gl;er.addConfig=vne;er.deleteConfigFromFile=Une;er.getConfigObj=xne;er.resolvePath=KI;er.getFlatConfigObj=Bne;function KI(e){if(e?.startsWith("~/"))return es.join(Ar.getHomeDir(),e.slice(1));let t=oe();try{return es.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(KI,"resolvePath");function bne(e,t=!1){let r=Ha(XF);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=jF.parseDocument(cn.readFileSync(yne,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}pg=Xu(r.toJSON());let n;for(let c in e){let l=ui[c.toLowerCase()];if(l===Zn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=YI(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){dr.error(f)}}}n&&ZF(r,n),WI(r,t);let s=r.toJSON();kt=Xu(s);let i=r.getIn(["rootPath"]),a=es.join(i,ws.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),dr.trace(`Config file written to ${a}`)}o(bne,"createConfigFile");function ZF(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ar.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(eh.TABLES))for(let i in n[s][eh.TABLES])for(let a in n[s][eh.TABLES][i]){let c=n[s][eh.TABLES][i][a],l=[Zn.DATABASES,s,eh.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Zn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){dr.error("Error parsing schemas CLI/env config arguments",n)}}o(ZF,"setSchemasConfig");function Ine(e){if(pg===void 0){let r=Ha(XF);pg=Xu(r.toJSON())}let t=ui[e.toLowerCase()];if(t!==void 0)return pg[t.toLowerCase()]}o(Ine,"getDefaultConfig");function eH(e){if(e==null){dr.info(Rne);return}if(kt===void 0){dr.trace(gne);return}let t=ui[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}o(eH,"getConfigValue");function gl(e=Ar.getPropsFilePath()){let t=Ar.getEnvCliRootPath();if(t)return KI(es.join(t,ws.HDB_CONFIG_FILE));let r=QF(e);return KI(r.get(ws.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(gl,"getConfigFilePath");function _g(e=!1){if(kt===void 0||e){let t;if(!Ar.noBootFile()){t=Ar.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw dr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=gl(t),n;if(r.includes("config/settings.js"))try{rH(r);return}catch(i){if(i.code!==ws.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ha(r)}catch(i){if(i.code===ws.NODE_ERROR_CODES.ENOENT){dr.trace(`HarperDB config file not found at ${r}.
|
|
14
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw dr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Nne(n,r),WI(n);let s=n.toJSON();if(_ne.config=s,kt=Xu(s),kt.logging_rotation_rotate)for(let i in zF)kt[i]&&dr.error(`Config ${zF[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);dr.trace(Sne)}}o(_g,"initConfig");function Nne(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],es.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],es.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(dr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(Nne,"checkForUpdatedConfig");function WI(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Ju.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Ju.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=fne(r,t);if(n.error)throw Ju.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(WI,"validateConfig");function wne(e,t){kt===void 0&&(kt={});let r=ui[e.toLowerCase()];if(r===void 0){dr.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}o(wne,"updateConfigObject");function tH(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&_g();let a=eH(ui.hdb_root),c=es.join(a,ws.HDB_CONFIG_FILE),l=Ha(c),u;if(r&&kt){let m=!1;for(let h in r)if(r[h]!=kt[h.toLowerCase()]){m=!0;break}if(!m){dr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Zn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ui[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=YI(m,t);l.setIn([...h],p)}else for(let m in r){let h=ui[m.toLowerCase()];if(h===Zn.HTTP_SECUREPORT&&r[m]===kt[Zn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===Zn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[Zn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===Zn.DATABASES){u=r[m];continue}if(h?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!h&&(m.endsWith("_package")||m.endsWith("_port"))&&(h=m),h!==void 0){let p=h.split("_"),_=ws.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=YI(h,r[m]);h==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(R){dr.error(R)}}}u&&ZF(l,u),WI(l);let d=l.getIn(["rootPath"]),f=es.join(d,ws.HDB_CONFIG_FILE);if(n===!0&&One(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(kt=Xu(l.toJSON())),dr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(tH,"updateConfigValue");function One(e,t){try{let r=es.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ws.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),dr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){dr.error(Tne),dr.error(r)}}o(One,"backupConfigFile");var Cne=["databases"];function Xu(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),Eg=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!Cne.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Zn[l.toUpperCase()]&&ui[l]&&(s[ui[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Xu,"flattenConfig");function YI(e,t){if(e===Zn.CLUSTERING_NODENAME||e===Zn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(mne(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ar.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Ar.autoCast(t)}o(YI,"castConfigValue");function Pne(){let e=Ar.getPropsFilePath(),t=gl(e);return Ha(t).toJSON()}o(Pne,"getConfiguration");async function Lne(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return tH(void 0,void 0,s,!0),Ane}catch(i){throw typeof i=="string"||i instanceof String?pne(i,i,Ene.BAD_REQUEST,void 0,void 0,!0):i}}o(Lne,"setConfiguration");function zI(){let e=Ar.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ar.noBootFile())throw dr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=gl(e);return Ha(t).toJSON()}o(zI,"readConfigFile");function Ha(e){return jF.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ha,"parseYamlDoc");function Dne(){let e=zI(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ar.isEmptyOrZeroLength(t)?[]:t;let r=WF(t);if(r)throw Ju.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ar.isEmptyOrZeroLength(n)?[]:n;let s=WF(n);if(s)throw Ju.CONFIG_VALIDATION(s.message);if(!Ar.isEmptyOrZeroLength(n)&&!Ar.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Ar.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ju.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Dne,"getClusteringRoutes");function rH(e){let t=QF(e);kt={};for(let r in ui){let n=t.get(r.toUpperCase());if(Ar.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ui[r].toLowerCase();s===Zn.LOGGING_ROOT?kt[s]=es.dirname(n):kt[s]=n}return kt}o(rH,"initOldConfig");function Mne(e){let t=zI();return hne.get(t,e.replaceAll("_","."))}o(Mne,"getConfigFromFile");async function vne(e,t){let r=Ha(gl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await cn.writeFile(gl(),String(r))}o(vne,"addConfig");function Une(e){let t=gl(Ar.getPropsFilePath()),r=Ha(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=es.join(n,ws.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(Une,"deleteConfigFromFile");function xne(){return Eg||(_g(),Eg)}o(xne,"getConfigObj");function Bne(){return kt||_g(),kt}o(Bne,"getFlatConfigObj")});var ts=M((ZPe,Br)=>{"use strict";var iH="username is required",oH="nothing to update, must supply active, role or password to update",aH="password cannot be an empty string",cH="If role is specified, it cannot be empty.",lH="active must be true or false";Br.exports.addUser=Yne;Br.exports.alterUser=Wne;Br.exports.dropUser=jne;Br.exports.getSuperUser=ese;Br.exports.userInfo=Qne;Br.exports.listUsers=Sg;Br.exports.listUsersExternal=Jne;Br.exports.setUsersWithRolesCache=Sl;Br.exports.findAndValidateUser=nN;Br.exports.getClusterUser=tse;Br.exports.getUsersWithRolesCache=Zne;Br.exports.USERNAME_REQUIRED=iH;Br.exports.ALTERUSER_NOTHING_TO_UPDATE=oH;Br.exports.EMPTY_PASSWORD=aH;Br.exports.EMPTY_ROLE=cH;Br.exports.ACTIVE_BOOLEAN=lH;var uH=Dn(),Fne=El(),th=(mg(),v(fg)),dH=FF(),rh=sn(),ZI=Co(),Ki=ie(),fH=require("validate.js"),eN=Q(),{promisify:Hne}=require("util"),tN=$i(),QI=(k(),v(W)),nH=Ot(),kne=wt(),Gne=oe(),qne=No(),{hdbErrors:$ne,ClientError:di}=ge(),{HTTP_STATUS_CODES:Mo,AUTHENTICATION_ERROR_MSGS:jI,HDB_ERROR_MSGS:Zu}=$ne,{UserEventMsg:rN}=oi(),JI=require("lodash"),{server:gg}=(Dr(),v($f)),Vne=Q();gg.getUser=(e,t)=>nN(e,t,t!=null);gg.authenticateUser=(e,t)=>nN(e,t);var mH={username:!0,active:!0,role:!0,password:!0},sH=new Map,Kne=Hne(Fne.delete),XI=Gne.get(QI.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??th.HASH_FUNCTION.SHA256,Yi;async function Yne(e){let t=fH.cleanAttributes(e,mH),r=dH.addUserValidation(t);if(r)throw new di(r.message);let n=await rh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new di(Zu.ROLE_NAME_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Zu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=tN.encrypt(t.password)),t.password=await th.hash(t.password,XI),t.hash_function=XI,t.role=n[0].id;let s=await uH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(eN.debug(s),await Sl(),s.skipped_hashes.length===1)throw new di(Zu.USER_ALREADY_EXISTS(t.username),Mo.CONFLICT);return ZI.signalUserChange(new rN(process.pid)),`${t.username} successfully added`}o(Yne,"addUser");async function Wne(e){let t=fH.cleanAttributes(e,mH);if(Ki.isEmptyOrZeroLength(t.username))throw new Error(iH);if(Ki.isEmptyOrZeroLength(t.password)&&Ki.isEmptyOrZeroLength(t.role)&&Ki.isEmptyOrZeroLength(t.active))throw new Error(oH);if(!Ki.isEmpty(t.password)&&Ki.isEmptyOrZeroLength(t.password.trim()))throw new Error(aH);if(!Ki.isEmpty(t.active)&&!Ki.isBoolean(t.active))throw new Error(lH);if(!Ki.isEmpty(t.password)&&!Ki.isEmptyOrZeroLength(t.password.trim())&&(zne(t.username)&&(t.hash=tN.encrypt(t.password)),t.password=await th.hash(t.password,XI)),t.role==="")throw new Error(cH);if(t.role){let n=await rh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new di(Zu.ALTER_USER_ROLE_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Zu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);t.role=n[0].id}let r=await uH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Sl(),ZI.signalUserChange(new rN(process.pid)),r}o(Wne,"alterUser");function zne(e){let t=!1,r=Yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(zne,"isClusterUser");async function jne(e){let t=dH.dropUserValidation(e);if(t)throw new di(t.message);if(Yi.get(e.username)===void 0)throw new di(Zu.USER_NOT_EXIST(e.username),Mo.NOT_FOUND);let r=await Kne({table:"hdb_user",schema:"system",hash_values:[e.username]});return eN.debug(r),await Sl(),ZI.signalUserChange(new rN(process.pid)),`${e.username} successfully deleted`}o(jne,"dropUser");async function Qne(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=JI.cloneDeep(e.hdb_user);let r=await rh.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(Qne,"userInfo");async function Jne(){let e=await Sg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Jne,"listUsersExternal");async function Sg(){let e=await rh.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=JI.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await rh.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=JI.cloneDeep(s),s.role=t[s.role],Xne(s.role),n.set(s.username,s);return n}o(Sg,"listUsers");function Xne(e){if(!e){eN.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(qne)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Xne,"appendSystemTablesToRole");async function Sl(e=void 0){e?Yi=e:Yi=await Sg()}o(Sl,"setUsersWithRolesCache");async function Zne(){return Yi||await Sl(),Yi}o(Zne,"getUsersWithRolesCache");async function nN(e,t,r=!0){Yi||await Sl();let n=Yi.get(e);if(!n){if(!r)return{username:e};throw new di(jI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}if(n&&!n.active)throw new di(jI.USER_INACTIVE,Mo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(sH.get(t)===n.password)return s;{let i=th.validate(n.password,t,n.hash_function||th.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)sH.set(t,n.password);else throw new di(jI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}}return s}o(nN,"findAndValidateUser");async function ese(){Yi||await Sl();for(let[,e]of Yi)if(e.role.role==="super_user")return e}o(ese,"getSuperUser");async function tse(){let e=await Sg(),t=kne.getConfigFromFile(QI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==QI.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=tN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+nH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+nH.SERVER_SUFFIX.ADMIN,r}o(tse,"getClusterUser");var hH=[];gg.invalidateUser=function(e){for(let t of hH)try{t(e)}catch(r){Vne.error("Error invalidating user",r)}};gg.onInvalidatedUser=function(e){hH.push(e)}});var sh=M((nLe,gH)=>{"use strict";var Tl=Q(),rs=(k(),v(W)),rse=HU(),tLe=ii(),rLe=Ua(),nse=ts(),{validateEvent:pH}=oi(),nh=Jn(),sse=require("process"),{resetDatabases:ise}=(Me(),v(Et)),ose={[rs.ITC_EVENT_TYPES.SCHEMA]:ase,[rs.ITC_EVENT_TYPES.USER]:_H};async function ase(e){let t=pH(e);if(t){Tl.error(t);return}Tl.trace("ITC schemaHandler received schema event:",e),await rse(e.message),await cse(e.message)}o(ase,"schemaHandler");async function cse(e){try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=ise();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Tl.error(t)}}o(cse,"syncSchemaMetadata");var EH=[];async function _H(e){try{try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Tl.warn(r)}let t=pH(e);if(t){Tl.error(t);return}Tl.trace(`ITC userHandler ${rs.HDB_ITC_CLIENT_PREFIX}${sse.pid} received user event:`,e),await nse.setUsersWithRolesCache();for(let r of EH)r()}catch(t){Tl.error(t)}}o(_H,"userHandler");_H.addListener=function(e){EH.push(e)};gH.exports=ose});var oi=M((lLe,TH)=>{"use strict";var iLe=Q(),sN=ie(),lse=(k(),v(W)),{ITC_ERRORS:ih}=tn(),{parentPort:oLe,threadId:use,isMainThread:dse,workerData:aLe}=require("worker_threads"),{onMessageFromWorkers:fse,broadcast:cLe,broadcastWithAcknowledgement:mse}=nt();TH.exports={sendItcEvent:hse,validateEvent:SH,SchemaEventMsg:pse,UserEventMsg:Ese};var Tg;fse(async(e,t)=>{Tg=Tg||sh(),SH(e),Tg[e.type]&&await Tg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function hse(e){return!dse&&e.message&&(e.message.originator=use),mse(e)}o(hse,"sendItcEvent");function SH(e){if(typeof e!="object")return ih.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||sN.isEmpty(e.type))return ih.MISSING_TYPE;if(!e.hasOwnProperty("message")||sN.isEmpty(e.message))return ih.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||sN.isEmpty(e.message.originator))return ih.MISSING_ORIGIN;if(lse.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ih.INVALID_EVENT(e.type)}o(SH,"validateEvent");function pse(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(pse,"SchemaEventMsg");function Ese(e){this.originator=e}o(Ese,"UserEventMsg")});var Co=M((fLe,bH)=>{"use strict";var RH=(k(),v(W)),dLe=ie(),Rg=Q(),yH=RU(),ed,{sendItcEvent:AH}=oi();function _se(e){try{Rg.info("signalSchemaChange called with message:",e),ed=ed||sh();let t=new yH(RH.ITC_EVENT_TYPES.SCHEMA,e);return ed.schema(t),AH(t)}catch(t){Rg.error(t)}}o(_se,"signalSchemaChange");function gse(e){try{Rg.trace("signalUserChange called with message:",e),ed=ed||sh();let t=new yH(RH.ITC_EVENT_TYPES.USER,e);return ed.user(t),AH(t)}catch(t){Rg.error(t)}}o(gse,"signalUserChange");bH.exports={signalSchemaChange:_se,signalUserChange:gse}});function yg(){return iN||(iN=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),iN}function Tse(e){return e=e.replace(Sse,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function Rse(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function aN(e){let t=IH.default.createHash("shake128",{outputLength:4}),r;return(0,NH.isIPv6)(e)?r=Tse(e):r=e.toLowerCase(),Rse(Uint8Array.from(t.update(r).digest()))}var IH,NH,oN,iN,Sse,cN=ce(()=>{Me();IH=w(require("crypto")),NH=require("node:net"),oN=new Map;o(yg,"getAnalyticsHostnameTable");Sse=/(\d{1,3}\.){3}\d{1,3}$/;o(Tse,"normalizeIPv6");o(Rse,"nodeHashToNumber");o(aN,"stableNodeId")});var vo,lN=ce(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var wg={};we(wg,{addAnalyticsListener:()=>ch,calculateCPUUtilization:()=>VH,diffResourceUsage:()=>KH,recordAction:()=>it,recordActionBinary:()=>Wr,recordHostname:()=>fN,setAnalyticsEnabled:()=>yse});function yse(e){FH=e}function Ase(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function bse(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Ig.set(e,a)}function it(e,t,r,n,s){if(!FH)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Ig.get(i);a?Ase(e,a):bse(i,e,t,r,n,s),bg||Ise()}function Wr(e,t,r,n,s){it(!!e,t,r,n,s)}function ch(e){GH.push(e)}function Ise(){bg=performance.now(),setTimeout(async()=>{let e=performance.now()-bg;bg=0;let t=[],r={time:Date.now(),period:e,threadId:Rl.threadId,metrics:t};for(let[s,i]of Ig){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of qH){let m=Math.floor(c*f),h=a[m-1];if(m>l){let p=m-l;if(h===d){let _=u[u.length-1];typeof _=="number"?u[u.length-1]={value:_,count:1+p}:_.count+=p}else u.push(p>1?{value:h,count:p}:h),d=h;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await YH()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Rl.threadId,byThread:!0,...n});for(let s of GH)s(t);Ig=new Map,Rl.parentPort?Rl.parentPort.postMessage({type:kH,report:r}):jH({report:r})},HH).unref()}async function fN(){let e=Le.hostname;Yr.trace?.("recordHostname server.hostname:",e);let t=aN(e);Yr.trace?.("recordHostname nodeId:",t);let r=yg();if(!await r.get(t)){let s={id:t,hostname:e};Yr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function $H(e){let t=oN.get(e);return t?(Yr.trace?.("storeMetric cached nodeId:",t),t):(t=aN(e),Yr.trace?.("storeMetric new nodeId:",t),oN.set(e,t),t)}function td(e,t){let r=$H(Le.hostname),n={id:[(0,dN.getNextMonotonicTime)(),r],...t};Yr.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function VH(e,t){let r=e.userCPUTime+e.systemCPUTime;return Yr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function KH(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Nse(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Yr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),td(e,l),n+=c}return n}function wH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=BH.statSync(s.primaryStore.env.path).size,c=Nse(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};td(e,u),Yr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Yr.warn?.("Error getting DB size metrics",s)}}function OH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};td(e,a),Yr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Yr.warn?.("Error getting DB volume metrics",s)}}async function wse(e,t=6e4){let r=mN(),n=WH(),s=new Promise(N=>{let O=performance.now();setImmediate(()=>{let F=performance.now();F-O>5e3&&Yr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(F-O)+"ms"),O=performance.now()}),n.primaryStore.prefetch([1],()=>{let F=performance.now();F-O>5e3&&Yr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(F-O)+"ms"),N(F-O)})}),i,a=$H(Le.hostname);for(let N of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(!(!N.value?.time||N.value?.id[1]!==a)){i=N.value.time;break}if(Date.now()-t<i)return;let c,l=new Map,u=new Map,d=[],f;for(let{key:N,value:O}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!O)continue;if(c){if(N>c+t)break}else c=N;f=N;let{metrics:F,threadId:Z}=O;for(let G of F||[]){let{path:Y,method:K,type:$,metric:le,count:ue,total:se,distribution:me,threads:Pe,...De}=G;ue||(ue=1);let dt=le+(Y?"-"+Y:"");K!==void 0&&(dt+="-"+K),$!==void 0&&(dt+="-"+$);let Ye=l.get(dt);if(Ye){if(Ye.threads){let rt=Ye.threads[Z];if(rt)Ye=rt;else{Ye.threads[Z]={...De};continue}}Ye.count||(Ye.count=1);let qn=Ye.count;for(let rt in De){let ht=De[rt];typeof ht=="number"&&(Ye[rt]=(Ye[rt]*qn+ht*ue)/(qn+ue))}Ye.count+=ue,se>=0&&(Ye.total+=se,Ye.ratio=Ye.total/Ye.count)}else Ye={period:t,...G},delete Ye.distribution,l.set(dt,Ye),Ye.byThread&&(Ye.threads=[],Ye.threads[Z]={...De},d.push(Ye));if(me){me=me.map(rt=>typeof rt=="number"?{value:rt,count:1}:rt);let qn=u.get(dt);qn?qn.push(...me):u.set(dt,me)}}await YH()}for(let N of d){let{path:O,method:F,type:Z,metric:G,count:Y,total:K,distribution:$,threads:le,...ue}=N;le=le.filter(se=>se);for(let se in ue){if(typeof N[se]!="number")continue;let me=0;for(let Pe of le){let De=Pe[se];typeof De=="number"&&(me+=De)}N[se]=me}N.count=le.length,delete N.threads,delete N.byThread}for(let[N,O]of u){let F=l.get(N);O.sort((rt,ht)=>rt.value>ht.value?1:-1);let Z=F.count-1,G=[],Y=0,K=0,$;for(let rt of qH){let ht=Z*rt;for(;Y<ht;)$=O[K++],Y+=$.count,K===1&&Y--;let Cc=O[K>1?K-2:0];$||($=O[0]),G.push($.value-($.value-Cc.value)*(Y-ht)/$.count)}let[le,ue,se,me,Pe,De,dt,Ye,qn]=G;Object.assign(F,{p1:le,p10:ue,p25:se,median:me,p75:Pe,p90:De,p95:dt,p99:Ye,p999:qn})}let m;for(let[,N]of l)N.time=f,td(n,N),m=!0;let h=Date.now(),{idle:p,active:_}=performance.eventLoopUtilization();if(m||_*10>p){let N={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-CH,active:_-PH,taskQueueLatency:await s,time:h,...process.memoryUsage()};td(n,N)}CH=p,PH=_;let g=process.resourceUsage();g.time=h,g.userCPUTime=g.userCPUTime/1e3,g.systemCPUTime=g.systemCPUTime/1e3,Yr.trace?.(`process.resourceUsage: ${JSON.stringify(g)}`);let R=KH(Ag,g);Yr.trace?.(`diffed resourceUsage: ${JSON.stringify(R)}`),R.time=h,R.period=Ag.time?h-Ag.time:t,R.cpuUtilization=VH(R,R.period);let T={metric:vo.RESOURCE_USAGE,...R};td(n,T),Ag=g;let y=st();wH(n,y),wH(n,{system:y.system}),OH(n,y),OH(n,{system:y.system})}async function LH(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function mN(){return DH||(DH=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function WH(){return MH||(MH=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Pse(){zH=!0;let e=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await wse(HH,e),await LH(mN(),Ose),await LH(WH(),Cse)},Math.min(e/2,2147483647)).unref()}function jH(e,t){let r=e.report;r.threadId=t?.threadId||Rl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(vH+=n.mean*n.count);r.totalBytesProcessed=vH,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(UH.get(t))}),UH.set(t,t.performance.eventLoopUtilization())),r.id=(0,dN.getNextMonotonicTime)(),mN().primaryStore.put(r.id,r),zH||Pse(),Lse&&(QH=Mse(r))}async function Mse(e){if(await QH,!ka){let r=(0,oh.dirname)((0,Ng.getLogFilePath)());try{ka=await(0,uN.open)((0,oh.join)(r,"analytics.log"),"r+")}catch{ka=await(0,uN.open)((0,oh.join)(r,"analytics.log"),"w+")}}let t=(await ka.stat()).size;if(t>Dse){let r=Buffer.alloc(t);await ka.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ka.write(r,{position:0}),await ka.truncate(r.length),t=r.length}await ka.write(JSON.stringify(e)+`
|
|
15
|
-
`,t)}var Rl,xH,Ng,oh,uN,dN,ah,BH,Yr,Ig,FH,bg,HH,kH,GH,qH,CH,PH,Ag,YH,Ose,Cse,DH,MH,zH,vH,UH,Lse,QH,ka,Dse,Wi=ce(()=>{Rl=require("worker_threads"),xH=w(nt());Me();Ng=w(Q()),oh=require("path"),uN=require("fs/promises"),dN=w(yn()),ah=w(oe());k();Dr();BH=w(require("node:fs"));cN();lN();Yr=(0,Ng.forComponent)("analytics").conditional;(0,ah.initSync)();Ig=new Map,FH=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(yse,"setAnalyticsEnabled");o(Ase,"recordExistingAction");o(bse,"recordNewAction");o(it,"recordAction");Le.recordAnalytics=it;o(Wr,"recordActionBinary");bg=0,HH=1e3,kH="analytics-report",GH=[];o(ch,"addAnalyticsListener");qH=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(Ise,"sendAnalytics");o(fN,"recordHostname");o($H,"getHostNodeId");o(td,"storeMetric");o(VH,"calculateCPUUtilization");o(KH,"diffResourceUsage");o(Nse,"storeTableSizeMetrics");o(wH,"storeDBSizeMetrics");o(OH,"storeVolumeMetrics");o(wse,"aggregation");CH=0,PH=0,Ag={userCPUTime:0,systemCPUTime:0},YH=o(()=>new Promise(setImmediate),"rest");o(LH,"cleanup");Ose=36e5,Cse=31536e6;o(mN,"getRawAnalyticsTable");o(WH,"getAnalyticsTable");(0,xH.setChildListenerByType)(kH,jH);o(Pse,"startScheduledTasks");vH=0,UH=new Map,Lse=!1;o(jH,"recordAnalytics");Dse=1e6;o(Mse,"logAnalytics")});function lh(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function JH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Os(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Os,uh=ce(()=>{Os=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(lh,"appendHeader");o(JH,"mergeHeaders")});function Og(e,t,r=Use){let n;return function(...i){return n?n.length*hN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();hN=(hN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var ek,vse,Use,XH,xse,pN,ZH,hN,EN=ce(()=>{ek=w(ei()),vse=3e3,Use=2e4,XH=0,xse=3e4,pN=3e3,ZH=performance.now()+pN,hN=0;o(Og,"throttle");setInterval(()=>{let e=performance.now();e-ZH-pN>vse&&XH+xse<e&&(ek.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),XH=e),ZH=e},pN).unref()});var uk={};we(uk,{EVICTED:()=>Xc,INVALIDATED:()=>In,coerceType:()=>Pg,makeTable:()=>Dg});function Dg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:h}=e,{expirationMS:p,evictionMS:_,audit:g,trackDeletes:R}=e;_??=0;let{attributes:T}=e;T||(T=[]);let y=KA(i,n,l),N,O,F={},Z=Promise.resolve(),G,Y,K;for(let V of T)(V.assignCreatedTime||V.name==="__createdtime__")&&(G=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&(Y=V),V.expiresAt&&(K=V),V.isPrimaryKey&&(F=V);let $,le=[],ue=[],se=1,me=2,Pe={},De={},dt=864e5,Ye=0,qn,rt,ht,Cc=!1,Pc,$t,vf,Uf=Al.get(U.REPLICATION_DATABASES);if(Array.isArray(Uf)){for(let V of Uf)if(V.name===c&&V.replicateTo>=0){vf=V.replicateTo;break}}let IE=i.getRange({start:!1,end:!1}).constructor,NE=10,Fy=6;g&&Hf(),mm(i.env.path,V=>{if(O)return Ta(V)});class xf extends cl{static{o(this,"Updatable")}getUpdatedTime(){return Oa.get(this.getRecord())?.version}getExpiresAt(){return Oa.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new Vm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Ce extends Ur{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=T;static replicate=h;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=Y;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=d;static schemaDefined=u;static sourcedFrom(E,S){if(S&&(this.sourceOptions=S,(S.expiration||S.eviction||S.scanInterval)&&this.setTTLExpiration(S)),S?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}O=O||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),N=N||E.load;let A=o(L=>{let D=this.sources;if(D=D.filter(H=>H.intermediateSource&&H[L]&&(!H[L].reliesOnPrototype||H.prototype[L])),D.length>0)if(D.length===1){let H=D[0];return(C,x,z)=>{if(C?.source!==H)return H[L](x,z,C)}}else return(H,C,x)=>{let z=[];for(let ne of D){if(H?.source===ne)break;z.push(ne[L](C,x,H))}return Promise.all(z)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1];b.intermediateSource&&(b={});let I=o(L=>{if(b[L]&&(!b[L].reliesOnPrototype||b.prototype[L]))return(D,H,C)=>{if(!D?.source)return b[L](H,C,D)}},"getApplyToCanonicalSource");Pe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},De={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let P=b.shouldRevalidateEvents;return(async()=>{let L=!1,D,H=o(async(C,x)=>{let z=C.value,ne=C.table?He[c][C.table]:Ce;if(c===Kf&&(C.table===gu.ROLE_TABLE_NAME||C.table===gu.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=z[ne.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=E;let re={residencyId:Mc(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},B=C.id,de=await ne.getResource(B,x,re);switch(C.finished&&await C.finished,C.type){case"put":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!0,re);case"patch":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!1,re);case"delete":return de._writeDelete(B,re);case"publish":case"message":return de._writePublish(B,z,re);case"invalidate":return de._writeInvalidate(B,z,re);case"relocate":return de._writeRelocate(B,re);default:ve.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=E.subscribe;C&&R==null&&(R=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},z=E.subscribeOnThisThread?E.subscribeOnThisThread((0,yl.getWorkerIndex)(),x):(0,yl.getWorkerIndex)()===0,ne=C&&z&&await E.subscribe?.(x);if(ne){let re;for await(let B of ne)try{if(!(B.type==="transaction"?B.writes[0]:B)){ve.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(re?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let Se=[Symbol.for("seq"),B.remoteNodeIds[0]],ee=d.get(Se),j=ee?.nodes;j||(j=[]);for(let Te of B.remoteNodeIds.slice(1)){let fe=j.find(We=>We.id===Te);j=j.filter(We=>We.id!==Te||We===fe),fe||(fe={id:Te,seqId:0},j.push(fe)),fe.seqId=Math.max(ee?.seqId??1,B.localTime),Te===re?.nodeId&&(fe.lastTxnTime=B.timestamp)}let pe=Math.max(ee?.seqId??1,B.localTime);ve.default.trace?.("Received txn",c,pe,new Date(pe),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(Se,{seqId:pe,nodes:j})}D=B.localTime}B.onCommit&&re?.committed.then(B.onCommit);continue}if(re)if(B.beginTxn)re.resolve();else{re.write_promises.push(H(B,re));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let he=Ft(B,()=>{if(B.type==="transaction"){let Se=[];for(let ee of B.writes)try{Se.push(H(ee,B))}catch(j){throw j.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(B),j}return Promise.all(Se)}else if(B.type==="define_schema"){let Se=this.attributes.slice(0),ee=!1;for(let j of B.attributes)Se.find(pe=>pe.name===j.name)||(Se.push(j),ee=!0);ee&&(ze({table:s,database:c,attributes:Se,origin:"cluster"}),fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,q.CREATE_TABLE,c,s)))}else return B.beginTxn?(re=B,re.write_promises=[H(B,B)],new Promise(Se=>{re.resolve=()=>Se(Promise.all(re.write_promises))})):H(B,B)});re&&(re.committed=he),L&&he&&!he?.waitingForUserChange&&(he.then(()=>fh.signalUserChange(new mh.UserEventMsg(process.pid))),he.waitingForUserChange=!0),B.onCommit&&(he?he.then(B.onCommit):B.onCommit())}catch(de){ve.default.error?.("error in subscription handler",de)}}}catch(C){ve.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Ce.prototype.get}static getResource(E,S,A){let b=super.getResource(E,S,A);if(this.loadAsInstance===!1&&(S._freezeRecords=!0),E!=null&&this.loadAsInstance!==!1){Pr(E);try{if(b.getRecord?.())return b;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let I=!A?.async||i.cache?.get?.(E),P=Lr(S),L=P.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ea(E,S,{transaction:L,ensureLoaded:A?.ensureLoaded},I,D=>{if(D?Ce._updateResource(b,D):b.#e=null,S.onlyIfCached){if(!b.doesExist())throw new ot.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let H=Lc(E,D,S,b);if(H)return P?.disregardReadTxn(),b.#i=!0,S.loadedFromSource=!0,Cs(H,C=>(Ce._updateResource(b,C),b))}return b})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(E)),I}}return b}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#r=S?.version}ensureLoaded(){let E=Lc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,Cs(E,S=>{this.#n=S,this.#e=S.value,this.#r=S.version})}static getNewId(){let E=F?.type;if(E==="String"||E==="ID")return super.getNewId();if(!$t){let I=i.getEntry(Symbol.for("id_allocation")),P=I?.value,L;if(P&&P.nodeName===server.hostname&&(!Wse(i)||P.pid===process.pid)){let D=P.start,H=P.end;L=D;for(let C of i.getKeys({start:H,end:D,limit:1,reverse:!0}))L=C}else P=b(I?.version??null),L=P.start;$t=new BigInt64Array([BigInt(L)+1n]),$t=new BigInt64Array(i.getUserSharedBuffer("id",$t.buffer)),$t.maxSafeId=P.end}let S=Number(Atomics.add($t,0,1n)),A=E==="Int"?512:1048576;if(S+A>=$t.maxSafeId){let I=o(P=>{$t.maxSafeId=S+(E==="Int"?1023:4194303);let L=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=P?void 0:i.useReadTransaction(),H=Number($t[0]);for(let z of i.getKeys({start:H+1,end:L,limit:1,transaction:D}))L=z;D?.done();let{value:C,version:x}=i.getEntry(Symbol.for("id_allocation"));if($t.maxSafeId<L){if(C.end>$t.maxSafeId-100)return;ve.default.info?.("New id allocation",S,$t.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:C.start,end:$t.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{ve.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${$t.maxSafeId}, but id of ${L} detected`);let z=b(x);z.alreadyUpdated||Atomics.store($t,0,BigInt(z.start+1)),$t.maxSafeId=z.end}},"updateEnd");S+A===$t.maxSafeId?setImmediate(I):S+100>=$t.maxSafeId&&(ve.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return S;function b(I){let P=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=P/4,D,H,C=!1,x,z;do{x=Math.floor(Math.random()*P),z={start:x,end:x+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let ne of i.getKeys({start:x,limit:1,reverse:!0}))D=ne;H=P;for(let ne of i.getKeys({start:x+1,end:P,limit:1}))H=ne;L*=.875,L<1e3&&!C&&(C=!0,ve.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,D,H,L))}while(!(L<H-x&&(L<x-D||D===0)));return i.transactionSync(()=>{let ne=i.getEntry(Symbol.for("id_allocation"));return(ne?.version??null)==I?(ve.default.info?.("Allocated new id range",z),i.put(Symbol.for("id_allocation"),z,Date.now()),z):(ve.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...ne.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,_||(_=0);else if(E&&typeof E=="object")p=E.expiration*1e3,_=(E.eviction||0)*1e3,dt=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");dt=dt||(p+_)/4,Ta()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Ce.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(b){throw b.message+=` in residency function for table ${s}`,b}})}static setResidencyById(E){Ce.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Ce.getResidencyById)return Ce.getResidencyById(E[t]);let A=vf;if(S.replicateTo!=null){if(Array.isArray(S.replicateTo))return S.replicateTo.includes(server.hostname)?S.replicateTo:[server.hostname,...S.replicateTo];S.replicateTo>=0&&(A=S.replicateTo)}if(A>=0&&server.nodes){let b=[server.hostname];if(S.previousResidency)b.push(...S.previousResidency.slice(0,A));else{let I=server.nodes.map(D=>D.name),P=Math.floor(I.length*Math.random());b.push(...I.slice(P,P+A));let L=P+A-I.length;L>0&&b.push(...I.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Hf(),Ce.audit=E}static coerceId(E){return E===""?null:Pg(E,F)}static async dropTable(){delete He[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&$r&&E.value&&Na(E.value);if(c===a){for(let E of T)d.remove(Ce.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Ce.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),gN.default.unlinkSync(i.env.path);fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,q.DROP_TABLE,c,s))}get(E){let S=this.constructor;if(typeof E=="string"&&S.loadAsInstance!==!1)return this.getProperty(E);if(Ff(E))return this.search(E);if(E&&E.id===void 0&&!E.toString()){let A={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:T,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Ce.getRecordCount().then(b=>(A.recordCount=b.recordCount,A.estimatedRecordRange=b.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),b=Lr(A),I=b.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Rr(E);Pr(P);let L=!0;return E.checkPermission&&(L=this.allowRead(A.user,E)),Cs(Cs(L,D=>{if(!D)throw new ot.AccessViolation(A.user);let H=!0;return Ea(P,A,{transaction:I,ensureLoaded:H},!1,C=>{if(A.onlyIfCached){if(!C?.value)throw new ot.ServerError("Entry is not cached",504)}else if(H){let x=Lc(P,C,A);if(x)return b?.disregardReadTxn(),A.loadedFromSource=!0,x.then(z=>z?.value)}return C?.value})}),D=>{let H=E?.select;return H&&D!=null?xu(H,this.constructor)(D):D})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=_a(E,S);if(A?.read){if(A.isSuperUser)return!0;let b=A.attribute_permissions,I=S?.select;if(b?.length>0||Cc&&I){if(S||(S={}),I){let P=Array.isArray(I)?I:[I],L=b?.length>0&&_N(b,"read");S.select=P.map(D=>{let H=D.name||D;if(!L||L[H]){let C=ht[H]?.definition?.tableClass;if(C){if(D.name||(D={name:D}),!D.checkPermission&&S.checkPermission&&(D.checkPermission=S.checkPermission),!C.prototype.allowRead.call(null,E,D))return!1;if(!D.select)return D.name}return D}}).filter(Boolean)}else S.select=b.filter(P=>P.read&&!ht[P.attribute_name]).map(P=>P.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let b=_a(E,A);if(b?.update){let I=b.attribute_permissions;if(I?.length>0){let P=_N(I,"update");for(let L in S)if(!P[L])return!1;for(let L of I){let D=L.attribute_name;!L.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return Sa(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let b=_a(E,A);if(b?.insert){let I=b.attribute_permissions;if(I?.length>0){let P=_N(I,"insert");for(let L in S)if(!P[L])return!1;return Sa(this.getContext())}else return Sa(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return _a(E,S)?.delete&&Sa(this.getContext())}update(E,S){let A,b=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),I=!1;b?(I=S,S=E,A=this.getId()):A=Rr(E);let P=this.getContext();if(!Lr(P))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(I)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#t=S;else if(b){let D=this.#t;D&&(S=Object.assign(D,S)),this.#t=S}else{let D=!0;if(E==null)throw new TypeError("Can not put a record without a target");return E.checkPermission&&(D=this.allowUpdate(P.user,S,E)),Cs(D,H=>{if(!H)throw new ot.AccessViolation(P.user);return Cs(i.get(Rr(E)),C=>{let x=new xf(C);return x._setChanges(S),this._writeUpdate(A,x.getChanges(),!1),x})})}return this._writeUpdate(A,this.#t,I),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===rk?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new Vm(S)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,S){if(typeof S=="number")return this.addTo(E,-S);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(E){this.#t=E}setRecord(E){this.#e=E}invalidate(E){let S=!0,A=this.getContext();return E?.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new ot.AccessViolation(A.user);this._writeInvalidate(E?Rr(E):this.getId())})}_writeInvalidate(E,S,A){let b=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.invalidate?.bind(this,b,E),beforeIntermediate:Ra(S,De.invalidate?.bind(this,b,E)),commit:o((P,L)=>{if(!(ga(P,L,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));ve.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(P).toISOString()}`),y(E,S,L,P,In,g,{user:b?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.relocate?.bind(this,A,E),beforeIntermediate:De.relocate?.bind(this,A,E),commit:o((I,P)=>{if(ga(I,P,S?.nodeId)<=0)return;let L=Ce.getResidencyRecord(S.residencyId),D=0,H=null,C=P?.value;if(L&&!L.includes(server.hostname)){for(let x in r)H||(H={}),H[x]=C[x];D=In}else H=C;ve.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(I).toISOString()}`),y(E,H,P,I,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){if(this.getResidencyById)return!1;let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},b=Dc(this.getResidency(S.value,A)),I;if(b){if(!b.includes(server.hostname))return!1;I=Mc(b)}let P=0;ve.default.debug?.("Performing a relocate of an entry",E.key,S.value,b);let L=y(E.key,S.value,E,E.version,P,!0,{residencyId:I,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let b=this.Source,I;if(!((O||g)&&(!S||(I=i.getEntry(E),!I||!S)||I.version!==A))){if(O){if(i.hasLock(E,I.version))return;let P;for(let L in r)P||(P={}),P[L]=S[L];if(P)return y(E,P,I,A,Xc,null,null,null,!0)}return i.ifVersion(E,A,()=>{po(E,S,null)}),Jc(i,I??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,global.operation(E,S)}put(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!0);else{let A=!0;if(E==null)throw new TypeError("Can not put a record without a target");let b=this.getContext();return E.checkPermission&&(A=this.allowUpdate(b.user,S,E)),Cs(A,I=>{if(!I)throw new ot.AccessViolation(b.user);if(Array.isArray(S))for(let P of S){let L=P[t];this._writeUpdate(L,P,!0)}else{let P=Rr(E);this._writeUpdate(P,S,!0)}})}}create(E,S){let A=!0,b=this.getContext();if(!S&&!(E instanceof URLSearchParams)&&(S=E,E=void 0),!S||typeof S!="object"||Array.isArray(S))throw new TypeError("Can not create a record without an object");return E?.checkPermission&&(A=this.allowCreate(b.user,S,E)),Cs(A,I=>{if(!I)throw new ot.AccessViolation(b.user);let P=Rr(E)??S[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new ot.ClientError("Record already exists",409);return this._writeUpdate(P,S,!0),S})}patch(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!1);else{let A=this.update(E,S);if(A?.then)return A.then(()=>{})}}_writeUpdate(E,S,A,b){let I=this.getContext(),P=Lr(I);Pr(E);let L=this.#n??i.getEntry(E);this.#s=A?rk:$se;let D=o(C=>A?C.put?()=>C.put(I,E,S):null:C.patch?()=>C.patch(I,E,S):C.put?()=>C.put(I,E,ll(this)):null,"writeToSources"),H={key:E,store:i,entry:L,nodeName:I?.nodeName,validate:o(C=>{S||(S=this.#t),A||S&&J_(this.#t===S?this:S)?I?.source||(P.checkOverloaded(),this.validate(S,!A),Y&&(S[Y.name]=Y.type==="Date"?new Date(C):Y.type==="String"?new Date(C).toISOString():C),A&&(t&&S[t]!==E&&(S[t]=E),G&&(L?.value?S[G.name]=L?.value[G.name]:S[G.name]=G.type==="Date"?new Date(C):G.type==="String"?new Date(C).toISOString():C),S=ll(S))):P.removeWrite(H)},"validate"),before:D(Pe),beforeIntermediate:Ra(S,D(De)),commit:o((C,x,z)=>{if(z){if(I&&x?.version>(I.lastModified||0)&&(I.lastModified=x.version),this.#n=x,x?.value&&x.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=x?.value??null)}this.#t=void 0,this.#r=C;let ne=x?.value,re=S;this.#s=0;let B=!1,de=ga(C,x,b?.nodeId),he,Se=A?"put":"patch",ee;b?.residencyId!=null&&(ee=b.residencyId);let j=I?.expiresAt??(p?p+Date.now():-1);if(de<=0){if(g){let fe=x.localTime,We=x.version;ve.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(C),"applying later update from:",new Date(We),"local recorded time",new Date(fe));let St=[];for(;fe>C||We>=C&&fe>0;){let ft=l.get(fe);if(!ft)break;let Ee=Nt(ft);if(We=Ee.version,We>=C){if(We===C){if(de=ga(C,{version:We,localTime:fe},b?.nodeId),de===0)return Te(!1);if(de>0)continue}if(Ee.type==="patch")St.push(Ee),he=S;else if(Ee.type==="put"||Ee.type==="delete")return Te(!1)}fe=Ee.previousLocalTime}fe||ve.default.debug?.("No further audit history, applying incremental updates based on available history",E,"existing version preserved",x),St.sort((ft,Ee)=>ft.version-Ee.version);for(let ft of St){let Ee=ft.getValue(i);if(ve.default.debug?.("Rebuilding update with future patch:",new Date(ft.version),Ee,ft),re=WE(re,Ee,A),!re)return Te(!1)}}else{if(A)return Te(!1);re=WE(re,ne,A),ve.default.debug?.("Rebuilding update without audit:",re)}ve.default.trace?.("Rebuilt record to save:",re," is full update:",A)}let pe;if(A?pe=re:this.constructor.loadAsInstance===!1?pe=ll(ne,re):(this.#e=ne,pe=ll(this,re)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(ee==null){L?.residencyId&&(I.previousResidency=Ce.getResidencyRecord(L.residencyId));let fe=Dc(Ce.getResidency(pe,I));if(fe&&!fe.includes(server.hostname))if(he??=pe,B=!0,Ce.getResidencyById)pe=void 0;else{pe=null;for(let We in r)pe||(pe={}),pe[We]=he[We]}ee=Mc(fe)}A||(he=S),ve.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(C).toISOString()}${j?", expires at: "+new Date(j).toISOString():""}${x?", replaces entry from: "+new Date(x.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),po(E,ne,pe),Te(!0),I.expiresAt&&Ta();function Te(fe){y(E,fe?pe:void 0,fe?x:{...x,value:void 0},C,B?In:0,g,{omitLocalRecord:B,user:I?.user,residencyId:ee,expiresAt:j,nodeId:b?.nodeId,originatingOperation:I?.originatingOperation},Se,!1,fe?he:he??S)}o(Te,"writeCommit")},"commit")};P.addWrite(H)}async delete(E){if(Ff(E)){E.select=["$id"];for await(let S of this.search(E))this._writeDelete(S.$id);return!0}if(E){let S=!0,A=this.getContext();return E.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new ot.AccessViolation(A.user);let I=Rr(E);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Lr(this.getContext());Pr(E);let b=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,before:Pe.delete?.bind(this,b,E),beforeIntermediate:De.delete?.bind(this,b,E),commit:o((I,P,L)=>{let D=P?.value;L&&(b&&P?.version>(b.lastModified||0)&&(b.lastModified=P.version),Ce._updateResource(this,P)),!(ga(I,P,S?.nodeId)<=0)&&(po(this.getId(),D),ve.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(I).toISOString()}`),g||R?(y(E,null,P,I,0,g,{user:b?.user,nodeId:S?.nodeId},"delete"),g||Ta()):Jc(i,P))},"commit")}),!0}search(E){let S=this.getContext(),A=Lr(S);if(!E)throw new Error("No query provided");if(E.parseError)throw E.parseError;if(E.checkPermission&&!this.allowRead(S.user,E))throw new ot.AccessViolation(S.user);let b=E.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let I=E.id??this.getId();I&&(b=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(b));let P,L={};function D(j,pe){let Te;switch(pe){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');Te=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+pe)}for(let fe of j){if(fe.conditions){fe.conditions=D(fe.conditions,fe.operator);continue}let We=fe[0]??fe.attribute,St=We==null?F:xi(T,We);if(St)(St.type||WA[fe.comparator])&&(fe[1]===void 0?fe.value=C(fe.value,St):fe[1]=C(fe[1],St));else if(We!=null&&!E.allowConditionsOnDynamicAttributes)throw(0,ot.handleHDBError)(new Error,`${We} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let ft=fe.chainedConditions[0],Ee,pt;if(ft.comparator==="gt"||ft.comparator==="greater_than"||ft.comparator==="ge"||ft.comparator==="greater_than_equal"?(Ee=fe,pt=ft):(Ee=ft,pt=fe),Ee.comparator!=="lt"&&Ee.comparator!=="less_than"&&Ee.comparator!=="le"&&Ee.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let tt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",cr=Ee.comparator==="le"||Ee.comparator==="less_than_equal";fe.comparator=(tt?"ge":"gt")+(cr?"le":"lt"),fe.value=[pt.value,Ee.value]}else throw new Error("Multiple chained conditions are not currently supported")}return j}o(D,"prepareConditions");function H(j,pe){if(E.enforceExecutionOrder)return j;for(let Te of j)Te.conditions&&(Te.conditions=H(Te.conditions,Te.operator));return j.length>1&&pe!=="or"?Bse(j,b_(Ce)):j}o(H,"orderConditions");function C(j,pe){return Array.isArray(j)?j.map(Te=>Pg(Te,pe)):Pg(j,pe)}o(C,"coerceTypedValues");let x=E.operator;(b.length>0||x)&&(b=D(b,x));let z=typeof E.sort=="object"&&E.sort,ne;if(z&&x!=="or"){let j=z.attribute;if(j==null)throw new ot.ClientError("Sort requires an attribute");if(P=b.find(pe=>Mu(pe.attribute)===Mu(j)),!P){let pe=xi(T,j);if(!pe)throw(0,ot.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);if(pe.indexed)P={...z,comparator:"sort"},b.push(P);else if(b.length===0&&!E.allowFullScan)throw(0,ot.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!z.descending)}b=H(b,x),z&&(P&&b[0]===P?z.next&&(ne={dbOrderedAttribute:z.attribute,attribute:z.next.attribute,descending:z.next.descending,next:z.next.next}):(P&&b.splice(b.indexOf(P),1),ne=z));let re=E.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:b,operator:x,postOrdering:ne,selectApplied:!!re};let B=A.useReadTxn(),de=zA(b,x,Ce,B,E,S,(j,pe)=>pu(j,re,S,B,pe),L),he=E.ensureLoaded!==!1,Se=Ce.transformEntryForSelect(re,S,B,L,he,!0),ee=Ce.transformToOrderedSelect(de,re,ne,S,B,Se);return(E.offset||E.limit!==void 0)&&(ee=ee.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0)),ee.onDone=()=>{ee.onDone=null,A.doneReadTxn()},ee.selectApplied=!0,ee.getColumns=()=>{if(re){let j=[];for(let pe of re)pe==="*"?j.push(...T.map(Te=>Te.name)):j.push(pe.name||pe);return j}return T.filter(j=>!j.computed&&!j.relationship).map(j=>j.name)},ee}static transformToOrderedSelect(E,S,A,b,I,P){let L=new IE;if(A){E=pu(E,S,b,I,null);let D;L.iterate=function(){let C,x=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),z,ne=A.dbOrderedAttribute,re,B,de=!0;function he(ee){let j=ee.next&&he(ee.next),pe=ee.descending;return b.sort=ee,(Te,fe)=>{let We=hu(Te,ee.attribute,b),St=hu(fe,ee.attribute,b),ft=pe?(0,bl.compareKeys)(St,We):(0,bl.compareKeys)(We,St);return ft===0?j?.(Te,fe)||0:ft}}o(he,"createComparator");let Se=he(A);return{async next(){let ee;if(C)if(ee=C.next(),ee.done){if(z)return L.onDone&&L.onDone(),ee}else return{value:await P.call(this,ee.value)};D=[],re&&D.push(re);do if(ee=await x.next(),ee.done){if(z=!0,D.length)break;return L.onDone&&L.onDone(),ee}else{let j=ee.value;if(j?.then&&(j=await j),ne){let pe=hu(j,ne,b);if(de)de=!1,B=pe;else if(pe!==B){B=pe,re=j;break}}D.push(j)}while(!0);return A.isGrouped,D.sort(Se),C=D[Symbol.iterator](),ee=C.next(),ee.done?(L.onDone&&L.onDone(),ee):{value:await P.call(this,ee.value)}},return(){L.onDone&&L.onDone(),x.return()},throw(){L.onDone&&L.onDone(),x.throw()}}};let H=o(C=>{if(typeof S=="object"&&Array.isArray(C.attribute))for(let x=0;x<S.length;x++){let z=S[x],ne;if(z.name===C.attribute[0]){for(ne=z.sort||(z.sort={});ne.next;)ne=ne.next;ne.attribute=C.attribute.slice(1),ne.descending=C.descending}else z===C.attribute[0]&&(S[x]=ne={name:z,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&H(C.next)},"applySortingOnSelect");H(A)}else L.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),L=L.map(function(D){try{let H=P.call(this,D);return typeof H?.catch=="function"?H.catch(C=>{throw C.partialObject={[t]:D.key},C}):H}catch(H){throw H.partialObject={[t]:D.key},H}});return L}static transformEntryForSelect(E,S,A,b,I,P){let L;I&&O&&!(typeof E=="string"?[E]:E)?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(L=!0);let D,H=o(function(C){let x;if(S?.transaction?.stale&&(S.transaction.stale=!1),C!=null){if(x=C.deref?C.deref():C.value,!x&&(C.key===void 0||C.deref)||C.metadataFlags&In){if(C.metadataFlags&In&&S.replicateFrom===!1&&P&&C.residencyId)return qa.SKIP;if(C=Ea(C.key??C,S,{transaction:A,lazy:E?.length<4,ensureLoaded:I},this?.isSync,z=>z),C?.then)return C.then(H.bind(this));x=C?.value}if(L&&C?.metadataFlags&(In|Xc)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let z=Lc(C.key??C,C,S);if(z?.then)return z.then(H)}}if(x==null)return P?qa.SKIP:x;if(E&&!(E[0]==="*"&&E.length===1)){let z,ne=o((B,de)=>{let he;typeof B=="object"?he=B.name:he=B;let Se=ht?.[he],ee;if(Se){let j=b?.[he];if(j)if(j.hasMappings){let Te=Se.from?x[Se.from]:Mu(C.key);ee=j.get(Te),ee||(ee=[])}else ee=j.fromRecord?.(x);else ee=Se(x,S,C,!0);let pe=o(Te=>{if(Se.directReturn)return de(Te,he);if(Te&&typeof Te=="object"){let fe=Se.definition?.tableClass||Ce;D||(D={});let We=D[he]||(D[he]=fe.transformEntryForSelect(he===B?null:B.select||(Array.isArray(B)?B:null),S,A,j,I));if(Array.isArray(Te)){let St=[],ft=fe.transformToOrderedSelect(Te,B.select,typeof B.sort=="object"&&B.sort,S,A,We)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ee=o(tt=>{for(;!tt.done;){if(tt?.then)return tt.then(Ee);St.push(tt.value),tt=ft.next()}de(St,he)},"nextValue"),pt=Ee(ft.next());pt&&(z||(z=[]),z.push(pt));return}else if(Te=We.call(this,Te),Te?.then){z||(z=[]),z.push(Te.then(St=>de(St,he)));return}}de(Te,he)},"handleResolvedValue");ee?.then?(z||(z=[]),z.push(ee.then(pe))):pe(ee);return}else ee=x[he],ee&&typeof ee=="object"&&he!==B&&(ee=Ce.transformEntryForSelect(B.select||B,S,A,null)({value:ee}));de(ee,he)},"selectAttribute"),re;if(typeof E=="string")ne(E,B=>{re=B});else if(Array.isArray(E))if(E.asArray)re=[],E.forEach((B,de)=>{B==="*"?E[de]=x:ne(B,he=>re[de]=he)});else{re={};let B=E.forceNulls;for(let de of E)if(de==="*")for(let he in x)re[he]=x[he];else ne(de,(he,Se)=>{he===void 0&&B&&(he=null),re[Se]=he})}else throw new ot.ClientError("Invalid select"+E);return z?Promise.all(z).then(()=>re):re}return x},"transform");return H}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ze({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],b=this,I=eb(Ce,this.getId()??null,function(L,D,H,C){try{let x=D.getValue?.(i,S),z=D.type;if(!x&&z==="patch"&&S){let re=i.getEntry(L);re?.version===D.version?x=re.value:x=D.getValue?.(i,!0,H),z="put"}let ne={id:L,localTime:H,value:x,version:D.version,type:z,beginTxn:C};A?A.push(ne):this.send(ne)}catch(x){ve.default.error?.(x)}},E.startTime||0,E),P=(async()=>{this.isCollection&&(I.includeDescendants=!0,E.onlyChildren&&(I.onlyChildren=!0)),E.supportsTransactions&&(I.supportsTransactions=!0);let L=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let H=E.startTime;if(this.isCollection){if(H){if(D)throw new ot.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:x}of l.getRange({start:H,exclusiveStart:!0,snapshot:!1})){let z=Nt(x);if(z.tableId!==n)continue;let ne=z.recordId;if(L==null||ok(L,ne)){let re=z.getValue(i,S,C);if(I.send({id:ne,localTime:C,value:re,version:z.version,type:z.type}),I.queue?.length>sk&&await I.waitForDrain()===!1)return}I.startTime=C}}else if(D){let C=[];for(let{key:x,value:z}of l.getRange({start:"z",end:!1,reverse:!0}))try{let ne=Nt(z);if(ne.tableId!==n)continue;let re=ne.recordId;if(L==null||ok(L,re)){let B=ne.getValue(i,S,x);if(C.push({id:re,localTime:x,value:B,version:ne.version,type:ne.type}),--D<=0)break}}catch(ne){ve.default.error("Error getting history entry",x,ne)}for(let x=C.length;x>0;)I.send(C[--x]);C[0]&&(I.startTime=C[0].localTime)}else if(!E.omitCurrent){for(let{key:C,value:x,version:z,localTime:ne}of i.getRange({start:L??!1,end:L==null?void 0:[L,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(I.send({id:C,localTime:ne,value:x,version:z,type:"put"}),I.queue?.length>sk&&await I.waitForDrain()===!1))return}}else{D&&!H&&(H=0);let C=this.#n?.localTime;if(C===VA&&(i.cache?.delete(L),this.#n=i.getEntry(L),ve.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),ve.default.trace?.("Subscription from",H,"from",L,C),H<C){let x=[],z=C;do{let ne=l.get(z);if(ne){E.omitCurrent=!0;let re=Nt(ne),B=re.getValue(i,S,z);S&&(re.type="put"),x.push({id:L,value:B,localTime:z,...re}),z=re.previousLocalTime}else break;D&&D--}while(z>H&&D!==0);for(let ne=x.length;ne>0;)I.send(x[--ne]);I.startTime=C}!E.omitCurrent&&this.doesExist()&&I.send({id:L,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of A)I.send(C);A=null})();return E.listener&&I.on("data",E.listener),I}static subscribeOnThisThread(E,S){return E===0||S?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,S,A){if(S===void 0||S instanceof URLSearchParams)this._writePublish(this.getId(),E,S);else{let b=!0,I=this.getContext();return E.checkPermission&&(b=this.allowCreate(I.user,E,I)),Cs(b,P=>{if(!P)throw new ot.AccessViolation(I.user);let L=Rr(E);this._writePublish(L,S,A)})}}_writePublish(E,S,A){let b=Lr(this.getContext());E??=null,E!==null&&Pr(E);let I=this.getContext();b.addWrite({key:E,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(b.checkOverloaded(),this.validate(S))},"validate"),before:Pe.publish?.bind(this,I,E,S),beforeIntermediate:Ra(S,De.publish?.bind(this,I,E,S)),commit:o((P,L,D)=>{L===void 0&&R&&!g&&Ta(),ve.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(P).toISOString()}`),y(E,L?.value??null,L,L?.version||P,0,!0,{user:I?.user,residencyId:A?.residencyId,expiresAt:I?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,b=o((I,P,L)=>{if(P.type&&I!=null)if(S&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an object${P.type?" ("+P.type+")":""}`);let D=P.properties;for(let H=0,C=D.length;H<C;H++){let x=D[H];if(x.relationship||x.computed){E.hasOwnProperty(x.name)&&(A||(A=[])).push(`Computed property ${L}.${x.name} may not be directly assigned a value`);continue}let z=b(I[x.name],x,L+"."+x.name);z&&(I[x.name]=z)}if(P.sealed&&I!=null&&typeof I=="object")for(let H in I)D.find(C=>C.name===H)||(A||(A=[])).push(`Property ${H} is not allowed within object in property ${L}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string`);break;case"Boolean":typeof I!="boolean"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof Rs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(P.elements)for(let D=0,H=I.length;D<H;D++){let C=I[D],x=b(C,P.elements,L+"[*]");x&&(I[D]=x)}}else(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an Array`);break}P.nullable===!1&&I==null&&(A||(A=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=T.length;I<P;I++){let L=T[I];if(L.relationship||L.computed){Object.hasOwn(E,L.name)&&(A||(A=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!S||L.name in E){let D=b(E[L.name],L,L.name);D!==void 0&&(E[L.name]=D)}}if(f)for(let I in E)T.find(P=>P.name===I)||(A||(A=[])).push(`Property ${I} is not allowed`);if(A)throw new ot.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new ot.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new ot.ClientError("Attribute names cannot include backticks or forward slashes");Fse(A.name),S.push(A)}return ze({table:s,database:c,schemaDefined:u,attributes:S}),Ce.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return ze({table:s,database:c,schemaDefined:u,attributes:S}),Ce.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,S=gN.default.statfsSync?.(E)??{};return{available:S.bavail*S.bsize,free:S.bfree*S.bsize,size:S.blocks*S.bsize}}static async getRecordCount(E){let S=i.getStats().entryCount,A=1e3/2,b=performance.now(),I=Math.floor(S/2),P=E?.exactCount,L=0,D=0,H;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&L++,D++,await Ga(),!P&&D<I&&performance.now()-b>A){H=D;break}if(H){let C=L;L=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:H,snapshot:!1}))ee!=null&&L++,await Ga();let x=H*2,z=(L+C)/x,ne=Math.pow((L-C+1)/H/2,2)+z*(1-z)/x,re=Math.max(Math.sqrt(ne)*S,1),B=Math.round(z*S),de=Math.max(B-1.96*re,L+C),he=Math.min(B+1.96*re,S),Se=Math.pow(10,Math.round(Math.log10(re)));return Se>B&&(Se=Se/10),L=Math.round(B/Se)*Se,{recordCount:L,estimatedRange:[Math.round(de),Math.round(he)]}}return{recordCount:L}}static updatedAttributes(){ht=this.propertyResolvers={$id:o((E,S,A)=>({value:A.key}),"$id"),$updatedtime:o((E,S,A)=>A.version,"$updatedtime"),$updatedTime:o((E,S,A)=>A.version,"$updatedTime"),$expiresAt:o((E,S,A)=>A.expiresAt,"$expiresAt"),$record:o((E,S,A)=>A?{value:E}:E,"$record"),$distance:o((E,S,A)=>A&&(A.distance??S?.vectorDistances?.get(A)),"$distance")};for(let E of this.attributes){E.isPrimaryKey&&(F=E),E.resolve=null;let S=E.relationship,A=E.computed;if(S)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),A&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Cc=!0,S.to)E.elements?.definition?(ht[E.name]=E.resolve=(b,I,P,L)=>{let D=b[S.from?S.from:t],H=E.elements.definition.tableClass;return L?Du({attribute:S.to,value:D},Lr(I).getReadTxn(),!1,H,!1).map(C=>C&&C.key!==void 0?C:H.primaryStore.getEntry(C,{transaction:Lr(I).getReadTxn()})).asArray:H.search([{attribute:S.to,value:D}],I).asArray},E.set=()=>{},E.resolve.definition=E.elements.definition,E.resolve.to=S.to,S.from&&(E.resolve.from=S.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(S.from){let b=E.definition||E.elements?.definition;b?(ht[E.name]=E.resolve=(I,P,L,D)=>{let H=I[S.from];if(H===void 0)return;if(E.elements){let x,z=H?.map(ne=>{let re=b.tableClass.primaryStore[D?"getEntry":"get"](ne,{transaction:Lr(P).getReadTxn()});return re?.then&&(x=!0),Ce.loadAsInstance===!1&&Object.freeze(D?re?.value:re),re});return S.filterMissing?x?Promise.all(z).then(ne=>ne.filter(ak)):z.filter(ak):x?Promise.all(z):z}let C=b.tableClass.primaryStore[D?"getEntry":"get"](H,{transaction:Lr(P).getReadTxn()});return Ce.loadAsInstance===!1&&Object.freeze(D?C?.value:C),C},E.set=(I,P)=>{if(Array.isArray(P)){let L=P.map(D=>D.getId?.()||D[b.tableClass.primaryKey]);I[S.from]=L}else{let L=P.getId?.()||P[b.tableClass.primaryKey];I[S.from]=L}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=S.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else if(A)typeof A.from=="function"&&this.setComputedAttribute(E.name,A.from),ht[E.name]=E.resolve=(b,I,P)=>{let L=typeof A.from=="string"?b[A.from]:b,D=this.userResolvers[E.name];if(D)return D(L,I,P);ve.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}},E.resolve.directReturn=!0;else if(r[E.name]?.customIndex?.propertyResolver){let b=r[E.name].customIndex;ht[E.name]=(I,P,L)=>{let D=I[E.name];return b.propertyResolver(D,P,L)},ht[E.name].directReturn=!0}}Km(this,this),Km(xf,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,Uu.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=xi(T,E);if(!A){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!A.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=S}static async deleteHistory(E=0,S=!1){let A;for(let{key:b,value:I}of l.getRange({start:0,end:E}))await Ga(),Nt(I).tableId===n&&(A=h_(l,b,I));if(S)for(let b of i.getRange({start:0,versions:!0})){let{key:I,value:P,localTime:L}=b;await Ga(),P===null&&L<E&&(A=Jc(i,b))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:b}of l.getRange({start:E||1,end:S})){await Ga();let I=Nt(b);I.tableId===n&&(yield{id:I.recordId,localTime:A,version:I.version,type:I.type,value:I.getValue(i,!0,A),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(E){let S=[];if(E==null)throw new Error("An id is required");let A=i.getEntry(E);if(!A)return S;let b=A.localTime;if(!b)throw new Error("The entry does not have a local audit time");let I=0;do{await Ga();let P=l.get(b);if(P){let L=Nt(P);S.push({id:L.recordId,localTime:b,version:L.version,type:L.type,value:L.getValue(i,!0,b),user:L.user}),b=L.previousLocalTime}else break}while(I<1e3&&b);return S.reverse()}static cleanup(){$?.remove()}}let wE=Og(async(V,E,S)=>{for(let A of Ce.sources)if(A.get&&(!A.get.reliesOnPrototype||A.prototype.get)){if(A.available?.(S)===!1)continue;E.source=A;let b=await A.get(V,E);if(b)return b}},()=>{throw new ot.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Ce.updatedAttributes();let Bf=Ce.prototype;return p&&Ce.setTTLExpiration(p/1e3),K&&Eu(),Ce;function po(V,E,S){let A;for(let b in r){let I=r[b],P=I.isIndexing,L=ht[b],D=S&&(L?L(S):S[b]),H=E&&(L?L(E):E[b]);if(D===H&&!P)continue;if(I.customIndex){I.customIndex.index(V,D,H);continue}A=!0;let C=I.indexNulls,x=(0,dh.getIndexedValues)(D,C),z=(0,dh.getIndexedValues)(H,C);if(s==="OrganizationRole"&&ve.default.error?.({tableName:s,id:V,key:b,valuesToAdd:x,valuesToRemove:z}),z?.length>0){let ne=new Set(z);if(x=x?x.filter(re=>{if(ne.has(re))ne.delete(re);else return!0}):[],z=Array.from(ne),(z.length>0||x.length>0)&&tk){let re=z.concat(x).map(B=>({key:B,value:V}));I.prefetch(re,ik)}for(let re=0,B=z.length;re<B;re++)I.remove(z[re],V)}else x?.length>0&&tk&&I.prefetch(x.map(ne=>({key:ne,value:V})),ik);if(x)for(let ne=0,re=x.length;ne<re;ne++)I.put(x[ne],V)}return A}o(po,"updateIndices");function Pr(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>nk)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)throw new Error("Invalid primary key of null");break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,bl.writeKey)(V,Vse,0)>nk)throw new Error("Primary key size is too large: "+V.length);return!0}o(Pr,"checkValidId");function Rr(V){return typeof V=="object"&&V?V.id:V}o(Rr,"requestTargetToId");function Ff(V){return typeof V=="object"&&V&&V.isCollection}o(Ff,"isSearchTarget");function Ss(V){}o(Ss,"isRequestTarget");function Ea(V,E,S,A,b){if(Ce.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let P=Dc(Ce.getResidencyById(V));if(P&&!P.includes(server.hostname)&&N)return N({key:V,residency:P}).then(b)}let I=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return b(null,V);let P=i.getEntry(V,S);return E?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&In&&N&&S.ensureLoaded&&E?.replicateFrom!==!1?N(P).then(L=>b(L,V),L=>(ve.default.error?.("Error loading remote record",V,P,S,L),b(null,V))):(P&&E&&(P?.version>(E.lastModified||0)&&(E.lastModified=P.version),P?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=P.localTime)),b(P,V))},"whenPrefetched");return A?I():se>0?(se--,I()):new Promise((P,L)=>{se===0?(se--,i.prefetch([V],()=>{D(),H()})):(le.push(V),ue.push(H),le.length>Fy&&(se--,D()));function D(){if(le.length>0){let C=ue;i.prefetch(le,()=>{se===-1?D():se++;for(let x of C)x()}),le=[],ue=[],me>2&&me--}else se=me,me<NE&&me++}o(D,"prefetch");function H(){try{P(I())}catch(C){L(C)}}o(H,"load")})}o(Ea,"loadLocalRecord");function _a(V,E){let S=E?.checkPermission;if(typeof S!="object"){if(!V?.role)return;S=V.role.permission}if(S.super_user)return Kse;let A=S[c],b,I=A?.tables;if(I)return I[s];if(c==="data"&&(b=S[s])&&!b.tables)return b}o(_a,"getTablePermissions");function Lc(V,E,S,A){if(O){let b=!1;if(S.noCache?b=!0:(E?(!E.value||E.metadataFlags&(In|Xc)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(b=!0):b=!0,Wr(!b,"cache-hit",s)),b){let I=OE(V,E,S).then(P=>(P?.value&&P?.value.getRecord?.()&&ve.default.error?.("Can not assign a record that is already a resource"),S&&(P?.version>(S.lastModified||0)&&(S.lastModified=P.version),S.lastRefreshed=Date.now()),P));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,V)){if(I.catch(P=>ve.default.warn?.(P)),S?.onlyIfCached&&!A.doesExist())throw new ot.ServerError("Entry is not cached",504);return}else return I}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Ce.evict(E.key,E.value,E.version),E.value=null,{then(b){return b(E)}}}o(Lc,"ensureLoadedFromSource");function Lr(V){let E=V?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let S=E.next;if(!S)return E=E.next=new _o,E.lmdbDb=i,E;E=S}while(!0)}else return new KE}o(Lr,"txnForContext");function hu(V,E,S){if(!V)return;let A=(V.deref?V.deref():V.value)??i.getEntry(V.key)?.value;if(typeof E=="object"){let I=ht,P=A;for(let L=0,D=E.length;L<D;L++){let H=E[L],C=I?.[H];P=C&&P?C(P,S,V):P?.[H],V=null,I=C?.definition?.tableClass?.propertyResolvers}return P}let b=ht[E];return b?b(A,S,V):A[E]}o(hu,"getAttributeValue");function pu(V,E,S,A,b){let I=b?.length,P={transaction:A,lazy:I>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},L;function D(H,C){let x=H?.value;if(!x)return qa.SKIP;for(let z=0;z<I;z++)if(!L?.includes(z)&&!b[z](x,H))return qa.SKIP;return C!==void 0&&(H.key=C),H}if(o(D,"processEntry"),I>0||!V.hasEntries){let H=V.map(C=>{if(L=null,typeof C=="object"&&C?.key!==void 0)return I>0?D(C):C;if(C==null)return qa.SKIP;for(let x=0;x<I;x++){let ne=b[x].idFilter;if(ne){if(!ne(C))return qa.SKIP;L||(L=[]),L.push(x)}}return Ea(C,S,P,!1,D)});return Array.isArray(V)&&(H=H.filter(C=>C!==qa.SKIP)),H.hasEntries=!0,H}return V}o(pu,"transformToEntries");function ga(V,E,S=server.replication?.getThisNodeId(l)){if(V<=E?.version){if(E?.version===V&&S!==void 0){let A=server.replication?.exportIdMapping(l),b=E.localTime,I=b&&l.get(b);if(I){let P,L,D=Nt(I);for(let H in A)A[H]===S&&(P=H),A[H]===D.nodeId&&(L=H);if(P>L)return 1;if(P===L)return 0}}return-1}return 1}o(ga,"precedesExistingVersion");async function OE(V,E,S){let A=E?.metadataFlags,b=E?.version,I,P;if(!i.attemptLock(V,b,()=>{clearTimeout(P);let C=i.getEntry(V);!C||!C.value||C.metadataFlags&(In|Xc)?I(OE(V,i.getEntry(V),S)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(V,b)},qse)});let L=E?.value,D={requestContext:S,replacingRecord:L,replacingEntry:E,replacingVersion:b,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},H=S?.responseHeaders;return new Promise((C,x)=>{let z;Cs(Ft(D,async ne=>{let re=performance.now(),B,de,he;try{B=await wE(V,D,E),he=A&In;let ee=D.lastModified||he&&b;ee||(ee=(0,dh.getNextMonotonicTime)()),de=he||ee>b||!L;let j=performance.now()-re;if(it(j,"cache-resolution",s,null,"success"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),ne.timestamp=ee,p&&D.expiresAt==null&&(D.expiresAt=Date.now()+p),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ee=b;else throw new ot.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==V&&(B[t]=V)}z=!0,C({key:V,version:ee,value:B})}catch(ee){ee.message+=` while resolving record ${V} for ${s}`,L&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(C({key:V,version:b,value:L}),ve.default.trace?.(ee.message,"(returned stale record)")):x(ee);let j=performance.now()-re;it(j,"cache-resolution",s,null,"fail"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Lr(D).addWrite({key:V,store:i,entry:E,nodeName:"source",before:Ra(B),commit:o((ee,j)=>{if(j?.version!==b)return;let pe=po(V,L,B);if(B){De.put?.(D,V,B),j&&(S.previousResidency=Ce.getResidencyRecord(j.residencyId));let Te,fe=!1,We,St=Dc(Ce.getResidency(B,S));if(St){if(!St.includes(server.hostname))if(Te=B,fe=!0,Ce.getResidencyById)B=void 0;else{B=null;for(let ft in r)B||(B={}),B[ft]=Te[ft]}We=Mc(St)}ve.default.trace?.(`Writing resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),y(V,B,j,ee,fe?In:0,g&&(de||fe)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:We},"put",!!he,Te)}else j&&(De.delete?.(D,V),ve.default.trace?.(`Deleting resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),g||R?y(V,null,j,ee,0,g&&de||null,{user:D?.user},"delete",!!he):Jc(i,j,b))},"commit")})}),()=>{i.unlock(V,b)},ne=>{i.unlock(V,b),z&&ve.default.error?.("Error committing cache update",ne)})})}o(OE,"getFromSource");function Sa(V){if(!V||V.user?.role?.permission?.super_user)return!0;if(V.replicateTo)throw new ot.ClientError("Can not specify replication parameters without super user permissions",403);if(V.replicatedConfirmation)throw new ot.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Sa,"checkContextPermissions");function Ta(V){let E=!1;if(V&&(V-Ye>1&&(E=!0),Ye=V),!(dt===qn&&!E)&&(qn=dt,(0,yl.getWorkerIndex)()===(0,yl.getWorkerCount)()-1))return rt&&clearTimeout(rt),dt?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let b=dt/(1+Ye),I=E?Date.now():Math.ceil((Date.now()-A.getTime())/b)*b+A.getTime(),P=o(L=>{ve.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),rt=setTimeout(()=>Z=Z.then(async()=>{if(P(Math.max(L+dt,Date.now())),i.rootStore.status!=="open"){clearTimeout(rt);return}let D=50,H=new Array(D),C=0,x=Math.pow(Ye,8)*(Al.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),z=_/Math.pow(Math.max(Ye,1),4);ve.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${z}ms`);function ne(re,B,de,he){let Se=re+z-Date.now();if(Se<0)return!0;if(Ye){let ee=i.lastSize;return de&$r&&Gc(he,j=>{j.size&&(ee+=j.size)}),ve.default.trace?.(`shouldEvict adjusted ${Se} ${ee}, ${Se*(re-B)/ee} < ${x}`),Se*(re-B)/ee<x}return!1}o(ne,"shouldEvict");try{let re=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:de,value:he,version:Se,expiresAt:ee,metadataFlags:j}=B,pe;he===null&&!g&&Se+Gse<Date.now()?pe=Jc(i,B,Se):ee!=null&&ne(ee,Se,j,he)&&(pe=Ce.evict(de,he,Se),re++),pe&&(await H[C],H[C]=pe.catch(Te=>{ve.default.error?.("Cleanup error",Te)}),++C>=D&&(C=0)),await Ga()}ve.default.info?.(`Finished cleanup scan for ${s}, evicted ${re} entries`)}catch(re){ve.default.warn?.(`Error in cleanup scan for ${s}:`,re)}S(void 0),Ye=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");P(I)}):void 0}o(Ta,"scheduleCleanup");function Hf(){$=l?.addDeleteRemovalCallback(n,i,(V,E)=>{i.remove(V,E)})}o(Hf,"addDeleteRemoval");function Eu(){(0,yl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Pc){Pc=!0;try{let V=K.name,E=r[V];if(!E)throw new Error(`expiresAt attribute ${K} must be indexed`);for(let S of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let A of E.getValues(S)){let b=i.getEntry(A);b?.value?b.value[V]<Date.now()&&Ce.evict(A,b.value,b.version):i.ifVersion(A,b?.version,()=>E.remove(S,A))}await Ga()}}catch(V){ve.default.error?.("Error in evicting old records",V)}finally{Pc=!1}}},kse).unref()}o(Eu,"runRecordExpirationEviction");function Dc(V){if(V!=null){if(Array.isArray(V))return V;if(typeof V=="number"){if(V>=65536)throw new Error(`Shard id ${V} must be below 65536`);let E=server.shards?.get?.(V);if(E)return ve.default.trace?.(`Shard ${V} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${V} is not defined`)}throw new Error(`Shard or residency list ${V} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Dc,"residencyFromFunction");function Mc(V){if(V){let E=V.join(","),S=d.get([Symbol.for("residency_by_set"),E]);return S||(d.put([Symbol.for("residency_by_set"),E],S=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),S],V),S)}}o(Mc,"getResidencyId");function Ra(V,E){let S=OA(V,i.rootStore);if(S){let A=E;return A?async()=>{await A(),await S()}:()=>S()}return E}o(Ra,"preCommitBlobsForRecordBefore")}function _N(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function ik(){}function Pg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Cg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Cg(+e);case"Float":return e==="null"?null:Cg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Yse.test(e)||(e+="Z");let n=new Date(e);return Cg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Lg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Cg(e){if(isNaN(e))throw new SyntaxError;return e}function ok(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Cs(e,t,r){return e?.then?e.then(t,r):t(e)}function ak(e){return e!=null}function Ps(e){try{return JSON.stringify(e)}catch{return e}}function Wse(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var qa,dh,ck,lk,Al,ot,fh,mh,ve,bl,yl,Lg,gN,Bse,Fse,Hse,kse,Gse,tk,qse,rk,$se,In,Xc,Vse,nk,sk,Kse,KLe,Yse,Ga,w_=ce(()=>{k();qa=require("lmdb"),dh=w(yn()),ck=w(require("lodash")),lk=w(em());Pa();rm();Al=w(oe());tb();ot=w(ge()),fh=w(Co()),mh=w(oi());Me();N_();ve=w(ei());hI();Bc();bl=require("ordered-binary"),yl=w(nt());Li();Lg=w(ie());zc();Wi();zE();uh();gN=w(require("node:fs"));Kn();u_();EN();({sortBy:Bse}=ck.default),{validateAttribute:Fse}=lk.default,Hse=new Uint8Array(9);Hse[8]=192;kse=6e4,Gse=864e5;Al.initSync();tk=Al.get(U.STORAGE_PREFETCHWRITES),qse=1e4,rk=1,$se=2,In=1,Xc=8,Vse=Buffer.allocUnsafeSlow(8192),nk=1978,sk=100,Kse={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},KLe=(0,Lg.convertToMS)(Al.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Dg,"makeTable");o(_N,"attributesAsObject");o(ik,"noop");Yse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Pg,"coerceType");o(Cg,"rejectNaN");o(ok,"isDescendantId");Ga=o(()=>new Promise(setImmediate),"rest");o(Cs,"when");o(ak,"exists");o(Ps,"stringify");o(Wse,"hasOtherProcesses")});function Mg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function vg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var dk=ce(()=>{o(Mg,"euclideanDistance");o(vg,"cosineDistance")});var fk,mk,nd,zi,rd,zse,jse,Ug,hk=ce(()=>{dk();fk=require("msgpackr"),mk=w(ei()),nd=w(ge()),zi=(0,mk.loggerWithTag)("HNSW"),rd=Symbol.for("entryPoint"),zse=Symbol.for("key"),jse=10,Ug=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=fk.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Mg:vg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[zse,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(rd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let _=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:_,primaryKey:t};for(let R=0;R<=_;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(rd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),jse),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(rd,i)}for(;h>m;){let _=this.searchLayer(r,l,f,this.efConstruction,h);_.length>0&&(l=_[0].id,f=_[0].node),h--}let p=new Array(m+1);for(let _=0;_<=m;_++)p[_]=[];for(let _=Math.min(m,h);_>=0;_--){let g=this.searchLayer(r,l,f,this.efConstruction,_);g=g.slice(0,this.M<<1),g.length===0&&_===0&&zi.info?.("should not have zero connections for",l);let R=p[_];for(let T=0;T<g.length;T++){let{id:y,distance:N,node:O}=g[T];if(y===i)continue;let F=[];if(this.optimizeRouting){let Y=!1,K=O[_],$=1+this.optimizeRouting*(1+.5*T/this.M);for(let le=0;le<K.length;le++){let{id:ue,distance:se}=K[le],me=1+this.optimizeRouting*(1+.5*le/this.M);for(let Pe=0;Pe<R.length;Pe++){let{id:De,distance:dt}=R[Pe];if(De===ue){N*$>dt+se?Y=!0:se*me>N+dt&&(F.push({fromId:De,toId:y}),F.push({fromId:y,toId:De}));break}}if(Y)break}if(Y)continue}else if(T>=(_>0?this.M:this.M<<1))continue;R.push({id:y,distance:N});for(let{fromId:Y,toId:K}of F){let $=d(Y);$||($=d(Y,this.indexStore.get(Y)));for(let le=0;le<$[_].length;le++)if($[_][le].id===K){Object.isFrozen($[_])&&($[_]=$[_].slice()),$[_].splice(le,1);break}}let Z=c[_],G=Z?.find(({id:Y})=>Y===y);if(G){let Y=Z?.indexOf(G);Z.copied||(Z=[...Z],Z.copied=!0,c[_]=Z),Z.splice(Y,1)}else this.addConnection(y,d(y,O),i,_,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...p})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:h,value:p}of this.indexStore.getRange({start:0,end:1/0}))if(p.level>m){if(l=h,p.level===f)break;m=p.level}}if(l===void 0)this.indexStore.remove(rd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);zi.debug?.("setting entry point to",l),this.indexStore.put(rd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:h}of m){let p=d(h,this.indexStore.get(h));for(let _=0;_<=f;_++)p[_]=p[_]?.filter(({id:g})=>g!==i),p[_].length===0&&(zi.info?.("node was left orphaned, will reindex",h),u.set(p.primaryKey,p.vector))}}function d(f,m){let h=a.get(f);return!h&&m&&(h={...m},a.set(f,h)),h}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(rd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((h,p)=>h.distance-p.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:h}of m[i]||[]){if(c.has(h)||h===void 0)continue;c.add(h);let p=this.indexStore.get(h);if(!p)continue;this.nodesVisitedCount++;let _=a(t,p.vector);if(_<f||u.length<s){let g={id:h,distance:_,node:p};l.push(g),u.push(g)}}u.sort((h,p)=>h.distance-p.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new nd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new nd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=vg;else if(s==="euclidean")c=Mg;else{if(s)throw new nd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new nd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new nd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){zi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||zi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){zi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&zi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?zi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Mg:vg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var SN,pk=ce(()=>{hk();SN={HNSW:Ug}});var Et={};we(Et,{database:()=>Wu,databaseEnvs:()=>Uo,databases:()=>He,dropDatabase:()=>SI,dropTableMeta:()=>eie,getDatabases:()=>st,getDefaultCompression:()=>Gg,getTables:()=>Qse,onRemovedDB:()=>Sh,onUpdatedTable:()=>Il,readMetaDb:()=>hh,resetDatabases:()=>ld,table:()=>ze,tables:()=>ln});function Qse(){return Hg||st(),ln||{}}function st(){if(Hg)return He;Hg=!0,od=new Map;let e=(0,Yt.getHdbBasePath)()&&(0,Gt.join)((0,Yt.getHdbBasePath)(),Uc),t=(0,Yt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Yt.get)(U.STORAGE_PATH)||e&&((0,ns.existsSync)(e)?e:(0,Gt.join)((0,Yt.getHdbBasePath)(),vE)),!e)return;if((0,ns.existsSync)(e))for(let n of(0,ns.readdirSync)(e,{withFileTypes:!0})){let s=(0,Gt.basename)(n.name,".mdb");n.isFile()&&(0,Gt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&hh((0,Gt.join)(e,n.name),null,s)}if((0,ns.existsSync)((0,id.getBaseSchemaPath)())){for(let n of(0,ns.readdirSync)((0,id.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Gt.join)((0,id.getBaseSchemaPath)(),n.name),i=(0,Gt.join)((0,id.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ns.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Gt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Gt.join)(i,a.name);hh((0,Gt.join)(s,a.name),(0,Gt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ns.existsSync)(i))for(let c of(0,ns.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Gt.extname)(c.name).toLowerCase()===".mdb"&&hh((0,Gt.join)(i,c.name),(0,Gt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Gt.join)(l.path,(0,Gt.basename)(c+".mdb"));(0,ns.existsSync)(u)&&hh(u,c,n,null,!0)}}for(let n in He){let s=od.get(n);if(s){let i=He[n];n.includes("delete")&&br.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(br.trace(`delete table class ${a}`),delete i[a])}else if(delete He[n],n==="data"){for(let i in ln)delete ln[i];delete ln[kg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,Yt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(He.system?.hdb_analytics?.enableAuditing(),He.system?.hdb_analytics_hostname?.enableAuditing()),He.system)for(let n of r)He.system[n]&&(He.system[n].replicate=!1);return od=null,He}function ld(){Hg=!1;for(let[,e]of Uo)e.needsDeletion=!0;st();for(let[e,t]of Uo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Uo.delete(e);let r=He[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete He[t.databaseName],Eh.forEach(i=>i(t.databaseName));break}}return He}function hh(e,t,r=yN,n,s){let i=new TN.default(e,!1);try{let a=Uo.get(e);a?a.needsDeletion=!1:(a=(0,ad.open)(i),Uo.set(e,a));let c=new cd.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(xg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ns.existsSync)(n)&&(i.path=n,u=(0,ad.open)(i),u.isLegacy=!0):u=m_(a));let d=Tk(r),f=d[kg],m=new Map;for(let{key:h,value:p}of l.getRange({start:!1})){let[_,g]=h.toString().split("/");g===""?g=p.name:g||(g=_,_=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),f?.add(_);let R=m.get(_);R||m.set(_,R={attributes:[]}),(g==null||p.is_hash_attribute)&&(R.primary=p),g!=null&&R.attributes.push(p),Object.defineProperty(p,"key",{value:h,configurable:!0})}for(let[h,p]of m){let{attributes:_,primary:g}=p;if(!g){for(let se of _)if(se.is_hash_attribute||se.isPrimaryKey){g=se;break}if(!g){br.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let R=d[h],T={},y=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Yt.get)(U.LOGGING_AUDITLOG),Z=g.trackDeletes,G=g.expiration,Y=g.eviction,K=g.sealed,$=g.splitSegments,le=g.replicate;if(R)T=R.indices,y=R.attributes,R.schemaVersion++;else{N=g.tableId,N?N>=(l.get(sd)||0)&&(l.putSync(sd,N+1),br.info(`Updating next table id (it was out of sync) to ${N+1} for ${h}`)):(g.tableId=N=l.get(sd),N||(N=1),br.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(sd,N+1),l.putSync(g.key,g));let se=new cd.default(!g.is_hash_attribute,g.is_hash_attribute);if(se.compression=g.compression,se.compression){let me=(0,Yt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Sk;se.compression.threshold=me}O=y_(a.openDB(g.key,se),a),a.databaseName=r,O.tableId=N}let ue;for(let se of _){se.attribute=se.name;try{if(!se.is_hash_attribute&&(se.indexed||se.attribute&&!se.name)){if(!T[se.name]){let Pe=yk(se.key,a,se);T[se.name]=Pe,T[se.name].indexNulls=se.indexNulls}let me=y.find(Pe=>Pe.name===se.name);me?y.splice(y.indexOf(me),1,se):y.push(se),ue=!0}}catch(me){br.error("Error trying to update attribute",se,y,T,me)}}for(let se of y)if(!_.find(Pe=>Pe.name===se.name)){if(se.is_hash_attribute){br.error("Unable to remove existing primary key attribute",se);continue}se.indexed&&(y.splice(y.indexOf(se),1),ue=!0)}if(R)ue&&(R.schemaVersion++,R.updatedAttributes());else{R=Rk(d,h,Dg({primaryStore:O,auditStore:u,audit:F,sealed:K,splitSegments:$,replicate:le,expirationMS:G&&G*1e3,evictionMS:Y&&Y*1e3,trackDeletes:Z,tableName:h,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let se of ph)se(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function Tk(e){let t=He[e];if(t||(e==="data"?t=He[e]=ln:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),od&&!od.has(e)){let r=new Set;t[kg]=r,od.set(e,r)}return t}function Rk(e,t,r){return e[t]=r,r}function Wu({database:e,table:t}){e||(e=yN),st();let r=Tk(e),n=(0,Gt.join)((0,Yt.getHdbBasePath)(),Uc),s=(0,Yt.get)(U.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Yt.get)(U.STORAGE_PATH)||((0,ns.existsSync)(n)?n:(0,Gt.join)((0,Yt.getHdbBasePath)(),vE));let a=(0,Gt.join)(n,(i?t:e)+".mdb"),c=Uo.get(a);if(!c||c.status==="closed"){let l=new TN.default(a,!1);c=(0,ad.open)(l),Uo.set(a,c)}return c.auditStore||(c.auditStore=m_(c)),c}async function SI(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Uo.delete(r.path),r.status==="open"&&(await r.close(),await _h.remove(r.path));if(r||(r=Wu({database:e,table:null}),r.status==="open"&&(await r.close(),await _h.remove(r.path))),e==="data"){for(let n in ln)delete ln[n];delete ln[kg]}delete He[e],Eh.forEach(n=>n(e)),await wA(r)}function yk(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&SN[r.indexed.type]?.useObjectStore,s=new cd.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=SN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):br.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:h}=e;r||(r=yN);let p=Wu({database:r,table:t}),_=He[r];br.trace(`Defining ${t} in ${r}`);let g=_?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,T,y;m==null&&(m=!0);let N=new cd.default(!1);for(let $ of a)$.attribute&&!$.name?($.name=$.attribute,$.indexed=!0):$.attribute=$.name,$.expiresAt&&($.indexed=!0);let O,F;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let $=p.auditStore;T=a.find(me=>me.isPrimaryKey)||{},R=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Gg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,Yt.get)(U.LOGGING_AUDITLOG),n&&(T.expiration=n),s&&(T.eviction=s),u??=!1,T.splitSegments=u,typeof l=="boolean"&&(T.sealed=l),typeof d=="boolean"&&(T.replicate=d),h&&(T.origins?T.origins.includes(h)||T.origins.push(h):T.origins=[h]),br.trace(`${t} table loading, opening primary store`);let le=new cd.default(!1,!0);le.compression=T.compression;let ue=t+"/";if(y=p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N),K(),y.get(ue))return F&&F(),ld(),ze(e);let se=y_(p.openDB(ue,le),p);p.databaseName=r,se.tableId=y.get(sd),br.trace(`Assigning new table id ${se.tableId} for ${t}`),se.tableId||(se.tableId=1),y.put(sd,se.tableId+1),T.tableId=se.tableId,g=Rk(_,t,Dg({primaryStore:se,auditStore:$,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:se.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,O=!0,y.put(ue,T)}let Z=g.indices;y=y||(p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N)),g.dbisDB=y;let G=[];for(let{key:$,value:le}of y.getRange({start:!0})){let[ue,se]=$.toString().split("/");if(se===""&&(se=le.name),se){if(ue!==t)continue}else continue;let me=a.find(De=>De.name===se),Pe=!me?.indexed&&le.indexed&&!le.isPrimaryKey;if((!me||Pe)&&(K(),O=!0,me||y.remove($),Pe)){let De=g.indices[ue];De&&G.push(De)}}let Y=[];try{for(let $ of a||[]){if(($.relationship||$.computed)&&(O=!0,$.relationship))continue;let le=t+"/"+($.name||"");Object.defineProperty($,"key",{value:le,configurable:!0});let ue=y.get(le);if($.isPrimaryKey){if(ue=ue||y.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ue.expiration||void 0)||(+s||void 0)!==(+ue.eviction||void 0)||$.type!==ue.type){let me={...ue};typeof c=="boolean"&&(c&&g.enableAuditing(c),me.audit=c),n&&(me.expiration=+n),s&&(me.eviction=+s),l!==void 0&&(me.sealed=l),d!==void 0&&(me.replicate=d),$.type&&(me.type=$.type),O=!0,K(),y.put(le,me)}continue}ue?.attribute&&!ue.name&&(ue.indexed=!0);let se=!ue||ue.type!==$.type||JSON.stringify(ue.indexed)!==JSON.stringify($.indexed)||ue.nullable!==$.nullable||ue.version!==$.version||JSON.stringify(ue.properties)!==JSON.stringify($.properties)||JSON.stringify(ue.elements)!==JSON.stringify($.elements);if($.indexed){let me=yk(le,p,$);(se||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<gh.workerData?.restartNumber)&&(O=!0,K(),ue=y.get(le),(se||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<gh.workerData?.restartNumber)&&(O=!0,$.indexNulls===void 0&&($.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&($.lastIndexedKey=ue?.lastIndexedKey??void 0,$.indexingPID=process.pid,me.isIndexing=!0,Object.defineProperty($,"dbi",{value:me}),Y.push($))),y.put(le,$)),ue?.indexNulls&&$.indexNulls===void 0&&($.indexNulls=!0),me.indexNulls=$.indexNulls,Z[$.name]=me}else se&&(O=!0,K(),y.put(le,$))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),br.trace(`${t} table loading, running index`),Y.length>0||G.length>0?g.indexingOperation=Zse(g,Y,G):O&&Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,O)for(let $ of ph)$(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),br.trace(`${t} table loaded`),g;function K(){F||p.transactionSync(()=>({then($){F=$}}))}o(K,"startTxn")}async function Zse(e,t,r){try{br.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,ad.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:h}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,h,()=>{for(let p=0;p<l;p++){let _=t[p],g=_.name,R=_.dbi;try{let T=_.resolve,y=m&&(T?T(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let N=(0,Ek.getIndexedValues)(y);if(N)for(let O=0,F=N.length;O<F;O++)R.put(N[O],f)}catch(T){a[g]||(a[g]=!0,br.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,br.error(p)}),gh.workerData&&gh.workerData.restartNumber!==gk.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=f,e.dbisDB.put(p.key,p);if(i)return}d>Jse?await s:d>Xse&&await new Promise(p=>setImmediate(p))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),br.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){br.error("Error in indexing",n)}}function eie({table:e,database:t}){let r=Wu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Il(e){return ph.push(e),{remove(){let t=ph.indexOf(e);t>-1&&ph.splice(t,1)}}}function Sh(e){return Eh.push(e),{remove(){let t=Eh.indexOf(e);t>-1&&Eh.splice(t,1)}}}function Gg(){let e=(0,Yt.get)(U.STORAGE_COMPRESSION),t=(0,Yt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Yt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Sk,n={startingOffset:32};return t&&(n.dictionary=_h.readFileSync(t)),r&&(n.threshold=r),e&&n}var Yt,xg,ad,Gt,ns,id,cd,TN,_h,RN,Ek,Bg,Fg,gh,_k,gk,br,yN,kg,Sk,ln,He,sd,ph,Eh,Hg,Uo,od,Jse,Xse,Me=ce(()=>{Yt=w(oe()),xg=w(Vt()),ad=require("lmdb"),Gt=require("path"),ns=require("fs"),id=w(It());w_();cd=w(Im()),TN=w(Nm());k();_h=w(require("fs-extra")),RN=w(Xs()),Ek=w(yn()),Bg=w(Co()),Fg=w(oi()),gh=require("worker_threads"),_k=w(Q()),gk=w(nt());Li();zc();Kn();pk();br=(0,_k.forComponent)("storage"),yN="data",kg=Symbol("defined-tables"),Sk=((0,Yt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Yt.initSync)();ln=Object.create(null),He=Object.create(null);(0,RN._assignPackageExport)("databases",He);(0,RN._assignPackageExport)("tables",ln);sd=Symbol.for("next-table-id"),ph=[],Eh=[],Uo=new Map;o(Qse,"getTables");o(st,"getDatabases");o(ld,"resetDatabases");o(hh,"readMetaDb");o(Tk,"ensureDB");o(Rk,"setTable");o(Wu,"database");o(SI,"dropDatabase");o(yk,"openIndex");o(ze,"table");Jse=1e3,Xse=10;o(Zse,"runIndexing");o(eie,"dropTableMeta");o(Il,"onUpdatedTable");o(Sh,"onRemovedDB");o(Gg,"getDefaultCompression")});var ie=M(be=>{"use strict";var $a=require("path"),wk=require("fs-extra"),vn=Q(),Ak=require("fs-extra"),qg=require("os"),tie=require("net"),rie=require("recursive-iterator"),Ir=(k(),v(W)),{PACKAGE_ROOT:nie}=bt(),sie=tA(),bk=require("papaparse"),$g=require("moment"),{inspect:iie}=require("util"),Ik=require("is-number"),oie=require("minimist"),aie=require("https"),cie=require("http"),lie=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,Ok=require("util").promisify(setTimeout),uie=100,die=5,fie="",mie=4,Nk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=ss;be.isEmptyOrZeroLength=ji;be.arrayHasEmptyValues=Eie;be.arrayHasEmptyOrZeroLengthValues=_ie;be.buildFolderPath=gie;be.isBoolean=Ck;be.errorizeMessage=hie;be.stripFileExtension=Tie;be.autoCast=Rie;be.autoCastJSON=Pk;be.autoCastJSONDeep=bN;be.removeDir=yie;be.compareVersions=Aie;be.isCompatibleDataVersion=bie;be.escapeRawValue=Iie;be.unescapeValue=Nie;be.stringifyProps=wie;be.timeoutPromise=Cie;be.isClusterOperation=Lie;be.getClusterUser=Mie;be.checkGlobalSchemaTable=Die;be.getHomeDir=Dk;be.getPropsFilePath=Oie;be.promisifyPapaParse=vie;be.removeBOM=Mk;be.createEventPromise=Uie;be.checkProcessRunning=xie;be.checkSchemaTableExist=Bie;be.checkSchemaExists=vk;be.checkTableExists=Uk;be.getStartOfTomorrowInSeconds=Fie;be.getLimitKey=Hie;be.isObject=Sie;be.isNotEmptyAndHasValue=pie;be.autoCasterIsNumberCheck=Lk;be.backtickASTSchemaItems=kie;be.isPortTaken=Pie;be.createForkArgs=Gie;be.autoCastBoolean=qie;be.asyncSetTimeout=Ok;be.getTableHashAttribute=$ie;be.doesSchemaExist=Vie;be.doesTableExist=Kie;be.stringifyObj=Yie;be.ms_to_time=Wie;be.changeExtension=zie;be.getEnvCliRootPath=IN;be.noBootFile=jie;be.httpRequest=Qie;be.transformReq=Jie;be.convertToMS=Xie;be.PACKAGE_ROOT=nie;function hie(e){return e instanceof Error?e:new Error(e)}o(hie,"errorizeMessage");function ss(e){return e==null}o(ss,"isEmpty");function pie(e){return!ss(e)&&(e||e===0||e===""||Ck(e))}o(pie,"isNotEmptyAndHasValue");function ji(e){return ss(e)||e.length===0||e.size===0}o(ji,"isEmptyOrZeroLength");function Eie(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}o(Eie,"arrayHasEmptyValues");function _ie(e){if(ji(e))return!0;for(let t=0;t<e.length;t++)if(ji(e[t]))return!0;return!1}o(_ie,"arrayHasEmptyOrZeroLengthValues");function gie(...e){try{return e.join($a.sep)}catch{console.error(e)}}o(gie,"buildFolderPath");function Ck(e){return ss(e)?!1:e===!0||e===!1}o(Ck,"isBoolean");function Sie(e){return ss(e)?!1:typeof e=="object"}o(Sie,"isObject");function Tie(e){return ji(e)?fie:e.slice(0,-mie)}o(Tie,"stripFileExtension");function Rie(e){return ss(e)||e===""||typeof e!="string"?e:Nk[e]!==void 0?Nk[e]:Lk(e)===!0?Number(e):lie.test(e)?new Date(e):e}o(Rie,"autoCast");function Pk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Pk,"autoCastJSON");function bN(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=bN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=bN(r);n!==r&&(e[t]=n)}return e}else return Pk(e)}o(bN,"autoCastJSONDeep");function Lk(e){if(e.startsWith("0.")&&Ik(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ik(e))}o(Lk,"autoCasterIsNumberCheck");async function yie(e){if(ji(e))throw new Error(`Directory path: ${e} does not exist`);try{await Ak.emptyDir(e),await Ak.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}o(yie,"removeDir");function Aie(e,t){if(ji(e)){vn.info("Invalid current version sent as parameter.");return}if(ji(t)){vn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(Aie,"compareVersions");function bie(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(bie,"isCompatibleDataVersion");function Iie(e){if(ss(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}o(Iie,"escapeRawValue");function Nie(e){if(ss(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Nie,"unescapeValue");function wie(e,t){if(ss(e))return vn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+qg.EOL}!ji(n)&&n[0]===";"?r+=" "+n+s+qg.EOL:ji(n)||(r+=n+"="+s+qg.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(wie,"stringifyProps");function Dk(){let e;try{e=qg.homedir()}catch{e=process.env.HOME}return e}o(Dk,"getHomeDir");function Oie(){let e=$a.join(Dk(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return wk.existsSync(e)||(e=$a.join(__dirname,"../","hdb_boot_properties.file")),e}o(Oie,"getPropsFilePath");function Cie(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Cie,"timeoutPromise");async function Pie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=tie.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(Pie,"isPortTaken");function Lie(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(Lie,"isClusterOperation");function Die(e,t){let r=(Me(),v(Et)).getDatabases();if(!r[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Die,"checkGlobalSchemaTable");function Mie(e,t){if(ss(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ss(e)||ji(e)){vn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(Mie,"getClusterUser");function vie(){bk.parsePromise=function(e,t,r){return new Promise(function(n,s){bk.parse(e,{header:!0,transformHeader:Mk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(vie,"promisifyPapaParse");function Mk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Mk,"removeBOM");function Uie(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${iie(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}o(Uie,"createEventPromise");async function xie(e){let t=!0,r=0;do await Ok(uie*r++),(await sie.findPs(e)).length>0&&(t=!1);while(t&&r<die);if(t)throw new Error(`process ${e} was not started`)}o(xie,"checkProcessRunning");function Bie(e,t){let r=vk(e);if(r)return r;let n=Uk(e,t);if(n)return n}o(Bie,"checkSchemaTableExist");function vk(e){let{getDatabases:t}=(Me(),v(Et));if(!t()[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(vk,"checkSchemaExists");function Uk(e,t){let{getDatabases:r}=(Me(),v(Et));if(!r()[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Uk,"checkTableExists");function Fie(){let e=$g().utc().add(1,"d").startOf("d").unix(),t=$g().utc().unix();return e-t}o(Fie,"getStartOfTomorrowInSeconds");function Hie(){return $g().utc().format("DD-MM-YYYY")}o(Hie,"getLimitKey");function kie(e){try{let t=new rie(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){vn.error("Got an error back ticking items."),vn.error(t)}}o(kie,"backtickASTSchemaItems");function Gie(e){return[e]}o(Gie,"createForkArgs");function qie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(qie,"autoCastBoolean");function $ie(e,t){let{getDatabases:r}=(Me(),v(Et)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o($ie,"getTableHashAttribute");function Vie(e){let{getDatabases:t}=(Me(),v(Et));return t()[e]!==void 0}o(Vie,"doesSchemaExist");function Kie(e,t){let{getDatabases:r}=(Me(),v(Et));return r()[e]?.[t]!==void 0}o(Kie,"doesTableExist");function Yie(e){try{return JSON.stringify(e)}catch{return e}}o(Yie,"stringifyObj");function Wie(e){let t=$g.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(Wie,"ms_to_time");function zie(e,t){let r=$a.basename(e,$a.extname(e));return $a.join($a.dirname(e),r+t)}o(zie,"changeExtension");function IN(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=oie(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(IN,"getEnvCliRootPath");var AN;function jie(){if(AN)return AN;let e=IN();if(IN()&&wk.pathExistsSync($a.join(e,Ir.HDB_CONFIG_FILE)))return AN=!0,!0}o(jie,"noBootFile");function Qie(e,t){let r;return e.protocol==="http:"?r=cie:r=aie,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(Qie,"httpRequest");function Jie(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Jie,"transformReq");function Xie(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(Xie,"convertToMS");var Vg=tn()});var Gk=M((mDe,kk)=>{"use strict";var{promises:ud,createReadStream:Zie,createWriteStream:eoe}=require("fs"),{createGzip:toe}=require("zlib"),{promisify:roe}=require("util"),{pipeline:noe}=require("stream"),soe=roe(noe),wN=require("path"),Hk=oe();Hk.initSync();var Kg=Q(),{CONFIG_PARAMS:ioe,ITC_EVENT_TYPES:dDe}=(k(),v(W)),{onMessageFromWorkers:fDe}=nt(),{convertToMS:xk}=ie(),{onStorageReclamation:ooe}=(u_(),v(Bv)),aoe=6e4,coe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",loe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",NN,Bk;kk.exports=uoe;function uoe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(ooe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(coe);if(!i)throw new Error(loe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=xk(r));let d;return NN=Date.now(),Kg.trace("Log rotate enabled, maxSize:",t,"interval:",r),Bk=setInterval(async()=>{if(l){let f;f=await ud.stat(e.path),f.size>=l&&(d=await Fk(e.path,i))}if(u&&Date.now()-NN>=u&&(d=await Fk(e.path,i),NN=Date.now()),n||c){let f=xk(n??"1M")/(1+c);c=0;let m=await ud.readdir(i);for(let h of m)try{let p=await ud.stat(wN.join(i,h));Date.now()-p.mtimeMs>f&&await ud.unlink(wN.join(i,h))}catch(p){Kg.error("Error trying to remove log",h,p)}}},a??aoe).unref(),{end(){clearInterval(Bk)},getLastRotatedLogPath(){return d}}}o(uoe,"logRotator");async function Fk(e,t){let r=Hk.get(ioe.LOGGING_ROTATION_COMPRESS),n=wN.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await ud.rename(e,n),r&&(e=n,n+=".gz",await soe(Zie(e),toe(),eoe(n)),await ud.unlink(e)),Kg.closeLogFile(),Kg.notify(`hdb.log rotated, old log moved to ${n}`),n}o(Fk,"moveLogFile")});var Yk={};we(Yk,{RootConfigWatcher:()=>ON});var qk,$k,Vk,Yg,Kk,ON,Wk=ce(()=>{qk=w(require("chokidar")),$k=require("node:fs/promises"),Vk=w(wt()),Yg=require("node:stream"),Kk=require("yaml"),ON=class extends Yg.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;constructor(){super(),this.#e=(0,Vk.getConfigFilePath)(),this.#t=qk.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,$k.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,Kk.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}ready(){return(0,Yg.once)(this,"ready")}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((gDe,eS)=>{"use strict";var xo=require("fs-extra"),{workerData:doe,threadId:foe,isMainThread:eG}=require("worker_threads"),yh=require("path"),tG=require("yaml"),rG=require("properties-reader"),Fr=(k(),v(W)),zk=xc(),moe=require("os"),{PACKAGE_ROOT:UN}=bt(),{_assignPackageExport:hoe}=Xs(),{Console:poe}=require("console"),jk=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),Qk=new Map,{join:Bo}=yh,Jk=1e4,tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Eoe={STDOUT:"stdOut",STDERR:"stdErr"},_De=Bo(UN,"logs"),_oe=Bo(UN,"config/yaml/",Fr.HDB_DEFAULT_CONFIG_FILE),goe=1e4,Ah,bh,Wg,Qi,PN,CN,jg,Pt,Un,Qg,Jg,dd,Rh,Th;function zg(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=yh.dirname(n)):t.root?n=Bo(t.root,PN):(n=Pt.path,t.root||(t.root=yh.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=tr[t.level]??Pt?.level??tr.info,nG(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Pt.path===e.path&&r)}o(zg,"updateLogger");function nG(e){let t=e.conditional??(e.conditional={});t.notify=tr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=tr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=tr.error>=e.level?e.error.bind(e):void 0,t.warn=tr.warn>=e.level?e.warn.bind(e):void 0,t.info=tr.info>=e.level?e.info.bind(e):void 0,t.debug=tr.debug>=e.level?e.debug.bind(e):void 0,t.trace=tr.trace>=e.level?e.trace.bind(e):void 0}o(nG,"updateConditional");async function LN(){Th||(Th=new Boe,await Th.ready(),Th.on("change",LN));let e=Th.config,t=e.logging??{};zg(Pt,t),jg=Pt.path,Ah=t.console??!1,t.external&&zg(Un,t.external);for(let r in e){let n=e[r];n.logging?zg(Pt.forComponent(r),n.logging,r):Pt.hasComponent(r)&&zg(Pt.forComponent(r),t,r)}}o(LN,"updateLogSettings");var DN=class extends poe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){un="trace",this.level<=tr.trace&&super.info(...t),un="info"}debug(...t){un="debug",this.level<=tr.debug&&super.info(...t),un="info"}info(...t){un="info",this.level<=tr.info&&super.info(...t),un="info"}warn(...t){un="warn",this.level<=tr.warn&&super.warn(...t),un="info"}error(...t){un="error",this.level<=tr.error&&super.error(...t),un="info"}fatal(...t){dd=!0;try{un="fatal",this.level<=tr.fatal&&super.error(...t),un="info"}finally{dd=!1}}notify(...t){dd=!0;try{un="notify",this.level<=tr.notify&&super.info(...t),un="info"}finally{dd=!1}}withTag(t){return iG(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};Rh===void 0&&sG();eS.exports={notify:Noe,fatal:woe,error:vN,warn:Ooe,info:Aoe,debug:Ioe,trace:boe,logLevel:Qi,loggerWithTag:iG,suppressLogging:Roe,initLogSettings:sG,logCustomLevel:Coe,closeLogFile:oG,createLogger:Zg,logsAtLevel:Soe,getLogFilePath:o(()=>jg,"getLogFilePath"),forComponent:o(e=>Pt.forComponent(e),"forComponent"),setMainLogger:Uoe,setLogLevel:Loe,OUTPUTS:Eoe,AuthAuditLog:xoe,start:LN,startOnMainThread:LN,errorToString:voe};eS.exports.externalLogger={notify(...e){Un.notify(...e)},fatal(...e){Un.fatal(...e)},error(...e){Un.error(...e)},warn(...e){Un.warn(...e)},info(...e){Un.info(...e)},debug(...e){Un.debug(...e)},trace(...e){Un.trace(...e)},withTag(e){return Un.withTag(e)},loggerWithTag(e){return Un.withTag(e)}};hoe("logger",eS.exports.externalLogger);function Soe(e){return tr[Qi]<=tr[e]}o(Soe,"logsAtLevel");function sG(e=!1){try{if(Rh===void 0||e){oG();let t=Poe(),r=zk(["ROOTPATH"]);try{Rh=rG(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!xo.pathExistsSync(Bo(r.ROOTPATH,Fr.HDB_CONFIG_FILE)))throw s}let n;if({level:Qi,configLogPath:CN,toFile:bh,logConsole:Ah,rotation:n,toStream:Wg}=Doe(r.ROOTPATH?Bo(r.ROOTPATH,Fr.HDB_CONFIG_FILE):Rh.get("settings_path")),PN=Fr.LOG_NAMES.HDB,jg=Bo(CN,PN),Pt=Zg({path:jg,level:Qi,stdStreams:Wg,rotation:n}),Un=Pt.forComponent("external"),Un.tag=null,eG)try{require("segfault-handler").registerHandler(Bo(CN,"crash.log"))}catch{}}}catch(t){if(Rh=void 0,t.code===Fr.NODE_ERROR_CODES.ENOENT||t.code===Fr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=zk(Object.keys(Fr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Fr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Fr.CONFIG_PARAMS.LOGGING_LEVEL){Qi=a;continue}i===Fr.CONFIG_PARAMS.LOGGING_CONSOLE&&(Ah=i)}let{defaultLevel:n}=Moe();bh=!1,Wg=!0,Qi=Qi===void 0?n:Qi,Pt=Zg({level:Qi}),Un=Pt.forComponent("external"),Un.tag=null;return}throw vN("Error initializing log settings"),vN(t),t}process.env.DEV_MODE&&(Wg=!0),Toe()}o(sG,"initLogSettings");var Va=!0;function Toe(){bh&&(process.stdout.write=function(e){return typeof e=="string"&&Va&&Ah&&(e=e.toString(),e[e.length-1]===`
|
|
16
|
-
`&&(e=e.slice(0,-1)),Jg(e)),
|
|
17
|
-
`&&(e=e.slice(0,-1)),Jg(e)),
|
|
13
|
+
`)},Gre="certificate.pem",qre="privateKey.pem",$re="caCertificate.pem",Vre="natsCertificate.pem",Kre="natsCaCertificate.pem",Ct={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Yre={tls_certificate:Ct.SERVER,tlsCertificateAuthority:Ct.CA,customFunctions_tls_certificate:Ct.SERVER,customFunctionsTlsCertificateAuthority:Ct.CA,operationsApi_tls_certificate:Ct["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ct["OPERATIONS-CA"]},Wre={[Ct.SERVER]:2,[Ct.DEFAULT]:1},zre={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},jre={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Qre={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},Jre={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},Xre={[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1};cn.CERTIFICATE_PEM_NAME=Gre;cn.PRIVATEKEY_PEM_NAME=qre;cn.CA_PEM_NAME=$re;cn.CERT_NAME=Ct;cn.CERT_CONFIG_NAME_MAP=Yre;cn.CERT_PREFERENCE_APP=Wre;cn.CERT_PREFERENCE_OPS=zre;cn.CERT_PREFERENCE_REP=jre;cn.CA_CERT_PREFERENCE_REP=Qre;cn.CA_CERT_PREFERENCE_OPS=Jre;cn.CA_CERT_PREFERENCE_APP=Xre;cn.CERTIFICATE_VALUES=kre;cn.NATS_CERTIFICATE_PEM_NAME=Vre;cn.NATS_CA_PEM_NAME=Kre});var WI=M((XPe,QF)=>{"use strict";var zF=require("fs-extra"),ye=require("joi"),Zre=require("os"),{boolean:Ge,string:Rt,number:ur,array:Fa}=ye.types(),{totalmem:KF}=require("os"),_l=require("path"),ene=Q(),YI=ie(),JPe=KI(),YF=(k(),v(Y)),tne=dt(),WF="log",rne="components",nne="Invalid logging.rotation.maxSize unit. Available units are G, M or K",sne="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",ine="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",one="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",ane="rootPath config parameter is undefined",vn=ye.alternatives([ur.min(0),Rt]).optional().empty(null),hg=ye.alternatives([Fa.items(Rt,{host:Rt.required(),port:vn},{hostname:Rt.required(),port:vn}).empty(null),Fa.items(Rt)]),Vi,jF=!1;QF.exports={configValidator:cne,routesValidator:hne,routeConstraints:hg};function cne(e,t=!1){if(jF=t,Vi=e.rootPath,YI.isEmpty(Vi))throw ane;let r=Ge.optional(),n=ur.min(0).max(1e3).empty(null).default(mne),s=Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zm),i=Rt.optional().empty(null),a=Rt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ye.string().empty(null).default(Zm),l=ye.custom(une).empty(null).default(Zm),u=e.clustering?.enabled,d=ye.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ye.object({enabled:r,hubServer:ye.object({cluster:ye.object({name:ye.required().empty(null),network:ye.object({port:vn,routes:hg}).required()}).required(),leafNodes:ye.object({network:ye.object({port:vn}).required()}).required(),network:ye.object({port:vn}).required()}).required(),leafServer:ye.object({network:ye.object({port:vn,routes:hg}).required(),streams:ye.object({maxAge:ur.min(120).allow(null).optional(),maxBytes:ur.min(1).allow(null).optional(),maxMsgs:ur.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ye.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ge.optional(),databaseLevel:Ge.optional(),tls:ye.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ge.required(),verify:Ge.optional()}),user:Rt.optional().empty(null)}).optional():f=ye.object({enabled:r,tls:ye.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ge.optional()})}).optional(),ye.object({authentication:ye.alternatives(ye.object({authorizeLocal:Ge,cacheTTL:ur.required(),cookie:ye.object({domains:Fa.items(Rt).optional(),expires:Rt.optional()}),enableSessions:Ge,hashFunction:Rt.valid("md5","sha256","argon2id").optional().empty(null)}),Ge).optional(),analytics:ye.object({aggregatePeriod:ur,replicate:Ge.optional()}),replication:ye.object({hostname:ye.alternatives(Rt,ur).optional().empty(null),url:Rt.optional().empty(null),port:vn,securePort:vn,routes:Fa.optional().empty(null),databases:ye.alternatives(Rt,Fa),enableRootCAs:Ge.optional(),copyTablesToCatchUp:Ge.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ye.object({enabled:r}).required(),logging:ye.object({auditAuthEvents:ye.object({logFailed:Ge,logSuccessful:Ge}),file:Ge.required(),level:ye.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ye.object({enabled:Ge.optional(),compress:Ge.optional(),interval:Rt.custom(fne).optional().empty(null),maxSize:Rt.custom(dne).optional().empty(null),path:Rt.optional().empty(null).default(Zm)}).required(),root:s,stdStreams:Ge.required(),auditLog:Ge.required()}).required(),operationsApi:ye.object({network:ye.object({cors:Ge.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),keepAliveTimeout:ur.min(1).optional(),port:vn,domainSocket:ye.optional().empty("hdb/operations-server").default(Zm),securePort:vn,timeout:ur.min(1).optional()}).optional(),tls:ye.alternatives([ye.array().items(d),d])}).required(),rootPath:Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ye.object({network:ye.object({port:vn,securePort:vn,mtls:ye.alternatives([Ge.optional(),ye.object({user:Rt.optional(),certificateAuthority:i,required:Ge.optional()})])}).required(),webSocket:Ge.optional(),requireAuthentication:Ge.optional()}),http:ye.object({compressionThreshold:ur.optional(),cors:Ge.optional(),corsAccessList:Fa.optional(),headersTimeout:ur.min(1).optional(),port:vn,securePort:vn,maxHeaderSize:ur.optional(),mtls:ye.alternatives([Ge.optional(),ye.object({user:Rt.optional(),certificateAuthority:i,required:Ge.optional()})]),threadRange:ye.alternatives([Fa.optional(),Rt.optional()])}).required(),threads:ye.alternatives(n.optional(),ye.object({count:n.optional(),debug:ye.alternatives(Ge.optional(),ye.object({startingPort:ur.min(1).optional(),host:Rt.optional(),waitForDebugger:Ge.optional()})),maxHeapMemory:ur.min(0).optional()})),storage:ye.object({writeAsync:Ge.required(),overlappingSync:Ge.optional(),caching:Ge.optional(),compression:ye.alternatives([Ge.optional(),ye.object({dictionary:Rt.optional(),threshold:ur.optional()})]),compactOnStart:Ge.optional(),compactOnStartKeepBackup:Ge.optional(),noReadAhead:Ge.optional(),path:l,prefetchWrites:Ge.optional(),maxFreeSpaceToLoad:ur.optional(),maxFreeSpaceToRetain:ur.optional()}).required(),ignoreScripts:Ge.optional(),tls:ye.alternatives([ye.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(cne,"configValidator");function lne(e){return jF||zF.existsSync(e)?null:`Specified path ${e} does not exist.`}o(lne,"doesPathExist");function une(e,t){ye.assert(e,Rt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=lne(e);if(r)return t.message(r)}o(une,"validatePath");function dne(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(nne);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(ine):e}o(dne,"validateRotationMaxSize");function fne(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(sne);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(one):e}o(fne,"validateRotationInterval");function mne(e,t){let r=t.state.path.join("."),n=Zre.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||KF();return i=Math.round(Math.min(i,KF())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),ene.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(mne,"setDefaultThreads");function Zm(e,t){let r=t.state.path.join(".");if(!YI.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(YI.isEmpty(Vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return _l.join(Vi,rne);case"logging.root":return _l.join(Vi,WF);case"clustering.leafServer.streams.path":return _l.join(Vi,"clustering","leaf");case"storage.path":let n=_l.join(Vi,YF.LEGACY_DATABASES_DIR_NAME);return zF.existsSync(n)?n:_l.join(Vi,YF.DATABASES_DIR_NAME);case"logging.rotation.path":return _l.join(Vi,WF);case"operationsApi.network.domainSocket":return r==null?null:_l.join(Vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(Zm,"setDefaultRoot");function hne(e){let t=ye.object({routes:hg});return tne.validateBySchema({routes:e},t)}o(hne,"routesValidator")});var wt=M(er=>{"use strict";var ws=(k(),v(Y)),Ar=ie(),dr=Q(),{configValidator:pne,routesValidator:JF}=WI(),ln=require("fs-extra"),ZF=require("yaml"),es=require("path"),Ene=require("is-number"),eH=require("properties-reader"),_ne=require("lodash"),{handleHDBError:gne}=_e(),{HTTP_STATUS_CODES:Sne,HDB_ERROR_MSGS:Ju}=rn(),{server:Tne}=(Dr(),v($f)),{PACKAGE_ROOT:tH}=bt(),{DATABASES_PARAM_CONFIG:eh,CONFIG_PARAMS:Zn,CONFIG_PARAM_MAP:ui}=ws,Rne="Unable to get config value because config is uninitialized",yne="Config successfully initialized",Ane="Error backing up config file",bne="Empty parameter sent to getConfigValue",rH=es.join(tH,"config","yaml",ws.HDB_DEFAULT_CONFIG_FILE),Ine=es.join(tH,"config","yaml","defaultNatsConfig.yaml"),Nne="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",XF={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},pg,kt,Eg;er.createConfigFile=wne;er.getDefaultConfig=One;er.getConfigValue=sH;er.initConfig=_g;er.flattenConfig=Xu;er.updateConfigValue=iH;er.updateConfigObject=Pne;er.getConfiguration=Mne;er.setConfiguration=vne;er.readConfigFile=JI;er.getClusteringRoutes=Une;er.initOldConfig=oH;er.getConfigFromFile=xne;er.getConfigFilePath=gl;er.addConfig=Bne;er.deleteConfigFromFile=Fne;er.getConfigObj=Hne;er.resolvePath=zI;er.getFlatConfigObj=kne;function zI(e){if(e?.startsWith("~/"))return es.join(Ar.getHomeDir(),e.slice(1));let t=ae();try{return es.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(zI,"resolvePath");function wne(e,t=!1){let r=Ha(rH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=ZF.parseDocument(ln.readFileSync(Ine,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}pg=Xu(r.toJSON());let n;for(let c in e){let l=ui[c.toLowerCase()];if(l===Zn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=jI(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){dr.error(f)}}}n&&nH(r,n),QI(r,t);let s=r.toJSON();kt=Xu(s);let i=r.getIn(["rootPath"]),a=es.join(i,ws.HDB_CONFIG_FILE);if(ln.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);ln.writeFileSync(a,String(r)),dr.trace(`Config file written to ${a}`)}o(wne,"createConfigFile");function nH(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ar.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(eh.TABLES))for(let i in n[s][eh.TABLES])for(let a in n[s][eh.TABLES][i]){let c=n[s][eh.TABLES][i][a],l=[Zn.DATABASES,s,eh.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Zn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){dr.error("Error parsing schemas CLI/env config arguments",n)}}o(nH,"setSchemasConfig");function One(e){if(pg===void 0){let r=Ha(rH);pg=Xu(r.toJSON())}let t=ui[e.toLowerCase()];if(t!==void 0)return pg[t.toLowerCase()]}o(One,"getDefaultConfig");function sH(e){if(e==null){dr.info(bne);return}if(kt===void 0){dr.trace(Rne);return}let t=ui[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}o(sH,"getConfigValue");function gl(e=Ar.getPropsFilePath()){let t=Ar.getEnvCliRootPath();if(t)return zI(es.join(t,ws.HDB_CONFIG_FILE));let r=eH(e);return zI(r.get(ws.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(gl,"getConfigFilePath");function _g(e=!1){if(kt===void 0||e){let t;if(!Ar.noBootFile()){t=Ar.getPropsFilePath();try{ln.accessSync(t,ln.constants.F_OK|ln.constants.R_OK)}catch(i){throw dr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=gl(t),n;if(r.includes("config/settings.js"))try{oH(r);return}catch(i){if(i.code!==ws.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ha(r)}catch(i){if(i.code===ws.NODE_ERROR_CODES.ENOENT){dr.trace(`HarperDB config file not found at ${r}.
|
|
14
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw dr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Cne(n,r),QI(n);let s=n.toJSON();if(Tne.config=s,kt=Xu(s),kt.logging_rotation_rotate)for(let i in XF)kt[i]&&dr.error(`Config ${XF[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);dr.trace(yne)}}o(_g,"initConfig");function Cne(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],es.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],es.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(dr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);ln.writeFileSync(t,String(e))}}o(Cne,"checkForUpdatedConfig");function QI(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Ju.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Ju.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=pne(r,t);if(n.error)throw Ju.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(QI,"validateConfig");function Pne(e,t){kt===void 0&&(kt={});let r=ui[e.toLowerCase()];if(r===void 0){dr.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}o(Pne,"updateConfigObject");function iH(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&_g();let a=sH(ui.hdb_root),c=es.join(a,ws.HDB_CONFIG_FILE),l=Ha(c),u;if(r&&kt){let m=!1;for(let h in r)if(r[h]!=kt[h.toLowerCase()]){m=!0;break}if(!m){dr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Zn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ui[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=jI(m,t);l.setIn([...h],p)}else for(let m in r){let h=ui[m.toLowerCase()];if(h===Zn.HTTP_SECUREPORT&&r[m]===kt[Zn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===Zn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[Zn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===Zn.DATABASES){u=r[m];continue}if(h?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!h&&(m.endsWith("_package")||m.endsWith("_port"))&&(h=m),h!==void 0){let p=h.split("_"),_=ws.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=jI(h,r[m]);h==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(y){dr.error(y)}}}u&&nH(l,u),QI(l);let d=l.getIn(["rootPath"]),f=es.join(d,ws.HDB_CONFIG_FILE);if(n===!0&&Lne(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);ln.writeFileSync(f,String(l)),s&&(kt=Xu(l.toJSON())),dr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(iH,"updateConfigValue");function Lne(e,t){try{let r=es.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ws.HDB_CONFIG_FILE}.bak`);ln.copySync(e,r),dr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){dr.error(Ane),dr.error(r)}}o(Lne,"backupConfigFile");var Dne=["databases"];function Xu(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),Eg=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!Dne.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Zn[l.toUpperCase()]&&ui[l]&&(s[ui[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Xu,"flattenConfig");function jI(e,t){if(e===Zn.CLUSTERING_NODENAME||e===Zn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(Ene(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ar.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Ar.autoCast(t)}o(jI,"castConfigValue");function Mne(){let e=Ar.getPropsFilePath(),t=gl(e);return Ha(t).toJSON()}o(Mne,"getConfiguration");async function vne(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return iH(void 0,void 0,s,!0),Nne}catch(i){throw typeof i=="string"||i instanceof String?gne(i,i,Sne.BAD_REQUEST,void 0,void 0,!0):i}}o(vne,"setConfiguration");function JI(){let e=Ar.getPropsFilePath();try{ln.accessSync(e,ln.constants.F_OK|ln.constants.R_OK)}catch(n){if(!Ar.noBootFile())throw dr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=gl(e);return Ha(t).toJSON()}o(JI,"readConfigFile");function Ha(e){return ZF.parseDocument(ln.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ha,"parseYamlDoc");function Une(){let e=JI(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ar.isEmptyOrZeroLength(t)?[]:t;let r=JF(t);if(r)throw Ju.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ar.isEmptyOrZeroLength(n)?[]:n;let s=JF(n);if(s)throw Ju.CONFIG_VALIDATION(s.message);if(!Ar.isEmptyOrZeroLength(n)&&!Ar.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Ar.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ju.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Une,"getClusteringRoutes");function oH(e){let t=eH(e);kt={};for(let r in ui){let n=t.get(r.toUpperCase());if(Ar.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ui[r].toLowerCase();s===Zn.LOGGING_ROOT?kt[s]=es.dirname(n):kt[s]=n}return kt}o(oH,"initOldConfig");function xne(e){let t=JI();return _ne.get(t,e.replaceAll("_","."))}o(xne,"getConfigFromFile");async function Bne(e,t){let r=Ha(gl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await ln.writeFile(gl(),String(r))}o(Bne,"addConfig");function Fne(e){let t=gl(Ar.getPropsFilePath()),r=Ha(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=es.join(n,ws.HDB_CONFIG_FILE);ln.writeFileSync(s,String(r))}o(Fne,"deleteConfigFromFile");function Hne(){return Eg||(_g(),Eg)}o(Hne,"getConfigObj");function kne(){return kt||_g(),kt}o(kne,"getFlatConfigObj")});var ts=M((rLe,Br)=>{"use strict";var lH="username is required",uH="nothing to update, must supply active, role or password to update",dH="password cannot be an empty string",fH="If role is specified, it cannot be empty.",mH="active must be true or false";Br.exports.addUser=jne;Br.exports.alterUser=Qne;Br.exports.dropUser=Xne;Br.exports.getSuperUser=nse;Br.exports.userInfo=Zne;Br.exports.listUsers=Sg;Br.exports.listUsersExternal=ese;Br.exports.setUsersWithRolesCache=Sl;Br.exports.findAndValidateUser=oN;Br.exports.getClusterUser=sse;Br.exports.getUsersWithRolesCache=rse;Br.exports.USERNAME_REQUIRED=lH;Br.exports.ALTERUSER_NOTHING_TO_UPDATE=uH;Br.exports.EMPTY_PASSWORD=dH;Br.exports.EMPTY_ROLE=fH;Br.exports.ACTIVE_BOOLEAN=mH;var hH=Mn(),Gne=El(),th=(mg(),v(fg)),pH=qF(),rh=on(),rN=Co(),Ki=ie(),EH=require("validate.js"),nN=Q(),{promisify:qne}=require("util"),sN=$i(),ZI=(k(),v(Y)),aH=Ot(),$ne=wt(),Vne=ae(),Kne=No(),{hdbErrors:Yne,ClientError:di}=_e(),{HTTP_STATUS_CODES:Mo,AUTHENTICATION_ERROR_MSGS:XI,HDB_ERROR_MSGS:Zu}=Yne,{UserEventMsg:iN}=oi(),eN=require("lodash"),{server:gg}=(Dr(),v($f)),Wne=Q();gg.getUser=(e,t)=>oN(e,t,t!=null);gg.authenticateUser=(e,t)=>oN(e,t);var _H={username:!0,active:!0,role:!0,password:!0},cH=new Map,zne=qne(Gne.delete),tN=Vne.get(ZI.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??th.HASH_FUNCTION.SHA256,Yi;async function jne(e){let t=EH.cleanAttributes(e,_H),r=pH.addUserValidation(t);if(r)throw new di(r.message);let n=await rh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new di(Zu.ROLE_NAME_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Zu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=sN.encrypt(t.password)),t.password=await th.hash(t.password,tN),t.hash_function=tN,t.role=n[0].id;let s=await hH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(nN.debug(s),await Sl(),s.skipped_hashes.length===1)throw new di(Zu.USER_ALREADY_EXISTS(t.username),Mo.CONFLICT);return rN.signalUserChange(new iN(process.pid)),`${t.username} successfully added`}o(jne,"addUser");async function Qne(e){let t=EH.cleanAttributes(e,_H);if(Ki.isEmptyOrZeroLength(t.username))throw new Error(lH);if(Ki.isEmptyOrZeroLength(t.password)&&Ki.isEmptyOrZeroLength(t.role)&&Ki.isEmptyOrZeroLength(t.active))throw new Error(uH);if(!Ki.isEmpty(t.password)&&Ki.isEmptyOrZeroLength(t.password.trim()))throw new Error(dH);if(!Ki.isEmpty(t.active)&&!Ki.isBoolean(t.active))throw new Error(mH);if(!Ki.isEmpty(t.password)&&!Ki.isEmptyOrZeroLength(t.password.trim())&&(Jne(t.username)&&(t.hash=sN.encrypt(t.password)),t.password=await th.hash(t.password,tN)),t.role==="")throw new Error(fH);if(t.role){let n=await rh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new di(Zu.ALTER_USER_ROLE_NOT_FOUND(t.role),Mo.NOT_FOUND);if(n.length>1)throw new di(Zu.DUP_ROLES_FOUND(t.role),Mo.CONFLICT);t.role=n[0].id}let r=await hH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Sl(),rN.signalUserChange(new iN(process.pid)),r}o(Qne,"alterUser");function Jne(e){let t=!1,r=Yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Jne,"isClusterUser");async function Xne(e){let t=pH.dropUserValidation(e);if(t)throw new di(t.message);if(Yi.get(e.username)===void 0)throw new di(Zu.USER_NOT_EXIST(e.username),Mo.NOT_FOUND);let r=await zne({table:"hdb_user",schema:"system",hash_values:[e.username]});return nN.debug(r),await Sl(),rN.signalUserChange(new iN(process.pid)),`${e.username} successfully deleted`}o(Xne,"dropUser");async function Zne(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=eN.cloneDeep(e.hdb_user);let r=await rh.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(Zne,"userInfo");async function ese(){let e=await Sg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(ese,"listUsersExternal");async function Sg(){let e=await rh.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=eN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await rh.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=eN.cloneDeep(s),s.role=t[s.role],tse(s.role),n.set(s.username,s);return n}o(Sg,"listUsers");function tse(e){if(!e){nN.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(Kne)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(tse,"appendSystemTablesToRole");async function Sl(e=void 0){e?Yi=e:Yi=await Sg()}o(Sl,"setUsersWithRolesCache");async function rse(){return Yi||await Sl(),Yi}o(rse,"getUsersWithRolesCache");async function oN(e,t,r=!0){Yi||await Sl();let n=Yi.get(e);if(!n){if(!r)return{username:e};throw new di(XI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}if(n&&!n.active)throw new di(XI.USER_INACTIVE,Mo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(cH.get(t)===n.password)return s;{let i=th.validate(n.password,t,n.hash_function||th.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)cH.set(t,n.password);else throw new di(XI.GENERIC_AUTH_FAIL,Mo.UNAUTHORIZED)}}return s}o(oN,"findAndValidateUser");async function nse(){Yi||await Sl();for(let[,e]of Yi)if(e.role.role==="super_user")return e}o(nse,"getSuperUser");async function sse(){let e=await Sg(),t=$ne.getConfigFromFile(ZI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==ZI.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=sN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+aH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+aH.SERVER_SUFFIX.ADMIN,r}o(sse,"getClusterUser");var gH=[];gg.invalidateUser=function(e){for(let t of gH)try{t(e)}catch(r){Wne.error("Error invalidating user",r)}};gg.onInvalidatedUser=function(e){gH.push(e)}});var sh=M((oLe,yH)=>{"use strict";var Tl=Q(),rs=(k(),v(Y)),ise=$U(),sLe=ii(),iLe=Ua(),ose=ts(),{validateEvent:SH}=oi(),nh=Jn(),ase=require("process"),{resetDatabases:cse}=(Me(),v(_t)),lse={[rs.ITC_EVENT_TYPES.SCHEMA]:use,[rs.ITC_EVENT_TYPES.USER]:RH};async function use(e){let t=SH(e);if(t){Tl.error(t);return}Tl.trace("ITC schemaHandler received schema event:",e),await ise(e.message),await dse(e.message)}o(use,"schemaHandler");async function dse(e){try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=cse();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Tl.error(t)}}o(dse,"syncSchemaMetadata");var TH=[];async function RH(e){try{try{nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nh.resetReadTxn(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Tl.warn(r)}let t=SH(e);if(t){Tl.error(t);return}Tl.trace(`ITC userHandler ${rs.HDB_ITC_CLIENT_PREFIX}${ase.pid} received user event:`,e),await ose.setUsersWithRolesCache();for(let r of TH)r()}catch(t){Tl.error(t)}}o(RH,"userHandler");RH.addListener=function(e){TH.push(e)};yH.exports=lse});var oi=M((fLe,bH)=>{"use strict";var cLe=Q(),aN=ie(),fse=(k(),v(Y)),{ITC_ERRORS:ih}=rn(),{parentPort:lLe,threadId:mse,isMainThread:hse,workerData:uLe}=require("worker_threads"),{onMessageFromWorkers:pse,broadcast:dLe,broadcastWithAcknowledgement:Ese}=st();bH.exports={sendItcEvent:_se,validateEvent:AH,SchemaEventMsg:gse,UserEventMsg:Sse};var Tg;pse(async(e,t)=>{Tg=Tg||sh(),AH(e),Tg[e.type]&&await Tg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function _se(e){return!hse&&e.message&&(e.message.originator=mse),Ese(e)}o(_se,"sendItcEvent");function AH(e){if(typeof e!="object")return ih.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||aN.isEmpty(e.type))return ih.MISSING_TYPE;if(!e.hasOwnProperty("message")||aN.isEmpty(e.message))return ih.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||aN.isEmpty(e.message.originator))return ih.MISSING_ORIGIN;if(fse.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ih.INVALID_EVENT(e.type)}o(AH,"validateEvent");function gse(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(gse,"SchemaEventMsg");function Sse(e){this.originator=e}o(Sse,"UserEventMsg")});var Co=M((pLe,OH)=>{"use strict";var IH=(k(),v(Y)),hLe=ie(),Rg=Q(),NH=IU(),ed,{sendItcEvent:wH}=oi();function Tse(e){try{Rg.info("signalSchemaChange called with message:",e),ed=ed||sh();let t=new NH(IH.ITC_EVENT_TYPES.SCHEMA,e);return ed.schema(t),wH(t)}catch(t){Rg.error(t)}}o(Tse,"signalSchemaChange");function Rse(e){try{Rg.trace("signalUserChange called with message:",e),ed=ed||sh();let t=new NH(IH.ITC_EVENT_TYPES.USER,e);return ed.user(t),wH(t)}catch(t){Rg.error(t)}}o(Rse,"signalUserChange");OH.exports={signalSchemaChange:Tse,signalUserChange:Rse}});function yg(){return cN||(cN=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),cN}function Ase(e){return e=e.replace(yse,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function bse(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function uN(e){let t=CH.default.createHash("shake128",{outputLength:4}),r;return(0,PH.isIPv6)(e)?r=Ase(e):r=e.toLowerCase(),bse(Uint8Array.from(t.update(r).digest()))}var CH,PH,lN,cN,yse,dN=le(()=>{Me();CH=w(require("crypto")),PH=require("node:net"),lN=new Map;o(yg,"getAnalyticsHostnameTable");yse=/(\d{1,3}\.){3}\d{1,3}$/;o(Ase,"normalizeIPv6");o(bse,"nodeHashToNumber");o(uN,"stableNodeId")});var vo,fN=le(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var wg={};Oe(wg,{addAnalyticsListener:()=>ch,calculateCPUUtilization:()=>zH,diffResourceUsage:()=>jH,recordAction:()=>ot,recordActionBinary:()=>Wr,recordHostname:()=>pN,setAnalyticsEnabled:()=>Ise});function Ise(e){qH=e}function Nse(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 wse(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Ig.set(e,a)}function ot(e,t,r,n,s){if(!qH)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Ig.get(i);a?Nse(e,a):wse(i,e,t,r,n,s),bg||Ose()}function Wr(e,t,r,n,s){ot(!!e,t,r,n,s)}function ch(e){KH.push(e)}function Ose(){bg=performance.now(),setTimeout(async()=>{let e=performance.now()-bg;bg=0;let t=[],r={time:Date.now(),period:e,threadId:Rl.threadId,metrics:t};for(let[s,i]of Ig){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of YH){let m=Math.floor(c*f),h=a[m-1];if(m>l){let p=m-l;if(h===d){let _=u[u.length-1];typeof _=="number"?u[u.length-1]={value:_,count:1+p}:_.count+=p}else u.push(p>1?{value:h,count:p}:h),d=h;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await QH()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Rl.threadId,byThread:!0,...n});for(let s of KH)s(t);Ig=new Map,Rl.parentPort?Rl.parentPort.postMessage({type:VH,report:r}):ZH({report:r})},$H).unref()}async function pN(){let e=De.hostname;Yr.trace?.("recordHostname server.hostname:",e);let t=uN(e);Yr.trace?.("recordHostname nodeId:",t);let r=yg();if(!await r.get(t)){let s={id:t,hostname:e};Yr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function WH(e){let t=lN.get(e);return t?(Yr.trace?.("storeMetric cached nodeId:",t),t):(t=uN(e),Yr.trace?.("storeMetric new nodeId:",t),lN.set(e,t),t)}function td(e,t){let r=WH(De.hostname),n={id:[(0,hN.getNextMonotonicTime)(),r],...t};Yr.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function zH(e,t){let r=e.userCPUTime+e.systemCPUTime;return Yr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function jH(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Cse(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Yr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),td(e,l),n+=c}return n}function LH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=GH.statSync(s.primaryStore.env.path).size,c=Cse(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};td(e,u),Yr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Yr.warn?.("Error getting DB size metrics",s)}}function DH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};td(e,a),Yr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Yr.warn?.("Error getting DB volume metrics",s)}}async function Pse(e,t=6e4){let r=EN(),n=JH(),s=new Promise(N=>{let C=performance.now();setImmediate(()=>{let G=performance.now();G-C>5e3&&Yr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(G-C)+"ms"),C=performance.now()}),n.primaryStore.prefetch([1],()=>{let G=performance.now();G-C>5e3&&Yr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(G-C)+"ms"),N(G-C)})}),i,a=WH(De.hostname);for(let N of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(!(!N.value?.time||N.value?.id[1]!==a)){i=N.value.time;break}if(Date.now()-t<i)return;let c,l=new Map,u=new Map,d=[],f;for(let{key:N,value:C}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!C)continue;if(c){if(N>c+t)break}else c=N;f=N;let{metrics:G,threadId:z}=C;for(let F of G||[]){let{path:$,method:J,type:K,metric:te,count:fe,total:oe,distribution:ge,threads:Pe,...Te}=F;fe||(fe=1);let tt=te+($?"-"+$:"");J!==void 0&&(tt+="-"+J),K!==void 0&&(tt+="-"+K);let xe=l.get(tt);if(xe){if(xe.threads){let nt=xe.threads[z];if(nt)xe=nt;else{xe.threads[z]={...Te};continue}}xe.count||(xe.count=1);let tn=xe.count;for(let nt in Te){let pt=Te[nt];typeof pt=="number"&&(xe[nt]=(xe[nt]*tn+pt*fe)/(tn+fe))}xe.count+=fe,oe>=0&&(xe.total+=oe,xe.ratio=xe.total/xe.count)}else xe={period:t,...F},delete xe.distribution,l.set(tt,xe),xe.byThread&&(xe.threads=[],xe.threads[z]={...Te},d.push(xe));if(ge){ge=ge.map(nt=>typeof nt=="number"?{value:nt,count:1}:nt);let tn=u.get(tt);tn?tn.push(...ge):u.set(tt,ge)}}await QH()}for(let N of d){let{path:C,method:G,type:z,metric:F,count:$,total:J,distribution:K,threads:te,...fe}=N;te=te.filter(oe=>oe);for(let oe in fe){if(typeof N[oe]!="number")continue;let ge=0;for(let Pe of te){let Te=Pe[oe];typeof Te=="number"&&(ge+=Te)}N[oe]=ge}N.count=te.length,delete N.threads,delete N.byThread}for(let[N,C]of u){let G=l.get(N);C.sort((nt,pt)=>nt.value>pt.value?1:-1);let z=G.count-1,F=[],$=0,J=0,K;for(let nt of YH){let pt=z*nt;for(;$<pt;)K=C[J++],$+=K.count,J===1&&$--;let Cc=C[J>1?J-2:0];K||(K=C[0]),F.push(K.value-(K.value-Cc.value)*($-pt)/K.count)}let[te,fe,oe,ge,Pe,Te,tt,xe,tn]=F;Object.assign(G,{p1:te,p10:fe,p25:oe,median:ge,p75:Pe,p90:Te,p95:tt,p99:xe,p999:tn})}let m;for(let[,N]of l)N.time=f,td(n,N),m=!0;let h=Date.now(),{idle:p,active:_}=performance.eventLoopUtilization();if(m||_*10>p){let N={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-MH,active:_-vH,taskQueueLatency:await s,time:h,...process.memoryUsage()};td(n,N)}MH=p,vH=_;let g=process.resourceUsage();g.time=h,g.userCPUTime=g.userCPUTime/1e3,g.systemCPUTime=g.systemCPUTime/1e3,Yr.trace?.(`process.resourceUsage: ${JSON.stringify(g)}`);let y=jH(Ag,g);Yr.trace?.(`diffed resourceUsage: ${JSON.stringify(y)}`),y.time=h,y.period=Ag.time?h-Ag.time:t,y.cpuUtilization=zH(y,y.period);let T={metric:vo.RESOURCE_USAGE,...y};td(n,T),Ag=g;let R=it();LH(n,R),LH(n,{system:R.system}),DH(n,R),DH(n,{system:R.system})}async function UH(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function EN(){return xH||(xH=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function JH(){return BH||(BH=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Mse(){XH=!0;let e=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Pse($H,e),await UH(EN(),Lse),await UH(JH(),Dse)},Math.min(e/2,2147483647)).unref()}function ZH(e,t){let r=e.report;r.threadId=t?.threadId||Rl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(FH+=n.mean*n.count);r.totalBytesProcessed=FH,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(HH.get(t))}),HH.set(t,t.performance.eventLoopUtilization())),r.id=(0,hN.getNextMonotonicTime)(),EN().primaryStore.put(r.id,r),XH||Mse(),vse&&(ek=xse(r))}async function xse(e){if(await ek,!ka){let r=(0,oh.dirname)((0,Ng.getLogFilePath)());try{ka=await(0,mN.open)((0,oh.join)(r,"analytics.log"),"r+")}catch{ka=await(0,mN.open)((0,oh.join)(r,"analytics.log"),"w+")}}let t=(await ka.stat()).size;if(t>Use){let r=Buffer.alloc(t);await ka.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ka.write(r,{position:0}),await ka.truncate(r.length),t=r.length}await ka.write(JSON.stringify(e)+`
|
|
15
|
+
`,t)}var Rl,kH,Ng,oh,mN,hN,ah,GH,Yr,Ig,qH,bg,$H,VH,KH,YH,MH,vH,Ag,QH,Lse,Dse,xH,BH,XH,FH,HH,vse,ek,ka,Use,Wi=le(()=>{Rl=require("worker_threads"),kH=w(st());Me();Ng=w(Q()),oh=require("path"),mN=require("fs/promises"),hN=w(An()),ah=w(ae());k();Dr();GH=w(require("node:fs"));dN();fN();Yr=(0,Ng.forComponent)("analytics").conditional;(0,ah.initSync)();Ig=new Map,qH=(0,ah.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(Ise,"setAnalyticsEnabled");o(Nse,"recordExistingAction");o(wse,"recordNewAction");o(ot,"recordAction");De.recordAnalytics=ot;o(Wr,"recordActionBinary");bg=0,$H=1e3,VH="analytics-report",KH=[];o(ch,"addAnalyticsListener");YH=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(Ose,"sendAnalytics");o(pN,"recordHostname");o(WH,"getHostNodeId");o(td,"storeMetric");o(zH,"calculateCPUUtilization");o(jH,"diffResourceUsage");o(Cse,"storeTableSizeMetrics");o(LH,"storeDBSizeMetrics");o(DH,"storeVolumeMetrics");o(Pse,"aggregation");MH=0,vH=0,Ag={userCPUTime:0,systemCPUTime:0},QH=o(()=>new Promise(setImmediate),"rest");o(UH,"cleanup");Lse=36e5,Dse=31536e6;o(EN,"getRawAnalyticsTable");o(JH,"getAnalyticsTable");(0,kH.setChildListenerByType)(VH,ZH);o(Mse,"startScheduledTasks");FH=0,HH=new Map,vse=!1;o(ZH,"recordAnalytics");Use=1e6;o(xse,"logAnalytics")});function lh(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function tk(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Os(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Os,uh=le(()=>{Os=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(lh,"appendHeader");o(tk,"mergeHeaders")});function Og(e,t,r=Fse){let n;return function(...i){return n?n.length*_N>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();_N=(_N*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var sk,Bse,Fse,rk,Hse,gN,nk,_N,SN=le(()=>{sk=w(ei()),Bse=3e3,Fse=2e4,rk=0,Hse=3e4,gN=3e3,nk=performance.now()+gN,_N=0;o(Og,"throttle");setInterval(()=>{let e=performance.now();e-nk-gN>Bse&&rk+Hse<e&&(sk.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),rk=e),nk=e},gN).unref()});var hk={};Oe(hk,{EVICTED:()=>Xc,INVALIDATED:()=>Nn,coerceType:()=>Pg,makeTable:()=>Dg});function Dg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:h}=e,{expirationMS:p,evictionMS:_,audit:g,trackDeletes:y}=e;_??=0;let{attributes:T}=e;T||(T=[]);let R=zA(i,n,l),N,C,G={},z=Promise.resolve(),F,$,J;for(let V of T)(V.assignCreatedTime||V.name==="__createdtime__")&&(F=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&($=V),V.expiresAt&&(J=V),V.isPrimaryKey&&(G=V);let K,te=[],fe=[],oe=1,ge=2,Pe={},Te={},tt=864e5,xe=0,tn,nt,pt,Cc=!1,Pc,$t,vf,Uf=Al.get(U.REPLICATION_DATABASES);if(Array.isArray(Uf)){for(let V of Uf)if(V.name===c&&V.replicateTo>=0){vf=V.replicateTo;break}}let IE=i.getRange({start:!1,end:!1}).constructor,NE=10,Gy=6;g&&Hf(),mm(i.env.path,V=>{if(C)return Ta(V)});class xf extends cl{static{o(this,"Updatable")}getUpdatedTime(){return Oa.get(this.getRecord())?.version}getExpiresAt(){return Oa.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new Vm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Le extends Ur{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=T;static replicate=h;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=F;static updatedTimeProperty=$;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=d;static schemaDefined=u;static sourcedFrom(E,S){if(S&&(this.sourceOptions=S,(S.expiration||S.eviction||S.scanInterval)&&this.setTTLExpiration(S)),S?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}C=C||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),N=N||E.load;let A=o(L=>{let D=this.sources;if(D=D.filter(H=>H.intermediateSource&&H[L]&&(!H[L].reliesOnPrototype||H.prototype[L])),D.length>0)if(D.length===1){let H=D[0];return(O,x,W)=>{if(O?.source!==H)return H[L](x,W,O)}}else return(H,O,x)=>{let W=[];for(let se of D){if(H?.source===se)break;W.push(se[L](O,x,H))}return Promise.all(W)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1];b.intermediateSource&&(b={});let I=o(L=>{if(b[L]&&(!b[L].reliesOnPrototype||b.prototype[L]))return(D,H,O)=>{if(!D?.source)return b[L](H,O,D)}},"getApplyToCanonicalSource");Pe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},Te={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let P=b.shouldRevalidateEvents;return(async()=>{let L=!1,D,H=o(async(O,x)=>{let W=O.value,se=O.table?ke[c][O.table]:Le;if(c===Kf&&(O.table===gu.ROLE_TABLE_NAME||O.table===gu.USER_TABLE_NAME)&&(L=!0),O.id===void 0&&(O.id=W[se.primaryKey],O.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(O));O.source=E;let ne={residencyId:Mc(O.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:O.nodeId,async:!0},B=O.id,ue=await se.getResource(B,x,ne);switch(O.finished&&await O.finished,O.type){case"put":return P?ue._writeInvalidate(B,W,ne):ue._writeUpdate(B,W,!0,ne);case"patch":return P?ue._writeInvalidate(B,W,ne):ue._writeUpdate(B,W,!1,ne);case"delete":return ue._writeDelete(B,ne);case"publish":case"message":return ue._writePublish(B,W,ne);case"invalidate":return ue._writeInvalidate(B,W,ne);case"relocate":return ue._writeRelocate(B,ne);default:ve.default.error?.("Unknown operation",O.type,O.id)}},"writeUpdate");try{let O=E.subscribe;O&&y==null&&(y=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},W=E.subscribeOnThisThread?E.subscribeOnThisThread((0,yl.getWorkerIndex)(),x):(0,yl.getWorkerIndex)()===0,se=O&&W&&await E.subscribe?.(x);if(se){let ne;for await(let B of se)try{if(!(B.type==="transaction"?B.writes[0]:B)){ve.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(ne?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let Se=[Symbol.for("seq"),B.remoteNodeIds[0]],ee=d.get(Se),j=ee?.nodes;j||(j=[]);for(let Re of B.remoteNodeIds.slice(1)){let de=j.find(We=>We.id===Re);j=j.filter(We=>We.id!==Re||We===de),de||(de={id:Re,seqId:0},j.push(de)),de.seqId=Math.max(ee?.seqId??1,B.localTime),Re===ne?.nodeId&&(de.lastTxnTime=B.timestamp)}let he=Math.max(ee?.seqId??1,B.localTime);ve.default.trace?.("Received txn",c,he,new Date(he),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(Se,{seqId:he,nodes:j})}D=B.localTime}B.onCommit&&ne?.committed.then(B.onCommit);continue}if(ne)if(B.beginTxn)ne.resolve();else{ne.write_promises.push(H(B,ne));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let me=Ft(B,()=>{if(B.type==="transaction"){let Se=[];for(let ee of B.writes)try{Se.push(H(ee,B))}catch(j){throw j.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(B),j}return Promise.all(Se)}else if(B.type==="define_schema"){let Se=this.attributes.slice(0),ee=!1;for(let j of B.attributes)Se.find(he=>he.name===j.name)||(Se.push(j),ee=!0);ee&&(ze({table:s,database:c,attributes:Se,origin:"cluster"}),fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,q.CREATE_TABLE,c,s)))}else return B.beginTxn?(ne=B,ne.write_promises=[H(B,B)],new Promise(Se=>{ne.resolve=()=>Se(Promise.all(ne.write_promises))})):H(B,B)});ne&&(ne.committed=me),L&&me&&!me?.waitingForUserChange&&(me.then(()=>fh.signalUserChange(new mh.UserEventMsg(process.pid))),me.waitingForUserChange=!0),B.onCommit&&(me?me.then(B.onCommit):B.onCommit())}catch(ue){ve.default.error?.("error in subscription handler",ue)}}}catch(O){ve.default.error?.(O)}})(),this}static get isCaching(){return C}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(E,S,A){let b=super.getResource(E,S,A);if(this.loadAsInstance===!1&&(S._freezeRecords=!0),E!=null&&this.loadAsInstance!==!1){Pr(E);try{if(b.getRecord?.())return b;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let I=!A?.async||i.cache?.get?.(E),P=Lr(S),L=P.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ea(E,S,{transaction:L,ensureLoaded:A?.ensureLoaded},I,D=>{if(D?Le._updateResource(b,D):b.#e=null,S.onlyIfCached){if(!b.doesExist())throw new at.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let H=Lc(E,D,S,b);if(H)return P?.disregardReadTxn(),b.#i=!0,S.loadedFromSource=!0,Cs(H,O=>(Le._updateResource(b,O),b))}return b})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(E)),I}}return b}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#r=S?.version}ensureLoaded(){let E=Lc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,Cs(E,S=>{this.#n=S,this.#e=S.value,this.#r=S.version})}static getNewId(){let E=G?.type;if(E==="String"||E==="ID")return super.getNewId();if(!$t){let I=i.getEntry(Symbol.for("id_allocation")),P=I?.value,L;if(P&&P.nodeName===server.hostname&&(!Qse(i)||P.pid===process.pid)){let D=P.start,H=P.end;L=D;for(let O of i.getKeys({start:H,end:D,limit:1,reverse:!0}))L=O}else P=b(I?.version??null),L=P.start;$t=new BigInt64Array([BigInt(L)+1n]),$t=new BigInt64Array(i.getUserSharedBuffer("id",$t.buffer)),$t.maxSafeId=P.end}let S=Number(Atomics.add($t,0,1n)),A=E==="Int"?512:1048576;if(S+A>=$t.maxSafeId){let I=o(P=>{$t.maxSafeId=S+(E==="Int"?1023:4194303);let L=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=P?void 0:i.useReadTransaction(),H=Number($t[0]);for(let W of i.getKeys({start:H+1,end:L,limit:1,transaction:D}))L=W;D?.done();let{value:O,version:x}=i.getEntry(Symbol.for("id_allocation"));if($t.maxSafeId<L){if(O.end>$t.maxSafeId-100)return;ve.default.info?.("New id allocation",S,$t.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:O.start,end:$t.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{ve.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${$t.maxSafeId}, but id of ${L} detected`);let W=b(x);W.alreadyUpdated||Atomics.store($t,0,BigInt(W.start+1)),$t.maxSafeId=W.end}},"updateEnd");S+A===$t.maxSafeId?setImmediate(I):S+100>=$t.maxSafeId&&(ve.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return S;function b(I){let P=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=P/4,D,H,O=!1,x,W;do{x=Math.floor(Math.random()*P),W={start:x,end:x+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let se of i.getKeys({start:x,limit:1,reverse:!0}))D=se;H=P;for(let se of i.getKeys({start:x+1,end:P,limit:1}))H=se;L*=.875,L<1e3&&!O&&(O=!0,ve.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,D,H,L))}while(!(L<H-x&&(L<x-D||D===0)));return i.transactionSync(()=>{let se=i.getEntry(Symbol.for("id_allocation"));return(se?.version??null)==I?(ve.default.info?.("Allocated new id range",W),i.put(Symbol.for("id_allocation"),W,Date.now()),W):(ve.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...se.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,_||(_=0);else if(E&&typeof E=="object")p=E.expiration*1e3,_=(E.eviction||0)*1e3,tt=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");tt=tt||(p+_)/4,Ta()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Le.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(b){throw b.message+=` in residency function for table ${s}`,b}})}static setResidencyById(E){Le.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Le.getResidencyById)return Le.getResidencyById(E[t]);let A=vf;if(S.replicateTo!=null){if(Array.isArray(S.replicateTo))return S.replicateTo.includes(server.hostname)?S.replicateTo:[server.hostname,...S.replicateTo];S.replicateTo>=0&&(A=S.replicateTo)}if(A>=0&&server.nodes){let b=[server.hostname];if(S.previousResidency)b.push(...S.previousResidency.slice(0,A));else{let I=server.nodes.map(D=>D.name),P=Math.floor(I.length*Math.random());b.push(...I.slice(P,P+A));let L=P+A-I.length;L>0&&b.push(...I.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Hf(),Le.audit=E}static coerceId(E){return E===""?null:Pg(E,G)}static async dropTable(){delete ke[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&$r&&E.value&&Na(E.value);if(c===a){for(let E of T)d.remove(Le.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),RN.default.unlinkSync(i.env.path);fh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,q.DROP_TABLE,c,s))}get(E){let S=this.constructor;if(typeof E=="string"&&S.loadAsInstance!==!1)return this.getProperty(E);if(Ff(E))return this.search(E);if(E&&E.id===void 0&&!E.toString()){let A={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:T,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Le.getRecordCount().then(b=>(A.recordCount=b.recordCount,A.estimatedRecordRange=b.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),b=Lr(A),I=b.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Rr(E);Pr(P);let L=!0;return E.checkPermission&&(L=this.allowRead(A.user,E)),Cs(Cs(L,D=>{if(!D)throw new at.AccessViolation(A.user);let H=!0;return Ea(P,A,{transaction:I,ensureLoaded:H},!1,O=>{if(A.onlyIfCached){if(!O?.value)throw new at.ServerError("Entry is not cached",504)}else if(H){let x=Lc(P,O,A);if(x)return b?.disregardReadTxn(),A.loadedFromSource=!0,x.then(W=>W?.value)}return O?.value})}),D=>{let H=E?.select;return H&&D!=null?xu(H,this.constructor)(D):D})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=_a(E,S);if(A?.read){if(A.isSuperUser)return!0;let b=A.attribute_permissions,I=S?.select;if(b?.length>0||Cc&&I){if(S||(S={}),I){let P=Array.isArray(I)?I:[I],L=b?.length>0&&TN(b,"read");S.select=P.map(D=>{let H=D.name||D;if(!L||L[H]){let O=pt[H]?.definition?.tableClass;if(O){if(D.name||(D={name:D}),!D.checkPermission&&S.checkPermission&&(D.checkPermission=S.checkPermission),!O.prototype.allowRead.call(null,E,D))return!1;if(!D.select)return D.name}return D}}).filter(Boolean)}else S.select=b.filter(P=>P.read&&!pt[P.attribute_name]).map(P=>P.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let b=_a(E,A);if(b?.update){let I=b.attribute_permissions;if(I?.length>0){let P=TN(I,"update");for(let L in S)if(!P[L])return!1;for(let L of I){let D=L.attribute_name;!L.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return Sa(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let b=_a(E,A);if(b?.insert){let I=b.attribute_permissions;if(I?.length>0){let P=TN(I,"insert");for(let L in S)if(!P[L])return!1;return Sa(this.getContext())}else return Sa(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return _a(E,S)?.delete&&Sa(this.getContext())}update(E,S){let A,b=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),I=!1;b?(I=S,S=E,A=this.getId()):A=Rr(E);let P=this.getContext();if(!Lr(P))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(I)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#t=S;else if(b){let D=this.#t;D&&(S=Object.assign(D,S)),this.#t=S}else{let D=!0;if(E==null)throw new TypeError("Can not put a record without a target");return E.checkPermission&&(D=this.allowUpdate(P.user,S,E)),Cs(D,H=>{if(!H)throw new at.AccessViolation(P.user);return Cs(i.get(Rr(E)),O=>{let x=new xf(O);return x._setChanges(S),this._writeUpdate(A,x.getChanges(),!1),x})})}return this._writeUpdate(A,this.#t,I),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===ok?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new Vm(S)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,S){if(typeof S=="number")return this.addTo(E,-S);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(E){this.#t=E}setRecord(E){this.#e=E}invalidate(E){let S=!0,A=this.getContext();return E?.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new at.AccessViolation(A.user);this._writeInvalidate(E?Rr(E):this.getId())})}_writeInvalidate(E,S,A){let b=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.invalidate?.bind(this,b,E),beforeIntermediate:Ra(S,Te.invalidate?.bind(this,b,E)),commit:o((P,L)=>{if(!(ga(P,L,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));ve.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(P).toISOString()}`),R(E,S,L,P,Nn,g,{user:b?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.relocate?.bind(this,A,E),beforeIntermediate:Te.relocate?.bind(this,A,E),commit:o((I,P)=>{if(ga(I,P,S?.nodeId)<=0)return;let L=Le.getResidencyRecord(S.residencyId),D=0,H=null,O=P?.value;if(L&&!L.includes(server.hostname)){for(let x in r)H||(H={}),H[x]=O[x];D=Nn}else H=O;ve.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(I).toISOString()}`),R(E,H,P,I,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){if(this.getResidencyById)return!1;let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},b=Dc(this.getResidency(S.value,A)),I;if(b){if(!b.includes(server.hostname))return!1;I=Mc(b)}let P=0;ve.default.debug?.("Performing a relocate of an entry",E.key,S.value,b);let L=R(E.key,S.value,E,E.version,P,!0,{residencyId:I,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let b=this.Source,I;if(!((C||g)&&(!S||(I=i.getEntry(E),!I||!S)||I.version!==A))){if(C){if(i.hasLock(E,I.version))return;let P;for(let L in r)P||(P={}),P[L]=S[L];if(P)return R(E,P,I,A,Xc,null,null,null,!0)}return i.ifVersion(E,A,()=>{po(E,S,null)}),Jc(i,I??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,global.operation(E,S)}put(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!0);else{let A=!0;if(E==null)throw new TypeError("Can not put a record without a target");let b=this.getContext();return E.checkPermission&&(A=this.allowUpdate(b.user,S,E)),Cs(A,I=>{if(!I)throw new at.AccessViolation(b.user);if(Array.isArray(S))for(let P of S){let L=P[t];this._writeUpdate(L,P,!0)}else{let P=Rr(E);this._writeUpdate(P,S,!0)}})}}create(E,S){let A=!0,b=this.getContext();if(!S&&!(E instanceof URLSearchParams)&&(S=E,E=void 0),!S||typeof S!="object"||Array.isArray(S))throw new TypeError("Can not create a record without an object");return E?.checkPermission&&(A=this.allowCreate(b.user,S,E)),Cs(A,I=>{if(!I)throw new at.AccessViolation(b.user);let P=Rr(E)??S[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new at.ClientError("Record already exists",409);return this._writeUpdate(P,S,!0),S})}patch(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!1);else{let A=this.update(E,S);if(A?.then)return A.then(()=>{})}}_writeUpdate(E,S,A,b){let I=this.getContext(),P=Lr(I);Pr(E);let L=this.#n??i.getEntry(E);this.#s=A?ok:Yse;let D=o(O=>A?O.put?()=>O.put(I,E,S):null:O.patch?()=>O.patch(I,E,S):O.put?()=>O.put(I,E,ll(this)):null,"writeToSources"),H={key:E,store:i,entry:L,nodeName:I?.nodeName,validate:o(O=>{S||(S=this.#t),A||S&&J_(this.#t===S?this:S)?I?.source||(P.checkOverloaded(),this.validate(S,!A),$&&(S[$.name]=$.type==="Date"?new Date(O):$.type==="String"?new Date(O).toISOString():O),A&&(t&&S[t]!==E&&(S[t]=E),F&&(L?.value?S[F.name]=L?.value[F.name]:S[F.name]=F.type==="Date"?new Date(O):F.type==="String"?new Date(O).toISOString():O),S=ll(S))):P.removeWrite(H)},"validate"),before:D(Pe),beforeIntermediate:Ra(S,D(Te)),commit:o((O,x,W)=>{if(W){if(I&&x?.version>(I.lastModified||0)&&(I.lastModified=x.version),this.#n=x,x?.value&&x.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=x?.value??null)}this.#t=void 0,this.#r=O;let se=x?.value,ne=S;this.#s=0;let B=!1,ue=ga(O,x,b?.nodeId),me,Se=A?"put":"patch",ee;b?.residencyId!=null&&(ee=b.residencyId);let j=I?.expiresAt??(p?p+Date.now():-1);if(ue<=0){if(g){let de=x.localTime,We=x.version;ve.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(O),"applying later update from:",new Date(We),"local recorded time",new Date(de));let St=[];for(;de>O||We>=O&&de>0;){let mt=l.get(de);if(!mt)break;let pe=Nt(mt);if(We=pe.version,We>=O){if(We===O){if(ue=ga(O,{version:We,localTime:de},b?.nodeId),ue===0)return Re(!1);if(ue>0)continue}if(pe.type==="patch")St.push(pe),me=S;else if(pe.type==="put"||pe.type==="delete")return Re(!1)}de=pe.previousLocalTime}de||ve.default.debug?.("No further audit history, applying incremental updates based on available history",E,"existing version preserved",x),St.sort((mt,pe)=>mt.version-pe.version);for(let mt of St){let pe=mt.getValue(i);if(ve.default.debug?.("Rebuilding update with future patch:",new Date(mt.version),pe,mt),ne=WE(ne,pe,A),!ne)return Re(!1)}}else{if(A)return Re(!1);ne=WE(ne,se,A),ve.default.debug?.("Rebuilding update without audit:",ne)}ve.default.trace?.("Rebuilt record to save:",ne," is full update:",A)}let he;if(A?he=ne:this.constructor.loadAsInstance===!1?he=ll(se,ne):(this.#e=se,he=ll(this,ne)),this.#e=he,he&&he.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(ee==null){L?.residencyId&&(I.previousResidency=Le.getResidencyRecord(L.residencyId));let de=Dc(Le.getResidency(he,I));if(de&&!de.includes(server.hostname))if(me??=he,B=!0,Le.getResidencyById)he=void 0;else{he=null;for(let We in r)he||(he={}),he[We]=me[We]}ee=Mc(de)}A||(me=S),ve.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(O).toISOString()}${j?", expires at: "+new Date(j).toISOString():""}${x?", replaces entry from: "+new Date(x.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(he).slice(0,100)}catch{return""}})()),po(E,se,he),Re(!0),I.expiresAt&&Ta();function Re(de){R(E,de?he:void 0,de?x:{...x,value:void 0},O,B?Nn:0,g,{omitLocalRecord:B,user:I?.user,residencyId:ee,expiresAt:j,nodeId:b?.nodeId,originatingOperation:I?.originatingOperation},Se,!1,de?me:me??S)}o(Re,"writeCommit")},"commit")};P.addWrite(H)}async delete(E){if(Ff(E)){E.select=["$id"];for await(let S of this.search(E))this._writeDelete(S.$id);return!0}if(E){let S=!0,A=this.getContext();return E.checkPermission&&(S=this.allowDelete(A.user,E,A)),Cs(S,b=>{if(!b)throw new at.AccessViolation(A.user);let I=Rr(E);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Lr(this.getContext());Pr(E);let b=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,before:Pe.delete?.bind(this,b,E),beforeIntermediate:Te.delete?.bind(this,b,E),commit:o((I,P,L)=>{let D=P?.value;L&&(b&&P?.version>(b.lastModified||0)&&(b.lastModified=P.version),Le._updateResource(this,P)),!(ga(I,P,S?.nodeId)<=0)&&(po(this.getId(),D),ve.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(I).toISOString()}`),g||y?(R(E,null,P,I,0,g,{user:b?.user,nodeId:S?.nodeId},"delete"),g||Ta()):Jc(i,P))},"commit")}),!0}search(E){let S=this.getContext(),A=Lr(S);if(!E)throw new Error("No query provided");if(E.parseError)throw E.parseError;if(E.checkPermission&&!this.allowRead(S.user,E))throw new at.AccessViolation(S.user);let b=E.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let I=E.id??this.getId();I&&(b=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(b));let P,L={};function D(j,he){let Re;switch(he){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');Re=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+he)}for(let de of j){if(de.conditions){de.conditions=D(de.conditions,de.operator);continue}let We=de[0]??de.attribute,St=We==null?G:xi(T,We);if(St)(St.type||QA[de.comparator])&&(de[1]===void 0?de.value=O(de.value,St):de[1]=O(de[1],St));else if(We!=null&&!E.allowConditionsOnDynamicAttributes)throw(0,at.handleHDBError)(new Error,`${We} is not a defined attribute`,404);if(de.chainedConditions)if(de.chainedConditions.length===1&&(!de.operator||de.operator=="and")){let mt=de.chainedConditions[0],pe,Et;if(mt.comparator==="gt"||mt.comparator==="greater_than"||mt.comparator==="ge"||mt.comparator==="greater_than_equal"?(pe=de,Et=mt):(pe=mt,Et=de),pe.comparator!=="lt"&&pe.comparator!=="less_than"&&pe.comparator!=="le"&&pe.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let rt=Et.comparator==="ge"||Et.comparator==="greater_than_equal",cr=pe.comparator==="le"||pe.comparator==="less_than_equal";de.comparator=(rt?"ge":"gt")+(cr?"le":"lt"),de.value=[Et.value,pe.value]}else throw new Error("Multiple chained conditions are not currently supported")}return j}o(D,"prepareConditions");function H(j,he){if(E.enforceExecutionOrder)return j;for(let Re of j)Re.conditions&&(Re.conditions=H(Re.conditions,Re.operator));return j.length>1&&he!=="or"?kse(j,b_(Le)):j}o(H,"orderConditions");function O(j,he){return Array.isArray(j)?j.map(Re=>Pg(Re,he)):Pg(j,he)}o(O,"coerceTypedValues");let x=E.operator;(b.length>0||x)&&(b=D(b,x));let W=typeof E.sort=="object"&&E.sort,se;if(W&&x!=="or"){let j=W.attribute;if(j==null)throw new at.ClientError("Sort requires an attribute");if(P=b.find(he=>Mu(he.attribute)===Mu(j)),!P){let he=xi(T,j);if(!he)throw(0,at.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);if(he.indexed)P={...W,comparator:"sort"},b.push(P);else if(b.length===0&&!E.allowFullScan)throw(0,at.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!W.descending)}b=H(b,x),W&&(P&&b[0]===P?W.next&&(se={dbOrderedAttribute:W.attribute,attribute:W.next.attribute,descending:W.next.descending,next:W.next.next}):(P&&b.splice(b.indexOf(P),1),se=W));let ne=E.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:b,operator:x,postOrdering:se,selectApplied:!!ne};let B=A.useReadTxn(),ue=JA(b,x,Le,B,E,S,(j,he)=>pu(j,ne,S,B,he),L),me=E.ensureLoaded!==!1,Se=Le.transformEntryForSelect(ne,S,B,L,me,!0),ee=Le.transformToOrderedSelect(ue,ne,se,S,B,Se);return(E.offset||E.limit!==void 0)&&(ee=ee.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0)),ee.onDone=()=>{ee.onDone=null,A.doneReadTxn()},ee.selectApplied=!0,ee.getColumns=()=>{if(ne){let j=[];for(let he of ne)he==="*"?j.push(...T.map(Re=>Re.name)):j.push(he.name||he);return j}return T.filter(j=>!j.computed&&!j.relationship).map(j=>j.name)},ee}static transformToOrderedSelect(E,S,A,b,I,P){let L=new IE;if(A){E=pu(E,S,b,I,null);let D;L.iterate=function(){let O,x=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),W,se=A.dbOrderedAttribute,ne,B,ue=!0;function me(ee){let j=ee.next&&me(ee.next),he=ee.descending;return b.sort=ee,(Re,de)=>{let We=hu(Re,ee.attribute,b),St=hu(de,ee.attribute,b),mt=he?(0,bl.compareKeys)(St,We):(0,bl.compareKeys)(We,St);return mt===0?j?.(Re,de)||0:mt}}o(me,"createComparator");let Se=me(A);return{async next(){let ee;if(O)if(ee=O.next(),ee.done){if(W)return L.onDone&&L.onDone(),ee}else return{value:await P.call(this,ee.value)};D=[],ne&&D.push(ne);do if(ee=await x.next(),ee.done){if(W=!0,D.length)break;return L.onDone&&L.onDone(),ee}else{let j=ee.value;if(j?.then&&(j=await j),se){let he=hu(j,se,b);if(ue)ue=!1,B=he;else if(he!==B){B=he,ne=j;break}}D.push(j)}while(!0);return A.isGrouped,D.sort(Se),O=D[Symbol.iterator](),ee=O.next(),ee.done?(L.onDone&&L.onDone(),ee):{value:await P.call(this,ee.value)}},return(){L.onDone&&L.onDone(),x.return()},throw(){L.onDone&&L.onDone(),x.throw()}}};let H=o(O=>{if(typeof S=="object"&&Array.isArray(O.attribute))for(let x=0;x<S.length;x++){let W=S[x],se;if(W.name===O.attribute[0]){for(se=W.sort||(W.sort={});se.next;)se=se.next;se.attribute=O.attribute.slice(1),se.descending=O.descending}else W===O.attribute[0]&&(S[x]=se={name:W,sort:{attribute:O.attribute.slice(1),descending:O.descending}})}O.next&&H(O.next)},"applySortingOnSelect");H(A)}else L.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),L=L.map(function(D){try{let H=P.call(this,D);return typeof H?.catch=="function"?H.catch(O=>{throw O.partialObject={[t]:D.key},O}):H}catch(H){throw H.partialObject={[t]:D.key},H}});return L}static transformEntryForSelect(E,S,A,b,I,P){let L;I&&C&&!(typeof E=="string"?[E]:E)?.every(O=>{let x;return typeof O=="object"?x=O.name:x=O,r[x]||x===t})&&(L=!0);let D,H=o(function(O){let x;if(S?.transaction?.stale&&(S.transaction.stale=!1),O!=null){if(x=O.deref?O.deref():O.value,!x&&(O.key===void 0||O.deref)||O.metadataFlags&Nn){if(O.metadataFlags&Nn&&S.replicateFrom===!1&&P&&O.residencyId)return qa.SKIP;if(O=Ea(O.key??O,S,{transaction:A,lazy:E?.length<4,ensureLoaded:I},this?.isSync,W=>W),O?.then)return O.then(H.bind(this));x=O?.value}if(L&&O?.metadataFlags&(Nn|Xc)||O?.expiresAt!=null&&O?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:O.key,message:"This entry has expired"};let W=Lc(O.key??O,O,S);if(W?.then)return W.then(H)}}if(x==null)return P?qa.SKIP:x;if(E&&!(E[0]==="*"&&E.length===1)){let W,se=o((B,ue)=>{let me;typeof B=="object"?me=B.name:me=B;let Se=pt?.[me],ee;if(Se){let j=b?.[me];if(j)if(j.hasMappings){let Re=Se.from?x[Se.from]:Mu(O.key);ee=j.get(Re),ee||(ee=[])}else ee=j.fromRecord?.(x);else ee=Se(x,S,O,!0);let he=o(Re=>{if(Se.directReturn)return ue(Re,me);if(Re&&typeof Re=="object"){let de=Se.definition?.tableClass||Le;D||(D={});let We=D[me]||(D[me]=de.transformEntryForSelect(me===B?null:B.select||(Array.isArray(B)?B:null),S,A,j,I));if(Array.isArray(Re)){let St=[],mt=de.transformToOrderedSelect(Re,B.select,typeof B.sort=="object"&&B.sort,S,A,We)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),pe=o(rt=>{for(;!rt.done;){if(rt?.then)return rt.then(pe);St.push(rt.value),rt=mt.next()}ue(St,me)},"nextValue"),Et=pe(mt.next());Et&&(W||(W=[]),W.push(Et));return}else if(Re=We.call(this,Re),Re?.then){W||(W=[]),W.push(Re.then(St=>ue(St,me)));return}}ue(Re,me)},"handleResolvedValue");ee?.then?(W||(W=[]),W.push(ee.then(he))):he(ee);return}else ee=x[me],ee&&typeof ee=="object"&&me!==B&&(ee=Le.transformEntryForSelect(B.select||B,S,A,null)({value:ee}));ue(ee,me)},"selectAttribute"),ne;if(typeof E=="string")se(E,B=>{ne=B});else if(Array.isArray(E))if(E.asArray)ne=[],E.forEach((B,ue)=>{B==="*"?E[ue]=x:se(B,me=>ne[ue]=me)});else{ne={};let B=E.forceNulls;for(let ue of E)if(ue==="*")for(let me in x)ne[me]=x[me];else se(ue,(me,Se)=>{me===void 0&&B&&(me=null),ne[Se]=me})}else throw new at.ClientError("Invalid select"+E);return W?Promise.all(W).then(()=>ne):ne}return x},"transform");return H}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ze({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],b=this,I=nb(Le,this.getId()??null,function(L,D,H,O){try{let x=D.getValue?.(i,S),W=D.type;if(!x&&W==="patch"&&S){let ne=i.getEntry(L);ne?.version===D.version?x=ne.value:x=D.getValue?.(i,!0,H),W="put"}let se={id:L,localTime:H,value:x,version:D.version,type:W,beginTxn:O};A?A.push(se):this.send(se)}catch(x){ve.default.error?.(x)}},E.startTime||0,E),P=(async()=>{this.isCollection&&(I.includeDescendants=!0,E.onlyChildren&&(I.onlyChildren=!0)),E.supportsTransactions&&(I.supportsTransactions=!0);let L=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let H=E.startTime;if(this.isCollection){if(H){if(D)throw new at.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:O,value:x}of l.getRange({start:H,exclusiveStart:!0,snapshot:!1})){let W=Nt(x);if(W.tableId!==n)continue;let se=W.recordId;if(L==null||uk(L,se)){let ne=W.getValue(i,S,O);if(I.send({id:se,localTime:O,value:ne,version:W.version,type:W.type}),I.queue?.length>ck&&await I.waitForDrain()===!1)return}I.startTime=O}}else if(D){let O=[];for(let{key:x,value:W}of l.getRange({start:"z",end:!1,reverse:!0}))try{let se=Nt(W);if(se.tableId!==n)continue;let ne=se.recordId;if(L==null||uk(L,ne)){let B=se.getValue(i,S,x);if(O.push({id:ne,localTime:x,value:B,version:se.version,type:se.type}),--D<=0)break}}catch(se){ve.default.error("Error getting history entry",x,se)}for(let x=O.length;x>0;)I.send(O[--x]);O[0]&&(I.startTime=O[0].localTime)}else if(!E.omitCurrent){for(let{key:O,value:x,version:W,localTime:se}of i.getRange({start:L??!1,end:L==null?void 0:[L,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(I.send({id:O,localTime:se,value:x,version:W,type:"put"}),I.queue?.length>ck&&await I.waitForDrain()===!1))return}}else{D&&!H&&(H=0);let O=this.#n?.localTime;if(O===WA&&(i.cache?.delete(L),this.#n=i.getEntry(L),ve.default.trace?.("re-retrieved record",O,this.#n?.localTime),O=this.#n?.localTime),ve.default.trace?.("Subscription from",H,"from",L,O),H<O){let x=[],W=O;do{let se=l.get(W);if(se){E.omitCurrent=!0;let ne=Nt(se),B=ne.getValue(i,S,W);S&&(ne.type="put"),x.push({id:L,value:B,localTime:W,...ne}),W=ne.previousLocalTime}else break;D&&D--}while(W>H&&D!==0);for(let se=x.length;se>0;)I.send(x[--se]);I.startTime=O}!E.omitCurrent&&this.doesExist()&&I.send({id:L,localTime:O,value:this.#e,version:this.#r,type:"put"})}for(let O of A)I.send(O);A=null})();return E.listener&&I.on("data",E.listener),I}static subscribeOnThisThread(E,S){return E===0||S?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,S,A){if(S===void 0||S instanceof URLSearchParams)this._writePublish(this.getId(),E,S);else{let b=!0,I=this.getContext();return E.checkPermission&&(b=this.allowCreate(I.user,E,I)),Cs(b,P=>{if(!P)throw new at.AccessViolation(I.user);let L=Rr(E);this._writePublish(L,S,A)})}}_writePublish(E,S,A){let b=Lr(this.getContext());E??=null,E!==null&&Pr(E);let I=this.getContext();b.addWrite({key:E,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(b.checkOverloaded(),this.validate(S))},"validate"),before:Pe.publish?.bind(this,I,E,S),beforeIntermediate:Ra(S,Te.publish?.bind(this,I,E,S)),commit:o((P,L,D)=>{L===void 0&&y&&!g&&Ta(),ve.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(P).toISOString()}`),R(E,L?.value??null,L,L?.version||P,0,!0,{user:I?.user,residencyId:A?.residencyId,expiresAt:I?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,b=o((I,P,L)=>{if(P.type&&I!=null)if(S&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an object${P.type?" ("+P.type+")":""}`);let D=P.properties;for(let H=0,O=D.length;H<O;H++){let x=D[H];if(x.relationship||x.computed){E.hasOwnProperty(x.name)&&(A||(A=[])).push(`Computed property ${L}.${x.name} may not be directly assigned a value`);continue}let W=b(I[x.name],x,L+"."+x.name);W&&(I[x.name]=W)}if(P.sealed&&I!=null&&typeof I=="object")for(let H in I)D.find(O=>O.name===H)||(A||(A=[])).push(`Property ${H} is not allowed within object in property ${L}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a string`);break;case"Boolean":typeof I!="boolean"&&(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof Rs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(P.elements)for(let D=0,H=I.length;D<H;D++){let O=I[D],x=b(O,P.elements,L+"[*]");x&&(I[D]=x)}}else(A||(A=[])).push(`Value ${Ps(I)} in property ${L} must be an Array`);break}P.nullable===!1&&I==null&&(A||(A=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=T.length;I<P;I++){let L=T[I];if(L.relationship||L.computed){Object.hasOwn(E,L.name)&&(A||(A=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!S||L.name in E){let D=b(E[L.name],L,L.name);D!==void 0&&(E[L.name]=D)}}if(f)for(let I in E)T.find(P=>P.name===I)||(A||(A=[])).push(`Property ${I} is not allowed`);if(A)throw new at.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return C?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new at.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new at.ClientError("Attribute names cannot include backticks or forward slashes");Gse(A.name),S.push(A)}return ze({table:s,database:c,schemaDefined:u,attributes:S}),Le.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return ze({table:s,database:c,schemaDefined:u,attributes:S}),Le.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,S=RN.default.statfsSync?.(E)??{};return{available:S.bavail*S.bsize,free:S.bfree*S.bsize,size:S.blocks*S.bsize}}static async getRecordCount(E){let S=i.getStats().entryCount,A=1e3/2,b=performance.now(),I=Math.floor(S/2),P=E?.exactCount,L=0,D=0,H;for(let{value:O}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(O!=null&&L++,D++,await Ga(),!P&&D<I&&performance.now()-b>A){H=D;break}if(H){let O=L;L=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:H,snapshot:!1}))ee!=null&&L++,await Ga();let x=H*2,W=(L+O)/x,se=Math.pow((L-O+1)/H/2,2)+W*(1-W)/x,ne=Math.max(Math.sqrt(se)*S,1),B=Math.round(W*S),ue=Math.max(B-1.96*ne,L+O),me=Math.min(B+1.96*ne,S),Se=Math.pow(10,Math.round(Math.log10(ne)));return Se>B&&(Se=Se/10),L=Math.round(B/Se)*Se,{recordCount:L,estimatedRange:[Math.round(ue),Math.round(me)]}}return{recordCount:L}}static updatedAttributes(){pt=this.propertyResolvers={$id:o((E,S,A)=>({value:A.key}),"$id"),$updatedtime:o((E,S,A)=>A.version,"$updatedtime"),$updatedTime:o((E,S,A)=>A.version,"$updatedTime"),$expiresAt:o((E,S,A)=>A.expiresAt,"$expiresAt"),$record:o((E,S,A)=>A?{value:E}:E,"$record"),$distance:o((E,S,A)=>A&&(A.distance??S?.vectorDistances?.get(A)),"$distance")};for(let E of this.attributes){E.isPrimaryKey&&(G=E),E.resolve=null;let S=E.relationship,A=E.computed;if(S)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),A&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Cc=!0,S.to)E.elements?.definition?(pt[E.name]=E.resolve=(b,I,P,L)=>{let D=b[S.from?S.from:t],H=E.elements.definition.tableClass;return L?Du({attribute:S.to,value:D},Lr(I).getReadTxn(),!1,H,!1).map(O=>O&&O.key!==void 0?O:H.primaryStore.getEntry(O,{transaction:Lr(I).getReadTxn()})).asArray:H.search([{attribute:S.to,value:D}],I).asArray},E.set=()=>{},E.resolve.definition=E.elements.definition,E.resolve.to=S.to,S.from&&(E.resolve.from=S.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(S.from){let b=E.definition||E.elements?.definition;b?(pt[E.name]=E.resolve=(I,P,L,D)=>{let H=I[S.from];if(H===void 0)return;if(E.elements){let x,W=H?.map(se=>{let ne=b.tableClass.primaryStore[D?"getEntry":"get"](se,{transaction:Lr(P).getReadTxn()});return ne?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(D?ne?.value:ne),ne});return S.filterMissing?x?Promise.all(W).then(se=>se.filter(dk)):W.filter(dk):x?Promise.all(W):W}let O=b.tableClass.primaryStore[D?"getEntry":"get"](H,{transaction:Lr(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(D?O?.value:O),O},E.set=(I,P)=>{if(Array.isArray(P)){let L=P.map(D=>D.getId?.()||D[b.tableClass.primaryKey]);I[S.from]=L}else{let L=P.getId?.()||P[b.tableClass.primaryKey];I[S.from]=L}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=S.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else if(A)typeof A.from=="function"&&this.setComputedAttribute(E.name,A.from),pt[E.name]=E.resolve=(b,I,P)=>{let L=typeof A.from=="string"?b[A.from]:b,D=this.userResolvers[E.name];if(D)return D(L,I,P);ve.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}},E.resolve.directReturn=!0;else if(r[E.name]?.customIndex?.propertyResolver){let b=r[E.name].customIndex;pt[E.name]=(I,P,L)=>{let D=I[E.name];return b.propertyResolver(D,P,L)},pt[E.name].directReturn=!0}}Km(this,this),Km(xf,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,Uu.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=xi(T,E);if(!A){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!A.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=S}static async deleteHistory(E=0,S=!1){let A;for(let{key:b,value:I}of l.getRange({start:0,end:E}))await Ga(),Nt(I).tableId===n&&(A=h_(l,b,I));if(S)for(let b of i.getRange({start:0,versions:!0})){let{key:I,value:P,localTime:L}=b;await Ga(),P===null&&L<E&&(A=Jc(i,b))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:b}of l.getRange({start:E||1,end:S})){await Ga();let I=Nt(b);I.tableId===n&&(yield{id:I.recordId,localTime:A,version:I.version,type:I.type,value:I.getValue(i,!0,A),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(E){let S=[];if(E==null)throw new Error("An id is required");let A=i.getEntry(E);if(!A)return S;let b=A.localTime;if(!b)throw new Error("The entry does not have a local audit time");let I=0;do{await Ga();let P=l.get(b);if(P){let L=Nt(P);S.push({id:L.recordId,localTime:b,version:L.version,type:L.type,value:L.getValue(i,!0,b),user:L.user}),b=L.previousLocalTime}else break}while(I<1e3&&b);return S.reverse()}static cleanup(){K?.remove()}}let wE=Og(async(V,E,S)=>{for(let A of Le.sources)if(A.get&&(!A.get.reliesOnPrototype||A.prototype.get)){if(A.available?.(S)===!1)continue;E.source=A;let b=await A.get(V,E);if(b)return b}},()=>{throw new at.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let Bf=Le.prototype;return p&&Le.setTTLExpiration(p/1e3),J&&Eu(),Le;function po(V,E,S){let A;for(let b in r){let I=r[b],P=I.isIndexing,L=pt[b],D=S&&(L?L(S):S[b]),H=E&&(L?L(E):E[b]);if(D===H&&!P)continue;if(I.customIndex){I.customIndex.index(V,D,H);continue}A=!0;let O=I.indexNulls,x=(0,dh.getIndexedValues)(D,O),W=(0,dh.getIndexedValues)(H,O);if(s==="OrganizationRole"&&ve.default.error?.({tableName:s,id:V,key:b,valuesToAdd:x,valuesToRemove:W}),W?.length>0){let se=new Set(W);if(x=x?x.filter(ne=>{if(se.has(ne))se.delete(ne);else return!0}):[],W=Array.from(se),(W.length>0||x.length>0)&&ik){let ne=W.concat(x).map(B=>({key:B,value:V}));I.prefetch(ne,lk)}for(let ne=0,B=W.length;ne<B;ne++)I.remove(W[ne],V)}else x?.length>0&&ik&&I.prefetch(x.map(se=>({key:se,value:V})),lk);if(x)for(let se=0,ne=x.length;se<ne;se++)I.put(x[se],V)}return A}o(po,"updateIndices");function Pr(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>ak)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)throw new Error("Invalid primary key of null");break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,bl.writeKey)(V,Wse,0)>ak)throw new Error("Primary key size is too large: "+V.length);return!0}o(Pr,"checkValidId");function Rr(V){return typeof V=="object"&&V?V.id:V}o(Rr,"requestTargetToId");function Ff(V){return typeof V=="object"&&V&&V.isCollection}o(Ff,"isSearchTarget");function Ss(V){}o(Ss,"isRequestTarget");function Ea(V,E,S,A,b){if(Le.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let P=Dc(Le.getResidencyById(V));if(P&&!P.includes(server.hostname)&&N)return N({key:V,residency:P}).then(b)}let I=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return b(null,V);let P=i.getEntry(V,S);return E?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Nn&&N&&S.ensureLoaded&&E?.replicateFrom!==!1?N(P).then(L=>b(L,V),L=>(ve.default.error?.("Error loading remote record",V,P,S,L),b(null,V))):(P&&E&&(P?.version>(E.lastModified||0)&&(E.lastModified=P.version),P?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=P.localTime)),b(P,V))},"whenPrefetched");return A?I():oe>0?(oe--,I()):new Promise((P,L)=>{oe===0?(oe--,i.prefetch([V],()=>{D(),H()})):(te.push(V),fe.push(H),te.length>Gy&&(oe--,D()));function D(){if(te.length>0){let O=fe;i.prefetch(te,()=>{oe===-1?D():oe++;for(let x of O)x()}),te=[],fe=[],ge>2&&ge--}else oe=ge,ge<NE&&ge++}o(D,"prefetch");function H(){try{P(I())}catch(O){L(O)}}o(H,"load")})}o(Ea,"loadLocalRecord");function _a(V,E){let S=E?.checkPermission;if(typeof S!="object"){if(!V?.role)return;S=V.role.permission}if(S.super_user)return zse;let A=S[c],b,I=A?.tables;if(I)return I[s];if(c==="data"&&(b=S[s])&&!b.tables)return b}o(_a,"getTablePermissions");function Lc(V,E,S,A){if(C){let b=!1;if(S.noCache?b=!0:(E?(!E.value||E.metadataFlags&(Nn|Xc)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(b=!0):b=!0,Wr(!b,"cache-hit",s)),b){let I=OE(V,E,S).then(P=>(P?.value&&P?.value.getRecord?.()&&ve.default.error?.("Can not assign a record that is already a resource"),S&&(P?.version>(S.lastModified||0)&&(S.lastModified=P.version),S.lastRefreshed=Date.now()),P));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,V)){if(I.catch(P=>ve.default.warn?.(P)),S?.onlyIfCached&&!A.doesExist())throw new at.ServerError("Entry is not cached",504);return}else return I}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Le.evict(E.key,E.value,E.version),E.value=null,{then(b){return b(E)}}}o(Lc,"ensureLoadedFromSource");function Lr(V){let E=V?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let S=E.next;if(!S)return E=E.next=new _o,E.lmdbDb=i,E;E=S}while(!0)}else return new KE}o(Lr,"txnForContext");function hu(V,E,S){if(!V)return;let A=(V.deref?V.deref():V.value)??i.getEntry(V.key)?.value;if(typeof E=="object"){let I=pt,P=A;for(let L=0,D=E.length;L<D;L++){let H=E[L],O=I?.[H];P=O&&P?O(P,S,V):P?.[H],V=null,I=O?.definition?.tableClass?.propertyResolvers}return P}let b=pt[E];return b?b(A,S,V):A[E]}o(hu,"getAttributeValue");function pu(V,E,S,A,b){let I=b?.length,P={transaction:A,lazy:I>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},L;function D(H,O){let x=H?.value;if(!x)return qa.SKIP;for(let W=0;W<I;W++)if(!L?.includes(W)&&!b[W](x,H))return qa.SKIP;return O!==void 0&&(H.key=O),H}if(o(D,"processEntry"),I>0||!V.hasEntries){let H=V.map(O=>{if(L=null,typeof O=="object"&&O?.key!==void 0)return I>0?D(O):O;if(O==null)return qa.SKIP;for(let x=0;x<I;x++){let se=b[x].idFilter;if(se){if(!se(O))return qa.SKIP;L||(L=[]),L.push(x)}}return Ea(O,S,P,!1,D)});return Array.isArray(V)&&(H=H.filter(O=>O!==qa.SKIP)),H.hasEntries=!0,H}return V}o(pu,"transformToEntries");function ga(V,E,S=server.replication?.getThisNodeId(l)){if(V<=E?.version){if(E?.version===V&&S!==void 0){let A=server.replication?.exportIdMapping(l),b=E.localTime,I=b&&l.get(b);if(I){let P,L,D=Nt(I);for(let H in A)A[H]===S&&(P=H),A[H]===D.nodeId&&(L=H);if(P>L)return 1;if(P===L)return 0}}return-1}return 1}o(ga,"precedesExistingVersion");async function OE(V,E,S){let A=E?.metadataFlags,b=E?.version,I,P;if(!i.attemptLock(V,b,()=>{clearTimeout(P);let O=i.getEntry(V);!O||!O.value||O.metadataFlags&(Nn|Xc)||O.expiresAt!=null&&O.expiresAt<Date.now()?I(OE(V,i.getEntry(V),S)):I(O)}))return new Promise(O=>{I=O,P=setTimeout(()=>{i.unlock(V,b)},Kse)});let L=E?.value,D={requestContext:S,replacingRecord:L,replacingEntry:E,replacingVersion:b,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},H=S?.responseHeaders;return new Promise((O,x)=>{let W;Cs(Ft(D,async se=>{let ne=performance.now(),B,ue,me;try{B=await wE(V,D,E),me=A&Nn;let ee=D.lastModified||me&&b;ee||(ee=(0,dh.getNextMonotonicTime)()),ue=me||ee>b||!L;let j=performance.now()-ne;if(ot(j,"cache-resolution",s,null,"success"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),se.timestamp=ee,p&&D.expiresAt==null&&(D.expiresAt=Date.now()+p),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ee=b;else throw new at.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==V&&(B[t]=V)}W=!0,O({key:V,version:ee,value:B})}catch(ee){ee.message+=` while resolving record ${V} for ${s}`,L&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(O({key:V,version:b,value:L}),ve.default.trace?.(ee.message,"(returned stale record)")):x(ee);let j=performance.now()-ne;ot(j,"cache-resolution",s,null,"fail"),H&&lh(H,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Lr(D).addWrite({key:V,store:i,entry:E,nodeName:"source",before:Ra(B),commit:o((ee,j)=>{if(j?.version!==b)return;let he=po(V,L,B);if(B){Te.put?.(D,V,B),j&&(S.previousResidency=Le.getResidencyRecord(j.residencyId));let Re,de=!1,We,St=Dc(Le.getResidency(B,S));if(St){if(!St.includes(server.hostname))if(Re=B,de=!0,Le.getResidencyById)B=void 0;else{B=null;for(let mt in r)B||(B={}),B[mt]=Re[mt]}We=Mc(St)}ve.default.trace?.(`Writing resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),R(V,B,j,ee,de?Nn:0,g&&(ue||de)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:We},"put",!!me,Re)}else j&&(Te.delete?.(D,V),ve.default.trace?.(`Deleting resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),g||y?R(V,null,j,ee,0,g&&ue||null,{user:D?.user},"delete",!!me):Jc(i,j,b))},"commit")})}),()=>{i.unlock(V,b)},se=>{i.unlock(V,b),W&&ve.default.error?.("Error committing cache update",se)})})}o(OE,"getFromSource");function Sa(V){if(!V||V.user?.role?.permission?.super_user)return!0;if(V.replicateTo)throw new at.ClientError("Can not specify replication parameters without super user permissions",403);if(V.replicatedConfirmation)throw new at.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Sa,"checkContextPermissions");function Ta(V){let E=!1;if(V&&(V-xe>1&&(E=!0),xe=V),!(tt===tn&&!E)&&(tn=tt,(0,yl.getWorkerIndex)()===(0,yl.getWorkerCount)()-1))return nt&&clearTimeout(nt),tt?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let b=tt/(1+xe),I=E?Date.now():Math.ceil((Date.now()-A.getTime())/b)*b+A.getTime(),P=o(L=>{ve.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),nt=setTimeout(()=>z=z.then(async()=>{if(P(Math.max(L+tt,Date.now())),i.rootStore.status!=="open"){clearTimeout(nt);return}let D=50,H=new Array(D),O=0,x=Math.pow(xe,8)*(Al.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),W=_/Math.pow(Math.max(xe,1),4);ve.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${W}ms`);function se(ne,B,ue,me){let Se=ne+W-Date.now();if(Se<0)return!0;if(xe){let ee=i.lastSize;return ue&$r&&Gc(me,j=>{j.size&&(ee+=j.size)}),ve.default.trace?.(`shouldEvict adjusted ${Se} ${ee}, ${Se*(ne-B)/ee} < ${x}`),Se*(ne-B)/ee<x}return!1}o(se,"shouldEvict");try{let ne=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:ue,value:me,version:Se,expiresAt:ee,metadataFlags:j}=B,he;me===null&&!g&&Se+Vse<Date.now()?he=Jc(i,B,Se):ee!=null&&se(ee,Se,j,me)&&(he=Le.evict(ue,me,Se),ne++),he&&(await H[O],H[O]=he.catch(Re=>{ve.default.error?.("Cleanup error",Re)}),++O>=D&&(O=0)),await Ga()}ve.default.info?.(`Finished cleanup scan for ${s}, evicted ${ne} entries`)}catch(ne){ve.default.warn?.(`Error in cleanup scan for ${s}:`,ne)}S(void 0),xe=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");P(I)}):void 0}o(Ta,"scheduleCleanup");function Hf(){K=l?.addDeleteRemovalCallback(n,i,(V,E)=>{i.remove(V,E)})}o(Hf,"addDeleteRemoval");function Eu(){(0,yl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Pc){Pc=!0;try{let V=J.name,E=r[V];if(!E)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let S of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let A of E.getValues(S)){let b=i.getEntry(A);b?.value?b.value[V]<Date.now()&&Le.evict(A,b.value,b.version):i.ifVersion(A,b?.version,()=>E.remove(S,A))}await Ga()}}catch(V){ve.default.error?.("Error in evicting old records",V)}finally{Pc=!1}}},$se).unref()}o(Eu,"runRecordExpirationEviction");function Dc(V){if(V!=null){if(Array.isArray(V))return V;if(typeof V=="number"){if(V>=65536)throw new Error(`Shard id ${V} must be below 65536`);let E=server.shards?.get?.(V);if(E)return ve.default.trace?.(`Shard ${V} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${V} is not defined`)}throw new Error(`Shard or residency list ${V} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Dc,"residencyFromFunction");function Mc(V){if(V){let E=V.join(","),S=d.get([Symbol.for("residency_by_set"),E]);return S||(d.put([Symbol.for("residency_by_set"),E],S=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),S],V),S)}}o(Mc,"getResidencyId");function Ra(V,E){let S=LA(V,i.rootStore);if(S){let A=E;return A?async()=>{await A(),await S()}:()=>S()}return E}o(Ra,"preCommitBlobsForRecordBefore")}function TN(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 lk(){}function Pg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Cg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Cg(+e);case"Float":return e==="null"?null:Cg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;jse.test(e)||(e+="Z");let n=new Date(e);return Cg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Lg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Cg(e){if(isNaN(e))throw new SyntaxError;return e}function uk(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Cs(e,t,r){return e?.then?e.then(t,r):t(e)}function dk(e){return e!=null}function Ps(e){try{return JSON.stringify(e)}catch{return e}}function Qse(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var qa,dh,fk,mk,Al,at,fh,mh,ve,bl,yl,Lg,RN,kse,Gse,qse,$se,Vse,ik,Kse,ok,Yse,Nn,Xc,Wse,ak,ck,zse,zLe,jse,Ga,w_=le(()=>{k();qa=require("lmdb"),dh=w(An()),fk=w(require("lodash")),mk=w(em());Pa();rm();Al=w(ae());sb();at=w(_e()),fh=w(Co()),mh=w(oi());Me();N_();ve=w(ei());_I();Bc();bl=require("ordered-binary"),yl=w(st());Li();Lg=w(ie());zc();Wi();zE();uh();RN=w(require("node:fs"));Kn();u_();SN();({sortBy:kse}=fk.default),{validateAttribute:Gse}=mk.default,qse=new Uint8Array(9);qse[8]=192;$se=6e4,Vse=864e5;Al.initSync();ik=Al.get(U.STORAGE_PREFETCHWRITES),Kse=1e4,ok=1,Yse=2,Nn=1,Xc=8,Wse=Buffer.allocUnsafeSlow(8192),ak=1978,ck=100,zse={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},zLe=(0,Lg.convertToMS)(Al.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Dg,"makeTable");o(TN,"attributesAsObject");o(lk,"noop");jse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Pg,"coerceType");o(Cg,"rejectNaN");o(uk,"isDescendantId");Ga=o(()=>new Promise(setImmediate),"rest");o(Cs,"when");o(dk,"exists");o(Ps,"stringify");o(Qse,"hasOtherProcesses")});function Mg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function vg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var pk=le(()=>{o(Mg,"euclideanDistance");o(vg,"cosineDistance")});var Ek,_k,nd,zi,rd,Jse,Xse,Ug,gk=le(()=>{pk();Ek=require("msgpackr"),_k=w(ei()),nd=w(_e()),zi=(0,_k.loggerWithTag)("HNSW"),rd=Symbol.for("entryPoint"),Jse=Symbol.for("key"),Xse=10,Ug=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=Ek.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Mg:vg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[Jse,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(rd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let _=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:_,primaryKey:t};for(let y=0;y<=_;y++)g[y]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(rd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Xse),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);zi.debug?.("setting entry point to",i),this.indexStore.put(rd,i)}for(;h>m;){let _=this.searchLayer(r,l,f,this.efConstruction,h);_.length>0&&(l=_[0].id,f=_[0].node),h--}let p=new Array(m+1);for(let _=0;_<=m;_++)p[_]=[];for(let _=Math.min(m,h);_>=0;_--){let g=this.searchLayer(r,l,f,this.efConstruction,_);g=g.slice(0,this.M<<1),g.length===0&&_===0&&zi.info?.("should not have zero connections for",l);let y=p[_];for(let T=0;T<g.length;T++){let{id:R,distance:N,node:C}=g[T];if(R===i)continue;let G=[];if(this.optimizeRouting){let $=!1,J=C[_],K=1+this.optimizeRouting*(1+.5*T/this.M);for(let te=0;te<J.length;te++){let{id:fe,distance:oe}=J[te],ge=1+this.optimizeRouting*(1+.5*te/this.M);for(let Pe=0;Pe<y.length;Pe++){let{id:Te,distance:tt}=y[Pe];if(Te===fe){N*K>tt+oe?$=!0:oe*ge>N+tt&&(G.push({fromId:Te,toId:R}),G.push({fromId:R,toId:Te}));break}}if($)break}if($)continue}else if(T>=(_>0?this.M:this.M<<1))continue;y.push({id:R,distance:N});for(let{fromId:$,toId:J}of G){let K=d($);K||(K=d($,this.indexStore.get($)));for(let te=0;te<K[_].length;te++)if(K[_][te].id===J){Object.isFrozen(K[_])&&(K[_]=K[_].slice()),K[_].splice(te,1);break}}let z=c[_],F=z?.find(({id:$})=>$===R);if(F){let $=z?.indexOf(F);z.copied||(z=[...z],z.copied=!0,c[_]=z),z.splice($,1)}else this.addConnection(R,d(R,C),i,_,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...p})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:h,value:p}of this.indexStore.getRange({start:0,end:1/0}))if(p.level>m){if(l=h,p.level===f)break;m=p.level}}if(l===void 0)this.indexStore.remove(rd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);zi.debug?.("setting entry point to",l),this.indexStore.put(rd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:h}of m){let p=d(h,this.indexStore.get(h));for(let _=0;_<=f;_++)p[_]=p[_]?.filter(({id:g})=>g!==i),p[_].length===0&&(zi.info?.("node was left orphaned, will reindex",h),u.set(p.primaryKey,p.vector))}}function d(f,m){let h=a.get(f);return!h&&m&&(h={...m},a.set(f,h)),h}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(rd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((h,p)=>h.distance-p.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:h}of m[i]||[]){if(c.has(h)||h===void 0)continue;c.add(h);let p=this.indexStore.get(h);if(!p)continue;this.nodesVisitedCount++;let _=a(t,p.vector);if(_<f||u.length<s){let g={id:h,distance:_,node:p};l.push(g),u.push(g)}}u.sort((h,p)=>h.distance-p.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new nd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new nd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=vg;else if(s==="euclidean")c=Mg;else{if(s)throw new nd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new nd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new nd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){zi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||zi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){zi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&zi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?zi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Mg:vg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var yN,Sk=le(()=>{gk();yN={HNSW:Ug}});var _t={};Oe(_t,{database:()=>Wu,databaseEnvs:()=>Uo,databases:()=>ke,dropDatabase:()=>yI,dropTableMeta:()=>nie,getDatabases:()=>it,getDefaultCompression:()=>Gg,getTables:()=>Zse,onRemovedDB:()=>Sh,onUpdatedTable:()=>Il,readMetaDb:()=>hh,resetDatabases:()=>ld,table:()=>ze,tables:()=>un});function Zse(){return Hg||it(),un||{}}function it(){if(Hg)return ke;Hg=!0,od=new Map;let e=(0,Yt.getHdbBasePath)()&&(0,Gt.join)((0,Yt.getHdbBasePath)(),Uc),t=(0,Yt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Yt.get)(U.STORAGE_PATH)||e&&((0,ns.existsSync)(e)?e:(0,Gt.join)((0,Yt.getHdbBasePath)(),vE)),!e)return;if((0,ns.existsSync)(e))for(let n of(0,ns.readdirSync)(e,{withFileTypes:!0})){let s=(0,Gt.basename)(n.name,".mdb");n.isFile()&&(0,Gt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&hh((0,Gt.join)(e,n.name),null,s)}if((0,ns.existsSync)((0,id.getBaseSchemaPath)())){for(let n of(0,ns.readdirSync)((0,id.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Gt.join)((0,id.getBaseSchemaPath)(),n.name),i=(0,Gt.join)((0,id.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ns.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Gt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Gt.join)(i,a.name);hh((0,Gt.join)(s,a.name),(0,Gt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ns.existsSync)(i))for(let c of(0,ns.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Gt.extname)(c.name).toLowerCase()===".mdb"&&hh((0,Gt.join)(i,c.name),(0,Gt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Gt.join)(l.path,(0,Gt.basename)(c+".mdb"));(0,ns.existsSync)(u)&&hh(u,c,n,null,!0)}}for(let n in ke){let s=od.get(n);if(s){let i=ke[n];n.includes("delete")&&br.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(br.trace(`delete table class ${a}`),delete i[a])}else if(delete ke[n],n==="data"){for(let i in un)delete un[i];delete un[kg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,Yt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(ke.system?.hdb_analytics?.enableAuditing(),ke.system?.hdb_analytics_hostname?.enableAuditing()),ke.system)for(let n of r)ke.system[n]&&(ke.system[n].replicate=!1);return od=null,ke}function ld(){Hg=!1;for(let[,e]of Uo)e.needsDeletion=!0;it();for(let[e,t]of Uo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Uo.delete(e);let r=ke[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete ke[t.databaseName],Eh.forEach(i=>i(t.databaseName));break}}return ke}function hh(e,t,r=IN,n,s){let i=new AN.default(e,!1);try{let a=Uo.get(e);a?a.needsDeletion=!1:(a=(0,ad.open)(i),Uo.set(e,a));let c=new cd.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(xg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ns.existsSync)(n)&&(i.path=n,u=(0,ad.open)(i),u.isLegacy=!0):u=m_(a));let d=bk(r),f=d[kg],m=new Map;for(let{key:h,value:p}of l.getRange({start:!1})){let[_,g]=h.toString().split("/");g===""?g=p.name:g||(g=_,_=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),f?.add(_);let y=m.get(_);y||m.set(_,y={attributes:[]}),(g==null||p.is_hash_attribute)&&(y.primary=p),g!=null&&y.attributes.push(p),Object.defineProperty(p,"key",{value:h,configurable:!0})}for(let[h,p]of m){let{attributes:_,primary:g}=p;if(!g){for(let oe of _)if(oe.is_hash_attribute||oe.isPrimaryKey){g=oe;break}if(!g){br.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let y=d[h],T={},R=[],N,C,G=typeof g.audit=="boolean"?g.audit:(0,Yt.get)(U.LOGGING_AUDITLOG),z=g.trackDeletes,F=g.expiration,$=g.eviction,J=g.sealed,K=g.splitSegments,te=g.replicate;if(y)T=y.indices,R=y.attributes,y.schemaVersion++;else{N=g.tableId,N?N>=(l.get(sd)||0)&&(l.putSync(sd,N+1),br.info(`Updating next table id (it was out of sync) to ${N+1} for ${h}`)):(g.tableId=N=l.get(sd),N||(N=1),br.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(sd,N+1),l.putSync(g.key,g));let oe=new cd.default(!g.is_hash_attribute,g.is_hash_attribute);if(oe.compression=g.compression,oe.compression){let ge=(0,Yt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Ak;oe.compression.threshold=ge}C=y_(a.openDB(g.key,oe),a),a.databaseName=r,C.tableId=N}let fe;for(let oe of _){oe.attribute=oe.name;try{if(!oe.is_hash_attribute&&(oe.indexed||oe.attribute&&!oe.name)){if(!T[oe.name]){let Pe=Nk(oe.key,a,oe);T[oe.name]=Pe,T[oe.name].indexNulls=oe.indexNulls}let ge=R.find(Pe=>Pe.name===oe.name);ge?R.splice(R.indexOf(ge),1,oe):R.push(oe),fe=!0}}catch(ge){br.error("Error trying to update attribute",oe,R,T,ge)}}for(let oe of R)if(!_.find(Pe=>Pe.name===oe.name)){if(oe.is_hash_attribute){br.error("Unable to remove existing primary key attribute",oe);continue}oe.indexed&&(R.splice(R.indexOf(oe),1),fe=!0)}if(y)fe&&(y.schemaVersion++,y.updatedAttributes());else{y=Ik(d,h,Dg({primaryStore:C,auditStore:u,audit:G,sealed:J,splitSegments:K,replicate:te,expirationMS:F&&F*1e3,evictionMS:$&&$*1e3,trackDeletes:z,tableName:h,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),y.schemaVersion=1;for(let oe of ph)oe(y)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function bk(e){let t=ke[e];if(t||(e==="data"?t=ke[e]=un:e==="system"?Object.defineProperty(ke,"system",{value:t=Object.create(null),configurable:!0}):t=ke[e]=Object.create(null)),od&&!od.has(e)){let r=new Set;t[kg]=r,od.set(e,r)}return t}function Ik(e,t,r){return e[t]=r,r}function Wu({database:e,table:t}){e||(e=IN),it();let r=bk(e),n=(0,Gt.join)((0,Yt.getHdbBasePath)(),Uc),s=(0,Yt.get)(U.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Yt.get)(U.STORAGE_PATH)||((0,ns.existsSync)(n)?n:(0,Gt.join)((0,Yt.getHdbBasePath)(),vE));let a=(0,Gt.join)(n,(i?t:e)+".mdb"),c=Uo.get(a);if(!c||c.status==="closed"){let l=new AN.default(a,!1);c=(0,ad.open)(l),Uo.set(a,c)}return c.auditStore||(c.auditStore=m_(c)),c}async function yI(e){if(!ke[e])throw new Error("Schema does not exist");let t=ke[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Uo.delete(r.path),r.status==="open"&&(await r.close(),await _h.remove(r.path));if(r||(r=Wu({database:e,table:null}),r.status==="open"&&(await r.close(),await _h.remove(r.path))),e==="data"){for(let n in un)delete un[n];delete un[kg]}delete ke[e],Eh.forEach(n=>n(e)),await PA(r)}function Nk(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&yN[r.indexed.type]?.useObjectStore,s=new cd.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=yN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):br.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:h}=e;r||(r=IN);let p=Wu({database:r,table:t}),_=ke[r];br.trace(`Defining ${t} in ${r}`);let g=_?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let y,T,R;m==null&&(m=!0);let N=new cd.default(!1);for(let K of a)K.attribute&&!K.name?(K.name=K.attribute,K.indexed=!0):K.attribute=K.name,K.expiresAt&&(K.indexed=!0);let C,G;if(g){if(y=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let K=p.auditStore;T=a.find(ge=>ge.isPrimaryKey)||{},y=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Gg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,Yt.get)(U.LOGGING_AUDITLOG),n&&(T.expiration=n),s&&(T.eviction=s),u??=!1,T.splitSegments=u,typeof l=="boolean"&&(T.sealed=l),typeof d=="boolean"&&(T.replicate=d),h&&(T.origins?T.origins.includes(h)||T.origins.push(h):T.origins=[h]),br.trace(`${t} table loading, opening primary store`);let te=new cd.default(!1,!0);te.compression=T.compression;let fe=t+"/";if(R=p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N),J(),R.get(fe))return G&&G(),ld(),ze(e);let oe=y_(p.openDB(fe,te),p);p.databaseName=r,oe.tableId=R.get(sd),br.trace(`Assigning new table id ${oe.tableId} for ${t}`),oe.tableId||(oe.tableId=1),R.put(sd,oe.tableId+1),T.tableId=oe.tableId,g=Ik(_,t,Dg({primaryStore:oe,auditStore:K,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:y,tableName:t,tableId:oe.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,C=!0,R.put(fe,T)}let z=g.indices;R=R||(p.dbisDb=p.openDB(xg.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let F=[];for(let{key:K,value:te}of R.getRange({start:!0})){let[fe,oe]=K.toString().split("/");if(oe===""&&(oe=te.name),oe){if(fe!==t)continue}else continue;let ge=a.find(Te=>Te.name===oe),Pe=!ge?.indexed&&te.indexed&&!te.isPrimaryKey;if((!ge||Pe)&&(J(),C=!0,ge||R.remove(K),Pe)){let Te=g.indices[fe];Te&&F.push(Te)}}let $=[];try{for(let K of a||[]){if((K.relationship||K.computed)&&(C=!0,K.relationship))continue;let te=t+"/"+(K.name||"");Object.defineProperty(K,"key",{value:te,configurable:!0});let fe=R.get(te);if(K.isPrimaryKey){if(fe=fe||R.get(te=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+fe.expiration||void 0)||(+s||void 0)!==(+fe.eviction||void 0)||K.type!==fe.type){let ge={...fe};typeof c=="boolean"&&(c&&g.enableAuditing(c),ge.audit=c),n&&(ge.expiration=+n),s&&(ge.eviction=+s),l!==void 0&&(ge.sealed=l),d!==void 0&&(ge.replicate=d),K.type&&(ge.type=K.type),C=!0,J(),R.put(te,ge)}continue}fe?.attribute&&!fe.name&&(fe.indexed=!0);let oe=!fe||fe.type!==K.type||JSON.stringify(fe.indexed)!==JSON.stringify(K.indexed)||fe.nullable!==K.nullable||fe.version!==K.version||JSON.stringify(fe.properties)!==JSON.stringify(K.properties)||JSON.stringify(fe.elements)!==JSON.stringify(K.elements);if(K.indexed){let ge=Nk(te,p,K);(oe||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<gh.workerData?.restartNumber)&&(C=!0,J(),fe=R.get(te),(oe||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<gh.workerData?.restartNumber)&&(C=!0,K.indexNulls===void 0&&(K.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(K.lastIndexedKey=fe?.lastIndexedKey??void 0,K.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(K,"dbi",{value:ge}),$.push(K))),R.put(te,K)),fe?.indexNulls&&K.indexNulls===void 0&&(K.indexNulls=!0),ge.indexNulls=K.indexNulls,z[K.name]=ge}else oe&&(C=!0,J(),R.put(te,K))}}finally{G&&G()}if(C&&(g.schemaVersion++,g.updatedAttributes()),br.trace(`${t} table loading, running index`),$.length>0||F.length>0?g.indexingOperation=rie(g,$,F):C&&Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,C)for(let K of ph)K(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),br.trace(`${t} table loaded`),g;function J(){G||p.transactionSync(()=>({then(K){G=K}}))}o(J,"startTxn")}async function rie(e,t,r){try{br.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,ad.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:h}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,h,()=>{for(let p=0;p<l;p++){let _=t[p],g=_.name,y=_.dbi;try{let T=_.resolve,R=m&&(T?T(m):m[g]);if(y.customIndex){y.customIndex.index(f,R);continue}let N=(0,Tk.getIndexedValues)(R);if(N)for(let C=0,G=N.length;C<G;C++)y.put(N[C],f)}catch(T){a[g]||(a[g]=!0,br.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,br.error(p)}),gh.workerData&&gh.workerData.restartNumber!==yk.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=f,e.dbisDB.put(p.key,p);if(i)return}d>eie?await s:d>tie&&await new Promise(p=>setImmediate(p))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await Bg.signalSchemaChange(new Fg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),br.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){br.error("Error in indexing",n)}}function nie({table:e,database:t}){let r=Wu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Il(e){return ph.push(e),{remove(){let t=ph.indexOf(e);t>-1&&ph.splice(t,1)}}}function Sh(e){return Eh.push(e),{remove(){let t=Eh.indexOf(e);t>-1&&Eh.splice(t,1)}}}function Gg(){let e=(0,Yt.get)(U.STORAGE_COMPRESSION),t=(0,Yt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Yt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Ak,n={startingOffset:32};return t&&(n.dictionary=_h.readFileSync(t)),r&&(n.threshold=r),e&&n}var Yt,xg,ad,Gt,ns,id,cd,AN,_h,bN,Tk,Bg,Fg,gh,Rk,yk,br,IN,kg,Ak,un,ke,sd,ph,Eh,Hg,Uo,od,eie,tie,Me=le(()=>{Yt=w(ae()),xg=w(Vt()),ad=require("lmdb"),Gt=require("path"),ns=require("fs"),id=w(It());w_();cd=w(Im()),AN=w(Nm());k();_h=w(require("fs-extra")),bN=w(Xs()),Tk=w(An()),Bg=w(Co()),Fg=w(oi()),gh=require("worker_threads"),Rk=w(Q()),yk=w(st());Li();zc();Kn();Sk();br=(0,Rk.forComponent)("storage"),IN="data",kg=Symbol("defined-tables"),Ak=((0,Yt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Yt.initSync)();un=Object.create(null),ke=Object.create(null);(0,bN._assignPackageExport)("databases",ke);(0,bN._assignPackageExport)("tables",un);sd=Symbol.for("next-table-id"),ph=[],Eh=[],Uo=new Map;o(Zse,"getTables");o(it,"getDatabases");o(ld,"resetDatabases");o(hh,"readMetaDb");o(bk,"ensureDB");o(Ik,"setTable");o(Wu,"database");o(yI,"dropDatabase");o(Nk,"openIndex");o(ze,"table");eie=1e3,tie=10;o(rie,"runIndexing");o(nie,"dropTableMeta");o(Il,"onUpdatedTable");o(Sh,"onRemovedDB");o(Gg,"getDefaultCompression")});var ie=M(Ie=>{"use strict";var $a=require("path"),Lk=require("fs-extra"),Un=Q(),wk=require("fs-extra"),qg=require("os"),sie=require("net"),iie=require("recursive-iterator"),Ir=(k(),v(Y)),{PACKAGE_ROOT:oie}=bt(),aie=sA(),Ok=require("papaparse"),$g=require("moment"),{inspect:cie}=require("util"),Ck=require("is-number"),lie=require("minimist"),uie=require("https"),die=require("http"),fie=/^((\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)))$/,Dk=require("util").promisify(setTimeout),mie=100,hie=5,pie="",Eie=4,Pk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ie.isEmpty=ss;Ie.isEmptyOrZeroLength=ji;Ie.arrayHasEmptyValues=Sie;Ie.arrayHasEmptyOrZeroLengthValues=Tie;Ie.buildFolderPath=Rie;Ie.isBoolean=Mk;Ie.errorizeMessage=_ie;Ie.stripFileExtension=Aie;Ie.autoCast=bie;Ie.autoCastJSON=vk;Ie.autoCastJSONDeep=wN;Ie.removeDir=Iie;Ie.compareVersions=Nie;Ie.isCompatibleDataVersion=wie;Ie.escapeRawValue=Oie;Ie.unescapeValue=Cie;Ie.stringifyProps=Pie;Ie.timeoutPromise=Die;Ie.isClusterOperation=vie;Ie.getClusterUser=xie;Ie.checkGlobalSchemaTable=Uie;Ie.getHomeDir=xk;Ie.getPropsFilePath=Lie;Ie.promisifyPapaParse=Bie;Ie.removeBOM=Bk;Ie.createEventPromise=Fie;Ie.checkProcessRunning=Hie;Ie.checkSchemaTableExist=kie;Ie.checkSchemaExists=Fk;Ie.checkTableExists=Hk;Ie.getStartOfTomorrowInSeconds=Gie;Ie.getLimitKey=qie;Ie.isObject=yie;Ie.isNotEmptyAndHasValue=gie;Ie.autoCasterIsNumberCheck=Uk;Ie.backtickASTSchemaItems=$ie;Ie.isPortTaken=Mie;Ie.createForkArgs=Vie;Ie.autoCastBoolean=Kie;Ie.asyncSetTimeout=Dk;Ie.getTableHashAttribute=Yie;Ie.doesSchemaExist=Wie;Ie.doesTableExist=zie;Ie.stringifyObj=jie;Ie.ms_to_time=Qie;Ie.changeExtension=Jie;Ie.getEnvCliRootPath=ON;Ie.noBootFile=Xie;Ie.httpRequest=Zie;Ie.transformReq=eoe;Ie.convertToMS=toe;Ie.PACKAGE_ROOT=oie;function _ie(e){return e instanceof Error?e:new Error(e)}o(_ie,"errorizeMessage");function ss(e){return e==null}o(ss,"isEmpty");function gie(e){return!ss(e)&&(e||e===0||e===""||Mk(e))}o(gie,"isNotEmptyAndHasValue");function ji(e){return ss(e)||e.length===0||e.size===0}o(ji,"isEmptyOrZeroLength");function Sie(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}o(Sie,"arrayHasEmptyValues");function Tie(e){if(ji(e))return!0;for(let t=0;t<e.length;t++)if(ji(e[t]))return!0;return!1}o(Tie,"arrayHasEmptyOrZeroLengthValues");function Rie(...e){try{return e.join($a.sep)}catch{console.error(e)}}o(Rie,"buildFolderPath");function Mk(e){return ss(e)?!1:e===!0||e===!1}o(Mk,"isBoolean");function yie(e){return ss(e)?!1:typeof e=="object"}o(yie,"isObject");function Aie(e){return ji(e)?pie:e.slice(0,-Eie)}o(Aie,"stripFileExtension");function bie(e){return ss(e)||e===""||typeof e!="string"?e:Pk[e]!==void 0?Pk[e]:Uk(e)===!0?Number(e):fie.test(e)?new Date(e):e}o(bie,"autoCast");function vk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(vk,"autoCastJSON");function wN(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=wN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=wN(r);n!==r&&(e[t]=n)}return e}else return vk(e)}o(wN,"autoCastJSONDeep");function Uk(e){if(e.startsWith("0.")&&Ck(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ck(e))}o(Uk,"autoCasterIsNumberCheck");async function Iie(e){if(ji(e))throw new Error(`Directory path: ${e} does not exist`);try{await wk.emptyDir(e),await wk.remove(e)}catch(t){throw Un.error(`Error removing files in ${e} -- ${t}`),t}}o(Iie,"removeDir");function Nie(e,t){if(ji(e)){Un.info("Invalid current version sent as parameter.");return}if(ji(t)){Un.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(Nie,"compareVersions");function wie(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(wie,"isCompatibleDataVersion");function Oie(e){if(ss(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}o(Oie,"escapeRawValue");function Cie(e){if(ss(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Cie,"unescapeValue");function Pie(e,t){if(ss(e))return Un.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+qg.EOL}!ji(n)&&n[0]===";"?r+=" "+n+s+qg.EOL:ji(n)||(r+=n+"="+s+qg.EOL)}catch{Un.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(Pie,"stringifyProps");function xk(){let e;try{e=qg.homedir()}catch{e=process.env.HOME}return e}o(xk,"getHomeDir");function Lie(){let e=$a.join(xk(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return Lk.existsSync(e)||(e=$a.join(__dirname,"../","hdb_boot_properties.file")),e}o(Lie,"getPropsFilePath");function Die(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Die,"timeoutPromise");async function Mie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=sie.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(Mie,"isPortTaken");function vie(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Un.error(`Error checking operation against cluster ops ${t}`)}return!1}o(vie,"isClusterOperation");function Uie(e,t){let r=(Me(),v(_t)).getDatabases();if(!r[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Uie,"checkGlobalSchemaTable");function xie(e,t){if(ss(t)){Un.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ss(e)||ji(e)){Un.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Un.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Un.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(xie,"getClusterUser");function Bie(){Ok.parsePromise=function(e,t,r){return new Promise(function(n,s){Ok.parse(e,{header:!0,transformHeader:Bk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(Bie,"promisifyPapaParse");function Bk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Bk,"removeBOM");function Fie(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Un.info(`Got cluster status event response: ${cie(s)}`);try{i.cancel()}catch{Un.error("Error trying to cancel timeout.")}n(s)})})}o(Fie,"createEventPromise");async function Hie(e){let t=!0,r=0;do await Dk(mie*r++),(await aie.findPs(e)).length>0&&(t=!1);while(t&&r<hie);if(t)throw new Error(`process ${e} was not started`)}o(Hie,"checkProcessRunning");function kie(e,t){let r=Fk(e);if(r)return r;let n=Hk(e,t);if(n)return n}o(kie,"checkSchemaTableExist");function Fk(e){let{getDatabases:t}=(Me(),v(_t));if(!t()[e])return Vg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Fk,"checkSchemaExists");function Hk(e,t){let{getDatabases:r}=(Me(),v(_t));if(!r()[e][t])return Vg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Hk,"checkTableExists");function Gie(){let e=$g().utc().add(1,"d").startOf("d").unix(),t=$g().utc().unix();return e-t}o(Gie,"getStartOfTomorrowInSeconds");function qie(){return $g().utc().format("DD-MM-YYYY")}o(qie,"getLimitKey");function $ie(e){try{let t=new iie(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Un.error("Got an error back ticking items."),Un.error(t)}}o($ie,"backtickASTSchemaItems");function Vie(e){return[e]}o(Vie,"createForkArgs");function Kie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Kie,"autoCastBoolean");function Yie(e,t){let{getDatabases:r}=(Me(),v(_t)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(Yie,"getTableHashAttribute");function Wie(e){let{getDatabases:t}=(Me(),v(_t));return t()[e]!==void 0}o(Wie,"doesSchemaExist");function zie(e,t){let{getDatabases:r}=(Me(),v(_t));return r()[e]?.[t]!==void 0}o(zie,"doesTableExist");function jie(e){try{return JSON.stringify(e)}catch{return e}}o(jie,"stringifyObj");function Qie(e){let t=$g.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(Qie,"ms_to_time");function Jie(e,t){let r=$a.basename(e,$a.extname(e));return $a.join($a.dirname(e),r+t)}o(Jie,"changeExtension");function ON(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=lie(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(ON,"getEnvCliRootPath");var NN;function Xie(){if(NN)return NN;let e=ON();if(ON()&&Lk.pathExistsSync($a.join(e,Ir.HDB_CONFIG_FILE)))return NN=!0,!0}o(Xie,"noBootFile");function Zie(e,t){let r;return e.protocol==="http:"?r=die:r=uie,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(Zie,"httpRequest");function eoe(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(eoe,"transformReq");function toe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(toe,"convertToMS");var Vg=rn()});var Kk=M((EDe,Vk)=>{"use strict";var{promises:ud,createReadStream:roe,createWriteStream:noe}=require("fs"),{createGzip:soe}=require("zlib"),{promisify:ioe}=require("util"),{pipeline:ooe}=require("stream"),aoe=ioe(ooe),PN=require("path"),$k=ae();$k.initSync();var Kg=Q(),{CONFIG_PARAMS:coe,ITC_EVENT_TYPES:hDe}=(k(),v(Y)),{onMessageFromWorkers:pDe}=st(),{convertToMS:kk}=ie(),{onStorageReclamation:loe}=(u_(),v(Gv)),uoe=6e4,doe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",foe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",CN,Gk;Vk.exports=moe;function moe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(loe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(doe);if(!i)throw new Error(foe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=kk(r));let d;return CN=Date.now(),Kg.trace("Log rotate enabled, maxSize:",t,"interval:",r),Gk=setInterval(async()=>{if(l){let f;f=await ud.stat(e.path),f.size>=l&&(d=await qk(e.path,i))}if(u&&Date.now()-CN>=u&&(d=await qk(e.path,i),CN=Date.now()),n||c){let f=kk(n??"1M")/(1+c);c=0;let m=await ud.readdir(i);for(let h of m)try{let p=await ud.stat(PN.join(i,h));Date.now()-p.mtimeMs>f&&await ud.unlink(PN.join(i,h))}catch(p){Kg.error("Error trying to remove log",h,p)}}},a??uoe).unref(),{end(){clearInterval(Gk)},getLastRotatedLogPath(){return d}}}o(moe,"logRotator");async function qk(e,t){let r=$k.get(coe.LOGGING_ROTATION_COMPRESS),n=PN.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await ud.rename(e,n),r&&(e=n,n+=".gz",await aoe(roe(e),soe(),noe(n)),await ud.unlink(e)),Kg.closeLogFile(),Kg.notify(`hdb.log rotated, old log moved to ${n}`),n}o(qk,"moveLogFile")});var Qk={};Oe(Qk,{RootConfigWatcher:()=>LN});var Yk,Wk,zk,Yg,jk,LN,Jk=le(()=>{Yk=w(require("chokidar")),Wk=require("node:fs/promises"),zk=w(wt()),Yg=require("node:stream"),jk=require("yaml"),LN=class extends Yg.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;constructor(){super(),this.#e=(0,zk.getConfigFilePath)(),this.#t=Yk.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,Wk.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,jk.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}ready(){return(0,Yg.once)(this,"ready")}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((RDe,eS)=>{"use strict";var xo=require("fs-extra"),{workerData:hoe,threadId:poe,isMainThread:sG}=require("worker_threads"),yh=require("path"),iG=require("yaml"),oG=require("properties-reader"),Fr=(k(),v(Y)),Xk=xc(),Eoe=require("os"),{PACKAGE_ROOT:FN}=bt(),{_assignPackageExport:_oe}=Xs(),{Console:goe}=require("console"),Zk=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),eG=new Map,{join:Bo}=yh,tG=1e4,tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Soe={STDOUT:"stdOut",STDERR:"stdErr"},TDe=Bo(FN,"logs"),Toe=Bo(FN,"config/yaml/",Fr.HDB_DEFAULT_CONFIG_FILE),Roe=1e4,Ah,bh,Wg,Qi,MN,DN,jg,Pt,xn,Qg,Jg,dd,Rh,Th;function zg(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=yh.dirname(n)):t.root?n=Bo(t.root,MN):(n=Pt.path,t.root||(t.root=yh.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=tr[t.level]??Pt?.level??tr.info,aG(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Pt.path===e.path&&r)}o(zg,"updateLogger");function aG(e){let t=e.conditional??(e.conditional={});t.notify=tr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=tr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=tr.error>=e.level?e.error.bind(e):void 0,t.warn=tr.warn>=e.level?e.warn.bind(e):void 0,t.info=tr.info>=e.level?e.info.bind(e):void 0,t.debug=tr.debug>=e.level?e.debug.bind(e):void 0,t.trace=tr.trace>=e.level?e.trace.bind(e):void 0}o(aG,"updateConditional");async function vN(){Th||(Th=new koe,await Th.ready(),Th.on("change",vN));let e=Th.config,t=e.logging??{};zg(Pt,t),jg=Pt.path,Ah=t.console??!1,t.external&&zg(xn,t.external);for(let r in e){let n=e[r];n.logging?zg(Pt.forComponent(r),n.logging,r):Pt.hasComponent(r)&&zg(Pt.forComponent(r),t,r)}}o(vN,"updateLogSettings");var UN=class extends goe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){dn="trace",this.level<=tr.trace&&super.info(...t),dn="info"}debug(...t){dn="debug",this.level<=tr.debug&&super.info(...t),dn="info"}info(...t){dn="info",this.level<=tr.info&&super.info(...t),dn="info"}warn(...t){dn="warn",this.level<=tr.warn&&super.warn(...t),dn="info"}error(...t){dn="error",this.level<=tr.error&&super.error(...t),dn="info"}fatal(...t){dd=!0;try{dn="fatal",this.level<=tr.fatal&&super.error(...t),dn="info"}finally{dd=!1}}notify(...t){dd=!0;try{dn="notify",this.level<=tr.notify&&super.info(...t),dn="info"}finally{dd=!1}}withTag(t){return lG(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};Rh===void 0&&cG();eS.exports={notify:Coe,fatal:Poe,error:BN,warn:Loe,info:Noe,debug:Ooe,trace:woe,logLevel:Qi,loggerWithTag:lG,suppressLogging:boe,initLogSettings:cG,logCustomLevel:Doe,closeLogFile:uG,createLogger:Zg,logsAtLevel:yoe,getLogFilePath:o(()=>jg,"getLogFilePath"),forComponent:o(e=>Pt.forComponent(e),"forComponent"),setMainLogger:Foe,setLogLevel:voe,OUTPUTS:Soe,AuthAuditLog:Hoe,start:vN,startOnMainThread:vN,errorToString:Boe};eS.exports.externalLogger={notify(...e){xn.notify(...e)},fatal(...e){xn.fatal(...e)},error(...e){xn.error(...e)},warn(...e){xn.warn(...e)},info(...e){xn.info(...e)},debug(...e){xn.debug(...e)},trace(...e){xn.trace(...e)},withTag(e){return xn.withTag(e)},loggerWithTag(e){return xn.withTag(e)}};_oe("logger",eS.exports.externalLogger);function yoe(e){return tr[Qi]<=tr[e]}o(yoe,"logsAtLevel");function cG(e=!1){try{if(Rh===void 0||e){uG();let t=Moe(),r=Xk(["ROOTPATH"]);try{Rh=oG(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!xo.pathExistsSync(Bo(r.ROOTPATH,Fr.HDB_CONFIG_FILE)))throw s}let n;if({level:Qi,configLogPath:DN,toFile:bh,logConsole:Ah,rotation:n,toStream:Wg}=Uoe(r.ROOTPATH?Bo(r.ROOTPATH,Fr.HDB_CONFIG_FILE):Rh.get("settings_path")),MN=Fr.LOG_NAMES.HDB,jg=Bo(DN,MN),Pt=Zg({path:jg,level:Qi,stdStreams:Wg,rotation:n}),xn=Pt.forComponent("external"),xn.tag=null,sG)try{require("segfault-handler").registerHandler(Bo(DN,"crash.log"))}catch{}}}catch(t){if(Rh=void 0,t.code===Fr.NODE_ERROR_CODES.ENOENT||t.code===Fr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Xk(Object.keys(Fr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Fr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Fr.CONFIG_PARAMS.LOGGING_LEVEL){Qi=a;continue}i===Fr.CONFIG_PARAMS.LOGGING_CONSOLE&&(Ah=i)}let{defaultLevel:n}=xoe();bh=!1,Wg=!0,Qi=Qi===void 0?n:Qi,Pt=Zg({level:Qi}),xn=Pt.forComponent("external"),xn.tag=null;return}throw BN("Error initializing log settings"),BN(t),t}process.env.DEV_MODE&&(Wg=!0),Aoe()}o(cG,"initLogSettings");var Va=!0;function Aoe(){bh&&(process.stdout.write=function(e){return typeof e=="string"&&Va&&Ah&&(e=e.toString(),e[e.length-1]===`
|
|
16
|
+
`&&(e=e.slice(0,-1)),Jg(e)),Zk.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Va&&Ah&&(e[e.length-1]===`
|
|
17
|
+
`&&(e=e.slice(0,-1)),Jg(e)),Zk.apply(process.stderr,arguments)})}o(Aoe,"stdioLogging");function lG(e,t,r=Pt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=tr[i]?function(...a){Xg=e;try{return s.call(r,...a)}finally{Xg=void 0}}:null}o(n,"logWithTag")}o(lG,"loggerWithTag");function boe(e){try{Va=!1,e()}finally{Va=!0}}o(boe,"suppressLogging");var Ioe=hoe?.name?.replace(/ /g,"-")||"main",dn="info",xN,Xg;function Zg({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=tr[t],l;function u(h){if(bh)if(l.logToStdstreams){f(h.replace(/\x1b\[[0-9;]*m/g,"")),Va=!1;try{process.stdout.write(h)}finally{Va=!0}}else f(h);else r&&process.stdout.write(h)}o(u,"logStdOut");function d(h){if(bh){if(f(h),r){Va=!1;try{process.stderr.write(h)}finally{Va=!0}}}else r&&process.stderr.write(h)}o(d,"logStdErr");let f=e&&nG(e,n,s);function m(h){return{write(p){let _=[dn];_.unshift(xN||Ioe+"/"+poe),Xg&&_.push(Xg),l.tag&&_.push(l.tag),h(`[${_.join("] [")}]: ${p}`)}}}if(o(m,"logPrepend"),s&&(Jg=f),l=new UN({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),aG(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(h){e=h,f=nG(e,l.rotation,s),s&&(Jg=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let h=new Map;l.forComponent=function(p){let _=h.get(p);return _||(_=Zg({path:e,level:t,stdStreams:r,isExternalInstance:p==="external",rotation:n,writeToLog:i,component:!0}),h.set(p,_)),_},l.hasComponent=function(p){return h.has(p)}}return l}o(Zg,"createLogger");var rG=100;function nG(e,t,r){let n=eG.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,eG.set(e,n)),sG&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=Kk();try{n.rotator=p({logger:n,...t})}catch(_){n("Error initializing log rotator",_)}},100));let u=0;return n;function d(p){u++;let _=`${new Date().toISOString()} ${p}${p.endsWith(`
|
|
18
18
|
`)?"":`
|
|
19
|
-
`}`;c?(c.length<
|
|
20
|
-
`),dd&&(clearTimeout(a),f())):dd||l<performance.now()+Xk?f(_):(l=Math.min(l,performance.now()+Xk),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();xo.appendFileSync(s,c?c.join(""):p);let g=performance.now();l=Math.max(g,l)+(g-_)*50}else i||console.log(c?c.join(""):p);c&&(c=null)}function m(){try{xo.closeSync(s)}catch{}s=null,r&&(Qg=null)}function h(p){if(!s){try{s=xo.openSync(e,"a"),r&&(Qg=s)}catch(_){if(_.code==="ENOENT"&&!p)return xo.mkdirpSync(yh.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},goe).unref()}}}o(Zk,"getFileLogger");function Aoe(...e){Pt.info(...e)}o(Aoe,"info");function boe(...e){Pt.trace(...e)}o(boe,"trace");function vN(...e){Pt.error(...e)}o(vN,"error");function Ioe(...e){Pt.debug(...e)}o(Ioe,"debug");function Noe(...e){Pt.notify(...e)}o(Noe,"notify");function woe(...e){Pt.fatal(...e)}o(woe,"fatal");function Ooe(...e){Pt.warn(...e)}o(Ooe,"warn");function Coe(e,t,r,...n){MN=r.service_name;try{Pt[e](...n)}finally{MN=void 0}}o(Coe,"logCustomLevel");function Poe(){let e;try{e=moe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Bo(e,Fr.HDB_HOME_DIR_NAME,Fr.BOOT_PROPS_FILE_NAME);return xo.existsSync(t)||(t=Bo(UN,"utility/hdb_boot_properties.file")),t}o(Poe,"getPropsFilePath");function Loe(e){Qi=e}o(Loe,"setLogLevel");function Doe(e){try{if(e.includes("config/settings.js")){let l=rG(e);return{level:l.get(Fr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:yh.dirname(l.get(Fr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(Fr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(Fr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=tG.parseDocument(xo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===Fr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(Doe,"getLogConfig");function Moe(){try{let e=tG.parseDocument(xo.readFileSync(_oe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(Moe,"getDefaultConfig");function voe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(voe,"errorToString");function Uoe(e){Pt=e}o(Uoe,"setMainLogger");function oG(){try{xo.closeSync(Qg)}catch{}Qg=null}o(oG,"closeLogFile");function xoe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(xoe,"AuthAuditLog");var{RootConfigWatcher:Boe}=(Wk(),v(Yk))});var oe=M((uG,dG)=>{"use strict";var xN=require("fs-extra"),Nl=require("path"),aG=require("os"),Foe=require("properties-reader"),Nh=Q(),Ih=ie(),xe=(k(),v(W)),tS=wt(),Hoe="Error initializing environment manager",rS="BOOT_PROPS_FILE_PATH",cG=!1,koe={[xe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Fo={};Object.assign(uG,dG.exports={BOOT_PROPS_FILE_PATH:rS,getHdbBasePath:Goe,setHdbBasePath:qoe,get:lG,initSync:Voe,setProperty:je,initTestEnvironment:Koe});function Goe(){return Fo[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(Goe,"getHdbBasePath");function qoe(e){Fo[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(qoe,"setHdbBasePath");function lG(e){let t=tS.getConfigValue(e);return t===void 0?Fo[e]:t}o(lG,"get");function je(e,t){koe[e]&&(Fo[e]=t),tS.updateConfigObject(e,t)}o(je,"setProperty");function $oe(){let e;try{e=Ih.getPropsFilePath(),xN.accessSync(e,xN.constants.F_OK|xN.constants.R_OK),cG=!0;let t=Foe(e);return Fo[xe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(xe.HDB_SETTINGS_NAMES.INSTALL_USER),Fo[xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Fo[rS]=e,!0}catch{return Nh.trace(`Environment manager found no properties file at ${e}`),!1}}o($oe,"doesPropFileExist");function Voe(e=!1){try{(cG||$oe()||Ih.noBootFile()||e)&&(tS.initConfig(e),Fo[xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tS.getConfigValue(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Nh.error(Hoe),Nh.error(t),console.error(t),process.exit(1)}}o(Voe,"initSync");function Koe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Nl.join(__dirname,"../../","unitTests");Fo[rS]=Nl.join(l,"hdb_boot_properties.file"),je(xe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nl.join(l,"settings.test")),je(xe.HDB_SETTINGS_NAMES.INSTALL_USER,aG.userInfo()?aG.userInfo().username:void 0),je(xe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),je(xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nl.join(l,"envDir","log")),je(xe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),je(xe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),je(xe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),je(xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nl.join(l,"envDir")),je(xe.CONFIG_PARAMS.STORAGE_PATH,Nl.join(l,"envDir")),s&&(je(xe.CONFIG_PARAMS.HTTP_SECUREPORT,lG(xe.CONFIG_PARAMS.HTTP_PORT)),je(xe.CONFIG_PARAMS.HTTP_PORT,null)),je(xe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),je(xe.CONFIG_PARAMS.HTTP_PORT,9926),je(xe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),je(xe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),je(xe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ih.isEmpty(i)?!1:i),je(xe.CONFIG_PARAMS.HTTP_CORS,Ih.isEmpty(i)?!1:i),je(xe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),je(xe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),je(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),je(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),je(xe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),je(xe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ih.isEmpty(c)?!1:c),a&&(je("CORS_ACCESSLIST",a),je(xe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(je(xe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),je(xe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(je(xe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),je(xe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(je(xe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),je(xe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rS}. Please check your boot props and settings files`;Nh.fatal(r),Nh.error(t)}}o(Koe,"initTestEnvironment")});var HN={};we(HN,{loadGQLSchema:()=>zoe,start:()=>FN,startOnMainThread:()=>Woe});function FN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,h=[],p;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(G){if(G.kind==="NonNullType"){let $=F(G.type);return $.nullable=!1,$}if(G.kind==="ListType")return{type:"array",elements:F(G.type)};let K={type:G.name?.value};return Object.defineProperty(K,"location",{value:G.loc.startToken}),K};o(F,"getProperty");let T=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(T,N);for(let G of R.directives){if(G.name.value==="table"){for(let K of G.arguments)N[K.name.value]=K.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,h.push(N)}if(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="splitSegments"&&(N.splitSegments=!0),G.name.value==="replicate"&&(N.replicate=!0),G.name.value==="export"){N.export=!0;for(let K of G.arguments)typeof N.export!="object"&&(N.export={}),N.export[K.name.value]=K.value.value}}let O=!1,Z={};for(let G of R.fields){let Y=F(G.type);Y.name=G.name.value,y.push(Y),Z[Y.name]=void 0;for(let K of G.directives){let $=K.name.value;if($==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",K.loc):(Y.isPrimaryKey=!0,O=!0);else if($==="indexed"){let le={};for(let ue of K.arguments||[])le[ue.name.value]=ue.value.value;Y.indexed=le}else if($==="computed"){for(let le of K.arguments||[])if(le.name.value==="from"){let ue=le.value.value;Y.computed={from:g(ue,le,Z)},Y.version==null&&(Y.version=ue)}else le.name.value==="version"&&(Y.version=le.value.value);Y.computed=Y.computed||!0}else if($==="relationship"){let le={};for(let ue of K.arguments)le[ue.name.value]=ue.value.value;Y.relationship=le}else if($==="createdTime")Y.assignCreatedTime=!0;else if($==="updatedTime")Y.assignUpdatedTime=!0;else if($==="expiresAt")Y.expiresAt=!0;else if($==="allow"){let le=Y.authorizedRoles=[];for(let ue of K.arguments)ue.name.value==="role"&&le.push(ue.value.value)}else server.knownGraphQLDirectives.includes($)&&console.warn(`@${$} is an unknown directive, at`,K.loc)}}N.type=T,T==="Query"&&(p=N)}function _(R){let T=m.get(R.type);T?(Object.defineProperty(R,"properties",{value:T.properties}),Object.defineProperty(R,"definition",{value:T})):R.type==="array"?_(R.elements):Yoe.includes(R.type)||(0,mG.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}o(_,"connectPropertyType");for(let R of m.values())for(let T of R.properties)_(T);for(let R of h)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,BN.dirname)(n),R.tableClass):i.set((0,BN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,T,y){return new fG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:T.loc.startToken.line-1,columnOffset:T.loc.startToken.column}).runInThisContext()(y)}o(g,"createComputedFrom")}}var BN,fG,mG,Yoe,Woe,zoe,hG=ce(()=>{BN=require("path"),fG=require("node:vm");Me();mG=w(nt()),Yoe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(FN,"start");Woe=FN,zoe=FN({ensureTable:ze}).handleFile});var GN={};we(GN,{start:()=>nae});function joe(e){if(e.kind!==Be.Kind.OPERATION_DEFINITION&&e.kind!==Be.Kind.FRAGMENT_DEFINITION)throw new Hr(`Unexpected non-executable definition type ${e.kind}.`)}function pG(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function kN(e){return parseInt(e.value,10)}function _G(e){return parseFloat(e.value)}function gG(e,t,r){let n=r.get(e.name.value);return SG(n)?TG(n,t):{attribute:t,value:n}}function SG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function TG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],SG(n)?TG(n,t):{attribute:t,value:n}))}function Qoe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Be.Kind.NULL:return{attribute:t,value:null};case Be.Kind.INT:return{attribute:t,value:kN(e.value)};case Be.Kind.FLOAT:return{attribute:t,value:_G(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:t,value:e.value.value};case Be.Kind.VARIABLE:return gG(e.value,t,r);case Be.Kind.OBJECT:return RG(e.value,t,r);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Hr(`Value type, ${e.value.kind}, is not supported.`)}}function RG(e,t,r){return e.fields.flatMap(n=>Qoe(n,t,r))}function Joe(e,t){switch(e.value.kind){case Be.Kind.NULL:return{attribute:e.name.value,value:null};case Be.Kind.INT:return{attribute:e.name.value,value:kN(e.value)};case Be.Kind.FLOAT:return{attribute:e.name.value,value:_G(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Be.Kind.VARIABLE:return gG(e.value,e.name.value,t);case Be.Kind.OBJECT:return RG(e.value,[e.name.value],t);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Hr(`Argument type, ${e.value.kind}, is not supported.`)}}function Xoe(e,t){return e.flatMap(r=>Joe(r,t))}function nS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Be.Kind.FIELD:return r;case Be.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Hr(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case Be.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function yG(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:yG(r.selectionSet,t)}:r.name.value)}async function Zoe(e,t,r,n){let s=bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Hr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:yG(e.selectionSet,r),conditions:Xoe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function AG(e){switch(e.kind){case Be.Kind.NULL:return null;case Be.Kind.INT:return kN(e);case Be.Kind.FLOAT:return parseFloat(e.value);case Be.Kind.STRING:case Be.Kind.BOOLEAN:return e.value;case Be.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:AG(r.value),...t}),{});case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Hr(`Value type, ${e.kind}, is not supported.`)}}function eae(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=AG(n.defaultValue)),n.type.kind===Be.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Hr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function tae(e,t,r,n){if(e.operation===Be.OperationTypeNode.SUBSCRIPTION)throw new Hr("Subscriptions are not supported.");if(e.operation===Be.OperationTypeNode.MUTATION)throw new Hr("Mutations are not supported yet.");let s=eae(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>Zoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function EG({query:e,variables:t={},operationName:r},n){let s=Be.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(joe(u),u.kind===Be.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Hr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Hr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Hr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Hr(`Operation \`${r}\` not found.`);let l=await tae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function rae(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return pG(r),EG(r,e)}case"POST":{let r=await To(e.headers.get("content-type"),!0)(e._nodeRequest);return pG(r),EG(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function nae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await rae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Hr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Hr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Be,Hr,Ji,bG=ce(()=>{Be=w(require("graphql"));Ro();Fu();o(joe,"assertExecutableDefinitionNode");o(pG,"assertRequestParams");o(kN,"processIntValueNode");o(_G,"processFloatValueNode");o(gG,"processVariableNode");o(SG,"isObject");o(TG,"transformObjectIntoQueryCondition");o(Qoe,"processObjectFieldNode");o(RG,"processObjectValueNode");o(Joe,"processArgumentNode");o(Xoe,"buildConditionsQuery");o(nS,"fillInFragments");o(yG,"buildSelectQuery");o(Zoe,"processFieldNode");o(AG,"processConstValueNode");o(eae,"resolveVariables");o(tae,"executeOperation");o(EG,"resolver");Hr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(rae,"graphqlQueryingHandler");o(nae,"start")});var PG=M((NDe,CG)=>{var fd=require("validate.js"),NG=ut(),md=(k(),v(W)),{handleHDBError:sae,hdbErrors:iae}=ge(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:oae}=iae,qN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),aae={STRUCTURE_USER:"structure_user"},IG=Object.values(md.ROLE_TYPES_ENUM),cae="attribute_permissions",lae="attribute_name",{PERMS_CRUD_ENUM:hd}=md,uae=[cae,...Object.values(hd)],wG=[hd.READ,hd.INSERT,hd.UPDATE],dae=[lae,...wG];function fae(e){let t=qN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,OG(e,t)}o(fae,"addRoleValidation");function mae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,OG(e,t)}o(mae,"alterRoleValidation");function hae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,NG.validateObject(e,t)}o(hae,"dropRoleValidation");var pae=["operation","role","id","permission","hdb_user","access"];function OG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)pae.includes(n[a])||s.push(n[a]);s.length>0&&fr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=NG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=Eae(e);a&&fr(a,r),IG.forEach(c=>{e.permission[c]&&!fd.isBoolean(e.permission[c])&&fr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(IG.indexOf(a)<0){if(a===aae.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(rr.SCHEMA_NOT_FOUND(f),r)}continue}fr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(rr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{uae.includes(d)||fr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(hd).forEach(d=>{fd.isDefined(u[d])?fd.isBoolean(u[d])||fr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(rr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let h=u.attribute_permissions[m];if(Object.keys(h).forEach(_=>{!dae.includes(_)&&_!==hd.DELETE&&fr(rr.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!fd.isDefined(h.attribute_name)){fr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){fr(rr.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}wG.forEach(_=>{fd.isDefined(h[_])?fd.isBoolean(h[_])||fr(rr.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):fr(rr.ATTR_PERM_MISSING(_,p),r,a,l)}),!f.read&&h.read===!0&&(f.read=!0),!f.insert&&h.insert===!0&&(f.insert=!0),!f.update&&h.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return _ae(r)}o(OG,"customValidate");CG.exports={addRoleValidation:fae,alterRoleValidation:mae,dropRoleValidation:hae};function Eae(e){let{operation:t,permission:r}=e;if(t===md.OPERATIONS_ENUM.ADD_ROLE||t===md.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?md.ROLE_TYPES_ENUM.SUPER_USER:md.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Eae,"validateNoSUPerms");function _ae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return sae(new Error,n,oae.BAD_REQUEST)}else return null}o(_ae,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var Oh=M((CDe,vG)=>{"use strict";var LG=Dn(),DG=sn(),gae=El(),VN=PG(),KN=Co(),ODe=require("uuid").v4,Sae=require("util"),sS=(k(),v(W)),Tae=ie(),YN=DG.searchByValue,Rae=DG.searchByHash,yae=Sae.promisify(gae.delete),Aae=ai(),bae=Ku(),{hdbErrors:Iae,handleHDBError:wl}=ge(),{HDB_ERROR_MSGS:MG,HTTP_STATUS_CODES:wh}=Iae,{UserEventMsg:WN}=oi();vG.exports={addRole:Nae,alterRole:wae,dropRole:Oae,listRoles:Cae};function $N(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o($N,"scrubRoleDetails");async function Nae(e){let t=VN.addRoleValidation(e);if(t)throw t;e=$N(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await YN(r)||[])}catch(i){throw wl(i)}if(n&&n.length>0)throw wl(new Error,MG.ROLE_ALREADY_EXISTS(e.role),wh.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await LG.insert(s),KN.signalUserChange(new WN(process.pid)),e=$N(e),e}o(Nae,"addRole");async function wae(e){let t=VN.alterRoleValidation(e);if(t)throw t;e=$N(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await LG.update(r)}catch(s){throw wl(s)}if(n&&n?.message==="updated 0 of 1 records")throw wl(new Error,"Invalid role id",wh.BAD_REQUEST,void 0,void 0,!0);return await KN.signalUserChange(new WN(process.pid)),e}o(wae,"alterRole");async function Oae(e){let t=VN.dropRoleValidation(e);if(t)throw wl(new Error,t,wh.BAD_REQUEST,void 0,void 0,!0);let r=new bae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Rae(r));if(n.length===0)throw wl(new Error,MG.ROLE_NOT_FOUND,wh.NOT_FOUND,void 0,void 0,!0);let s=new Aae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await YN(s)),a=!1;if(Tae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw wl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,wh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await yae(c),KN.signalUserChange(new WN(process.pid)),`${n[0].role} successfully deleted`}o(Oae,"dropRole");async function Cae(){return YN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(Cae,"listRoles")});var zN={};we(zN,{start:()=>BG,startOnMainThread:()=>Dae});function BG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,UG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(Pae.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Lae(i)}}}async function Lae(e){let t=st().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,xG.isEqual)(i,e)?void 0:(e.id=r.id,(0,iS.alterRole)(e))}return(0,iS.addRole)(e)}var iS,UG,xG,Pae,Dae,FG=ce(()=>{Me();iS=w(Oh()),UG=require("yaml"),xG=require("lodash"),Pae=["super_user","cluster_user","structure_user"];o(BG,"start");o(Lae,"ensureRole");Dae=BG});async function oS(e){let t=(0,GG.pathToFileURL)(e).toString();if(Mae)return Ch||(Ch=vae(xae)),(await(await Ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function vae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ch=new Compartment({console,Math,Date,fetch:Uae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,kG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Ur,s.tables=ln,s.databases=He}};let n=await(0,HG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Ch}function Uae(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function xae(){return{Resource:Ur,tables:ln}}var HG,kG,GG,Mae,Ch,jN=ce(()=>{Pa();Me();HG=require("fs/promises"),kG=require("path"),GG=require("url"),Mae=!1;o(oS,"secureImport");o(vae,"getCompartment");o(Uae,"secureOnlyFetch");o(xae,"getGlobalVars")});var QN={};we(QN,{handleApplication:()=>Bae,suppressHandleApplicationWarning:()=>Fae});function $G(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Bae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}oS(t.absolutePath).then(r=>{let n=(0,qG.dirname)(t.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");$G(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),VG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function VG(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;$G(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&VG(e,s,i)}}var qG,Fae,KG=ce(()=>{jN();qG=require("path");o($G,"isResource");o(Bae,"handleApplication");o(VG,"recurseForResources");Fae=!0});var XN={};we(XN,{start:()=>Hae});function Hae({resources:e}){e.set("login",JN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var JN,YG=ce(()=>{Pa();o(Hae,"start");JN=class extends Ur{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function JG(e){let t={openapi:kae,info:{title:"HarperDB HTTP REST interface",version:QG.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:a,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(a)for(let{type:y,name:N,elements:O,relationship:F,definition:Z}of a){if(F)y==="array"?u[N]={type:"array",items:{$ref:Ka+O.type}}:u[N]={$ref:Ka+y};else{let G=Z??O?.definition;if(G){if(!t.components.schemas[G.type]){let Y={};G.properties.forEach(K=>{Y[K.name]=new rw(ZN[K.type],K.type)}),t.components.schemas[G.type]=new jG(Y)}y==="array"?u[N]={type:"array",items:{$ref:Ka+G.type}}:u[N]={$ref:Ka+G.type}}else y==="array"?O.type==="Any"||O.type=="ID"?u[N]={type:"array",items:{format:O.type}}:u[N]={type:"array",items:new rw(ZN[O.type],O.type)}:y==="Any"||y=="ID"?u[N]={format:y}:u[N]=new rw(ZN[y],y)}d.push(new nw(N,"query",u[N]))}let f=Object.keys(u),m=new nw(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new nw("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new jG(u);let p=l.post!==Resource.prototype.post||l.update,_=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",T="/"+s+"/";p&&(t.paths[T]={},t.paths[T].post=new Gae(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new ew(d,r,{200:new tw({$ref:Ka+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zG(d,r,"delete all the records that match the provided query",{204:new WG})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new ew([m],r,{200:new tw({$ref:Ka+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new qae([m],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zG([m],r,"delete a record with the given primary key",{204:new WG})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new ew([m,h],r,{200:new tw({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function Gae(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ka+e}}}},this.security=t,this.responses={200:{description:sw,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function ew(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tw(e){this.description=sw,this.content={"application/json":{schema:e}}}function WG(){this.description="successfully processed request, no content returned to client"}function qae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ka+r}}}},this.responses={200:{description:sw}}}function zG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function jG(e){this.type="object",this.properties=e}function rw(e,t){this.type=e,this.format=t}function nw(e,t,r){this.name=e,this.in=t,this.schema=r}var QG,kae,ZN,Ka,sw,XG=ce(()=>{QG=w(bt()),kae="3.0.3",ZN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ka="#/components/schemas/",sw="successful operation";o(JG,"generateJsonApi");o(Gae,"Post");o(ew,"Get");o(tw,"Response200");o(WG,"Response204");o(qae,"Put");o(zG,"Delete");o(jG,"ResourceSchema");o(rw,"Type");o(nw,"Parameter")});var eq={};we(eq,{Request:()=>Ya,createReuseportFd:()=>aS});var ZG,Ya,iw,ow,aS,Ph=ce(()=>{ZG=require("os"),Ya=class{static{o(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new ow(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new iw(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},iw=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},ow=class{constructor(t){this.asObject=t}static{o(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,ZG.platform)()!="win32"&&(aS=require("node-unix-socket").createReuseportFd)});var lS={};we(lS,{parseHeaderValue:()=>cw,start:()=>Kae});async function Vae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&I_(e);let i=new Os;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==tq){let g=cS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ri(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=cw(g);for(let T of R)switch(T.name){case"max-age":e.expiresAt=T.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=cw(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Ft(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=To(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new pd.ClientError(g,400)}if(e.authorize=!0,a===tq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return JG(cS);throw new pd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new pd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new pd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,aw.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=JH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=cm(f.data,e,f)),f}else if(h=e.lastModified){$ae[0]=h;let g=String.fromCharCode(34,(zr[0]&63)+62,(zr[0]>>6)+(zr[1]<<2&63)+62,(zr[1]>>4)+(zr[2]<<4&63)+62,(zr[2]>>2)+62,(zr[3]&63)+62,(zr[3]>>6)+(zr[4]<<2&63)+62,(zr[4]>>4)+(zr[5]<<4&63)+62,(zr[5]>>2)+62,(zr[6]&63)+62,(zr[6]>>6)+(zr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),aw.lastModified&&i.setIfNone("Last-Modified",new Date(h).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:m,headers:i,body:void 0},_=e.loadedFromSource??f?.wasLoadedFromSource?.();return _!==void 0&&(p.wasCacheMiss=_,!_&&h&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||h))/1e3))),f!==void 0&&(p.body=cm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?fi.warn(a):fi.info(a):fi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=cm(a.contentType?a:sq(a),e,c),c}}function Kae(e){aw=e,e.includeExpensiveRecordCountEstimates&&(Ya.prototype.includeExpensiveRecordCountEstimates=!0),!rq&&(rq=!0,cS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Vae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Lh++;let s=new Vn;nq||(nq=!0,ch(l=>{Lh>0&&l.push({metric:"ws-connections",connections:Lh,byThread:!0})}));let i;t.on("error",l=>{i=!0,fi.warn(l)});let a;t.on("message",o(function(u){a||(a=To(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);it(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Lh--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=cS.getMatch(l,"ws");if(Wr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,it(p=>({count:p.count,total:Lh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ri(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Ft(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await ba(h.value,r);t.send(p),it(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(_=>t._socket.once("drain",_))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?fi.warn(l):fi.info(l):fi.error(l),t.close(Yae[l.statusCode]||1011,sq(l))}t.close()},e))}function cw(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var fi,pd,sq,zr,$ae,aw,tq,rq,cS,nq,Lh,Yae,iq=ce(()=>{Ro();Wi();fi=w(Q()),pd=w(ge());N_();Ru();Bc();uh();XG();Ph();O_();({errorToString:sq}=fi),zr=new Uint8Array(8),$ae=new Float64Array(zr.buffer,0,1),aw={},tq="openapi";o(Vae,"http");Lh=0;o(Kae,"start");Yae={401:3e3,403:3003};o(cw,"parseHeaderValue")});var lw=M((tMe,aq)=>{var{recordAction:uS,recordActionBinary:oq}=(Wi(),v(wg)),Wae=require("fastify-plugin"),zae=200;aq.exports=Wae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),uS(a,"duration",u,f,d),oq(s.raw.statusCode<400,"success",u,f,d),oq(1,"response_"+s.raw.statusCode,u,f,d);let m=zae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{uS(performance.now()-c,"transfer",u,f,d),uS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,uS(m,"bytes-sent",u,f,d));let h=a.toFixed(3),p=s.getHeader("Server-Timing"),_=`db;dur=${h}`;s.header("Server-Timing",p?`${p}, ${_}`:_)}),r()},{name:"hdb-request-time"})});var lq=M((rMe,cq)=>{var jae=ut(),Qae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};cq.exports=function(e){return jae.validateObject(e,Qae)}});var dS=M((nMe,uq)=>{"use strict";var Jae=(k(),v(W)).OPERATIONS_ENUM,uw=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Jae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uq.exports=uw});var vh={};we(vh,{createTokens:()=>mw,getJWTRSAKeys:()=>ES,refreshOperationToken:()=>hw,validateOperationToken:()=>pw,validateRefreshToken:()=>_S});async function ES(){if(fS)return fS;try{let e=Dh.default.join(Mh.default.getHdbBasePath(),zy),t=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PASSPHRASE_NAME),"utf8"),r=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PRIVATE_KEY_NAME),"utf8");return fS={publicKey:await mS.default.readFile(Dh.default.join(e,Yf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},fS}catch(e){throw pS.default.error(e),new mi.ClientError(_d.NO_ENCRYPTION_KEYS,Ed.INTERNAL_SERVER_ERROR)}}async function mw(e){let t=(0,dw.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new mi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,fw.findAndValidateUser)(e.username,e.password,f)}catch(f){throw pS.default.error(f),new mi.ClientError(_d.INVALID_CREDENTIALS,Ed.UNAUTHORIZED)}if(!r)throw new mi.ClientError(_d.INVALID_CREDENTIALS,Ed.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await ES(),c=await gd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??pq,algorithm:hS,subject:Sd.OPERATION}),l=await gd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Xae,algorithm:hS,subject:Sd.REFRESH}),u=FI(l,xr.SHA256);if((await(0,dq.update)(new fq.default(Kf,gu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new mi.ClientError(_d.REFRESH_TOKEN_SAVE_FAILED,Ed.INTERNAL_SERVER_ERROR);return mq.default.signalUserChange(new hq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function hw(e){let t=(0,dw.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new mi.ClientError(t.message);let{refresh_token:r}=e;await _S(r);let n=await ES(),s=await gd.default.decode(r);return{operation_token:await gd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:pq,algorithm:hS,subject:Sd.OPERATION})}}async function pw(e){return Eq(e,Sd.OPERATION)}async function _S(e){return Eq(e,Sd.REFRESH)}async function Eq(e,t){try{let r=await ES(),n=await gd.default.verify(e,r.publicKey,{algorithms:hS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,fw.findAndValidateUser)(n.username,void 0,!1);if(t===Sd.REFRESH&&!HI(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw pS.default.warn(r),r?.name==="TokenExpiredError"?new mi.ClientError(_d.TOKEN_EXPIRED,Ed.FORBIDDEN):new mi.ClientError(_d.INVALID_TOKEN,Ed.UNAUTHORIZED)}}var gd,mS,Dh,Xi,dw,mi,pS,fw,dq,fq,mq,hq,Mh,Ed,_d,pq,Xae,hS,Sd,fS,Td=ce(()=>{gd=w(require("jsonwebtoken")),mS=w(require("fs-extra")),Dh=w(require("node:path")),Xi=w(require("joi")),dw=w(ut());k();mi=w(ge()),pS=w(Q());mg();fw=w(ts()),dq=w(Dn()),fq=w(dS()),mq=w(Co()),hq=w(oi()),Mh=w(oe()),{HTTP_STATUS_CODES:Ed,AUTHENTICATION_ERROR_MSGS:_d}=mi.hdbErrors;Mh.default.initSync();pq=Mh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Xae=Mh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",hS="RS256",Sd={OPERATION:"operation",REFRESH:"refresh"};o(ES,"getJWTRSAKeys");o(mw,"createTokens");o(hw,"refreshOperationToken");o(pw,"validateOperationToken");o(_S,"validateRefreshToken");o(Eq,"validateToken")});var Ew=M((cMe,Sq)=>{"use strict";var Zae=lq(),Rd=require("passport"),ece=require("passport-local").Strategy,tce=require("passport-http").BasicStrategy,rce=require("util"),nce=ts(),gq=rce.callbackify(nce.findAndValidateUser),aMe=tn(),sce=(k(),v(W)),_q=(Td(),v(vh));Rd.use(new ece(function(e,t,r){gq(e,t,r)}));Rd.use(new tce(function(e,t,r){gq(e,t,r)}));Rd.serializeUser(function(e,t){t(null,e)});Rd.deserializeUser(function(e,t){t(null,e)});function ice(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Rd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===sce.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?_q.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):_q.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Rd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(ice,"authorize");function oce(e,t){let r=Zae(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(oce,"checkPermissions");Sq.exports={authorize:ice,checkPermissions:oce}});var gS=M((uMe,Tq)=>{"use strict";var ace=Jn();Tq.exports={writeTransaction:cce};function cce(e,t,r){return ace.writeTransaction(e,t,r)}o(cce,"writeTransaction")});var bq=M((mMe,Aq)=>{"use strict";var lce=sn(),uce=ii(),Rq=Q(),dce=Dn(),fMe=gS(),fce=require("clone"),gw=require("alasql"),mce=rg(),yq=require("util"),hce=yq.promisify(uce.getTableSchema),pce=yq.promisify(lce.search),Ece=(k(),v(W)),_w=ie();mce(gw);Aq.exports={update:gce};var _ce="There was a problem performing this update. Please check the logs and try again.";async function gce({statement:e,hdb_user:t}){let r=await hce(e.table.databaseid,e.table.tableid),n=Sce(e.columns);_w.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=fce(s),c=_w.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=gw.parse(l).statements[0],d=await pce(u),f=Tce(n,d);return Rce(a,f,t)}o(gce,"update");function Sce(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=gw.compile(`SELECT ${r.expression.toString()} AS [${Ece.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Rq.error(t),new Error(_ce)}}o(Sce,"createUpdateRecord");function Tce(e,t){return _w.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Tce,"buildUpdateRecords");async function Rce(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await dce.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Rq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Rce,"updateRecords")});var Nq=M((_Me,Iq)=>{var yce=require("alasql"),Ace=sn(),bce=Q(),Ice=Jn(),Tw=require("util"),Sw=ie(),Nce=(k(),v(W)),wce=ii(),pMe=gS(),EMe=Dn(),Oce="record",Cce="successfully deleted",Pce=Tw.callbackify(vce),Lce=Tw.promisify(Ace.search),Dce=Tw.promisify(wce.getTableSchema);Iq.exports={convertDelete:Pce};function Mce(e){return`${e.deleted_hashes.length} ${Oce}${e.deleted_hashes.length===1?"":"s"} ${Cce}`}o(Mce,"generateReturnMessage");async function vce({statement:e,hdb_user:t}){let r=await Dce(e.table.databaseid,e.table.tableid);Sw.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Sw.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=yce.parse(a).statements[0],l={operation:Nce.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Lce(c);let u=await Ice.deleteRecords(l);return Sw.isEmptyOrZeroLength(u.message)&&(u.message=Mce(u)),delete u.txn_time,u}catch(u){throw bce.error(u),u.hdb_code?u.message:u}}o(vce,"convertDelete")});var Lq=M((SMe,Pq)=>{"use strict";var Uce=Ua(),{hdbErrors:wq}=ge(),{getDatabases:Oq}=(Me(),v(Et));Pq.exports={checkSchemaExists:Cq,checkSchemaTableExists:xce,schemaDescribe:Uce};async function Cq(e){if(!Oq()[e])return wq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Cq,"checkSchemaExists");async function xce(e,t){let r=await Cq(e);if(r)return r;if(!Oq()[e][t])return wq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(xce,"checkSchemaTableExists")});var Iw=M((bMe,$q)=>{"use strict";var{decode:Bce}=require("msgpackr"),{isMainThread:RMe,parentPort:yMe,threadId:AMe}=require("worker_threads"),RS=mr(),yd=Ot(),Aw=(k(),v(W)),dn=Q(),yw=oe(),Fce=(k(),v(W)),{onMessageByType:Hce}=nt(),Uq=$i(),{recordAction:Dq,recordActionBinary:kce}=(Wi(),v(wg)),{publishToStream:Gce}=RS,{ConsumerEvents:Mq}=require("nats"),qce=sn(),{promisify:$ce}=require("util"),{decodeBlobsWithWrites:Vce}=(Kn(),v(o_)),xq=$ce(setTimeout),yS=1e4,AS,TS,Kce,Yce,Bq,Uh=new Map,Ad=new Map;$q.exports={initialize:Fq,ingestConsumer:bw,setSubscription:Wce,setIgnoreOrigin:Qce,getDatabaseSubscriptions:jce,updateConsumer:Hq};async function Fq(){Hce(Aw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await Hq(n)}),Bq=!0,dn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await RS.getNATSReferences();AS=e,TS=e.info.server_name,Kce=t,Yce=r}o(Fq,"initialize");async function Hq(e){if(e.status==="start"){let{js:t,jsm:r}=await kq(e.node_domain_name);bw(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Uh.get(e.stream_name+e.node_domain_name);t&&(dn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Uh.set(e.stream_name+e.node_domain_name,"close")),Ad.get(e.node_domain_name)==="failed"&&Ad.set(e.node_domain_name,"close")}}o(Hq,"updateConsumer");var bS=new Map;function Wce(e,t,r){let n=bS.get(e);n||bS.set(e,n=new Map),n.set(t,r),Bq||Fq().then(zce)}o(Wce,"setSubscription");async function zce(){let e=await qce.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+yd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await kq(r),!n))break;let{schema:a,table:c}=i,l=Uq.createNatsTableStreamName(a,c);bw(l,n,s,r)}}}o(zce,"accessConsumers");async function kq(e){let t,r,n=1;for(;!r;)try{t=await AS.jetstream({domain:e}),r=await AS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ad.get(e)==="close")break;Ad.set(e,"failed"),n%10===1&&dn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<yS?n++*100:yS;await xq(i)}return{js:t,jsm:r}}o(kq,"connectToRemoteJS");function jce(){return bS}o(jce,"getDatabaseSubscriptions");var Gq;function Qce(e){Gq=e}o(Qce,"setIgnoreOrigin");var qq=100,vq=new Array(qq),SS=0;async function bw(e,t,r,n){let{connection:s}=await RS.getNATSReferences();AS=s,TS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,TS),dn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Ad.get(n)==="close")break;a%10===1&&dn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(dn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await RS.createConsumer(r,e,TS,new Date(Date.now()).toISOString()));let d=a++*100<yS?a++*100:yS;await xq(d)}let c=!1,l;for(;!c;){if(Uh.get(e+n)==="close"||Ad.get(n)==="close"){Uh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:yw.get(Aw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Uh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===Mq.ConsumerDeleted&&(await l.close(),c=!0),d.type===Mq.HeartbeatsMissed){let f=d.data;dn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(dn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await vq[SS],vq[SS]=Jce(d).catch(f=>{dn.error(f)}),++SS>=qq&&(SS=0)}catch(d){d.message==="consumer deleted"?(dn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):dn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(bw,"ingestConsumer");async function Jce(e){let t;await Vce(()=>{t=Bce(e.data)}),Dq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),dn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=yw.get(Aw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(yd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!Gq),kce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(yd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:h}=t;dn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),dn.trace(`messageProcessor nats msg id: ${e.headers.get(yd.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(O=>p=O),{timestamp:g,user:R,node_name:T}=m||{},y=bS.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=p,y.send(t);else if(d.length===1&&!l)y.send({type:Rw(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:R,nodeName:T});else{let O=d.map((F,Z)=>({type:Rw(a),value:F,expiresAt:h,id:f?.[Z],table:u}));for(;l;)O.push({type:Rw(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:p,user:R,nodeName:T})}yw.get(Fce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Gce(e.subject.split(".").slice(0,-1).join("."),Uq.createNatsTableStreamName(c,u),e.headers,e.data),await _;let N=Date.now()-g;g&&Dq(N,"replication-latency",e.subject,a,"ingest")}catch(a){dn.error(a)}e.ack()}o(Jce,"messageProcessor");function Rw(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(Rw,"convertOperation")});var mr=M((LMe,o$)=>{"use strict";var kr=oe();kr.initSync();var Xce=require("fs-extra"),Zce=require("semver"),Fh=require("path"),{monotonicFactory:ele}=require("ulidx"),Kq=ele(),tle=require("util"),Yq=require("child_process"),rle=tle.promisify(Yq.exec),nle=Yq.spawn,jr=Ot(),Qe=(k(),v(W)),{packageJson:sle,PACKAGE_ROOT:ile}=bt(),IS=ie(),hi=Q(),NS=$i(),ole=gS(),xh=wt(),{broadcast:ale,onMessageByType:cle,getWorkerIndex:lle}=nt(),{isMainThread:Wq}=require("worker_threads"),{Encoder:ule,decode:Cw}=require("msgpackr"),zq=new ule,{isEmpty:Ll}=IS,jq=ts(),NMe=48*36e11;Wq&&cle(Qe.ITC_EVENT_TYPES.RESTART,()=>{fn=void 0,Pl=void 0});var{connect:dle,StorageType:fle,RetentionPolicy:mle,AckPolicy:Pw,DeliverPolicy:Lw,DiscardPolicy:hle,NatsConnection:wMe,JetStreamManager:OMe,JetStreamClient:CMe,StringCodec:PMe,JSONCodec:ple,createInbox:Dw,headers:Ele,ErrorCode:Vq}=require("nats"),{recordAction:_le}=(Wi(),v(wg)),{encodeBlobsAsBuffers:gle}=(Kn(),v(o_)),Qq=ple(),Sle="clustering",Tle=sle.engines[jr.NATS_SERVER_NAME],Rle=Fh.join(ile,"dependencies"),Ow=Fh.join(Rle,`${process.platform}-${process.arch}`,jr.NATS_BINARY_NAME),Nw,ww,Bh,Ol,Cl;o$.exports={runCommand:Jq,checkNATSServerInstalled:yle,createConnection:Mw,getConnection:Hh,getJetStreamManager:kh,getJetStream:Zq,getNATSReferences:Zi,getServerList:ble,createLocalStream:vw,listStreams:e$,deleteLocalStream:Ile,getServerConfig:bd,listRemoteStreams:Nle,viewStream:wle,viewStreamIterator:Ole,publishToStream:Cle,request:Dle,reloadNATS:Uw,reloadNATSHub:Mle,reloadNATSLeaf:vle,extractServerName:Lle,requestErrorHandler:Ule,createLocalTableStream:s$,createTableStreams:Fle,purgeTableStream:i$,purgeSchemaTableStreams:Hle,getStreamInfo:kle,updateLocalStreams:qle,closeConnection:Ale,getJsmServerName:wS,addNatsMsgHeader:t$,clearClientCache:Xq,updateRemoteConsumer:xle,createConsumer:r$,updateConsumerIterator:Ble};async function Jq(e,t=void 0){let{stdout:r,stderr:n}=await rle(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
19
|
+
`}`;c?(c.length<tG?c.push(_):c.length===tG&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
20
|
+
`),dd&&(clearTimeout(a),f())):dd||l<performance.now()+rG?f(_):(l=Math.min(l,performance.now()+rG),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();xo.appendFileSync(s,c?c.join(""):p);let g=performance.now();l=Math.max(g,l)+(g-_)*50}else i||console.log(c?c.join(""):p);c&&(c=null)}function m(){try{xo.closeSync(s)}catch{}s=null,r&&(Qg=null)}function h(p){if(!s){try{s=xo.openSync(e,"a"),r&&(Qg=s)}catch(_){if(_.code==="ENOENT"&&!p)return xo.mkdirpSync(yh.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},Roe).unref()}}}o(nG,"getFileLogger");function Noe(...e){Pt.info(...e)}o(Noe,"info");function woe(...e){Pt.trace(...e)}o(woe,"trace");function BN(...e){Pt.error(...e)}o(BN,"error");function Ooe(...e){Pt.debug(...e)}o(Ooe,"debug");function Coe(...e){Pt.notify(...e)}o(Coe,"notify");function Poe(...e){Pt.fatal(...e)}o(Poe,"fatal");function Loe(...e){Pt.warn(...e)}o(Loe,"warn");function Doe(e,t,r,...n){xN=r.service_name;try{Pt[e](...n)}finally{xN=void 0}}o(Doe,"logCustomLevel");function Moe(){let e;try{e=Eoe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Bo(e,Fr.HDB_HOME_DIR_NAME,Fr.BOOT_PROPS_FILE_NAME);return xo.existsSync(t)||(t=Bo(FN,"utility/hdb_boot_properties.file")),t}o(Moe,"getPropsFilePath");function voe(e){Qi=e}o(voe,"setLogLevel");function Uoe(e){try{if(e.includes("config/settings.js")){let l=oG(e);return{level:l.get(Fr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:yh.dirname(l.get(Fr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(Fr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(Fr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=iG.parseDocument(xo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===Fr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(Uoe,"getLogConfig");function xoe(){try{let e=iG.parseDocument(xo.readFileSync(Toe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(xoe,"getDefaultConfig");function Boe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(Boe,"errorToString");function Foe(e){Pt=e}o(Foe,"setMainLogger");function uG(){try{xo.closeSync(Qg)}catch{}Qg=null}o(uG,"closeLogFile");function Hoe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(Hoe,"AuthAuditLog");var{RootConfigWatcher:koe}=(Jk(),v(Qk))});var ae=M((hG,pG)=>{"use strict";var HN=require("fs-extra"),Nl=require("path"),dG=require("os"),Goe=require("properties-reader"),Nh=Q(),Ih=ie(),Be=(k(),v(Y)),tS=wt(),qoe="Error initializing environment manager",rS="BOOT_PROPS_FILE_PATH",fG=!1,$oe={[Be.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Fo={};Object.assign(hG,pG.exports={BOOT_PROPS_FILE_PATH:rS,getHdbBasePath:Voe,setHdbBasePath:Koe,get:mG,initSync:Woe,setProperty:je,initTestEnvironment:zoe});function Voe(){return Fo[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(Voe,"getHdbBasePath");function Koe(e){Fo[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(Koe,"setHdbBasePath");function mG(e){let t=tS.getConfigValue(e);return t===void 0?Fo[e]:t}o(mG,"get");function je(e,t){$oe[e]&&(Fo[e]=t),tS.updateConfigObject(e,t)}o(je,"setProperty");function Yoe(){let e;try{e=Ih.getPropsFilePath(),HN.accessSync(e,HN.constants.F_OK|HN.constants.R_OK),fG=!0;let t=Goe(e);return Fo[Be.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Be.HDB_SETTINGS_NAMES.INSTALL_USER),Fo[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Fo[rS]=e,!0}catch{return Nh.trace(`Environment manager found no properties file at ${e}`),!1}}o(Yoe,"doesPropFileExist");function Woe(e=!1){try{(fG||Yoe()||Ih.noBootFile()||e)&&(tS.initConfig(e),Fo[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tS.getConfigValue(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Nh.error(qoe),Nh.error(t),console.error(t),process.exit(1)}}o(Woe,"initSync");function zoe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Nl.join(__dirname,"../../","unitTests");Fo[rS]=Nl.join(l,"hdb_boot_properties.file"),je(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nl.join(l,"settings.test")),je(Be.HDB_SETTINGS_NAMES.INSTALL_USER,dG.userInfo()?dG.userInfo().username:void 0),je(Be.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),je(Be.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nl.join(l,"envDir","log")),je(Be.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),je(Be.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),je(Be.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),je(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nl.join(l,"envDir")),je(Be.CONFIG_PARAMS.STORAGE_PATH,Nl.join(l,"envDir")),s&&(je(Be.CONFIG_PARAMS.HTTP_SECUREPORT,mG(Be.CONFIG_PARAMS.HTTP_PORT)),je(Be.CONFIG_PARAMS.HTTP_PORT,null)),je(Be.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),je(Be.CONFIG_PARAMS.HTTP_PORT,9926),je(Be.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),je(Be.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),je(Be.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ih.isEmpty(i)?!1:i),je(Be.CONFIG_PARAMS.HTTP_CORS,Ih.isEmpty(i)?!1:i),je(Be.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),je(Be.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),je(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),je(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),je(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),je(Be.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ih.isEmpty(c)?!1:c),a&&(je("CORS_ACCESSLIST",a),je(Be.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(je(Be.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),je(Be.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(je(Be.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),je(Be.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(je(Be.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),je(Be.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rS}. Please check your boot props and settings files`;Nh.fatal(r),Nh.error(t)}}o(zoe,"initTestEnvironment")});var qN={};Oe(qN,{loadGQLSchema:()=>Joe,start:()=>GN,startOnMainThread:()=>Qoe});function GN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,h=[],p;for(let y of f.definitions)switch(y.kind){case l.OBJECT_TYPE_DEFINITION:let G=function(F){if(F.kind==="NonNullType"){let K=G(F.type);return K.nullable=!1,K}if(F.kind==="ListType")return{type:"array",elements:G(F.type)};let J={type:F.name?.value};return Object.defineProperty(J,"location",{value:F.loc.startToken}),J};o(G,"getProperty");let T=y.name.value,R=[],N={table:null,database:null,properties:R};m.set(T,N);for(let F of y.directives){if(F.name.value==="table"){for(let J of F.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,h.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="splitSegments"&&(N.splitSegments=!0),F.name.value==="replicate"&&(N.replicate=!0),F.name.value==="export"){N.export=!0;for(let J of F.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let C=!1,z={};for(let F of y.fields){let $=G(F.type);$.name=F.name.value,R.push($),z[$.name]=void 0;for(let J of F.directives){let K=J.name.value;if(K==="primaryKey")C?console.warn("Can not define two attributes as a primary key at",J.loc):($.isPrimaryKey=!0,C=!0);else if(K==="indexed"){let te={};for(let fe of J.arguments||[])te[fe.name.value]=fe.value.value;$.indexed=te}else if(K==="computed"){for(let te of J.arguments||[])if(te.name.value==="from"){let fe=te.value.value;$.computed={from:g(fe,te,z)},$.version==null&&($.version=fe)}else te.name.value==="version"&&($.version=te.value.value);$.computed=$.computed||!0}else if(K==="relationship"){let te={};for(let fe of J.arguments)te[fe.name.value]=fe.value.value;$.relationship=te}else if(K==="createdTime")$.assignCreatedTime=!0;else if(K==="updatedTime")$.assignUpdatedTime=!0;else if(K==="expiresAt")$.expiresAt=!0;else if(K==="allow"){let te=$.authorizedRoles=[];for(let fe of J.arguments)fe.name.value==="role"&&te.push(fe.value.value)}else server.knownGraphQLDirectives.includes(K)&&console.warn(`@${K} is an unknown directive, at`,J.loc)}}N.type=T,T==="Query"&&(p=N)}function _(y){let T=m.get(y.type);T?(Object.defineProperty(y,"properties",{value:T.properties}),Object.defineProperty(y,"definition",{value:T})):y.type==="array"?_(y.elements):joe.includes(y.type)||(0,_G.getWorkerIndex)()===0&&console.error(`The type ${y.type} is unknown at line ${y.location.line}, column ${y.location.column}, in ${s}`)}o(_,"connectPropertyType");for(let y of m.values())for(let T of y.properties)_(T);for(let y of h)y.tableClass=e(y),y.export&&(y.export.name===""?i.set((0,kN.dirname)(n),y.tableClass):i.set((0,kN.dirname)(n)+"/"+(y.export.name||y.type),y.tableClass,y.export));function g(y,T,R){return new EG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${y}; } } } } computed;`,{filename:s,lineOffset:T.loc.startToken.line-1,columnOffset:T.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var kN,EG,_G,joe,Qoe,Joe,gG=le(()=>{kN=require("path"),EG=require("node:vm");Me();_G=w(st()),joe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(GN,"start");Qoe=GN,Joe=GN({ensureTable:ze}).handleFile});var VN={};Oe(VN,{start:()=>oae});function Xoe(e){if(e.kind!==Fe.Kind.OPERATION_DEFINITION&&e.kind!==Fe.Kind.FRAGMENT_DEFINITION)throw new Hr(`Unexpected non-executable definition type ${e.kind}.`)}function SG(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function $N(e){return parseInt(e.value,10)}function RG(e){return parseFloat(e.value)}function yG(e,t,r){let n=r.get(e.name.value);return AG(n)?bG(n,t):{attribute:t,value:n}}function AG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function bG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],AG(n)?bG(n,t):{attribute:t,value:n}))}function Zoe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Fe.Kind.NULL:return{attribute:t,value:null};case Fe.Kind.INT:return{attribute:t,value:$N(e.value)};case Fe.Kind.FLOAT:return{attribute:t,value:RG(e.value)};case Fe.Kind.BOOLEAN:case Fe.Kind.STRING:return{attribute:t,value:e.value.value};case Fe.Kind.VARIABLE:return yG(e.value,t,r);case Fe.Kind.OBJECT:return IG(e.value,t,r);case Fe.Kind.LIST:case Fe.Kind.ENUM:default:throw new Hr(`Value type, ${e.value.kind}, is not supported.`)}}function IG(e,t,r){return e.fields.flatMap(n=>Zoe(n,t,r))}function eae(e,t){switch(e.value.kind){case Fe.Kind.NULL:return{attribute:e.name.value,value:null};case Fe.Kind.INT:return{attribute:e.name.value,value:$N(e.value)};case Fe.Kind.FLOAT:return{attribute:e.name.value,value:RG(e.value)};case Fe.Kind.BOOLEAN:case Fe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Fe.Kind.VARIABLE:return yG(e.value,e.name.value,t);case Fe.Kind.OBJECT:return IG(e.value,[e.name.value],t);case Fe.Kind.LIST:case Fe.Kind.ENUM:default:throw new Hr(`Argument type, ${e.value.kind}, is not supported.`)}}function tae(e,t){return e.flatMap(r=>eae(r,t))}function nS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Fe.Kind.FIELD:return r;case Fe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Hr(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case Fe.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function NG(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:NG(r.selectionSet,t)}:r.name.value)}async function rae(e,t,r,n){let s=bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Hr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:NG(e.selectionSet,r),conditions:tae(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function wG(e){switch(e.kind){case Fe.Kind.NULL:return null;case Fe.Kind.INT:return $N(e);case Fe.Kind.FLOAT:return parseFloat(e.value);case Fe.Kind.STRING:case Fe.Kind.BOOLEAN:return e.value;case Fe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:wG(r.value),...t}),{});case Fe.Kind.LIST:case Fe.Kind.ENUM:default:throw new Hr(`Value type, ${e.kind}, is not supported.`)}}function nae(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=wG(n.defaultValue)),n.type.kind===Fe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Hr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function sae(e,t,r,n){if(e.operation===Fe.OperationTypeNode.SUBSCRIPTION)throw new Hr("Subscriptions are not supported.");if(e.operation===Fe.OperationTypeNode.MUTATION)throw new Hr("Mutations are not supported yet.");let s=nae(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>rae(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function TG({query:e,variables:t={},operationName:r},n){let s=Fe.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(Xoe(u),u.kind===Fe.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Hr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Hr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Hr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Hr(`Operation \`${r}\` not found.`);let l=await sae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function iae(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 SG(r),TG(r,e)}case"POST":{let r=await To(e.headers.get("content-type"),!0)(e._nodeRequest);return SG(r),TG(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function oae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await iae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Fe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Hr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Fe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Hr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Fe,Hr,Ji,OG=le(()=>{Fe=w(require("graphql"));Ro();Fu();o(Xoe,"assertExecutableDefinitionNode");o(SG,"assertRequestParams");o($N,"processIntValueNode");o(RG,"processFloatValueNode");o(yG,"processVariableNode");o(AG,"isObject");o(bG,"transformObjectIntoQueryCondition");o(Zoe,"processObjectFieldNode");o(IG,"processObjectValueNode");o(eae,"processArgumentNode");o(tae,"buildConditionsQuery");o(nS,"fillInFragments");o(NG,"buildSelectQuery");o(rae,"processFieldNode");o(wG,"processConstValueNode");o(nae,"resolveVariables");o(sae,"executeOperation");o(TG,"resolver");Hr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(iae,"graphqlQueryingHandler");o(oae,"start")});var vG=M((CDe,MG)=>{var fd=require("validate.js"),PG=dt(),md=(k(),v(Y)),{handleHDBError:aae,hdbErrors:cae}=_e(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:lae}=cae,KN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),uae={STRUCTURE_USER:"structure_user"},CG=Object.values(md.ROLE_TYPES_ENUM),dae="attribute_permissions",fae="attribute_name",{PERMS_CRUD_ENUM:hd}=md,mae=[dae,...Object.values(hd)],LG=[hd.READ,hd.INSERT,hd.UPDATE],hae=[fae,...LG];function pae(e){let t=KN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,DG(e,t)}o(pae,"addRoleValidation");function Eae(e){let t=KN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,DG(e,t)}o(Eae,"alterRoleValidation");function _ae(e){let t=KN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,PG.validateObject(e,t)}o(_ae,"dropRoleValidation");var gae=["operation","role","id","permission","hdb_user","access"];function DG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)gae.includes(n[a])||s.push(n[a]);s.length>0&&fr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=PG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=Sae(e);a&&fr(a,r),CG.forEach(c=>{e.permission[c]&&!fd.isBoolean(e.permission[c])&&fr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(CG.indexOf(a)<0){if(a===uae.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(rr.SCHEMA_NOT_FOUND(f),r)}continue}fr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(rr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{mae.includes(d)||fr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(hd).forEach(d=>{fd.isDefined(u[d])?fd.isBoolean(u[d])||fr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(rr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let h=u.attribute_permissions[m];if(Object.keys(h).forEach(_=>{!hae.includes(_)&&_!==hd.DELETE&&fr(rr.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!fd.isDefined(h.attribute_name)){fr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){fr(rr.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}LG.forEach(_=>{fd.isDefined(h[_])?fd.isBoolean(h[_])||fr(rr.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):fr(rr.ATTR_PERM_MISSING(_,p),r,a,l)}),!f.read&&h.read===!0&&(f.read=!0),!f.insert&&h.insert===!0&&(f.insert=!0),!f.update&&h.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Tae(r)}o(DG,"customValidate");MG.exports={addRoleValidation:pae,alterRoleValidation:Eae,dropRoleValidation:_ae};function Sae(e){let{operation:t,permission:r}=e;if(t===md.OPERATIONS_ENUM.ADD_ROLE||t===md.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?md.ROLE_TYPES_ENUM.SUPER_USER:md.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Sae,"validateNoSUPerms");function Tae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return aae(new Error,n,lae.BAD_REQUEST)}else return null}o(Tae,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var Oh=M((DDe,FG)=>{"use strict";var UG=Mn(),xG=on(),Rae=El(),WN=vG(),zN=Co(),LDe=require("uuid").v4,yae=require("util"),sS=(k(),v(Y)),Aae=ie(),jN=xG.searchByValue,bae=xG.searchByHash,Iae=yae.promisify(Rae.delete),Nae=ai(),wae=Ku(),{hdbErrors:Oae,handleHDBError:wl}=_e(),{HDB_ERROR_MSGS:BG,HTTP_STATUS_CODES:wh}=Oae,{UserEventMsg:QN}=oi();FG.exports={addRole:Cae,alterRole:Pae,dropRole:Lae,listRoles:Dae};function YN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(YN,"scrubRoleDetails");async function Cae(e){let t=WN.addRoleValidation(e);if(t)throw t;e=YN(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 jN(r)||[])}catch(i){throw wl(i)}if(n&&n.length>0)throw wl(new Error,BG.ROLE_ALREADY_EXISTS(e.role),wh.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await UG.insert(s),zN.signalUserChange(new QN(process.pid)),e=YN(e),e}o(Cae,"addRole");async function Pae(e){let t=WN.alterRoleValidation(e);if(t)throw t;e=YN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await UG.update(r)}catch(s){throw wl(s)}if(n&&n?.message==="updated 0 of 1 records")throw wl(new Error,"Invalid role id",wh.BAD_REQUEST,void 0,void 0,!0);return await zN.signalUserChange(new QN(process.pid)),e}o(Pae,"alterRole");async function Lae(e){let t=WN.dropRoleValidation(e);if(t)throw wl(new Error,t,wh.BAD_REQUEST,void 0,void 0,!0);let r=new wae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await bae(r));if(n.length===0)throw wl(new Error,BG.ROLE_NOT_FOUND,wh.NOT_FOUND,void 0,void 0,!0);let s=new Nae(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await jN(s)),a=!1;if(Aae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw wl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,wh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Iae(c),zN.signalUserChange(new QN(process.pid)),`${n[0].role} successfully deleted`}o(Lae,"dropRole");async function Dae(){return jN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(Dae,"listRoles")});var JN={};Oe(JN,{start:()=>GG,startOnMainThread:()=>Uae});function GG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,HG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(Mae.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await vae(i)}}}async function vae(e){let t=it().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,kG.isEqual)(i,e)?void 0:(e.id=r.id,(0,iS.alterRole)(e))}return(0,iS.addRole)(e)}var iS,HG,kG,Mae,Uae,qG=le(()=>{Me();iS=w(Oh()),HG=require("yaml"),kG=require("lodash"),Mae=["super_user","cluster_user","structure_user"];o(GG,"start");o(vae,"ensureRole");Uae=GG});async function oS(e){let t=(0,KG.pathToFileURL)(e).toString();if(xae)return Ch||(Ch=Bae(Hae)),(await(await Ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Bae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ch=new Compartment({console,Math,Date,fetch:Fae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,VG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Ur,s.tables=un,s.databases=ke}};let n=await(0,$G.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Ch}function Fae(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 Hae(){return{Resource:Ur,tables:un}}var $G,VG,KG,xae,Ch,XN=le(()=>{Pa();Me();$G=require("fs/promises"),VG=require("path"),KG=require("url"),xae=!1;o(oS,"secureImport");o(Bae,"getCompartment");o(Fae,"secureOnlyFetch");o(Hae,"getGlobalVars")});var ZN={};Oe(ZN,{handleApplication:()=>kae,suppressHandleApplicationWarning:()=>Gae});function WG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function kae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}oS(t.absolutePath).then(r=>{let n=(0,YG.dirname)(t.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");WG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),zG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function zG(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;WG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&zG(e,s,i)}}var YG,Gae,jG=le(()=>{XN();YG=require("path");o(WG,"isResource");o(kae,"handleApplication");o(zG,"recurseForResources");Gae=!0});var tw={};Oe(tw,{start:()=>qae});function qae({resources:e}){e.set("login",ew),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var ew,QG=le(()=>{Pa();o(qae,"start");ew=class extends Ur{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function tq(e){let t={openapi:$ae,info:{title:"HarperDB HTTP REST interface",version:eq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:a,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(a)for(let{type:R,name:N,elements:C,relationship:G,definition:z}of a){if(G)R==="array"?u[N]={type:"array",items:{$ref:Ka+C.type}}:u[N]={$ref:Ka+R};else{let F=z??C?.definition;if(F){if(!t.components.schemas[F.type]){let $={};F.properties.forEach(J=>{$[J.name]=new iw(rw[J.type],J.type)}),t.components.schemas[F.type]=new ZG($)}R==="array"?u[N]={type:"array",items:{$ref:Ka+F.type}}:u[N]={$ref:Ka+F.type}}else R==="array"?C.type==="Any"||C.type=="ID"?u[N]={type:"array",items:{format:C.type}}:u[N]={type:"array",items:new iw(rw[C.type],C.type)}:R==="Any"||R=="ID"?u[N]={format:R}:u[N]=new iw(rw[R],R)}d.push(new ow(N,"query",u[N]))}let f=Object.keys(u),m=new ow(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new ow("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new ZG(u);let p=l.post!==Resource.prototype.post||l.update,_=typeof l.put=="function",g=typeof l.get=="function",y=typeof l.delete=="function",T="/"+s+"/";p&&(t.paths[T]={},t.paths[T].post=new Vae(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new nw(d,r,{200:new sw({$ref:Ka+i})},"search for records by the specified property name and value pairs")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new XG(d,r,"delete all the records that match the provided query",{204:new JG})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new nw([m],r,{200:new sw({$ref:Ka+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Kae([m],r,i,"create or update the record with the URL path that maps to the record's primary key")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new XG([m],r,"delete a record with the given primary key",{204:new JG})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new nw([m,h],r,{200:new sw({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function Vae(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ka+e}}}},this.security=t,this.responses={200:{description:aw,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function nw(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function sw(e){this.description=aw,this.content={"application/json":{schema:e}}}function JG(){this.description="successfully processed request, no content returned to client"}function Kae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ka+r}}}},this.responses={200:{description:aw}}}function XG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function ZG(e){this.type="object",this.properties=e}function iw(e,t){this.type=e,this.format=t}function ow(e,t,r){this.name=e,this.in=t,this.schema=r}var eq,$ae,rw,Ka,aw,rq=le(()=>{eq=w(bt()),$ae="3.0.3",rw={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ka="#/components/schemas/",aw="successful operation";o(tq,"generateJsonApi");o(Vae,"Post");o(nw,"Get");o(sw,"Response200");o(JG,"Response204");o(Kae,"Put");o(XG,"Delete");o(ZG,"ResourceSchema");o(iw,"Type");o(ow,"Parameter")});var sq={};Oe(sq,{Request:()=>Ya,createReuseportFd:()=>aS});var nq,Ya,cw,lw,aS,Ph=le(()=>{nq=require("os"),Ya=class{static{o(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new lw(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 cw(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},cw=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},lw=class{constructor(t){this.asObject=t}static{o(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,nq.platform)()!="win32"&&(aS=require("node-unix-socket").createReuseportFd)});var lS={};Oe(lS,{parseHeaderValue:()=>dw,start:()=>zae});async function Wae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&I_(e);let i=new Os;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==iq){let g=cS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ri(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let y=dw(g);for(let T of y)switch(T.name){case"max-age":e.expiresAt=T.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=dw(u).map(y=>(y.next?.name==="confirm"&&y.next.value>=0&&(e.replicatedConfirmation=+y.next.value),y.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Ft(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=To(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new pd.ClientError(g,400)}if(e.authorize=!0,a===iq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return tq(cS);throw new pd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new pd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new pd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,uw.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=tk(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=cm(f.data,e,f)),f}else if(h=e.lastModified){Yae[0]=h;let g=String.fromCharCode(34,(zr[0]&63)+62,(zr[0]>>6)+(zr[1]<<2&63)+62,(zr[1]>>4)+(zr[2]<<4&63)+62,(zr[2]>>2)+62,(zr[3]&63)+62,(zr[3]>>6)+(zr[4]<<2&63)+62,(zr[4]>>4)+(zr[5]<<4&63)+62,(zr[5]>>2)+62,(zr[6]&63)+62,(zr[6]>>6)+(zr[7]<<2&63)+62,34),y=r["if-none-match"];y&&g==y?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),uw.lastModified&&i.setIfNone("Last-Modified",new Date(h).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:m,headers:i,body:void 0},_=e.loadedFromSource??f?.wasLoadedFromSource?.();return _!==void 0&&(p.wasCacheMiss=_,!_&&h&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||h))/1e3))),f!==void 0&&(p.body=cm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?fi.warn(a):fi.info(a):fi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=cm(a.contentType?a:cq(a),e,c),c}}function zae(e){uw=e,e.includeExpensiveRecordCountEstimates&&(Ya.prototype.includeExpensiveRecordCountEstimates=!0),!oq&&(oq=!0,cS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Wae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Lh++;let s=new Vn;aq||(aq=!0,ch(l=>{Lh>0&&l.push({metric:"ws-connections",connections:Lh,byThread:!0})}));let i;t.on("error",l=>{i=!0,fi.warn(l)});let a;t.on("message",o(function(u){a||(a=To(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);ot(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Lh--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=cS.getMatch(l,"ws");if(Wr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,ot(p=>({count:p.count,total:Lh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ri(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Ft(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await ba(h.value,r);t.send(p),ot(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(_=>t._socket.once("drain",_))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?fi.warn(l):fi.info(l):fi.error(l),t.close(jae[l.statusCode]||1011,cq(l))}t.close()},e))}function dw(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var fi,pd,cq,zr,Yae,uw,iq,oq,cS,aq,Lh,jae,lq=le(()=>{Ro();Wi();fi=w(Q()),pd=w(_e());N_();Ru();Bc();uh();rq();Ph();O_();({errorToString:cq}=fi),zr=new Uint8Array(8),Yae=new Float64Array(zr.buffer,0,1),uw={},iq="openapi";o(Wae,"http");Lh=0;o(zae,"start");jae={401:3e3,403:3003};o(dw,"parseHeaderValue")});var fw=M((sMe,dq)=>{var{recordAction:uS,recordActionBinary:uq}=(Wi(),v(wg)),Qae=require("fastify-plugin"),Jae=200;dq.exports=Qae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),uS(a,"duration",u,f,d),uq(s.raw.statusCode<400,"success",u,f,d),uq(1,"response_"+s.raw.statusCode,u,f,d);let m=Jae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{uS(performance.now()-c,"transfer",u,f,d),uS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,uS(m,"bytes-sent",u,f,d));let h=a.toFixed(3),p=s.getHeader("Server-Timing"),_=`db;dur=${h}`;s.header("Server-Timing",p?`${p}, ${_}`:_)}),r()},{name:"hdb-request-time"})});var mq=M((iMe,fq)=>{var Xae=dt(),Zae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};fq.exports=function(e){return Xae.validateObject(e,Zae)}});var dS=M((oMe,hq)=>{"use strict";var ece=(k(),v(Y)).OPERATIONS_ENUM,mw=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=ece.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};hq.exports=mw});var vh={};Oe(vh,{createTokens:()=>Ew,getJWTRSAKeys:()=>ES,refreshOperationToken:()=>_w,validateOperationToken:()=>gw,validateRefreshToken:()=>_S});async function ES(){if(fS)return fS;try{let e=Dh.default.join(Mh.default.getHdbBasePath(),Jy),t=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PASSPHRASE_NAME),"utf8"),r=await mS.default.readFile(Dh.default.join(e,Yf.JWT_PRIVATE_KEY_NAME),"utf8");return fS={publicKey:await mS.default.readFile(Dh.default.join(e,Yf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},fS}catch(e){throw pS.default.error(e),new mi.ClientError(_d.NO_ENCRYPTION_KEYS,Ed.INTERNAL_SERVER_ERROR)}}async function Ew(e){let t=(0,hw.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new mi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,pw.findAndValidateUser)(e.username,e.password,f)}catch(f){throw pS.default.error(f),new mi.ClientError(_d.INVALID_CREDENTIALS,Ed.UNAUTHORIZED)}if(!r)throw new mi.ClientError(_d.INVALID_CREDENTIALS,Ed.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await ES(),c=await gd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??Sq,algorithm:hS,subject:Sd.OPERATION}),l=await gd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:tce,algorithm:hS,subject:Sd.REFRESH}),u=GI(l,xr.SHA256);if((await(0,pq.update)(new Eq.default(Kf,gu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new mi.ClientError(_d.REFRESH_TOKEN_SAVE_FAILED,Ed.INTERNAL_SERVER_ERROR);return _q.default.signalUserChange(new gq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function _w(e){let t=(0,hw.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new mi.ClientError(t.message);let{refresh_token:r}=e;await _S(r);let n=await ES(),s=await gd.default.decode(r);return{operation_token:await gd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:Sq,algorithm:hS,subject:Sd.OPERATION})}}async function gw(e){return Tq(e,Sd.OPERATION)}async function _S(e){return Tq(e,Sd.REFRESH)}async function Tq(e,t){try{let r=await ES(),n=await gd.default.verify(e,r.publicKey,{algorithms:hS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,pw.findAndValidateUser)(n.username,void 0,!1);if(t===Sd.REFRESH&&!qI(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw pS.default.warn(r),r?.name==="TokenExpiredError"?new mi.ClientError(_d.TOKEN_EXPIRED,Ed.FORBIDDEN):new mi.ClientError(_d.INVALID_TOKEN,Ed.UNAUTHORIZED)}}var gd,mS,Dh,Xi,hw,mi,pS,pw,pq,Eq,_q,gq,Mh,Ed,_d,Sq,tce,hS,Sd,fS,Td=le(()=>{gd=w(require("jsonwebtoken")),mS=w(require("fs-extra")),Dh=w(require("node:path")),Xi=w(require("joi")),hw=w(dt());k();mi=w(_e()),pS=w(Q());mg();pw=w(ts()),pq=w(Mn()),Eq=w(dS()),_q=w(Co()),gq=w(oi()),Mh=w(ae()),{HTTP_STATUS_CODES:Ed,AUTHENTICATION_ERROR_MSGS:_d}=mi.hdbErrors;Mh.default.initSync();Sq=Mh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",tce=Mh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",hS="RS256",Sd={OPERATION:"operation",REFRESH:"refresh"};o(ES,"getJWTRSAKeys");o(Ew,"createTokens");o(_w,"refreshOperationToken");o(gw,"validateOperationToken");o(_S,"validateRefreshToken");o(Tq,"validateToken")});var Sw=M((dMe,Aq)=>{"use strict";var rce=mq(),Rd=require("passport"),nce=require("passport-local").Strategy,sce=require("passport-http").BasicStrategy,ice=require("util"),oce=ts(),yq=ice.callbackify(oce.findAndValidateUser),uMe=rn(),ace=(k(),v(Y)),Rq=(Td(),v(vh));Rd.use(new nce(function(e,t,r){yq(e,t,r)}));Rd.use(new sce(function(e,t,r){yq(e,t,r)}));Rd.serializeUser(function(e,t){t(null,e)});Rd.deserializeUser(function(e,t){t(null,e)});function cce(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Rd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===ace.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Rq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Rq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Rd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(cce,"authorize");function lce(e,t){let r=rce(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(lce,"checkPermissions");Aq.exports={authorize:cce,checkPermissions:lce}});var gS=M((mMe,bq)=>{"use strict";var uce=Jn();bq.exports={writeTransaction:dce};function dce(e,t,r){return uce.writeTransaction(e,t,r)}o(dce,"writeTransaction")});var Oq=M((EMe,wq)=>{"use strict";var fce=on(),mce=ii(),Iq=Q(),hce=Mn(),pMe=gS(),pce=require("clone"),Rw=require("alasql"),Ece=rg(),Nq=require("util"),_ce=Nq.promisify(mce.getTableSchema),gce=Nq.promisify(fce.search),Sce=(k(),v(Y)),Tw=ie();Ece(Rw);wq.exports={update:Rce};var Tce="There was a problem performing this update. Please check the logs and try again.";async function Rce({statement:e,hdb_user:t}){let r=await _ce(e.table.databaseid,e.table.tableid),n=yce(e.columns);Tw.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=pce(s),c=Tw.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=Rw.parse(l).statements[0],d=await gce(u),f=Ace(n,d);return bce(a,f,t)}o(Rce,"update");function yce(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Rw.compile(`SELECT ${r.expression.toString()} AS [${Sce.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Iq.error(t),new Error(Tce)}}o(yce,"createUpdateRecord");function Ace(e,t){return Tw.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Ace,"buildUpdateRecords");async function bce(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await hce.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Iq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(bce,"updateRecords")});var Pq=M((TMe,Cq)=>{var Ice=require("alasql"),Nce=on(),wce=Q(),Oce=Jn(),Aw=require("util"),yw=ie(),Cce=(k(),v(Y)),Pce=ii(),gMe=gS(),SMe=Mn(),Lce="record",Dce="successfully deleted",Mce=Aw.callbackify(Bce),vce=Aw.promisify(Nce.search),Uce=Aw.promisify(Pce.getTableSchema);Cq.exports={convertDelete:Mce};function xce(e){return`${e.deleted_hashes.length} ${Lce}${e.deleted_hashes.length===1?"":"s"} ${Dce}`}o(xce,"generateReturnMessage");async function Bce({statement:e,hdb_user:t}){let r=await Uce(e.table.databaseid,e.table.tableid);yw.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=yw.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Ice.parse(a).statements[0],l={operation:Cce.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await vce(c);let u=await Oce.deleteRecords(l);return yw.isEmptyOrZeroLength(u.message)&&(u.message=xce(u)),delete u.txn_time,u}catch(u){throw wce.error(u),u.hdb_code?u.message:u}}o(Bce,"convertDelete")});var Uq=M((yMe,vq)=>{"use strict";var Fce=Ua(),{hdbErrors:Lq}=_e(),{getDatabases:Dq}=(Me(),v(_t));vq.exports={checkSchemaExists:Mq,checkSchemaTableExists:Hce,schemaDescribe:Fce};async function Mq(e){if(!Dq()[e])return Lq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Mq,"checkSchemaExists");async function Hce(e,t){let r=await Mq(e);if(r)return r;if(!Dq()[e][t])return Lq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Hce,"checkSchemaTableExists")});var Ow=M((wMe,Wq)=>{"use strict";var{decode:kce}=require("msgpackr"),{isMainThread:bMe,parentPort:IMe,threadId:NMe}=require("worker_threads"),RS=mr(),yd=Ot(),Nw=(k(),v(Y)),fn=Q(),Iw=ae(),Gce=(k(),v(Y)),{onMessageByType:qce}=st(),Hq=$i(),{recordAction:xq,recordActionBinary:$ce}=(Wi(),v(wg)),{publishToStream:Vce}=RS,{ConsumerEvents:Bq}=require("nats"),Kce=on(),{promisify:Yce}=require("util"),{decodeBlobsWithWrites:Wce}=(Kn(),v(o_)),kq=Yce(setTimeout),yS=1e4,AS,TS,zce,jce,Gq,Uh=new Map,Ad=new Map;Wq.exports={initialize:qq,ingestConsumer:ww,setSubscription:Qce,setIgnoreOrigin:Zce,getDatabaseSubscriptions:Xce,updateConsumer:$q};async function qq(){qce(Nw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await $q(n)}),Gq=!0,fn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await RS.getNATSReferences();AS=e,TS=e.info.server_name,zce=t,jce=r}o(qq,"initialize");async function $q(e){if(e.status==="start"){let{js:t,jsm:r}=await Vq(e.node_domain_name);ww(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Uh.get(e.stream_name+e.node_domain_name);t&&(fn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Uh.set(e.stream_name+e.node_domain_name,"close")),Ad.get(e.node_domain_name)==="failed"&&Ad.set(e.node_domain_name,"close")}}o($q,"updateConsumer");var bS=new Map;function Qce(e,t,r){let n=bS.get(e);n||bS.set(e,n=new Map),n.set(t,r),Gq||qq().then(Jce)}o(Qce,"setSubscription");async function Jce(){let e=await Kce.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+yd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await Vq(r),!n))break;let{schema:a,table:c}=i,l=Hq.createNatsTableStreamName(a,c);ww(l,n,s,r)}}}o(Jce,"accessConsumers");async function Vq(e){let t,r,n=1;for(;!r;)try{t=await AS.jetstream({domain:e}),r=await AS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ad.get(e)==="close")break;Ad.set(e,"failed"),n%10===1&&fn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<yS?n++*100:yS;await kq(i)}return{js:t,jsm:r}}o(Vq,"connectToRemoteJS");function Xce(){return bS}o(Xce,"getDatabaseSubscriptions");var Kq;function Zce(e){Kq=e}o(Zce,"setIgnoreOrigin");var Yq=100,Fq=new Array(Yq),SS=0;async function ww(e,t,r,n){let{connection:s}=await RS.getNATSReferences();AS=s,TS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,TS),fn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Ad.get(n)==="close")break;a%10===1&&fn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(fn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await RS.createConsumer(r,e,TS,new Date(Date.now()).toISOString()));let d=a++*100<yS?a++*100:yS;await kq(d)}let c=!1,l;for(;!c;){if(Uh.get(e+n)==="close"||Ad.get(n)==="close"){Uh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Iw.get(Nw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Uh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===Bq.ConsumerDeleted&&(await l.close(),c=!0),d.type===Bq.HeartbeatsMissed){let f=d.data;fn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(fn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await Fq[SS],Fq[SS]=ele(d).catch(f=>{fn.error(f)}),++SS>=Yq&&(SS=0)}catch(d){d.message==="consumer deleted"?(fn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):fn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(ww,"ingestConsumer");async function ele(e){let t;await Wce(()=>{t=kce(e.data)}),xq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),fn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Iw.get(Nw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(yd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!Kq),$ce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(yd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:h}=t;fn.trace("processing message:",a,c,u,(d?"records: "+d.map(C=>C?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),fn.trace(`messageProcessor nats msg id: ${e.headers.get(yd.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(C=>p=C),{timestamp:g,user:y,node_name:T}=m||{},R=bS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=p,R.send(t);else if(d.length===1&&!l)R.send({type:bw(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:y,nodeName:T});else{let C=d.map((G,z)=>({type:bw(a),value:G,expiresAt:h,id:f?.[z],table:u}));for(;l;)C.push({type:bw(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:C,table:u,timestamp:g,onCommit:p,user:y,nodeName:T})}Iw.get(Gce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Vce(e.subject.split(".").slice(0,-1).join("."),Hq.createNatsTableStreamName(c,u),e.headers,e.data),await _;let N=Date.now()-g;g&&xq(N,"replication-latency",e.subject,a,"ingest")}catch(a){fn.error(a)}e.ack()}o(ele,"messageProcessor");function bw(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(bw,"convertOperation")});var mr=M((vMe,u$)=>{"use strict";var kr=ae();kr.initSync();var tle=require("fs-extra"),rle=require("semver"),Fh=require("path"),{monotonicFactory:nle}=require("ulidx"),jq=nle(),sle=require("util"),Qq=require("child_process"),ile=sle.promisify(Qq.exec),ole=Qq.spawn,jr=Ot(),Qe=(k(),v(Y)),{packageJson:ale,PACKAGE_ROOT:cle}=bt(),IS=ie(),hi=Q(),NS=$i(),lle=gS(),xh=wt(),{broadcast:ule,onMessageByType:dle,getWorkerIndex:fle}=st(),{isMainThread:Jq}=require("worker_threads"),{Encoder:mle,decode:Dw}=require("msgpackr"),Xq=new mle,{isEmpty:Ll}=IS,Zq=ts(),CMe=48*36e11;Jq&&dle(Qe.ITC_EVENT_TYPES.RESTART,()=>{mn=void 0,Pl=void 0});var{connect:hle,StorageType:ple,RetentionPolicy:Ele,AckPolicy:Mw,DeliverPolicy:vw,DiscardPolicy:_le,NatsConnection:PMe,JetStreamManager:LMe,JetStreamClient:DMe,StringCodec:MMe,JSONCodec:gle,createInbox:Uw,headers:Sle,ErrorCode:zq}=require("nats"),{recordAction:Tle}=(Wi(),v(wg)),{encodeBlobsAsBuffers:Rle}=(Kn(),v(o_)),e$=gle(),yle="clustering",Ale=ale.engines[jr.NATS_SERVER_NAME],ble=Fh.join(cle,"dependencies"),Lw=Fh.join(ble,`${process.platform}-${process.arch}`,jr.NATS_BINARY_NAME),Cw,Pw,Bh,Ol,Cl;u$.exports={runCommand:t$,checkNATSServerInstalled:Ile,createConnection:xw,getConnection:Hh,getJetStreamManager:kh,getJetStream:n$,getNATSReferences:Zi,getServerList:wle,createLocalStream:Bw,listStreams:s$,deleteLocalStream:Ole,getServerConfig:bd,listRemoteStreams:Cle,viewStream:Ple,viewStreamIterator:Lle,publishToStream:Dle,request:Ule,reloadNATS:Fw,reloadNATSHub:xle,reloadNATSLeaf:Ble,extractServerName:vle,requestErrorHandler:Fle,createLocalTableStream:c$,createTableStreams:Gle,purgeTableStream:l$,purgeSchemaTableStreams:qle,getStreamInfo:$le,updateLocalStreams:Kle,closeConnection:Nle,getJsmServerName:wS,addNatsMsgHeader:i$,clearClientCache:r$,updateRemoteConsumer:Hle,createConsumer:o$,updateConsumerIterator:kle};async function t$(e,t=void 0){let{stdout:r,stderr:n}=await ile(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
21
21
|
`,""));return r.replace(`
|
|
22
|
-
`,"")}o(Jq,"runCommand");async function yle(){try{await Xce.access(Ow)}catch{return!1}let e=await Jq(`${Ow} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Zce.eq(t,Tle)}o(yle,"checkNATSServerInstalled");async function Mw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await jq.getClusterUser();if(Ll(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}hi.trace("create nats connection called");let i=await dle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),hi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&hi.error("Error with Nats client connection, connection closed",a),i===fn&&Xq()}),i}o(Mw,"createConnection");function Xq(){fn=void 0,Ol=void 0,Cl=void 0,Pl=void 0}o(Xq,"clearClientCache");async function Ale(){fn&&(await fn.drain(),fn=void 0,Ol=void 0,Cl=void 0,Pl=void 0)}o(Ale,"closeConnection");var fn,Pl;async function Hh(){return Pl||(Pl=Mw(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),fn=await Pl),fn||Pl}o(Hh,"getConnection");async function kh(){if(Ol)return Ol;Ll(fn)&&await Hh();let{domain:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ll(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await fn.jetstreamManager({domain:e,timeout:6e4}),Ol}o(kh,"getJetStreamManager");async function Zq(){if(Cl)return Cl;Ll(fn)&&await Hh();let{domain:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ll(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Cl=fn.jetstream({domain:e,timeout:6e4}),Cl}o(Zq,"getJetStream");async function Zi(){let e=fn||await Hh(),t=Ol||await kh(),r=Cl||await Zq();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function ble(e){let t=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await jq.getClusterUser(),s=await Mw(t,r,n),i=Dw(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=Qq.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await IS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(ble,"getServerList");async function vw(e,t){let{jsm:r}=await Zi(),n=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:fle.File,retention:mle.Limits,subjects:t,discard:hle.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(vw,"createLocalStream");async function e$(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(e$,"listStreams");async function Ile(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(Ile,"deleteLocalStream");async function Nle(e){let{connection:t}=await Zi(),r=[],n=Dw(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(Qq.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Nle,"listRemoteStreams");async function wle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=Kq(),a={durable_name:i,ack_policy:Pw.Explicit};t&&(a.deliver_policy=Lw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=Cw(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(jr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(wle,"viewStream");async function*Ole(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=Kq(),a={durable_name:i,ack_policy:Pw.Explicit};t&&(a.deliver_policy=Lw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=Cw(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(jr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Ole,"viewStreamIterator");async function Cle(e,t,r,n){hi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=t$(n,r);let{js:s}=await Zi(),i=await wS(),a=`${e}.${i}`,c=await gle(()=>n instanceof Uint8Array?n:zq.encode(n));try{hi.trace(`publishToStream publishing to subject: ${a}`),_le(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return n$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){hi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await vw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Cle,"publishToStream");function t$(e,t){t===void 0&&(t=Ele());let r=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(jr.MSG_HEADERS.ORIGIN)&&r&&t.append(jr.MSG_HEADERS.ORIGIN,r),t}o(t$,"addNatsMsgHeader");function bd(e){e=e.toLowerCase();let t=Fh.join(kr.get(Qe.CONFIG_PARAMS.ROOTPATH),Sle);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ll(ww)&&(ww={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.HUB,config_file:jr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fh.join(t,jr.PID_FILES.HUB),hdbNatsPath:t}),ww;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ll(Nw)&&(Nw={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,config_file:jr.NATS_CONFIG_FILES.LEAF_SERVER,domain:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,pid_file_path:Fh.join(t,jr.PID_FILES.LEAF),hdbNatsPath:t}),Nw;hi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(bd,"getServerConfig");async function r$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Pw.Explicit,durable_name:r,deliver_policy:Lw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(r$,"createConsumer");async function Ple(e,t,r){await e.consumers.delete(t,r)}o(Ple,"removeConsumer");function Lle(e){return e.split(".")[1]}o(Lle,"extractServerName");async function Dle(e,t,r=6e4,n=Dw()){if(!IS.isObject(t))throw new Error("data param must be an object");let s=zq.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return Cw(c.data)}o(Dle,"request");function Uw(e){return new Promise(async(t,r)=>{let n=nle(Ow,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(Uw,"reloadNATS");async function Mle(){let{pid_file_path:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Uw(e)}o(Mle,"reloadNATSHub");async function vle(){let{pid_file_path:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Uw(e)}o(vle,"reloadNATSLeaf");function Ule(e,t,r){let n;switch(e.code){case Vq.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case Vq.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Ule,"requestErrorHandler");async function xle(e,t){let r=t+jr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await Vle(r),{schema:i,table:a}=e,c=NS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await n$(async()=>{if(e.subscribe===!0)await r$(s,c,n.info.server_name,l);else try{await Ple(s,c,n.info.server_name)}catch(u){hi.trace(u)}})}o(xle,"updateRemoteConsumer");async function Ble(e,t,r,n){let s=NS.createNatsTableStreamName(e,t),i=r+jr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!Wq&&lle()<kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Iw();await c(a)}await ale(a),n==="stop"&&await IS.asyncSetTimeout(1e3)}o(Ble,"updateConsumerIterator");function n$(e){return ole.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(n$,"exclusiveLock");async function s$(e,t){let r=NS.createNatsTableStreamName(e,t),n=await wS(),s=Gle(e,t,n);await vw(r,[s])}o(s$,"createLocalTableStream");async function Fle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await s$(n,s)}}o(Fle,"createTableStreams");async function i$(e,t,r=void 0){if(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=NS.createNatsTableStreamName(e,t),{domain:s}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Hh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")hi.warn(n);else throw n}}o(i$,"purgeTableStream");async function Hle(e,t){if(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await i$(e,t[r])}o(Hle,"purgeSchemaTableStreams");async function kle(e){return(await kh()).streams.info(e)}o(kle,"getStreamInfo");function Gle(e,t,r){return`${jr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Gle,"createSubjectName");async function wS(){if(Bh)return Bh;if(Bh=(await kh())?.nc?.info?.server_name,Bh===void 0)throw new Error("Unable to get jetstream manager server name");return Bh}o(wS,"getJsmServerName");async function qle(){let e=await kh(),t=await wS(),r=await e$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=$le(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");hi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(qle,"updateLocalStreams");function $le(e){let{config:t}=e,r=!1,n=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o($le,"updateStreamLimits");async function Vle(e){let t,r;try{t=await fn.jetstream({domain:e}),r=await fn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw hi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(Vle,"connectToRemoteJS")});function xw(e){let t=e.get(OS),r=t?(0,Id.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Ze(),s=!1;r.nodeName=Ze();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:qh(e)??1,nodes:[]})})}i[n]=0,e.putSync(OS,(0,Id.pack)(r))}return r}function Gh(e){return xw(e).remoteNameToId}function c$(e,t){let r=xw(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(OS,(0,Id.pack)(r)),s}function CS(e,t){let r=xw(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(OS,(0,Id.pack)(r))}return a$.trace?.("The remote node name map",e,n,s),s}var a$,Id,OS,Bw=ce(()=>{a$=w(ei());is();Id=require("msgpackr"),OS=Symbol.for("remote-ids");o(xw,"getIdMappingRecord");o(Gh,"exportIdMapping");o(c$,"remoteToLocalNodeId");o(CS,"getIdOfRemoteNode")});var Fw={};we(Fw,{commitsAwaitingReplication:()=>Nd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>wd,iterateRoutes:()=>Vh,shouldReplicateToNode:()=>$h,subscribeToNodeUpdates:()=>Od});function Wt(){return l$||(l$=ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function wd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Od(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;m$.debug?.("adding node",n,"on node",Ze()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Ze()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Wt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function $h(e,t){let r=Wa.default.get(U.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===Wa.default.get(U.REPLICATION_SHARD))))&&Wt().primaryStore.get(Ze())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Kle(){Od(e=>{za({},(t,r)=>{let n=e.name,s=u$.get(n);if(s||u$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=wd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Nd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Vh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Wa.default.get(U.REPLICATION_SECUREPORT)??(!Wa.default.get(U.REPLICATION_PORT)&&Wa.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Wa.default.get(U.REPLICATION_PORT)||Wa.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){d$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var d$,f$,Wa,m$,l$,u$,Nd,Dl=ce(()=>{Me();is();rm();d$=require("worker_threads"),f$=w(ge()),Wa=w(oe());k();m$=w(ei());server.nodes=[];o(Wt,"getHDBNodeTable");o(wd,"getReplicationSharedStatus");o(Od,"subscribeToNodeUpdates");o($h,"shouldReplicateToNode");u$=new Map;tv((e,t,r)=>{if(r>server.nodes.length)throw new f$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Nd||(Nd=new Map,Kle());let n=Nd.get(e);return n||(n=[],Nd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Kle,"startSubscriptionToReplications");o(Vh,"iterateRoutes")});var E$={};we(E$,{connectedToNode:()=>Ml,disconnectedFromNode:()=>Pd,ensureNode:()=>Ho,requestClusterStatus:()=>p$,startOnMainThread:()=>kw});async function kw(e){let t=0,r=st();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){PS.set(i,qh(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=Ze();function c(){let l=Wt().primaryStore.get(a);if(l!==null){let u=e.url??ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Ho(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of Vh(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}Od(s)});let n;function s(i,a=i?.name){let c=Ze()&&a===Ze()||ja()&&i?.url===ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Wt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(at.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let h;for(let[p,{worker:_,nodes:g}]of m){let R=g[0];if(R&&R.name==a){h=!0;for(let[T,{worker:y}]of m)m.delete(T),at.warn("Node was deleted, unsubscribing from node",a,T,f),y?.postMessage({type:"unsubscribe-from-node",node:a,database:T,url:f});break}}if(h){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){at.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(at.info(`Added node ${i.name} at ${i.url} for process ${Ze()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Cd)if(i.url===m.url){Cd.delete(f);break}Cd.set(i.name,i)}let u=st();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=za(e,(f,m,h)=>{h?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(at.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){at.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];PS.has(f)&&Kh.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:m,name:Ze(),startTime:PS.get(f),endTime:Date.now(),replicates:!0}),PS.delete(f));let g=$h(i,f),R=to.workers.filter(T=>T.name==="http");if(h?(p=h.worker,h.nodes=_):g&&(t=t%R.length,p=R[t++],l.set(f,{worker:p,nodes:_,url:i.url}),p?.on("exit",()=>{l.get(f)?.worker===p&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let T={type:"subscribe-to-node",database:f,nodes:_};p?p.postMessage(T):Yh(T)},Yle);else{at.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Wt().primaryStore.get(Ze())?.replicates}),Wt().primaryStore.get(Ze())?.replicates||(n=!1,at.info("Disabling replication, this node name",Ze(),Wt().primaryStore.get(Ze()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):DS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Pd=o(function(i){try{at.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Cd.keys()),c=a.sort(),l=c.indexOf(i.name||pi(i.url));if(l===-1){at.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){at.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!Kh.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,h=(l+1)%c.length;for(;l!==h;){let p=c[h],_=Cd.get(p);u=eo.get(_.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){h=(h+1)%c.length;continue}let{worker:R,nodes:T}=g,y=!1;for(let N of d.nodes){if(T.some(O=>O.name===N.name)){at.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}N.endTime<Date.now()||(T.push(N),y=!0)}if(d.nodes=[d.nodes[0]],!y){at.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}at.info(`Failing over ${i.database} from ${i.name} to ${p}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Yh({database:i.database,nodes:T});return}at.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){at.error("Error failing over node",a)}},"disconnectedFromNode"),Ml=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){at.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){at.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){at.debug("Connected node is not named yet",i.database,c);return}if(!Kh.default.get(U.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:h,connected:p}=f;if(h)if(p===!1&&h[0].shard===l.shard)u=!0,c.nodes.push(h[0]);else{let _=h.filter(g=>g&&g.name!==l.name);_.length<h.length&&(f.nodes=_,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:h}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Pd),(0,to.onMessageByType)("connected-to-node",Ml),(0,to.onMessageByType)("request-cluster-status",p$)}function p$(e,t){let r=[];for(let[n,s]of Cd)try{let i=eo.get(s.url);at.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(h=>!(h.endTime<Date.now())).map(h=>h.name)});let c=(0,Hw.cloneDeep)(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){at.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Ho(e,t){let r=Wt();e=e??pi(t.url),t.name=e;try{if(t.ca){let s=new h$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){at.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(at.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!Kh.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=(0,Hw.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}at.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,LS,at,Hw,Kh,h$,Yle,eo,Pd,Ml,Cd,PS,Wh=ce(()=>{Me();to=w(nt());is();LS=require("worker_threads");Dl();at=w(Q()),Hw=require("lodash"),Kh=w(oe());k();h$=require("crypto"),Yle=200,eo=new Map,Cd=new Map,PS=new Map;o(kw,"startOnMainThread");o(p$,"requestClusterStatus");LS.parentPort&&(Pd=o(e=>{LS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ml=o(e=>{LS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{Yh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{DS(e)}));o(Ho,"ensureNode")});var as=M(zt=>{"use strict";var hr=require("path"),{watch:Wle}=require("chokidar"),xn=require("fs-extra"),Ld=require("node-forge"),y$=require("net"),{generateKeyPair:Gw,X509Certificate:ko,createPrivateKey:A$}=require("crypto"),zle=require("util");Gw=zle.promisify(Gw);var Lt=Ld.pki,Ei=require("joi"),{v4:b$}=require("uuid"),{validateBySchema:Kw}=ut(),{forComponent:jle}=Q(),os=oe(),Ls=(k(),v(W)),{CONFIG_PARAMS:Ul}=Ls,_i=qI(),{ClientError:Ja}=ge(),vS=require("node:tls"),{relative:I$,join:Qle}=require("node:path"),{CERT_PREFERENCE_APP:zMe,CERTIFICATE_VALUES:_$}=_i,Jle=xc(),qw=wt(),{table:Xle,getDatabases:Zle,databases:MS}=(Me(),v(Et)),{getJWTRSAKeys:g$}=(Td(),v(vh)),_t=jle("tls");zt.generateKeys=zw;zt.updateConfigCert=M$;zt.createCsr=oue;zt.signCertificate=aue;zt.setCertTable=Dd;zt.loadCertificates=P$;zt.reviewSelfSignedCert=Qw;zt.createTLSSelector=U$;zt.listCertificates=B$;zt.addCertificate=mue;zt.removeCertificate=pue;zt.createNatsCerts=uue;zt.generateCertsKeys=lue;zt.getReplicationCert=jh;zt.getReplicationCertAuth=iue;zt.renewSelfSigned=due;zt.hostnamesFromCert=Xw;zt.getKey=Eue;zt.getHostnamesFromCertificate=_ue;zt.getPrimaryHostName=Jw;var{urlToNodeName:N$,getThisNodeUrl:eue,getThisNodeName:xS,clearThisNodeName:tue}=(is(),v(Go)),{readFileSync:rue,statSync:w$}=require("node:fs"),jMe=oe(),{getTicketKeys:nue,onMessageFromWorkers:sue}=nt(),Qa=Q(),{isMainThread:O$}=require("worker_threads"),{TLSSocket:C$,createSecureContext:QMe}=require("node:tls"),Yw=3650,zh=["127.0.0.1","localhost","::1"],Ww=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];sue(async e=>{e.type===Ls.ITC_EVENT_TYPES.RESTART&&(os.initSync(!0),await Qw())});var Qr;function Za(){return Qr||(Qr=Zle().system.hdb_certificate,Qr||(Qr=Xle({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Qr}o(Za,"getCertTable");async function jh(){let e=U$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(xS());if(!r)return;let n=new ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(jh,"getReplicationCert");async function iue(){Za();let e=(await jh()).options.cert,r=new ko(e).issuer.match(/CN=(.*)/)?.[1];return Qr.get(r)}o(iue,"getReplicationCertAuth");var S$,Xa=new Map;function P$(){if(S$)return;S$=!0;let e=[{configKey:Ul.TLS},{configKey:Ul.OPERATIONSAPI_TLS}];Za();let t=hr.dirname(qw.getConfigFilePath()),r;for(let{configKey:n}of e){let s=qw.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&I$(Qle(t,"keys"),a);c&&T$(a,l=>{Xa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&O$){let d;T$(u,f=>{if(_$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=v$(u),p=new ko(h),_;try{_=Jw(p)}catch(y){_t.error("error extracting host name from certificate",y);return}if(_==null){_t.error("No host name found on certificate");return}if(p.checkIssued(new ko(_$.cert)))return;let g=Qr.primaryStore.get(_),R=w$(u).mtimeMs,T=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=T){R<T&&_t.info(`Certificate ${_} at ${u} is older (${new Date(R)}) than the certificate in the database (${T>1?new Date(T):"only self signed certificate available"})`);return}r=Qr.put({name:_,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject?.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(P$,"loadCertificates");function T$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&O$&&_t.warn(`Reloading ${r}:`,i),n=c,t(v$(i)))}catch(c){_t.error(`Error loading ${r}:`,i,c)}},"loadFile");xn.existsSync(e)?s(e,w$(e)):_t.error(`${r} file not found:`,e),Wle(e,{persistent:!1}).on("change",s)}o(T$,"loadAndWatch");function $w(){let e=eue();if(e==null){let t=zh[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return N$(e)}o($w,"getHost");function US(){let e=xS();if(e==null){let t=zh[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(US,"getCommonName");async function oue(){let e=await jh(),t=Lt.certificateFromPem(e.options.cert),r=Lt.privateKeyFromPem(e.options.key);_t.info("Creating CSR with cert named:",e.name);let n=Lt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:US()},...Ww];_t.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:L$()}];return _t.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Ld.pki.certificationRequestToPem(n)}o(oue,"createCsr");function L$(){let e=zh.includes(US())?zh:[...zh,US()];return e.includes($w())||e.push($w()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>y$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(L$,"certExtensions");async function aue(e){let t={},r=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Za();for await(let d of Qr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Xa.has(d.private_key_name)){n=Xa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await xn.exists(hr.join(r,d.private_key_name))){n=xn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Vw();s=d.ca,n=d.private_key}n=Lt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Lt.certificateFromPem(s.certificate);_t.info("Signing CSR with cert named",s.name);let a=Lt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return _t.error(d),new Error("Error verifying CSR: "+d.message)}let c=Ld.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Yw),_t.info("sign cert setting validity:",c.validity),_t.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),_t.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;_t.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Ld.md.sha256.create()),t.certificate=Lt.certificateToPem(c)}else _t.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(aue,"signCertificate");async function cue(e,t){await Dd({name:xS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Dd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Lt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(cue,"createCertificateTable");async function Dd(e){let t=new ko(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Za(),await Qr.patch(e)}o(Dd,"setCertTable");async function zw(){let e=await Gw("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Lt.publicKeyFromPem(e.publicKey),privateKey:Lt.privateKeyFromPem(e.privateKey)}}o(zw,"generateKeys");async function jw(e,t,r){let n=Lt.createCertificate();if(!t){let a=await jh();t=Lt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Yw);let i=[{name:"commonName",value:US()},...Ww];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(L$()),n.sign(e,Ld.md.sha256.create()),Lt.certificateToPem(n)}o(jw,"generateCertificates");async function Vw(){let e=await B$(),t;for(let r of e){if(!r.is_authority)continue;let n=await x$(r.private_key_name);if(r.private_key_name&&n&&new ko(r.certificate).checkPrivateKey(A$(n))){_t.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;_t.trace("No CA found with matching private key")}o(Vw,"getCertAuthority");async function D$(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Yw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${os.get(Ul.REPLICATION_HOSTNAME)??N$(os.get(Ul.REPLICATION_URL))??b$().split("-")[0]}`},...Ww];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Ld.md.sha256.create());let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=hr.join(a,_i.PRIVATEKEY_PEM_NAME);return r&&await xn.writeFile(c,Lt.privateKeyToPem(e)),n}o(D$,"generateCertAuthority");async function lue(){let{privateKey:e,publicKey:t}=await zw(),r=await D$(e,t),n=await jw(e,t,r);await cue(n,r),M$()}o(lue,"generateCertsKeys");async function uue(){let e=await jw(Lt.privateKeyFromPem(_i.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(_i.CERTIFICATE_VALUES.cert)),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME);await xn.exists(r)||await xn.writeFile(r,e);let n=hr.join(t,_i.NATS_CA_PEM_NAME);await xn.exists(n)||await xn.writeFile(n,_i.CERTIFICATE_VALUES.cert)}o(uue,"createNatsCerts");async function due(){Za();for await(let e of Qr.search([{attribute:"is_self_signed",value:!0}]))await Qr.delete(e.name);await Qw()}o(due,"renewSelfSigned");async function Qw(){tue(),await P$(),Za();let e=await Vw();if(!e){_t.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Lt.privateKeyFromPem(xn.readFileSync(u)),keyPath:u}}catch(d){return _t.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=os.get(Ul.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=os.get(Ul.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=I$(a,i);s||(_t.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await zw(),xn.existsSync(hr.join(a,_i.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${b$().split("-")[0]}.pem`),await xn.writeFile(hr.join(a,c),Lt.privateKeyToPem(s)));let l=await D$(s,Lt.setRsaPublicKey(s.n,s.e),!1);await Dd({name:l.subject.getField("CN").value,uses:["https"],certificate:Lt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await jh()){let r=xS();_t.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Vw();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await jw(Lt.privateKeyFromPem(e.private_key),s,n);await Dd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(Qw,"reviewSelfSignedCert");function M$(){let e=Jle(Object.keys(Ls.CONFIG_PARAM_MAP),!0),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.PRIVATEKEY_PEM_NAME),n=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,_i.NATS_CA_PEM_NAME),i=Ls.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),qw.updateConfigValue(void 0,void 0,a,!1,!0)}o(M$,"updateConfigCert");function v$(e){return e.startsWith("-----BEGIN")?e:rue(e,"utf8")}o(v$,"readPEM");var R$=vS.createSecureContext;vS.createSecureContext=function(e){if(!e.cert||!e.key)return R$(e);let t={...e};delete t.key,delete t.cert;let r=R$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var fue=C$.prototype._init;C$.prototype._init=function(e,t){fue.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var vl=new Map;function U$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),vl.clear();let d=0;if(MS===void 0){c();return}for await(let f of MS.system.hdb_certificate.search([])){let m=f.certificate,h=new ko(m);f.is_authority&&(h.asString=m,vl.set(h.subject,m))}for await(let f of MS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",h=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(h+=1);let p=await x$(f.private_key_name),_=f.certificate,g=new ko(_);if(vl.has(g.issuer)&&(_+=`
|
|
23
|
-
`+vl.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:nue(),availableCAs:vl,ca:t&&Array.from(vl.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(R.sessionIdContext=a.sessionIdContext);let T=vS.createSecureContext(R);T.name=f.name,T.options=R,T.quality=h,T.certificateAuthorities=Array.from(vl),T.certStart=_.toString().slice(0,100);let y=f.hostnames??Xw(g);Array.isArray(y)||(y=[y]);let N;for(let O of y)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===$w()&&(h+=2),y$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;h>F&&r.set(O,T)}else Qa.error("No hostname found for certificate at",vS.certificate);Qa.trace("Adding TLS",T.name,"for",a.ports||"client","cert named",f.name,"hostnames",y,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=T,d=h,a&&(a.defaultContext=T))}catch(m){Qa.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),MS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Qa.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Qa.debug("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?Qa.debug("No certificate found to match",a,"using the default certificate"):Qa.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Qa.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(U$,"createTLSSelector");async function x$(e){let t=Xa.get(e);return!t&&e?await xn.readFile(hr.join(os.get(Ul.ROOTPATH),Ls.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(x$,"getPrivateKeyByName");async function B$(){Za();let e=[];for await(let t of Qr.search([]))e.push(t);return e}o(B$,"listCertificates");async function mue(e){let t=Kw(e,Ei.object({name:Ei.string().required(),certificate:Ei.string().required(),is_authority:Ei.boolean().required(),private_key:Ei.string(),hosts:Ei.array(),uses:Ei.array()}));if(t)throw new Ja(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new ko(n),c=!1,l=!1,u;for(let[h,p]of Xa)!s&&!c&&a.checkPrivateKey(A$(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new Ja("A suitable private key was not found for this certificate");let d;if(!r){try{d=Jw(a)}catch(h){_t.error(h)}if(d==null)throw new Ja("Error extracting certificate host name, please provide a name parameter")}let f=hue(r??d);s&&!c&&!l&&(await xn.writeFile(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,f+".pem"),s),Xa.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Dd(m),"Successfully added certificate: "+f}o(mue,"addCertificate");function hue(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(hue,"sanitizeName");async function pue(e){let t=Kw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;Za();let n=await Qr.get(r);if(!n)throw new Ja(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Qr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(_t.info("Removing private key named",s),await xn.remove(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,s)))}return await Qr.delete(r),"Successfully removed "+r}o(pue,"removeCertificate");function Jw(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||Xw(e)[0]}o(Jw,"getPrimaryHostName");function Xw(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(Xw,"hostnamesFromCert");async function Eue(e){if(e.bypass_auth!==!0)throw new Ja("Unauthorized","401");let t=Kw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await g$()).privateKey;if(r===".jwtPublic")return(await g$()).publicKey;if(Xa.get(r))return Xa.get(e.name);throw new Ja("Key not found")}o(Eue,"getKey");function _ue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(_ue,"getHostnamesFromCertificate")});var iV={};we(iV,{CONFIRMATION_STATUS_POSITION:()=>nV,LATENCY_POSITION:()=>YS,NodeReplicationConnection:()=>Ud,OPERATION_REQUEST:()=>rO,RECEIVED_TIME_POSITION:()=>VS,RECEIVED_VERSION_POSITION:()=>$S,RECEIVING_STATUS_POSITION:()=>KS,RECEIVING_STATUS_RECEIVING:()=>sV,RECEIVING_STATUS_WAITING:()=>nO,SENDING_TIME_POSITION:()=>Qh,createWebSocket:()=>WS,databaseSubscriptions:()=>tc,replicateOverWS:()=>Jh,tableUpdateListeners:()=>iO});async function WS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Ze(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!eO){let l=(0,X$.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),eO=u.secureContexts}if(i=eO.get(s),i&&ae.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,eV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(qS?.caCount!==qo.size&&(qS=Z$.createSecureContext({...i.options,ca:[...qo,...i.options.availableCAs.values()]}),qS.caCount=qo.size),c.secureContext=qS),new Q$.WebSocket(e,"harperdb-replication-v1",c)}function Jh(e,t,r){let n=t.port||t.securePort,s=xl.pid%1e3+"-"+J$.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ae.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||tc,f,m,h=!1,p=t.subscription;p?.then&&p.then(E=>{p=E,p.auditStore&&(f=p.auditStore)});let _=t.tables||u&&st()[u],g;if(!r){ae.error?.(s,"No authorization provided"),Ss(1008,"Unauthorized");return}let R=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,O,F,Z,G,Y,K=6e4,$,le=0,ue=0,se=0,me=j$.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Pe=new Map,De=[],dt=0,Ye;if(t.url){let E=o(()=>{Z&&ue===e._socket?.bytesRead&&se===e._socket?.bytesWritten?e.terminate():(Z=performance.now(),e.ping(),ue=e._socket?.bytesRead,se=e._socket?.bytesWritten)},"sendPing");O=setInterval(E,W$).unref(),E()}else qn();e._socket?.setMaxListeners(200);function qn(){clearTimeout(F),ue=e._socket?.bytesRead,se=e._socket?.bytesWritten,F=setTimeout(()=>{ue===e._socket?.bytesRead&&se===e._socket?.bytesWritten&&(ae.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},W$*2).unref()}o(qn,"resetPingTimer");function rt(){if(!(!g||!u))return m||(m=wd(f,u,g)),m}o(rt,"getSharedStatus"),u&&ga(u);let ht,Cc,Pc=[],$t=[],vf,Uf=[],IE=[],NE=[],Fy=150,xf=25,Ce=0,wE=0,Bf=!1,po,Pr,Rr,Ff;e.on("message",E=>{le=performance.now();try{let S=E.dataView=new Vc(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let P=(0,et.decode)(E),[L,D,H]=P;switch(L){case H$:{if(D){if(g){if(g!==D){ae.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,et.encode)([Md])),Ss(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Ho(g,B)}if(t.connection&&(t.connection.nodeName=g),ae.debug?.(s,"received node name:",g,"db:",u??P[2]),!u)try{ga(u=P[2]),u==="system"&&(ht=za(t,(B,de)=>{pu(de)&&Sa(de)}),e.on("close",()=>{ht?.remove()}))}catch(B){ae.warn?.(s,"Error setting database",B),e.send((0,et.encode)([Md])),Ss(1008,B.message);return}Lr()}break}case K$:{ae.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let de=P[2];B.database=de;let he;pu(de)&&(de==="system"?He[de]?.[B.table]||(he=V(B,He[de]?.[B.table])):he=V(B,He[de]?.[B.table]),f||(f=he?.auditStore),_||(_=st()?.[de]))}break}case Md:Ss();break;case rO:try{let B=r?.replicates||r?.subscribers||r?.name;ae.debug?.("Received operation request",D,"from",g),server.operation(D,{user:r},!B).then(de=>{Array.isArray(de)&&(de={results:de}),de.requestId=D.requestId,e.send((0,et.encode)([FS,de]))},de=>{e.send((0,et.encode)([FS,{requestId:D.requestId,error:(0,vd.errorToString)(de)}]))})}catch(B){e.send((0,et.encode)([FS,{requestId:D.requestId,error:(0,vd.errorToString)(B)}]))}break;case FS:let{resolve:C,reject:x}=R.get(D.requestId);D.error?x(new Error(D.error)):C(D),R.delete(D.requestId);break;case Zw:let z=P[3];if(!_){u?ae.error?.(s,"No database found for",u):ae.error?.(s,"Database name never received"),Ss();return}let ne=_[z];ne=V({table:z,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},ne),Pc[H]={name:z,decoder:new et.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return ne.primaryStore.getEntry(B)},rootStore:ne.primaryStore.rootStore};break;case k$:Ff=f?c$(D,f):new Map,vf=P[2],ae.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${vf}`);break;case G$:let re=H;NE[re]=D;break;case V$:rt()[nV]=D,ae.trace?.(s,"received and broadcasting committed update",D),rt().buffer.notify();break;case $$:y=D,p.send({type:"end_txn",localTime:y,remoteNodeIds:T}),rt(),m[$S]=y,m[VS]=Date.now(),m[KS]=nO;break;case HS:{let B=P[1],{fileId:de,size:he,finished:Se,error:ee}=B,j=Pe.get(de);ae.debug?.("Received blob",de,"has stream",!!j,"connectedToBlob",!!j?.connectedToBlob,"length",P[2].length,"finished",Se),j||(j=new tO.PassThrough,j.expectedSize=he,Pe.set(de,j)),j.lastChunk=Date.now();let pe=P[2];it(pe.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Se?(ee?(j.on("error",()=>{}),j.destroy(new Error("Blob error: "+ee+" for record "+(j.recordId??"unknown")+" from "+g))):j.end(pe),j.connectedToBlob&&Pe.delete(de)):j.write(pe)}catch(Te){ae.error?.(`Error receiving blob for ${j.recordId} from ${g} and streaming to storage`,Te),Pe.delete(de)}break}case q$:{let B=D,de;try{let he=P[3],Se=$t[H]||($t[H]=_[P[4]]);if(!Se)return ae.warn?.("Unknown table id trying to handle record request",H);let ee=Se.primaryStore.getBinaryFast(Symbol.for("structures")),j=ee?.length??0;if(j>0&&j!==wE){wE=j;let Te=(0,et.decode)(ee);e.send((0,et.encode)([Zw,{typedStructs:Te.typed,structures:Te.named},H,Se.tableName]))}let pe=Se.primaryStore.getBinaryFast(he);if(pe){let Te=Se.primaryStore.decoder.decode(pe,{valueAsBuffer:!0}),fe=lt||{};fe.version=(0,tV.getLastVersion)(),lt&<[Ou]&$r&&(Te=Buffer.from(Te),fm(()=>Se.primaryStore.decoder.decode(pe),We=>_a(We,he),Se.primaryStore.rootStore)),de=(0,et.encode)([BS,B,{value:Te,expiresAt:fe.expiresAt,version:fe.version,residencyId:fe.residencyId,nodeId:fe.nodeId,user:fe.user}])}else de=(0,et.encode)([BS,B])}catch(he){de=(0,et.encode)([BS,B,{error:he.message}])}e.send(de);break}case BS:{let{resolve:B,reject:de,tableId:he,key:Se}=R.get(P[1]),ee=P[2];if(ee?.error)de(new Error(ee.error));else if(ee){let j;i_(()=>{let pe=Pc[he].decoder.decode(ee.value);ee.value=pe,ee.key=Se,B(ee)||j&&setTimeout(()=>j.forEach(r_),6e4).unref()},f?.rootStore,pe=>{let Te=Lc(pe,Se);return j||(j=[]),j.push(Te),Te})}else B();R.delete(P[1]);break}case F$:{Rr=D;let B,de,he=!1;if(p){if(u!==p.databaseName&&!p.then){ae.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(ae.debug?.(s,"received subscription request for",u,"at",Rr),!p){let Ee;p=new Promise(pt=>{ae.debug?.("Waiting for subscription to database "+u),Ee=pt}),p.ready=Ee,tc.set(u,p)}if(r.name)de=Wt().subscribe(r.name),de.then(async Ee=>{B=Ee;for await(let pt of B){let tt=pt.value;if(!(tt?.replicates===!0||tt?.replicates?.receives||tt?.subscriptions?.some(cr=>(cr.database||cr.schema)===u&&cr.publish!==!1))){he=!0,e.send((0,et.encode)([Md])),Ss(1008,`Unauthorized database subscription to ${u}`);return}}},Ee=>{ae.error?.(s,"Error subscribing to HDB nodes",Ee)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,et.encode)([Md])),Ss(1008,`Unauthorized database subscription to ${u}`);return}if(Pr&&(ae.debug?.(s,"stopping previous subscription",u),Pr.emit("close")),Rr.length===0)return;let Se=Rr[0],ee=o(Ee=>{if(Ee&&(Se.replicateByDefault?!Se.tables.includes(Ee.tableName):Se.tables.includes(Ee.tableName)))return{table:Ee}},"tableToTableEntry"),j={txnTime:0},pe,Te,fe=1/0,We,St=o((Ee,pt)=>{if(Ee.type==="end_txn"){j.txnTime&&(a[i]!==66&&ae.error?.("Invalid encoding of message"),Eu(9),Eu(E_),Mc(We=pt),ft()),i=c,j.txnTime=0;return}let tt=Ee.nodeId,cr=Ee.tableId,xt=Te[cr];if(!xt&&(xt=Te[cr]=ee(p.tableById[cr]),!xt))return ae.debug?.("Not subscribed to table",cr);let Ts=xt.table,Bt=Ts.primaryStore,Qs=Bt.encoder;(Ee.extendedType&R_||!Qs.typedStructs)&&(Qs._mergeStructures(Qs.getStructures()),Qs.typedStructs&&(Qs.lastTypedStructuresLength=Qs.typedStructs.length));let _u=pe[tt];if(!(_u&&_u.startTime<pt&&(!_u.endTime||_u.endTime>pt)))return GS&&ae.trace?.(s,"skipping replication update",Ee.recordId,"to:",g,"from:",tt,"subscribed:",pe),eM();GS&&ae.trace?.(s,"sending replication update",Ee.recordId,"to:",g,"from:",tt,"subscribed:",pe);let Hy=Ee.version,vc=Ee.residencyId,ky=hu(vc,Ts),CE;if(ky&&!ky.includes(g)){let Js=hu(Ee.previousResidencyId,Ts);if(Js&&!Js.includes(g)&&(Ee.type==="put"||Ee.type==="patch")||Ts.getResidencyById)return eM();let kf=Ee.recordId;ae.trace?.(s,"sending invalidation",kf,g,"from",tt);let Gf=0;vc&&(Gf|=Kc),Ee.previousResidencyId&&(Gf|=Yc);let $y,PE=null;for(let tM in Ts.indices){if(!PE){if($y=Ee.getValue(Bt,!0),!$y)break;PE={}}PE[tM]=$y[tM]}CE=Wc(Ee.version,cr,kf,null,tt,Ee.user,Ee.type==="put"||Ee.type==="patch"?"invalidate":Ee.type,Qs.encode(PE),Gf,vc,Ee.previousResidencyId,Ee.expiresAt)}function eM(){return ae.trace?.(s,"skipping audit record",Ee.recordId),G||(G=setTimeout(()=>{G=null,(We||0)+Y$/2<fe&&(GS&&ae.trace?.(s,"sending skipped sequence update",fe),e.send((0,et.encode)([$$,fe])))},Y$).unref()),new Promise(setImmediate)}o(eM,"skipAuditRecord");let Gy=Qs.typedStructs,qy=Qs.structures;if((Gy?.length!=xt.typed_length||qy?.length!=xt.structure_length)&&(xt.typed_length=Gy?.length,xt.structure_length=qy.length,ae.debug?.(s,"send table struct",xt.typed_length,xt.structure_length),xt.sentName||(xt.sentName=!0),e.send((0,et.encode)([Zw,{typedStructs:Gy,structures:qy,attributes:Ts.attributes,schemaDefined:Ts.schemaDefined},cr,xt.table.tableName]))),vc&&!IE[vc]&&(e.send((0,et.encode)([G$,ky,vc])),IE[vc]=!0),j.txnTime!==Hy&&(j.txnTime&&(GS&&ae.trace?.(s,"new txn time, sending queued txn",j.txnTime),a[i]!==66&&ae.error?.("Invalid encoding of message"),ft()),j.txnTime=Hy,i=c,Mc(Hy)),CE)Eu(CE.length),Dc(CE);else{let Js=Ee.encoded;Ee.extendedType&$r&&fm(()=>Ee.getValue(Bt),Gf=>_a(Gf,Ee.recordId),Bt.rootStore);let kf=Js[0]===66?8:0;Eu(Js.length-kf),Dc(Js,kf),ae.trace?.("wrote record",Ee.recordId,"length:",Js.length)}return e._socket.writableNeedDrain?new Promise(Js=>{ae.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Js)}):dt>xf?new Promise(Js=>{Ye=Js}):new Promise(setImmediate)},"sendAuditRecord"),ft=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ae.debug?.(s,"Sent message, size:",c-i),it(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ae.debug?.(s,"skipping empty transaction")},"sendQueuedData");Pr=new sO.EventEmitter,Pr.once("close",()=>{he=!0,B?.end()});for(let{startTime:Ee}of Rr)Ee<fe&&(fe=Ee);(de||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,Te=p.tableById.map(ee),pe=[];for(let{name:pt,startTime:tt,endTime:cr}of Rr){let xt=CS(pt,f);ae.debug?.("subscription to",pt,"using local id",xt,"starting",tt),pe[xt]={startTime:tt,endTime:cr}}Sa(u),ht||(ht=Il(pt=>{pt.databaseName===u&&Sa(u)}),Cc=Sh(pt=>{pt===u&&(e.send((0,et.encode)([Md])),Ss())}),e.on("close",()=>{ht?.remove(),Cc?.remove()})),e.send((0,et.encode)([k$,Gh(p.auditStore),Rr.map(({name:pt})=>pt)]));let Ee=!0;do{isFinite(fe)||(ae.warn?.("Invalid sequence id "+fe),Ss(1008,"Invalid sequence id"+fe));let pt;if(Ee&&!he&&(Ee=!1,fe===0)){ae.info?.("Replicating all tables to",g);let tt=fe,cr=zS(f);for(let xt in _){if(!ee(xt))continue;let Ts=_[xt];for(let Bt of Ts.primaryStore.getRange({snapshot:!1,versions:!0})){if(he)return;if(Bt.localTime>=fe){ae.trace?.(s,"Copying record from",u,xt,Bt.key,Bt.localTime),tt=Math.max(Bt.localTime,tt),rt()[Qh]=1;let Qs=Wc(Bt.version,Ts.tableId,Bt.key,null,cr,null,"put",fm(()=>Ts.primaryStore.encoder.encode(Bt.value),_u=>_a(_u,Bt.key)),Bt.metadataFlags&-256,Bt.residencyId,null,Bt.expiresAt);await St({recordId:Bt.key,tableId:Ts.tableId,type:"put",getValue(){return Bt.value},encoded:Qs,version:Bt.version,residencyId:Bt.residencyId,nodeId:cr,extendedType:Bt.metadataFlags},Bt.localTime)}}}c-i>8&&St({type:"end_txn"},fe),rt()[Qh]=0,fe=tt}for(let{key:tt,value:cr}of f.getRange({start:fe||1,exclusiveStart:!0,snapshot:!1})){if(he)return;let xt=Nt(cr);ae.debug?.("sending audit record",new Date(tt)),rt()[Qh]=tt,fe=tt,await St(xt,tt),Pr.startTime=tt}c-i>8&&St({type:"end_txn"},fe),rt()[Qh]=0,await SU(f)}while(!he)}).catch(Ee=>{ae.error?.(s,"Error handling subscription to node",Ee),Ss(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,b,I;do{rt();let P=S.readInt();if(P===9&&S.getUint8(S.position)==E_){S.position++,y=I=S.readFloat64(),m[$S]=y,m[VS]=Date.now(),m[KS]=nO,ae.trace?.("received remote sequence update",y,u);break}let L=S.position,D=Nt(E,L,L+P),H=Pc[D.tableId];H||ae.error?.(`No table found with an id of ${D.tableId}`);let C;D.residencyId&&(C=NE[D.residencyId],ae.trace?.(s,"received residency list",C,D.type,D.recordId));try{let x=D.recordId;i_(()=>{b={table:H.name,id:D.recordId,type:D.type,nodeId:Ff.get(D.nodeId),residencyList:C,timestamp:D.version,value:D.getValue(H),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},f?.rootStore,z=>Lc(z,x))}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(H.decoder.typedStructs),x}A=!1,ae.trace?.(s,"received replication message",D.type,"id",b.id,"version",new Date(D.version),"nodeId",b.nodeId),m[$S]=D.version,m[VS]=Date.now(),m[KS]=sV,p.send(b),S.position=L+P}while(S.position<E.byteLength);Ce++,it(E.byteLength,"bytes-received",`${g}.${u}.${b?.table||"unknown_table"}`,"replication","ingest"),Ce>Fy&&!Bf&&(Bf=!0,e.pause(),ae.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:y,remoteNodeIds:T,async onCommit(){if(b){let P=Date.now()-b.timestamp;it(P,"replication-latency",g+"."+u+"."+b.table,b.type,"ingest")}Ce--,Bf&&(Bf=!1,e.resume(),ae.debug?.(`Replication resuming ${g}`)),De.length>0&&await Promise.all(De),ae.trace?.("All blobs finished"),!N&&I&&(ae.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,et.encode)([V$,N])),ae.trace?.(s,"sent confirmation of a commit at",N),N=null},Sue)),N=I,ae.debug?.("last sequence committed",new Date(I),u)}})}catch(S){ae.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",qn),e.on("pong",()=>{if(t.connection){let E=performance.now()-Z;t.connection.latency=E,rt()&&(m[YS]=E),t.isSubscriptionConnection&&Ml({name:g,database:u,url:t.url,latency:E})}Z=null}),e.on("close",(E,S)=>{clearInterval(O),clearTimeout(F),clearInterval(Y),Pr&&Pr.emit("close"),po&&po.end();for(let[A,{reject:b}]of R)b(new Error(`Connection closed ${S?.toString()} ${E}`));ae.debug?.(s,"closed",E,S?.toString())});function Ss(E,S){try{e.isFinished=!0,ae.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){ae.error?.(s,"Error closing connection",A)}}o(Ss,"close");let Ea=new Set;async function _a(E,S){let A=n_(E);if(Ea.has(A)){ae.debug?.("Blob already being sent",A);return}Ea.add(A);try{let b;dt++;for await(let I of E.stream())b&&(ae.debug?.("Sending blob chunk",A,"length",b.length),e.send((0,et.encode)([HS,{fileId:A,size:E.size},b]))),b=I,e._socket.writableNeedDrain&&(ae.debug?.("draining",A),await new Promise(P=>e._socket.once("drain",P)),ae.debug?.("drained",A)),it(I.length,"bytes-sent",`${g}.${u}`,"replication","blob");ae.debug?.("Sending final blob chunk",A,"length",b.length),e.send((0,et.encode)([HS,{fileId:A,size:E.size,finished:!0},b]))}catch(b){ae.warn?.("Error sending blob",b,"blob id",A,"for record",S),e.send((0,et.encode)([HS,{fileId:A,finished:!0,error:(0,vd.errorToString)(b)},Buffer.alloc(0)]))}finally{Ea.delete(A),dt--,dt<xf&&Ye?.()}}o(_a,"sendBlobs");function Lc(E,S){let A=n_(E),b=Pe.get(A);ae.debug?.("Received transaction with blob",A,"has stream",!!b,"ended",!!b?.writableEnded),b?b.writableEnded&&Pe.delete(A):(b=new tO.PassThrough,Pe.set(A,b)),b.connectedToBlob=!0,b.lastChunk=Date.now(),b.recordId=S,E.size===void 0&&b.expectedSize&&(E.size=b.expectedSize);let I=b.blob??createBlob(b,E);b.blob=I;let P=Ao(()=>dm(I).saving,p.auditStore?.rootStore);return P&&(P.blobId=A,De.push(P),P.finally(()=>{ae.debug?.(`Finished receiving blob stream ${A}`),De.splice(De.indexOf(P),1)})),I}o(Lc,"receiveBlobs");function Lr(){if(h||(h=!0,t.connection?.on("subscriptions-updated",Lr)),!f&&p&&(f=p.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let E=new Map;f||(f=p?.auditStore);try{for(let b of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of b.value.nodes||[])I.lastTxnTime>(E.get(I.id)??0)&&E.set(I.id,I.lastTxnTime)}catch(b){if(!b.message.includes("Can not re"))throw b}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((b,I)=>{let P=[],{replicateByDefault:L}=b;if(b.subscriptions){for(let x of b.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let z=x.table;_?.[z]?.replicate!==!1&&P.push(z)}L=!1}else for(let x in _)(L?_[x].replicate===!1:_[x].replicate)&&P.push(x);let D=f&&CS(b.name,f),H=p?.dbisDB?.get([Symbol.for("seq"),D])??1,C=Math.max(H?.seqId??1,(typeof b.startTime=="string"?new Date(b.startTime).getTime():b.startTime)??1);if(ae.debug?.("Starting time recorded in db",b.name,D,u,H?.seqId,"start time:",C,new Date(C)),S!==b){let x=f&&CS(S.name,f),z=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let ne of z?.nodes||[])ne.name===b.name&&(C=ne.seqId,ae.debug?.("Using sequence id from proxy node",S.name,C))}if(D===void 0?ae.warn("Starting subscription request from node",b,"but no node id found"):T.push(D),E.get(D)>C&&(C=E.get(D),ae.debug?.("Updating start time from more recent txn recorded",S.name,C)),C===1&&kS)try{new URL(kS).hostname===b.name?(ae.warn?.(`Requesting full copy of database ${u} from ${kS}`),C=0):C=Date.now()-6e4}catch(x){ae.error?.("Error parsing leader URL",kS,x)}return ae.trace?.(s,"defining subscription request",b.name,u,new Date(C)),{name:b.name,replicateByDefault:L,tables:P,startTime:C,endTime:b.endTime}});if(A)if(ae.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout($),A.length>0)e.send((0,et.encode)([F$,A]));else{let b=o(()=>{let I=performance.now();$=setTimeout(()=>{le<=I?Ss(1008,"Connection has no subscriptions and is no longer used"):b()},K).unref()},"scheduleClose");b()}}o(Lr,"sendSubscriptionRequestUpdate");function hu(E,S){if(!E)return;let A=Uf[E];return A||(A=S.getResidencyRecord(E),Uf[E]=A),A}o(hu,"getResidence");function pu(E){return!(ec&&ec!="*"&&!ec[E]&&!ec.includes?.(E)&&!ec.some?.(S=>S.name===E))}o(pu,"checkDatabaseAccess");function ga(E){if(p=p||d.get(E),!pu(E))throw new Error(`Access to database "${E}" is not permitted`);p||ae.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=st()?.[E]);let S=Ze();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return OE(S,E),!0}o(ga,"setDatabase");function OE(E,S){let A=st()?.[S],b=[];for(let I in A){let P=A[I];b.push({table:I,schemaDefined:P.schemaDefined,attributes:P.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ae.trace?.("Sending database info for node",E,"database name",S),e.send((0,et.encode)([H$,E,S,b]))}o(OE,"sendNodeDBName");function Sa(E){let S=st()?.[E],A=[];for(let b in S){if(Rr&&!Rr.some(P=>P.replicateByDefault?!P.tables.includes(b):P.tables.includes(b)))continue;let I=S[b];A.push({table:b,schemaDefined:I.schemaDefined,attributes:I.attributes.map(P=>({name:P.name,type:P.type,isPrimaryKey:P.isPrimaryKey}))})}e.send((0,et.encode)([K$,A,E]))}o(Sa,"sendDBSchema"),Y=setInterval(()=>{for(let[E,S]of Pe)S.lastChunk+me<Date.now()&&(ae.warn?.(`Timeout waiting for blob stream to finish ${E} for record ${S.recordId??"unknown"} from ${g}`),Pe.delete(E),S.end())},me).unref();let Ta=1,Hf=[];return{end(){po&&po.end(),Pr&&Pr.emit("close")},getRecord(E){let S=Ta++;return new Promise((A,b)=>{let I=[q$,S,E.table.tableId,E.id];Hf[E.table.tableId]||(I.push(E.table.tableName),Hf[E.table.tableId]=!0),e.send((0,et.encode)(I)),le=performance.now(),R.set(S,{tableId:E.table.tableId,key:E.id,resolve(P){let{table:L,entry:D}=E;if(A(P),P)return L._recordRelocate(D,P)},reject:b})})},sendOperation(E){let S=Ta++;return E.requestId=S,e.send((0,et.encode)([rO,E])),new Promise((A,b)=>{R.set(S,{resolve:A,reject:b})})}};function Eu(E){Ra(5),E<128?a[c++]=E:E<16384?(l.setUint16(c,E|32768),c+=2):E<1056964608?(l.setUint32(c,E|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,E),c+=5)}function Dc(E,S=0,A=E.length){let b=A-S;Ra(b),E.copy(a,c,S,A),c+=b}function Mc(E){Ra(8),l.setFloat64(c,E),c+=8}function Ra(E){if(E+16>a.length-c){let S=Buffer.allocUnsafeSlow(c+E-i+65536>>10<<11);a.copy(S,0,i,c),c=c-i,i=0,a=S,l=new DataView(a.buffer,0,a.length)}}function V(E,S){let A=E.database??"data";if(A!=="data"&&!He[A]){ae.warn?.("Database not found",E.database);return}S||(S={});let b=S.schemaDefined,I=!1,P=E.schemaDefined,L=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let H=E.attributes[D],C=L.find(x=>x.name===H.name);(!C||C.type!==H.type)&&(b?ae.error?.(`Schema for '${u}.${E.table}' is defined locally, but attribute '${H.name}: ${H.type}' from '${g}' does not match local attribute ${C?"'"+C.name+": "+C.type+"'":"which does not exist"}`):(I=!0,P||(H.indexed=!0),C?L[L.indexOf(C)]=H:L.push(H)))}return I?(ae.debug?.("(Re)creating",E),ze({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:L,...S})):S}}var j$,et,Q$,J$,vd,sO,X$,Z$,xl,eV,tO,tV,rV,ae,F$,H$,k$,Md,G$,Zw,q$,BS,rO,FS,$$,V$,K$,HS,nV,$S,VS,Qh,YS,KS,nO,sV,gue,kS,iO,tc,GS,Y$,Sue,W$,eO,qS,z$,Ud,oO=ce(()=>{Me();Li();Bw();tb();is();j$=w(oe());k();zc();et=require("msgpackr"),Q$=require("ws"),J$=require("worker_threads"),vd=w(Q());Wh();sO=require("events"),X$=w(as()),Z$=w(require("node:tls"));Dl();xl=w(require("node:process")),eV=require("node:net");Wi();Kn();tO=require("node:stream"),tV=require("lmdb"),rV=w(require("minimist")),ae=(0,vd.forComponent)("replication").conditional,F$=129,H$=140,k$=141,Md=142,G$=130,Zw=132,q$=133,BS=134,rO=136,FS=137,$$=143,V$=144,K$=145,HS=146,nV=0,$S=1,VS=2,Qh=3,YS=4,KS=5,nO=0,sV=1,gue=(0,rV.default)(xl.argv),kS=gue.HDB_LEADER_URL??xl.env.HDB_LEADER_URL,iO=new Map,tc=new Map,GS=!0,Y$=300,Sue=2,W$=3e4;o(WS,"createWebSocket");z$=500,Ud=class extends sO.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=z$;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??pi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await WS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ae.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${xl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ae[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=z$,this.nodeSubscriptions&&Ml({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Jh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ae.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ae.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ae.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Pd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ae.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(Jh,"replicateOverWS")});var Go={};we(Go,{clearThisNodeName:()=>Oue,disableReplication:()=>Aue,enabledDatabases:()=>ec,forEachReplicatedDatabase:()=>za,getThisNodeId:()=>zS,getThisNodeName:()=>Ze,getThisNodeUrl:()=>ja,hostnameToUrl:()=>ZS,lastTimeInAuditStore:()=>qh,monitorNodeCAs:()=>hV,replicateOperation:()=>Pue,replicationCertificateAuthorities:()=>qo,sendOperationToNode:()=>Xh,servers:()=>Rue,setReplicator:()=>EV,start:()=>yue,startOnMainThread:()=>kw,subscribeToNode:()=>Yh,unsubscribeFromNode:()=>DS,urlToNodeName:()=>pi});function yue(e){if(!e.port&&!e.securePort&&(e.port=Ds.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ds.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!Ze())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Vh(e))t.set(pi(s.url),s);bue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Le.ws(async(s,i,a,c)=>{if(Dt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);await a,s._socket.unref(),Jh(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Dt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Le.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Dt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Dt.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Wt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,fV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){Dt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else Dt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:Dt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(qo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=XS.createSecureContext(u)}catch(l){Dt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}hV(()=>{for(let s of n)s()})}function hV(e){let t=0;Od(r=>{r?.ca&&(qo.add(r.ca),qo.size!==t&&(t=qo.size,e?.()))})}function Aue(e=!0){mV=e}function bue(e){mV||(st(),ec=e.databases,za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||tc;for(let[s,i]of QS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];EV(r,s,e),iO.get(s)?.forEach(i=>i(s))}}))}function EV(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class pV extends Ur{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||tc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Dt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Vn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let p of c){if(u.has(p)||p===Le.hostname)continue;let _=Nue(p,pV.subscription,e);if(_?.isConnected){let g=wd(t.auditStore,e,p)[YS];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new uV.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:Tue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;Dt.warn("Error in load from node",JS,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Iue(e,t,r,n,s){let i=QS.get(e);i||QS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Ud(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Nue(e,t,r){let n=oV.get(e);n||(n=new Map,oV.set(e,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new Ud(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Xh(e,t,r){r||(r={}),r.serverName=e.name;let n=await WS(e.url,r),s=Jh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Dt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Dt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Yh(e){try{dV.isMainThread&&Dt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=tc.get(e.database);if(!t){let n;t=new Promise(s=>{Dt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,tc.set(e.database,t)}let r=Iue(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>$h(n,e.database)),e.replicateByDefault)}catch(t){Dt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function DS({name:e,url:t,database:r}){Dt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=QS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function wue(){if(aO!==void 0)return aO;let e=Ds.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Ds.default.get(U.TLS_CERTIFICATE);if(e)return aO=new cV.X509Certificate((0,lV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function Ze(){return JS||(JS=Ds.default.get("replication_hostname")??pi(Ds.default.get("replication_url"))??wue()??aV("operationsapi_network_secureport")??aV("operationsapi_network_port")??"127.0.0.1")}function Oue(){JS=void 0}function aV(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function jS(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function zS(e){return Gh(e)?.[Ze()]}function ja(){let e=Ds.default.get("replication_url");return e||ZS(Ze())}function ZS(e){let t=jS("replication_port");if(t)return`ws://${e}:${t}`;if(t=jS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=jS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=jS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function pi(e){if(e)return new URL(e).hostname}function za(e,t){for(let n of Object.getOwnPropertyNames(He))r(n);return Sh(n=>{r(n)}),Il((n,s)=>{r(n.databaseName)});function r(n){let s=He[n];Dt.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Cue(n)&&t(s,n,!1)}o(r,"forDatabase")}function Cue(e){let t=He[e];for(let r in t)if(t[r].replicate)return!0}function qh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Pue(e){let t={message:""};if(e.replicated){e.replicated=!1,Dt.trace?.("Replicating operation",e.operation,"to nodes",Le.nodes.map(n=>n.name));let r=await Promise.allSettled(Le.nodes.map(n=>Xh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Le.nodes[s]?.name,i})}return t}var Ds,Dt,cV,lV,XS,uV,dV,fV,mV,Tue,Rue,qo,ec,QS,oV,aO,JS,is=ce(()=>{Me();Pa();Ru();oO();Dr();Ds=w(oe()),Dt=w(Q()),cV=require("crypto"),lV=require("fs");Wh();Dl();k();Bw();XS=w(require("node:tls")),uV=w(ge()),dV=require("worker_threads"),fV=w(as()),Tue=1,Rue=[],qo=Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(XS.rootCertificates):new Set;o(yue,"start");o(hV,"monitorNodeCAs");o(Aue,"disableReplication");o(bue,"assignReplicationSource");o(EV,"setReplicator");QS=new Map;o(Iue,"getSubscriptionConnection");oV=new Map;o(Nue,"getRetrievalConnectionByName");o(Xh,"sendOperationToNode");o(Yh,"subscribeToNode");o(DS,"unsubscribeFromNode");o(wue,"getCommonNameFromCert");o(Ze,"getThisNodeName");o(Oue,"clearThisNodeName");Object.defineProperty(Le,"hostname",{get(){return Ze()}});o(aV,"getHostFromListeningPort");o(jS,"getPortFromListeningPort");o(zS,"getThisNodeId");Le.replication={getThisNodeId:zS,exportIdMapping:Gh};o(ja,"getThisNodeUrl");o(ZS,"hostnameToUrl");o(pi,"urlToNodeName");o(za,"forEachReplicatedDatabase");o(Cue,"hasExplicitlyReplicatedTable");o(qh,"lastTimeInAuditStore");o(Pue,"replicateOperation")});var ep=M((yve,RV)=>{"use strict";var xd=Lq(),{validateBySchema:Zh}=ut(),{commonValidators:Bd,schemaRegex:cO}=Hi(),pr=require("joi"),Lue=Q(),Due=require("uuid").v4,rT=Co(),Fd=(k(),v(W)),Mue=require("util"),rc=Jn(),{handleHDBError:$o,hdbErrors:vue,ClientError:Bl}=ge(),{HDB_ERROR_MSGS:eT,HTTP_STATUS_CODES:Vo}=vue,{SchemaEventMsg:nT}=oi(),_V=mr(),{getDatabases:Uue}=(Me(),v(Et)),{transformReq:Hd}=ie(),{replicateOperation:gV}=(is(),v(Go)),{cleanupOrphans:xue}=(Kn(),v(o_)),tT=pr.string().min(1).max(Bd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message}),Bue=pr.string().min(1).max(Bd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message}).required(),Fue=pr.string().min(1).max(Bd.schema_length.maximum).pattern(cO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();RV.exports={createSchema:Hue,createSchemaStructure:SV,createTable:kue,createTableStructure:TV,createAttribute:Kue,dropSchema:Gue,dropTable:que,dropAttribute:$ue,getBackup:Yue,cleanupOrphanBlobs:Wue};async function Hue(e){let t=await SV(e);return rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema)),t}o(Hue,"createSchema");async function SV(e){let t=Zh(e,pr.object({database:tT,schema:tT}));if(t)throw new Bl(t.message);if(Hd(e),!await xd.checkSchemaExists(e.schema))throw $o(new Error,eT.SCHEMA_EXISTS_ERR(e.schema),Vo.BAD_REQUEST,Fd.LOG_LEVELS.ERROR,eT.SCHEMA_EXISTS_ERR(e.schema),!0);return await rc.createSchema(e),`database '${e.schema}' successfully created`}o(SV,"createSchemaStructure");async function kue(e){return Hd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await TV(e)}o(kue,"createTable");async function TV(e){let t=Zh(e,pr.object({database:tT,schema:tT,table:Bue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Fue}));if(t)throw new Bl(t.message);if(!await xd.checkSchemaTableExists(e.schema,e.table))throw $o(new Error,eT.TABLE_EXISTS_ERR(e.schema,e.table),Vo.BAD_REQUEST,Fd.LOG_LEVELS.ERROR,eT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Due(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await rc.createTable(n,e);else throw $o(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Vo.BAD_REQUEST);else await rc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(TV,"createTableStructure");async function Gue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaExists(e.schema);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);let n=await xd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await rc.dropSchema(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema)),await _V.purgeSchemaTableStreams(e.schema,s);let i=await gV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Gue,"dropSchema");async function que(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);await rc.dropTable(e),await _V.purgeTableStream(e.schema,e.table);let n=await gV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(que,"dropTable");async function $ue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $o(new Error,"You cannot drop a hash attribute",Vo.BAD_REQUEST,void 0,void 0,!0);if(Fd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $o(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Vo.BAD_REQUEST,void 0,void 0,!0);try{return await rc.dropAttribute(e),Vue(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Lue.error(`Got an error deleting attribute ${Mue.inspect(e)}.`),n}}o($ue,"dropAttribute");function Vue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Vue,"dropAttributeFromGlobal");async function Kue(e){Hd(e);let t=Uue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $o(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Vo.BAD_REQUEST,void 0,void 0,!0);return await rc.createAttribute(e),rT.signalSchemaChange(new nT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Kue,"createAttribute");function Yue(e){return rc.getBackup(e)}o(Yue,"getBackup");function Wue(e){if(!e.database)throw new Bl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Bl(`Unknown database '${e.database}'`);return xue(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Wue,"cleanupOrphanBlobs")});var AV=M((bve,yV)=>{"use strict";var{OPERATIONS_ENUM:zue}=(k(),v(W)),lO=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=zue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yV.exports=lO});var uO=M((wve,OV)=>{"use strict";var jue=Jn(),Nve=AV(),sT=ie(),iT=(k(),v(W)),Que=oe(),{handleHDBError:bV,hdbErrors:Jue}=ge(),{HDB_ERROR_MSGS:IV,HTTP_STATUS_CODES:NV}=Jue,Xue=Object.values(iT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),wV="To use this operation audit log must be enabled in harperdb-config.yaml";OV.exports=Zue;async function Zue(e){if(sT.isEmpty(e.schema))throw new Error(IV.SCHEMA_REQUIRED_ERR);if(sT.isEmpty(e.table))throw new Error(IV.TABLE_REQUIRED_ERR);if(!Que.get(iT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bV(new Error,wV,NV.BAD_REQUEST,iT.LOG_LEVELS.ERROR,wV,!0);let t=sT.checkSchemaTableExist(e.schema,e.table);if(t)throw bV(new Error,t,NV.NOT_FOUND,iT.LOG_LEVELS.ERROR,t,!0);if(!sT.isEmpty(e.search_type)&&Xue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${e.search_type}'`);return await jue.readAuditLog(e)}o(Zue,"readAuditLog")});var PV=M((Cve,CV)=>{"use strict";var{OPERATIONS_ENUM:ede}=(k(),v(W)),dO=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ede.GET_BACKUP,this.schema=t,this.table=r}};CV.exports=dO});var MV=M((Dve,DV)=>{"use strict";var tde=Jn(),Lve=PV(),fO=ie(),rde=(k(),v(W)),{handleHDBError:nde,hdbErrors:sde}=ge(),{HDB_ERROR_MSGS:LV,HTTP_STATUS_CODES:ide}=sde;DV.exports=ode;async function ode(e){if(fO.isEmpty(e.schema))throw new Error(LV.SCHEMA_REQUIRED_ERR);if(fO.isEmpty(e.table))throw new Error(LV.TABLE_REQUIRED_ERR);let t=fO.checkSchemaTableExist(e.schema,e.table);if(t)throw nde(new Error,t,ide.NOT_FOUND,rde.LOG_LEVELS.ERROR,t,!0);return tde.getBackup(e)}o(ode,"getBackup")});var BV=M((vve,xV)=>{"use strict";var ade=oe(),nc=require("joi"),cde=ut(),vV=require("moment"),lde=require("fs-extra"),mO=require("path"),ude=require("lodash"),tp=(k(),v(W)),{LOG_LEVELS:Fl}=(k(),v(W)),dde="YYYY-MM-DD hh:mm:ss",fde=mO.resolve(__dirname,"../logs");xV.exports=function(e){return cde.validateBySchema(e,mde)};var mde=nc.object({from:nc.custom(UV),until:nc.custom(UV),level:nc.valid(Fl.NOTIFY,Fl.FATAL,Fl.ERROR,Fl.WARN,Fl.INFO,Fl.DEBUG,Fl.TRACE),order:nc.valid("asc","desc"),limit:nc.number().min(1),start:nc.number().min(0),log_name:nc.custom(hde)});function UV(e,t){if(vV(e,vV.ISO_8601).format(dde)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(UV,"validateDatetime");function hde(e,t){if(ude.invert(tp.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=ade.get(tp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?tp.LOG_NAMES.HDB:e,i=s===tp.LOG_NAMES.INSTALL?mO.join(fde,tp.LOG_NAMES.INSTALL):mO.join(n,s);return lde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(hde,"validateReadLogPath")});var pO=M((xve,HV)=>{"use strict";var oT=(k(),v(W)),pde=Q(),Ede=oe(),_de=BV(),hO=require("path"),FV=require("fs-extra"),{once:gde}=require("events"),{handleHDBError:Sde,hdbErrors:Tde}=ge(),{PACKAGE_ROOT:Rde}=bt(),{replicateOperation:yde}=(is(),v(Go)),Ade=hO.join(Rde,"logs"),bde=1e3,Ide=200;HV.exports=Nde;async function Nde(e){let t=_de(e);if(t)throw Sde(t,t.message,Tde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yde(e),n=Ede.get(oT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?oT.LOG_NAMES.HDB:e.log_name,i=s===oT.LOG_NAMES.INSTALL?hO.join(Ade,oT.LOG_NAMES.INSTALL):hO.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?bde:e.limit,h=e.order===void 0?void 0:e.order,p=e.start===void 0?0:e.start,_=p+m,g=0;h==="desc"&&!u&&!f&&(g=Math.max(FV.statSync(i).size-(_+5)*Ide,0));let R=FV.createReadStream(i,{start:g});R.on("error",G=>{pde.error(G)});let T=0,y=[],N="",O;R.on("data",G=>{let Y=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let K=0,$;for(;($=Y.exec(G))&&!R.destroyed;){O&&(O.message=G.slice(K,$.index),F(O));let[le,ue,se]=$,me=se.split("] ["),Pe=me[0],De=me[1];me.splice(0,2),O={timestamp:ue,thread:Pe,level:De,tags:me,message:""},K=$.index+le.length}N=G.slice(K)}),R.on("end",G=>{R.destroyed||O&&(O.message=N.trim(),F(O))}),R.resume();function F(G){let Y,K,$;switch(!0){case(a&&l&&d):Y=new Date(G.timestamp),K=new Date(u),$=new Date(f),G.level===c&&Y>=K&&Y<=$&&T<p?T++:G.level===c&&Y>=K&&Y<=$&&(ro(G,h,y),T++,T===_&&R.destroy());break;case(a&&l):Y=new Date(G.timestamp),K=new Date(u),G.level===c&&Y>=K&&T<p?T++:G.level===c&&Y>=K&&(ro(G,h,y),T++,T===_&&R.destroy());break;case(a&&d):Y=new Date(G.timestamp),$=new Date(f),G.level===c&&Y<=$&&T<p?T++:G.level===c&&Y<=$&&(ro(G,h,y),T++,T===_&&R.destroy());break;case(l&&d):Y=new Date(G.timestamp),K=new Date(u),$=new Date(f),Y>=K&&Y<=$&&T<p?T++:Y>=K&&Y<=$&&(ro(G,h,y),T++,T===_&&R.destroy());break;case a:G.level===c&&T<p?T++:G.level===c&&(ro(G,h,y),T++,T===_&&R.destroy());break;case l:Y=new Date(G.timestamp),K=new Date(u),Y>=K&&T<p?T++:Y>=K&&T>=p&&(ro(G,h,y),T++,T===_&&R.destroy());break;case d:Y=new Date(G.timestamp),$=new Date(f),Y<=$&&T<p?T++:Y<=$&&T>=p&&(ro(G,h,y),T++,T===_&&R.destroy());break;default:T<p?T++:(ro(G,h,y),T++,T===_&&R.destroy())}}o(F,"onLogMessage"),await gde(R,"close");let Z=await r;if(Z.replicated){for(let G of y)G.node=server.hostname;for(let G of Z.replicated){let Y=G.node;if(G.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:Y,message:`Error retrieving logs: ${G.reason}`},h,y);else for(let K of G.results)K.node=Y,ro(K,h,y)}}return y}o(Nde,"readLog");function ro(e,t,r){t==="desc"?wde(e,r):t==="asc"?Ode(e,r):r.push(e)}o(ro,"pushLineToResult");function wde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(wde,"insertDescending");function Ode(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(Ode,"insertAscending")});var aT=M((qve,$V)=>{"use strict";var EO=require("joi"),{string:kd,boolean:kV,date:Cde}=EO.types(),Pde=ut(),{validateSchemaExists:Fve,validateTableExists:Hve,validateSchemaName:kve}=Hi(),Lde=(k(),v(W)),Dde=Ot(),GV=oe();GV.initSync();var Gve=kd.invalid(GV.get(Lde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Dde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),qV={operation:kd.valid("add_node","update_node","set_node_replication"),node_name:kd.optional(),subscriptions:EO.array().items({table:kd.optional(),schema:kd.optional(),database:kd.optional(),subscribe:kV.required(),publish:kV.required().custom(vde),start_time:Cde.iso()})};function Mde(e){return Pde.validateBySchema(e,EO.object(qV))}o(Mde,"addUpdateNodeValidator");function vde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(vde,"checkForFalsy");$V.exports={addUpdateNodeValidator:Mde,validationSchema:qV}});var Gd=M((Vve,VV)=>{"use strict";var _O=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},gO=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};VV.exports={Node:_O,NodeSubscription:gO}});var YV=M((Yve,KV)=>{"use strict";var Ude=(k(),v(W)).OPERATIONS_ENUM,SO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ude.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};KV.exports=SO});var rp=M((zve,WV)=>{"use strict";var TO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},RO=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};WV.exports={RemotePayloadObject:TO,RemotePayloadSubscription:RO}});var jV=M((Qve,zV)=>{"use strict";var yO=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};zV.exports=yO});var JV=M((rUe,QV)=>{"use strict";var xde=jV(),Xve=Vt(),Zve=Tt(),Bde=Q(),{getSchemaPath:eUe,getTransactionAuditStorePath:tUe}=It(),{getDatabases:Fde}=(Me(),v(Et));QV.exports=Hde;async function Hde(e){let t=new xde;try{let r=Fde()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){Bde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Hde,"lmdbGetTableSize")});var ZV=M((sUe,XV)=>{"use strict";var AO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};XV.exports=AO});var $d=M((uUe,n1)=>{"use strict";var kde=require("fs-extra"),Gde=require("path"),mn=require("systeminformation"),sc=Q(),e1=mr(),oUe=Ot(),qd=(k(),v(W)),qde=JV(),$de=Ua(),{getThreadInfo:t1}=nt(),np=oe();np.initSync();var Vde=ZV(),{openEnvironment:aUe}=Tt(),{getSchemaPath:cUe}=It(),{database:lUe,databases:bO}=(Me(),v(Et)),cT;n1.exports={getHDBProcessInfo:OO,getNetworkInfo:PO,getDiskInfo:CO,getMemoryInfo:wO,getCPUInfo:NO,getTimeInfo:IO,getSystemInformation:LO,systemInformation:Kde,getTableSize:DO,getMetrics:MO};function IO(){return mn.time()}o(IO,"getTimeInfo");async function NO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await mn.cpu();d.cpu_speed=await mn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:R,...T}=await mn.currentLoad();return T.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:Z,rawLoadSystem:G,rawLoadUser:Y,...K}=y;T.cpus.push(K)}),d.current_load=T,d}catch(e){return sc.error(`error in getCPUInfo: ${e}`),{}}}o(NO,"getCPUInfo");async function wO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await mn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return sc.error(`error in getMemoryInfo: ${e}`),{}}}o(wO,"getMemoryInfo");async function OO(){let e={core:[],clustering:[]};try{let t=await mn.processes(),r;try{r=Number.parseInt(await kde.readFile(Gde.join(np.get(qd.CONFIG_PARAMS.ROOTPATH),qd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===qd.NODE_ERROR_CODES.ENOENT)sc.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return sc.error(`error in getHDBProcessInfo: ${t}`),e}}o(OO,"getHDBProcessInfo");async function CO(){let e={};try{if(!np.get(qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await mn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await mn.fsStats();return e.read_write=u,e.size=await mn.fsSize(),e}catch(t){return sc.error(`error in getDiskInfo: ${t}`),e}}o(CO,"getDiskInfo");async function PO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return np.get(qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await mn.networkInterfaceDefault(),e.latency=await mn.inetChecksite("google.com"),(await mn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await mn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return sc.error(`error in getNetworkInfo: ${t}`),e}}o(PO,"getNetworkInfo");async function LO(){if(cT!==void 0)return cT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await mn.osInfo();e=c;let l=await mn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,cT=e,cT}catch(t){return sc.error(`error in getSystemInformation: ${t}`),e}}o(LO,"getSystemInformation");async function DO(){let e=[],t=await $de.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await qde(n));return e}o(DO,"getTableSize");async function MO(){let e={};for(let t in bO){let r=e[t]={},n=r.tables={};for(let s in bO[t])try{let i=bO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){sc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(MO,"getMetrics");async function r1(){if(np.get(qd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await e1.getNATSReferences(),t=await e1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(r1,"getNatsStreamInfo");async function Kde(e){let t=new Vde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LO(),t.time=IO(),t.cpu=await NO(),t.memory=await wO(),t.disk=await CO(),t.network=await PO(),t.harperdb_processes=await OO(),t.table_size=await DO(),t.metrics=await MO(),t.threads=await t1(),t.replication=await r1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LO();break;case"time":t.time=IO();break;case"cpu":t.cpu=await NO();break;case"memory":t.memory=await wO();break;case"disk":t.disk=await CO();break;case"network":t.network=await PO();break;case"harperdb_processes":t.harperdb_processes=await OO();break;case"table_size":t.table_size=await DO();break;case"database_metrics":case"metrics":t.metrics=await MO();break;case"threads":t.threads=await t1();break;case"replication":t.replication=await r1();break;default:break}return t}o(Kde,"systemInformation")});var Ko=M((pUe,a1)=>{"use strict";var Yde=Dn(),vO=ie(),Wde=require("util"),Hl=(k(),v(W)),s1=oe();s1.initSync();var zde=Ew(),i1=sn(),{Node:fUe,NodeSubscription:mUe}=Gd(),jde=Ku(),Qde=YV(),{RemotePayloadObject:Jde,RemotePayloadSubscription:Xde}=rp(),{handleHDBError:Zde,hdbErrors:efe}=ge(),{HTTP_STATUS_CODES:tfe,HDB_ERROR_MSGS:rfe}=efe,nfe=ai(),sfe=$d(),{packageJson:ife}=bt(),{getDatabases:ofe}=(Me(),v(Et)),hUe=Wde.promisify(zde.authorize),afe=i1.searchByHash,cfe=i1.searchByValue;a1.exports={isEmpty:lfe,getNodeRecord:ufe,upsertNodeRecord:dfe,buildNodePayloads:ffe,checkClusteringEnabled:mfe,getAllNodeRecords:hfe,getSystemInfo:pfe,reverseSubscription:o1};function lfe(e){return e==null}o(lfe,"isEmpty");async function ufe(e){let t=new jde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return afe(t)}o(ufe,"getNodeRecord");async function dfe(e){let t=new Qde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Yde.upsert(t)}o(dfe,"upsertNodeRecord");function o1(e){if(vO.isEmpty(e.subscribe)||vO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(o1,"reverseSubscription");function ffe(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=vO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=o1(c),h=ofe()[l]?.[u],p=new Xde(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new Jde(r,t,s,n)}o(ffe,"buildNodePayloads");function mfe(){if(!s1.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zde(new Error,rfe.CLUSTERING_NOT_ENABLED,tfe.BAD_REQUEST,void 0,void 0,!0)}o(mfe,"checkClusteringEnabled");async function hfe(){let e=new nfe(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await cfe(e))}o(hfe,"getAllNodeRecords");async function pfe(){let e=await sfe.getSystemInformation();return{hdb_version:ife.version,node_version:e.node_version,platform:e.platform}}o(pfe,"getSystemInfo")});var UO=M((_Ue,p1)=>{"use strict";var lT=mr(),c1=ie(),l1=Ot(),u1=(k(),v(W)),uT=Q(),d1=ep(),Efe=km(),{RemotePayloadObject:_fe}=rp(),{handleHDBError:f1,hdbErrors:gfe}=ge(),{HTTP_STATUS_CODES:m1}=gfe,{NodeSubscription:h1}=Gd();p1.exports=Sfe;async function Sfe(e,t){let r;try{r=await lT.request(`${t}.${l1.REQUEST_SUFFIX}`,new _fe(u1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),uT.trace("Response from remote describe all request:",r)}catch(a){uT.error(`addNode received error from describe all request to remote node: ${a}`);let c=lT.requestErrorHandler(a,"add_node",t);throw f1(new Error,c,m1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===l1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw f1(new Error,a,m1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===u1.SYSTEM_SCHEMA_NAME){await lT.createLocalTableStream(l,c);let p=new h1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=c1.doesSchemaExist(l),d=n[l]!==void 0,f=c?c1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(uT.trace(`addNode creating schema: ${l}`),await d1.createSchema({operation:"create_schema",schema:l})),!f&&m){uT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Efe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await d1.createTable(p)}await lT.createLocalTableStream(l,c);let h=new h1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(Sfe,"reviewSubscriptions")});var Vd={};we(Vd,{addNodeBack:()=>xO,removeNodeBack:()=>BO,setNode:()=>Afe});async function Afe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=pi(t)):t=ZS(r);let n=(0,_1.validateBySchema)(e,yfe);if(n)throw(0,Yo.handleHDBError)(n,n.message,Rfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Yo.ClientError("url or hostname is required for remove_node operation");let h=r,p=Wt(),_=await p.get(h);if(!_)throw new Yo.ClientError(h+" does not exist");try{await Xh({url:_.url},{operation:q.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?Ze():h},void 0)}catch(g){cs.warn(`Error removing node from target node ${h}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(h),`Successfully removed '${h}' from cluster`}if(!t)throw new Yo.ClientError("url required for this operation");let s=ja();if(s==null)throw new Yo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Ms.getReplicationCert)();let h=await(0,Ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Ms.createCsr)(),cs.info("Sending CSR to target node:",t)):h&&(c=h.certificate,cs.info("Sending CA named",h.name,"to target node",t))}let l={operation:q.ADD_NODE_BACK,hostname:(0,oc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(E1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=E1(e);l.subscribe=h.subscribe,l.publish=h.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Xh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,cs.warn("Error adding node:",t,"to cluster:",h),d=h}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(cs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ms.setCertTable)({name:Tfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ms.setCertTable)({name:Ze(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Ho(Ze(),h)}await Ho(u?u.nodeName:f.name??pi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function xO(e){cs.trace("addNodeBack received request:",e);let t=await(0,Ms.signCertificate)(e),r;e.csr?(r=t.signingCA,cs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,cs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ms.getReplicationCertAuth)();if(n.replicates){let i={url:ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,oc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Ho(Ze(),i)}return await Ho(e.hostname,n),t.nodeName=Ze(),t.usingCA=s?.certificate,cs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function BO(e){cs.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function E1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ms,_1,ic,oc,cs,Yo,Tfe,Rfe,yfe,Kd=ce(()=>{Ms=w(as()),_1=w(ut()),ic=w(require("joi")),oc=w(oe());k();Wh();Dl();is();cs=w(Q()),Yo=w(ge()),{pki:Tfe}=require("node-forge"),{HTTP_STATUS_CODES:Rfe}=Yo.hdbErrors,yfe=ic.default.object({hostname:ic.default.string(),verify_tls:ic.default.boolean(),replicates:ic.default.boolean(),subscriptions:ic.default.array(),revoked_certificates:ic.default.array(),shard:ic.default.number()});o(Afe,"setNode");o(xO,"addNodeBack");o(BO,"removeNodeBack");o(E1,"reverseSubscription")});var pT=M((NUe,S1)=>{"use strict";var{handleHDBError:dT,hdbErrors:bfe}=ge(),{HTTP_STATUS_CODES:fT}=bfe,{addUpdateNodeValidator:Ife}=aT(),mT=Q(),hT=(k(),v(W)),g1=Ot(),Nfe=ie(),sp=mr(),ip=Ko(),FO=oe(),wfe=UO(),{Node:Ofe,NodeSubscription:Cfe}=Gd(),{broadcast:Pfe}=nt(),{setNode:Lfe}=(Kd(),v(Vd)),bUe=oe(),IUe=(k(),v(W)),Dfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Mfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",vfe=FO.get(hT.CONFIG_PARAMS.CLUSTERING_NODENAME);S1.exports=Ufe;async function Ufe(e,t=!1){if(mT.trace("addNode called with:",e),FO.get(hT.CONFIG_PARAMS.REPLICATION_URL)||FO.get(hT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Lfe(e);ip.checkClusteringEnabled();let r=Ife(e);if(r)throw dT(r,r.message,fT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await ip.getNodeRecord(n);if(!Nfe.isEmptyOrZeroLength(f))throw dT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,fT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await wfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Dfe,a;let c=ip.buildNodePayloads(s,vfe,hT.OPERATIONS_ENUM.ADD_NODE,await ip.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let h=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Cfe(h.schema,h.table,h.publish,h.subscribe))}mT.trace("addNode sending remote payload:",c);let u;try{u=await sp.request(`${n}.${g1.REQUEST_SUFFIX}`,c)}catch(f){mT.error(`addNode received error from request: ${f}`);for(let h=0,p=s.length;h<p;h++){let _=s[h];_.publish=!1,_.subscribe=!1,await sp.updateRemoteConsumer(_,n)}let m=sp.requestErrorHandler(f,"add_node",n);throw dT(new Error,m,fT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===g1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw dT(new Error,f,fT.INTERNAL_SERVER_ERROR,"error",f)}mT.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await sp.updateRemoteConsumer(h,n),h.subscribe===!0&&await sp.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new Ofe(n,l,u.system_info);return await ip.upsertNodeRecord(d),Pfe({type:"nats_update"}),i.length>0?a.message=Mfe:a.message=`Successfully added '${n}' to manifest`,a}o(Ufe,"addNode")});var qO=M((CUe,R1)=>{"use strict";var{handleHDBError:HO,hdbErrors:xfe}=ge(),{HTTP_STATUS_CODES:kO}=xfe,{addUpdateNodeValidator:Bfe}=aT(),op=Q(),ET=(k(),v(W)),T1=Ot(),OUe=ie(),ap=mr(),cp=Ko(),GO=oe(),{cloneDeep:Ffe}=require("lodash"),Hfe=UO(),{Node:kfe,NodeSubscription:Gfe}=Gd(),{broadcast:qfe}=nt(),{setNode:$fe}=(Kd(),v(Vd)),Vfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Kfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Yfe=GO.get(ET.CONFIG_PARAMS.CLUSTERING_NODENAME);R1.exports=Wfe;async function Wfe(e){if(op.trace("updateNode called with:",e),GO.get(ET.CONFIG_PARAMS.REPLICATION_URL)??GO.get(ET.CONFIG_PARAMS.REPLICATION_HOSTNAME))return $fe(e);cp.checkClusteringEnabled();let t=Bfe(e);if(t)throw HO(t,t.message,kO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await cp.getNodeRecord(r);s.length>0&&(n=Ffe(s));let{added:i,skipped:a}=await Hfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Vfe,c;let l=cp.buildNodePayloads(i,Yfe,ET.OPERATIONS_ENUM.UPDATE_NODE,await cp.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];op.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}op.trace("updateNode sending remote payload:",l);let u;try{u=await ap.request(`${r}.${T1.REQUEST_SUFFIX}`,l)}catch(d){op.error(`updateNode received error from request: ${d}`);let f=ap.requestErrorHandler(d,"update_node",r);throw HO(new Error,f,kO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===T1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw HO(new Error,d,kO.INTERNAL_SERVER_ERROR,"error",d)}op.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await ap.updateRemoteConsumer(m,r),m.subscribe===!0?await ap.updateConsumerIterator(m.schema,m.table,r,"start"):await ap.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new kfe(r,[],u.system_info)]),await zfe(n[0],i,u.system_info),a.length>0?c.message=Kfe:c.message=`Successfully updated '${r}'`,c}o(Wfe,"updateNode");async function zfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Gfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await cp.upsertNodeRecord(n),qfe({type:"nats_update"})}o(zfe,"updateNodeTable")});var N1=M((LUe,I1)=>{"use strict";var b1=require("joi"),{string:y1}=b1.types(),jfe=ut(),A1=(k(),v(W)),Qfe=oe(),Jfe=Ot();I1.exports=Xfe;function Xfe(e){let t=y1.invalid(Qfe.get(A1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Jfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=b1.object({operation:y1.valid(A1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return jfe.validateBySchema(e,r)}o(Xfe,"removeNodeValidator")});var _T=M((MUe,L1)=>{"use strict";var{handleHDBError:w1,hdbErrors:Zfe}=ge(),{HTTP_STATUS_CODES:O1}=Zfe,eme=N1(),lp=Q(),C1=Ko(),tme=ie(),Yd=(k(),v(W)),P1=Ot(),$O=mr(),VO=oe(),{RemotePayloadObject:rme}=rp(),{NodeSubscription:nme}=Gd(),sme=Hm(),ime=El(),{broadcast:ome}=nt(),{setNode:ame}=(Kd(),v(Vd)),cme=VO.get(Yd.CONFIG_PARAMS.CLUSTERING_NODENAME);L1.exports=lme;async function lme(e){if(lp.trace("removeNode called with:",e),VO.get(Yd.CONFIG_PARAMS.REPLICATION_URL)??VO.get(Yd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ame(e);C1.checkClusteringEnabled();let t=eme(e);if(t)throw w1(t,t.message,O1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await C1.getNodeRecord(r);if(tme.isEmptyOrZeroLength(n))throw w1(new Error,`Node '${r}' was not found.`,O1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new rme(Yd.OPERATIONS_ENUM.REMOVE_NODE,cme,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await $O.updateConsumerIterator(d.schema,d.table,r,"stop");try{await $O.updateRemoteConsumer(new nme(d.schema,d.table,!1,!1),r)}catch(f){lp.error(f)}}try{i=await $O.request(`${r}.${P1.REQUEST_SUFFIX}`,s),lp.trace("Remove node reply from remote node:",r,i)}catch(l){lp.error("removeNode received error from request:",l),a=!0}let c=new sme(Yd.SYSTEM_SCHEMA_NAME,Yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ime.deleteRecord(c),ome({type:"nats_update"}),i?.status===P1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(lp.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(lme,"removeNode")});var v1=M((UUe,M1)=>{"use strict";var D1=require("joi"),{string:ume,array:dme}=D1.types(),fme=ut(),mme=aT();M1.exports=hme;function hme(e){let t=D1.object({operation:ume.valid("configure_cluster").required(),connections:dme.items(mme.validationSchema).required()});return fme.validateBySchema(e,t)}o(hme,"configureClusterValidator")});var KO=M((BUe,H1)=>{"use strict";var U1=(k(),v(W)),gT=Q(),pme=ie(),Eme=oe(),_me=_T(),gme=pT(),Sme=Ko(),Tme=v1(),{handleHDBError:x1,hdbErrors:Rme}=ge(),{HTTP_STATUS_CODES:B1}=Rme,yme="Configure cluster complete.",Ame="Failed to configure the cluster. Check the logs for more details.",bme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";H1.exports=Ime;async function Ime(e){gT.trace("configure cluster called with:",e);let t=Tme(e);if(t)throw x1(t,t.message,B1.BAD_REQUEST,void 0,void 0,!0);let r=await Sme.getAllNodeRecords(),n=[];if(Eme.get(U1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await F1(_me,{operation:U1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}gT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await F1(gme,f,f.node_name);s.push(m)}gT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(gT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(pme.isEmptyOrZeroLength(a))return{message:yme,connections:c};if(l)return{message:bme,failed_nodes:a,connections:c};throw x1(new Error,Ame,B1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(Ime,"configureCluster");async function F1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(F1,"functionWrapper")});var $1=M((HUe,q1)=>{"use strict";var up=require("joi"),Nme=ut(),{validateSchemaExists:k1,validateTableExists:wme,validateSchemaName:G1}=Hi(),Ome=up.object({operation:up.string().valid("purge_stream"),schema:up.string().custom(k1).custom(G1).optional(),database:up.string().custom(k1).custom(G1).optional(),table:up.string().custom(wme).required()});function Cme(e){return Nme.validateBySchema(e,Ome)}o(Cme,"purgeStreamValidator");q1.exports=Cme});var YO=M((GUe,V1)=>{"use strict";var{handleHDBError:Pme,hdbErrors:Lme}=ge(),{HTTP_STATUS_CODES:Dme}=Lme,Mme=$1(),vme=mr(),Ume=Ko();V1.exports=xme;async function xme(e){e.schema=e.schema??e.database;let t=Mme(e);if(t)throw Pme(t,t.message,Dme.BAD_REQUEST,void 0,void 0,!0);Ume.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await vme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(xme,"purgeStream")});var jO=M(($Ue,J1)=>{"use strict";var zO=Ko(),Bme=mr(),TT=oe(),Wd=(k(),v(W)),kl=Ot(),Fme=ie(),WO=Q(),{RemotePayloadObject:Hme}=rp(),{ErrorCode:K1}=require("nats"),{parentPort:Y1}=require("worker_threads"),{onMessageByType:kme}=nt(),{getThisNodeName:Gme}=(is(),v(Go)),{requestClusterStatus:qme}=(Wh(),v(E$)),{getReplicationSharedStatus:$me,getHDBNodeTable:Vme}=(Dl(),v(Fw)),{CONFIRMATION_STATUS_POSITION:Kme,RECEIVED_VERSION_POSITION:Yme,RECEIVED_TIME_POSITION:Wme,SENDING_TIME_POSITION:zme,RECEIVING_STATUS_POSITION:jme,RECEIVING_STATUS_RECEIVING:Qme}=(oO(),v(iV)),W1=TT.get(Wd.CONFIG_PARAMS.CLUSTERING_ENABLED),z1=TT.get(Wd.CONFIG_PARAMS.CLUSTERING_NODENAME);J1.exports={clusterStatus:Jme,buildNodeStatus:Q1};var j1;kme("cluster-status",async e=>{j1(e)});async function Jme(){if(TT.get(Wd.CONFIG_PARAMS.REPLICATION_URL)||TT.get(Wd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(Y1){Y1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{j1=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=$me(u,l,a);c.lastCommitConfirmed=ST(d[Kme]),c.lastReceivedRemoteTime=ST(d[Yme]),c.lastReceivedLocalTime=ST(d[Wme]),c.sendingMessage=ST(d[zme]),c.lastReceivedStatus=d[jme]===Qme?"Receiving":"Waiting"}}}else n=qme();n.node_name=Gme();let s=Vme().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:z1,is_enabled:W1,connections:[]};if(!W1)return e;let t=await zO.getAllNodeRecords();if(Fme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(Q1(t[n],e.connections));return await Promise.allSettled(r),e}o(Jme,"clusterStatus");function ST(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(ST,"asDate");async function Q1(e,t){let r=e.name,n=new Hme(Wd.OPERATIONS_ENUM.CLUSTER_STATUS,z1,void 0,await zO.getSystemInfo()),s,i,a=kl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Bme.request(kl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===kl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=kl.CLUSTER_STATUS_STATUSES.CLOSED,WO.error(`Error getting node status from ${r} `,s))}catch(l){WO.warn(`Error getting node status from ${r}`,l),l.code===K1.NoResponders?a=kl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===K1.Timeout?a=kl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=kl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Xme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Wd.PRE_4_0_0_VERSION&&await zO.upsertNodeRecord(l)}catch(l){WO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(Q1,"buildNodeStatus");function Xme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Xme,"NodeStatusObject")});var JO=M((KUe,X1)=>{"use strict";var{handleHDBError:Zme,hdbErrors:ehe}=ge(),{HTTP_STATUS_CODES:the}=ehe,rhe=mr(),nhe=Ko(),QO=ie(),RT=require("joi"),she=ut(),ihe=2e3,ohe=RT.object({timeout:RT.number().min(1),connected_nodes:RT.boolean(),routes:RT.boolean()});X1.exports=ahe;async function ahe(e){nhe.checkClusteringEnabled();let t=she.validateBySchema(e,ohe);if(t)throw Zme(t,t.message,the.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||QO.autoCastBoolean(n),a=s===void 0||QO.autoCastBoolean(s),c={nodes:[]},l=await rhe.getServerList(r??ihe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,h=l[d].data;if(m.name.endsWith("-hub")){let p={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(p.connected_nodes=[],u[m.name]&&u[m.name].forEach(_=>{p.connected_nodes.includes(_.name.slice(0,-4))||p.connected_nodes.push(_.name.slice(0,-4))})),a&&(p.routes=h.cluster?.urls?h.cluster?.urls.map(_=>({host:_.split(":")[0],port:QO.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(ahe,"clusterNetwork")});var rK=M((WUe,tK)=>{"use strict";var XO=require("joi"),Z1=ut(),{routeConstraints:eK}=VI();tK.exports={setRoutesValidator:che,deleteRoutesValidator:lhe};function che(e){let t=XO.object({server:XO.valid("hub","leaf"),routes:eK.required()});return Z1.validateBySchema(e,t)}o(che,"setRoutesValidator");function lhe(e){let t=XO.object({routes:eK.required()});return Z1.validateBySchema(e,t)}o(lhe,"deleteRoutesValidator")});var yT=M((jUe,lK)=>{"use strict";var Wo=wt(),ZO=ie(),vs=(k(),v(W)),zd=oe(),nK=rK(),{handleHDBError:sK,hdbErrors:uhe}=ge(),{HTTP_STATUS_CODES:iK}=uhe,oK="cluster routes successfully set",aK="cluster routes successfully deleted";lK.exports={setRoutes:fhe,getRoutes:mhe,deleteRoutes:hhe};function dhe(e){let t=Wo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=ZO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:oK,set:i,skipped:s}}o(dhe,"setRoutesNats");function fhe(e){let t=nK.setRoutesValidator(e);if(t)throw sK(t,t.message,iK.BAD_REQUEST,void 0,void 0,!0);if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return dhe(e);let r=[],n=[],s=zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{cK(s,i)?n.push(i):(s.push(i),r.push(i))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:oK,set:r,skipped:n}}o(fhe,"setRoutes");function cK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(cK,"existsInArray");function mhe(){if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Wo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(mhe,"getRoutes");function hhe(e){let t=nK.deleteRoutesValidator(e);if(t)throw sK(t,t.message,iK.BAD_REQUEST,void 0,void 0,!0);if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return phe(e);let r=[],n=[],s=zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{cK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:aK,deleted:r,skipped:n}}o(hhe,"deleteRoutes");function phe(e){let t=Wo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,h=r.length;m<h;m++){let p=r[m];if(d.host===p.host&&d.port===p.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let h=0,p=n.length;h<p;h++){let _=n[h];if(d.host===_.host&&d.port===_.port){n.splice(h,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=ZO.isEmptyOrZeroLength(r)?null:r,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ZO.isEmptyOrZeroLength(n)?null:n,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:aK,deleted:s,skipped:i}}o(phe,"deleteRoutesNats")});var dK=M((JUe,uK)=>{"use strict";var dp=require("alasql"),Gl=require("recursive-iterator"),gi=Q(),Ehe=ie(),fp=(k(),v(W)),eC=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,ghe(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>fp.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!fp.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][fp.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=_he(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!fp.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new dp.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function _he(e){return e.filter(t=>t[fp.PERMS_CRUD_ENUM.READ])}o(_he,"filterReadRestrictedAttrs");function ghe(e,t,r,n,s){She(e,t,r,n,s)}o(ghe,"interpretAST");function mp(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(mp,"addSchemaTableToMap");function She(e,t,r,n,s){if(!e){gi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof dp.yy.Insert?Ahe(e,t,r):e instanceof dp.yy.Select?The(e,t,r,n,s):e instanceof dp.yy.Update?Rhe(e,t,r):e instanceof dp.yy.Delete?yhe(e,t,r):gi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(She,"getRecordAttributesAST");function The(e,t,r,n,s){if(!e){gi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Ehe.isEmptyOrZeroLength(i)){gi.error("No schema specified");return}e.from.forEach(c=>{mp(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),mp(c.table,t,r,n,s)});let a=new Gl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{gi.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Gl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Gl(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Gl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{gi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(The,"getSelectAttributes");function Rhe(e,t,r){if(!e){gi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.table.tableid,s,i.columnid,t,r)}o(Rhe,"getUpdateAttributes");function yhe(e,t,r){if(!e){gi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gl(e.where),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.table.tableid,s,i.columnid,t,r)}o(yhe,"getDeleteAttributes");function Ahe(e,t,r){if(!e){gi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.into.databaseid;mp(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&tC(e.into.tableid,s,i.columnid,t,r)}o(Ahe,"getInsertAttributes");function tC(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(tC,"pushAttribute");uK.exports=eC});var mK=M((ZUe,fK)=>{"use strict";var AT=(k(),v(W)),bT=class{static{o(this,"BaseLicense")}constructor(t=0,r=AT.RAM_ALLOCATION_ENUM.DEFAULT,n=AT.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},rC=class extends bT{static{o(this,"ExtendedLicense")}constructor(t=0,r=AT.RAM_ALLOCATION_ENUM.DEFAULT,n=AT.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};fK.exports={BaseLicense:bT,ExtendedLicense:rC}});var Jd=M((t0e,SK)=>{"use strict";var Qd=require("fs-extra"),IT=(mg(),v(fg)),pK=require("crypto"),bhe=require("moment"),Ihe=require("uuid").v4,hn=Q(),sC=require("path"),Nhe=ie(),ql=(k(),v(W)),{totalmem:hK}=require("os"),whe=mK().ExtendedLicense,jd="invalid license key format",Ohe="061183",Che="mofi25",Phe="aes-256-cbc",Lhe=16,Dhe=32,EK=oe(),{resolvePath:_K}=wt();EK.initSync();var nC;SK.exports={validateLicense:gK,generateFingerPrint:vhe,licenseSearch:aC,getLicense:Bhe,checkMemoryLimit:Fhe};function iC(){return sC.join(EK.getHdbBasePath(),ql.LICENSE_KEY_DIR_NAME,ql.LICENSE_FILE_NAME)}o(iC,"getLicenseDirPath");function Mhe(){let e=iC();return _K(sC.join(e,ql.LICENSE_FILE_NAME))}o(Mhe,"getLicenseFilePath");function oC(){let e=iC();return _K(sC.join(e,ql.REG_KEY_FILE_NAME))}o(oC,"getFingerPrintFilePath");async function vhe(){let e=oC();try{return await Qd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Uhe();throw hn.error(`Error writing fingerprint file to ${e}`),hn.error(t),new Error("There was an error generating the fingerprint")}}o(vhe,"generateFingerPrint");async function Uhe(){let e=Ihe(),t=IT.hash(e,IT.HASH_FUNCTION.MD5),r=oC();try{await Qd.mkdirp(iC()),await Qd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw hn.error(`Error writing fingerprint file to ${r}`),hn.error(n),new Error("There was an error generating the fingerprint")}return t}o(Uhe,"writeFingerprint");function gK(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ql.RAM_ALLOCATION_ENUM.DEFAULT,version:ql.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return hn.error("empty license key passed to validate."),r;let n=oC(),s=!1;try{s=Qd.statSync(n)}catch(i){hn.error(i)}if(s){let i;try{i=Qd.readFileSync(n,"utf8")}catch{hn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Che),c=a[1];c=Buffer.concat([Buffer.from(c)],Lhe);let l=Buffer.concat([Buffer.from(i)],Dhe),u=pK.createDecipheriv(Phe,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let h=xhe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(jd),hn.error(jd),new Error(jd)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(jd),hn.error(jd),new Error(jd)}else r.exp_date=d;r.exp_date<bhe().valueOf()&&(r.valid_date=!1),IT.validate(a[1],`${Ohe}${i}${t}`,IT.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||hn.error("Invalid licence"),r}o(gK,"validateLicense");function xhe(e,t){try{let r=pK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{hn.warn("Check old license failed")}}o(xhe,"checkOldLicense");function aC(){let e=new whe,t=[];try{t=Qd.readFileSync(Mhe(),"utf-8").split(`\r
|
|
24
|
-
`)}catch(r){r.code==="ENOENT"?hn.debug("no license file found"):hn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Nhe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=gK(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){hn.error("There was an error parsing the license string."),hn.error(s),e.ram_allocation=ql.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return nC=e,e}o(aC,"licenseSearch");async function Bhe(){return nC||await aC(),nC}o(Bhe,"getLicense");function Fhe(){let e=aC().ram_allocation,t=process.constrainedMemory?.()||hK();if(t=Math.round(Math.min(t,hK())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(Fhe,"checkMemoryLimit")});var uC=M((n0e,AK)=>{var NT=Jd(),TK=require("chalk"),ls=Q(),RK=require("prompt"),{promisify:Hhe}=require("util"),cC=(k(),v(W)),khe=require("fs-extra"),Ghe=require("path"),qhe=ie(),{packageJson:$he}=bt(),yK=oe();yK.initSync();var Vhe=require("moment"),Khe=Hhe(RK.get),Yhe=Ghe.join(yK.getHdbBasePath(),cC.LICENSE_KEY_DIR_NAME,cC.LICENSE_FILE_NAME,cC.LICENSE_FILE_NAME);AK.exports={getFingerprint:zhe,setLicense:Whe,parseLicense:lC,register:jhe,getRegistrationInfo:Jhe};async function Whe(e){if(e&&e.key&&e.company){try{ls.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await lC(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ls.error(r),ls.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Whe,"setLicense");async function zhe(){let e={};try{e=await NT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ls.error(r),ls.error(t),new Error(r)}return e}o(zhe,"getFingerprint");async function lC(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ls.info("Validating license input...");let r=NT.validateLicense(e,t);if(ls.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ls.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ls.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ls.info("writing license to disk"),await khe.writeFile(Yhe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ls.error("Failed to write License"),n}return"Registration successful."}o(lC,"parseLicense");async function jhe(){let e=await Qhe();return lC(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(jhe,"register");async function Qhe(){let e=await NT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{RK.start()}catch(n){ls.error(n)}let r;try{r=await Khe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(Qhe,"promptForRegistration");async function Jhe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await NT.getLicense()}catch(r){throw ls.error(`There was an error when searching licenses due to: ${r.message}`),r}if(qhe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=$he.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Vhe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Jhe,"getRegistrationInfo")});var IK=M((i0e,bK)=>{"use strict";var Xhe=Ot(),dC=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,h,p){this.port=t,a===null&&(a=void 0),this.server_name=r+Xhe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:h},HDB:{users:p}},this.system_account="SYS"}};bK.exports=dC});var OK=M((a0e,wK)=>{"use strict";var NK=Ot(),fC=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+NK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+NK.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};wK.exports=fC});var PK=M((l0e,CK)=>{"use strict";var mC=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};CK.exports=mC});var DK=M((d0e,LK)=>{"use strict";var Zhe=Ot(),hC=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Zhe.SERVER_SUFFIX.ADMIN,this.password=r}};LK.exports=hC});var PT=M((m0e,UK)=>{"use strict";var $l=require("path"),Vl=require("fs-extra"),epe=IK(),tpe=OK(),rpe=PK(),npe=DK(),pC=ts(),Zd=ie(),Bn=wt(),OT=(k(),v(W)),hp=Ot(),{CONFIG_PARAMS:nr}=OT,ef=Q(),pp=oe(),MK=$i(),EC=mr(),spe=as(),Xd="clustering",ipe=1e4,vK=50;UK.exports={generateNatsConfig:ape,removeNatsConfig:cpe,getHubConfigPath:ope};function ope(){let e=pp.get(nr.ROOTPATH);return $l.join(e,Xd,hp.NATS_CONFIG_FILES.HUB_SERVER)}o(ope,"getHubConfigPath");async function ape(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=pp.get(nr.ROOTPATH);Vl.ensureDirSync($l.join(r,"clustering","leaf")),pp.initSync();let n=Bn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Bn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Bn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Vl.exists(i)&&!await Vl.exists(!n)&&await spe.createNatsCerts();let a=$l.join(r,Xd,hp.PID_FILES.HUB),c=$l.join(r,Xd,hp.PID_FILES.LEAF),l=Bn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=$l.join(r,Xd,hp.NATS_CONFIG_FILES.HUB_SERVER),d=$l.join(r,Xd,hp.NATS_CONFIG_FILES.LEAF_SERVER),f=Bn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Bn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),h=Bn.getConfigFromFile(nr.CLUSTERING_NODENAME),p=Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await EC.checkNATSServerInstalled()||CT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await pC.listUsers(),g=Bn.getConfigFromFile(nr.CLUSTERING_USER),R=await pC.getClusterUser();(Zd.isEmpty(R)||R.active!==!0)&&CT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await wT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await wT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await wT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await wT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],y=[];for(let[K,$]of _.entries())$.role?.role===OT.ROLE_TYPES_ENUM.CLUSTER_USER&&$.active&&(T.push(new npe($.username,MK.decrypt($.hash))),y.push(new rpe($.username,MK.decrypt($.hash))));let N=[],{hub_routes:O}=Bn.getClusteringRoutes();if(!Zd.isEmptyOrZeroLength(O))for(let K of O)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${K.host}:${K.port}`);let F=new epe(Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,y);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Zd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vl.writeJson(u,F),ef.trace(`Hub server config written to ${u}`));let Z=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,Y=new tpe(Bn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[Z],[G],T,y,i,s,n,f);n==null&&delete Y.tls.ca_file,(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vl.writeJson(d,Y),ef.trace(`Leaf server config written to ${d}`))}o(ape,"generateNatsConfig");async function wT(e){let t=pp.get(e);return Zd.isEmpty(t)&&CT(`port undefined for '${e}'`),await Zd.isPortTaken(t)&&CT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(wT,"isPortAvailable");function CT(e){let t=`Error generating clustering config: ${e}`;ef.error(t),console.error(t),process.exit(1)}o(CT,"generateNatsConfigError");async function cpe(e){let{port:t,config_file:r}=EC.getServerConfig(e),{username:n,decrypt_hash:s}=await pC.getClusterUser(),i=0,a=2e3;for(;i<vK;){try{let d=await EC.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){ef.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=vK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&ef.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Zd.asyncSetTimeout(u)}let c="0".repeat(ipe),l=$l.join(pp.get(nr.ROOTPATH),Xd,r);await Vl.writeFile(l,c),await Vl.remove(l),ef.notify(e,"started.")}o(cpe,"removeNatsConfig")});var GK=M((p0e,kK)=>{"use strict";var us=oe(),lpe=Jd(),Ve=(k(),v(W)),Ep=Ot(),zo=require("path"),{PACKAGE_ROOT:DT}=bt(),xK=oe(),LT=ie(),tf="/dev/null",upe=zo.join(DT,"launchServiceScripts"),BK=zo.join(DT,"utility/scripts"),dpe=zo.join(BK,Ve.HDB_RESTART_SCRIPT),FK=zo.resolve(DT,"dependencies",`${process.platform}-${process.arch}`,Ep.NATS_BINARY_NAME);function HK(){let t=lpe.licenseSearch().ram_allocation||Ve.RAM_ALLOCATION_ENUM.DEFAULT,r=Ve.MEM_SETTING_KEY+t,n={[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return LT.noBootFile()&&(n[Ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{name:Ve.PROCESS_DESCRIPTORS.HDB,script:Ve.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:DT}}o(HK,"generateMainServerConfig");var fpe=9930;function mpe(){us.initSync(!0);let e=us.get(Ve.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.HUB_SERVER),r=zo.join(us.get(Ve.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ve.LOG_NAMES.HDB),n=xK.get(Ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==fpe?"-"+n:""),script:FK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tf,i.error_file=tf),i}o(mpe,"generateNatsHubServerConfig");var hpe=9940;function ppe(){us.initSync(!0);let e=us.get(Ve.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.LEAF_SERVER),r=zo.join(us.get(Ve.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ve.LOG_NAMES.HDB),n=xK.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==hpe?"-"+n:""),script:FK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tf,i.error_file=tf),i}o(ppe,"generateNatsLeafServerConfig");function Epe(){us.initSync();let e=zo.join(us.get(Ve.CONFIG_PARAMS.LOGGING_ROOT),Ve.LOG_NAMES.HDB),t={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:upe,autorestart:!1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=tf,t.error_file=tf),t}o(Epe,"generateClusteringUpgradeV4ServiceConfig");function _pe(){let e={[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.RESTART_HDB};return LT.noBootFile()&&(e[Ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=LT.getEnvCliRootPath()),{...{name:Ve.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BK},script:dpe}}o(_pe,"generateRestart");function gpe(){return{apps:[HK()]}}o(gpe,"generateAllServiceConfigs");kK.exports={generateAllServiceConfigs:gpe,generateMainServerConfig:HK,generateRestart:_pe,generateNatsHubServerConfig:mpe,generateNatsLeafServerConfig:ppe,generateClusteringUpgradeV4ServiceConfig:Epe}});var gp=M((g0e,tY)=>{"use strict";var ct=(k(),v(W)),Spe=ie(),Qo=PT(),MT=mr(),jo=Ot(),ac=GK(),vT=oe(),Kl=Q(),Tpe=Ko(),{startWorker:qK,onMessageFromWorkers:Rpe}=nt(),ype=$d(),_0e=require("util"),Ape=require("child_process"),bpe=require("fs"),{execFile:Ipe}=Ape,Je;tY.exports={enterPM2Mode:Npe,start:cc,stop:_C,reload:VK,restart:KK,list:gC,describe:zK,connect:Jo,kill:Lpe,startAllServices:Dpe,startService:SC,getUniqueServicesList:jK,restartAllServices:Mpe,isServiceRegistered:QK,reloadStopStart:JK,restartHdb:WK,deleteProcess:Cpe,startClusteringProcesses:ZK,startClusteringThreads:eY,isHdbRestartRunning:Ppe,isClusteringRunning:Upe,stopClustering:vpe,reloadClustering:xpe,expectedRestartOfChildren:YK};var _p=!1;Rpe(e=>{e.type==="restart"&&vT.initSync(!0)});function Npe(){_p=!0}o(Npe,"enterPM2Mode");function Jo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(Jo,"connect");var pn,wpe=10,$K;function cc(e,t=!1){if(_p)return Ope(e);let r=Ipe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=pn.indexOf(r);a>-1&&pn.splice(a,1),!$K&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<wpe&&(bpe.existsSync(Qo.getHubConfigPath())?cc(e):(await Qo.generateNatsConfig(!0),cc(e),await new Promise(c=>setTimeout(c,3e3)),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=vT.get(ct.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Kl.OUTPUTS.STDERR:Kl.OUTPUTS.STDOUT;Kl.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=jo.LOG_LEVELS[m]}if(jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Kl.OUTPUTS.STDERR:Kl.OUTPUTS.STDOUT;Kl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!pn&&(pn=[],!t)){let i=o(()=>{$K=!0,pn&&(pn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}pn.push(r)}o(cc,"start");function Ope(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Ope,"startWithPM2");function _C(e){if(!_p){for(let t of pn||[])t.name===e&&(pn.splice(pn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,a)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(a)})})})}o(_C,"stop");function VK(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(VK,"reload");function KK(e){if(!_p){YK();for(let t of pn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(KK,"restart");function YK(){for(let e of pn||[])e.config&&(e.config.restarts=0)}o(YK,"expectedRestartOfChildren");function Cpe(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Cpe,"deleteProcess");async function WK(){await cc(ac.generateRestart())}o(WK,"restartHdb");async function Ppe(){let e=await gC();for(let t in e)if(e[t].name===ct.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Ppe,"isHdbRestartRunning");function gC(){return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(gC,"list");function zK(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(zK,"describe");function Lpe(){if(!_p){for(let e of pn||[])e.kill();pn=[];return}return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(Lpe,"kill");async function Dpe(){try{await ZK(),await eY(),await cc(ac.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(Dpe,"startAllServices");async function SC(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ct.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ac.generateMainServerConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ac.generateNatsIngestServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ac.generateNatsReplyServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ac.generateNatsHubServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ac.generateNatsLeafServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ac.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await cc(r)}catch(r){throw Je?.disconnect(),r}}o(SC,"startService");async function jK(){try{let e=await gC(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Je?.disconnect(),e}}o(jK,"getUniqueServicesList");async function Mpe(e=[]){try{let t=!1,r=await jK();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===ct.PROCESS_DESCRIPTORS.HDB?t=!0:await KK(a))}t&&await JK(ct.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(Mpe,"restartAllServices");async function QK(e){if(pn?.find(r=>r.name===e))return!0;let t=await ype.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(QK,"isServiceRegistered");async function JK(e){let t=vT.get(ct.CONFIG_PARAMS.THREADS_COUNT)??vT.get(ct.CONFIG_PARAMS.THREADS),r=await zK(e),n=Spe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await _C(e),await SC(e)):e===ct.PROCESS_DESCRIPTORS.HDB?await WK():await VK(e)}o(JK,"reloadStopStart");var XK;async function ZK(e=!1){for(let t in ct.CLUSTERING_PROCESSES){let r=ct.CLUSTERING_PROCESSES[t];await SC(r,e)}}o(ZK,"startClusteringProcesses");async function eY(){XK=qK(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await MT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await MT.updateLocalStreams();let e=await Tpe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ct.PRE_4_0_0_VERSION){Kl.info("Starting clustering upgrade 4.0.0 process"),qK(ct.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(eY,"startClusteringThreads");async function vpe(){for(let e in ct.CLUSTERING_PROCESSES)if(e!==ct.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ct.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await XK.terminate();else{let t=ct.CLUSTERING_PROCESSES[e];await _C(t)}}o(vpe,"stopClustering");async function Upe(){for(let e in ct.CLUSTERING_PROCESSES){let t=ct.CLUSTERING_PROCESSES[e];if(await QK(t)===!1)return!1}return!0}o(Upe,"isClusteringRunning");async function xpe(){await Qo.generateNatsConfig(!0),await MT.reloadNATSHub(),await MT.reloadNATSLeaf(),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Qo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(xpe,"reloadClustering")});var yC={};we(yC,{compactOnStart:()=>Bpe,copyDb:()=>aY});async function Bpe(){lc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,TC.get)(U.ROOTPATH),t=new Map,r=st();(0,RC.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,UT.join)(e,"backup",n+".mdb"),a=(0,UT.join)(e,Uc,n+"-copy.mdb"),c=0;try{c=await rY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){lc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await aY(n,a),console.log("Backing up",n,"to",i);try{await(0,Yl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,Yl.move)(a,s,{overwrite:!0}),await(0,Yl.remove)((0,UT.join)(e,Uc,`${n}-copy.mdb-lock`))}try{ld()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{ld()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){lc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,RC.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Yl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw ld(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=await rY(n);if(console.log("Database",n,"after compact has a total record count of",a),i!==a){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
22
|
+
`,"")}o(t$,"runCommand");async function Ile(){try{await tle.access(Lw)}catch{return!1}let e=await t$(`${Lw} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return rle.eq(t,Ale)}o(Ile,"checkNATSServerInstalled");async function xw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await Zq.getClusterUser();if(Ll(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}hi.trace("create nats connection called");let i=await hle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:kr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),hi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&hi.error("Error with Nats client connection, connection closed",a),i===mn&&r$()}),i}o(xw,"createConnection");function r$(){mn=void 0,Ol=void 0,Cl=void 0,Pl=void 0}o(r$,"clearClientCache");async function Nle(){mn&&(await mn.drain(),mn=void 0,Ol=void 0,Cl=void 0,Pl=void 0)}o(Nle,"closeConnection");var mn,Pl;async function Hh(){return Pl||(Pl=xw(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mn=await Pl),mn||Pl}o(Hh,"getConnection");async function kh(){if(Ol)return Ol;Ll(mn)&&await Hh();let{domain:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ll(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await mn.jetstreamManager({domain:e,timeout:6e4}),Ol}o(kh,"getJetStreamManager");async function n$(){if(Cl)return Cl;Ll(mn)&&await Hh();let{domain:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ll(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Cl=mn.jetstream({domain:e,timeout:6e4}),Cl}o(n$,"getJetStream");async function Zi(){let e=mn||await Hh(),t=Ol||await kh(),r=Cl||await n$();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function wle(e){let t=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await Zq.getClusterUser(),s=await xw(t,r,n),i=Uw(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=e$.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await IS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(wle,"getServerList");async function Bw(e,t){let{jsm:r}=await Zi(),n=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:ple.File,retention:Ele.Limits,subjects:t,discard:_le.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(Bw,"createLocalStream");async function s$(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(s$,"listStreams");async function Ole(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(Ole,"deleteLocalStream");async function Cle(e){let{connection:t}=await Zi(),r=[],n=Uw(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(e$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Cle,"listRemoteStreams");async function Ple(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=jq(),a={durable_name:i,ack_policy:Mw.Explicit};t&&(a.deliver_policy=vw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=Dw(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(jr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Ple,"viewStream");async function*Lle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=jq(),a={durable_name:i,ack_policy:Mw.Explicit};t&&(a.deliver_policy=vw.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=Dw(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(jr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Lle,"viewStreamIterator");async function Dle(e,t,r,n){hi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=i$(n,r);let{js:s}=await Zi(),i=await wS(),a=`${e}.${i}`,c=await Rle(()=>n instanceof Uint8Array?n:Xq.encode(n));try{hi.trace(`publishToStream publishing to subject: ${a}`),Tle(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return a$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){hi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await Bw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Dle,"publishToStream");function i$(e,t){t===void 0&&(t=Sle());let r=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(jr.MSG_HEADERS.ORIGIN)&&r&&t.append(jr.MSG_HEADERS.ORIGIN,r),t}o(i$,"addNatsMsgHeader");function bd(e){e=e.toLowerCase();let t=Fh.join(kr.get(Qe.CONFIG_PARAMS.ROOTPATH),yle);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ll(Pw)&&(Pw={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.HUB,config_file:jr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fh.join(t,jr.PID_FILES.HUB),hdbNatsPath:t}),Pw;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ll(Cw)&&(Cw={port:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,config_file:jr.NATS_CONFIG_FILES.LEAF_SERVER,domain:xh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,pid_file_path:Fh.join(t,jr.PID_FILES.LEAF),hdbNatsPath:t}),Cw;hi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(bd,"getServerConfig");async function o$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Mw.Explicit,durable_name:r,deliver_policy:vw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(o$,"createConsumer");async function Mle(e,t,r){await e.consumers.delete(t,r)}o(Mle,"removeConsumer");function vle(e){return e.split(".")[1]}o(vle,"extractServerName");async function Ule(e,t,r=6e4,n=Uw()){if(!IS.isObject(t))throw new Error("data param must be an object");let s=Xq.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return Dw(c.data)}o(Ule,"request");function Fw(e){return new Promise(async(t,r)=>{let n=ole(Lw,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(Fw,"reloadNATS");async function xle(){let{pid_file_path:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Fw(e)}o(xle,"reloadNATSHub");async function Ble(){let{pid_file_path:e}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Fw(e)}o(Ble,"reloadNATSLeaf");function Fle(e,t,r){let n;switch(e.code){case zq.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case zq.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Fle,"requestErrorHandler");async function Hle(e,t){let r=t+jr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await Wle(r),{schema:i,table:a}=e,c=NS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await a$(async()=>{if(e.subscribe===!0)await o$(s,c,n.info.server_name,l);else try{await Mle(s,c,n.info.server_name)}catch(u){hi.trace(u)}})}o(Hle,"updateRemoteConsumer");async function kle(e,t,r,n){let s=NS.createNatsTableStreamName(e,t),i=r+jr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!Jq&&fle()<kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Ow();await c(a)}await ule(a),n==="stop"&&await IS.asyncSetTimeout(1e3)}o(kle,"updateConsumerIterator");function a$(e){return lle.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(a$,"exclusiveLock");async function c$(e,t){let r=NS.createNatsTableStreamName(e,t),n=await wS(),s=Vle(e,t,n);await Bw(r,[s])}o(c$,"createLocalTableStream");async function Gle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await c$(n,s)}}o(Gle,"createTableStreams");async function l$(e,t,r=void 0){if(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=NS.createNatsTableStreamName(e,t),{domain:s}=bd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Hh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")hi.warn(n);else throw n}}o(l$,"purgeTableStream");async function qle(e,t){if(kr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await l$(e,t[r])}o(qle,"purgeSchemaTableStreams");async function $le(e){return(await kh()).streams.info(e)}o($le,"getStreamInfo");function Vle(e,t,r){return`${jr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Vle,"createSubjectName");async function wS(){if(Bh)return Bh;if(Bh=(await kh())?.nc?.info?.server_name,Bh===void 0)throw new Error("Unable to get jetstream manager server name");return Bh}o(wS,"getJsmServerName");async function Kle(){let e=await kh(),t=await wS(),r=await s$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Yle(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");hi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Kle,"updateLocalStreams");function Yle(e){let{config:t}=e,r=!1,n=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=kr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Yle,"updateStreamLimits");async function Wle(e){let t,r;try{t=await mn.jetstream({domain:e}),r=await mn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw hi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(Wle,"connectToRemoteJS")});function Hw(e){let t=e.get(OS),r=t?(0,Id.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Ze(),s=!1;r.nodeName=Ze();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:qh(e)??1,nodes:[]})})}i[n]=0,e.putSync(OS,(0,Id.pack)(r))}return r}function Gh(e){return Hw(e).remoteNameToId}function f$(e,t){let r=Hw(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(OS,(0,Id.pack)(r)),s}function CS(e,t){let r=Hw(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(OS,(0,Id.pack)(r))}return d$.trace?.("The remote node name map",e,n,s),s}var d$,Id,OS,kw=le(()=>{d$=w(ei());is();Id=require("msgpackr"),OS=Symbol.for("remote-ids");o(Hw,"getIdMappingRecord");o(Gh,"exportIdMapping");o(f$,"remoteToLocalNodeId");o(CS,"getIdOfRemoteNode")});var Gw={};Oe(Gw,{commitsAwaitingReplication:()=>Nd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>wd,iterateRoutes:()=>Vh,shouldReplicateToNode:()=>$h,subscribeToNodeUpdates:()=>Od});function Wt(){return m$||(m$=ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function wd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Od(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;_$.debug?.("adding node",n,"on node",Ze()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Ze()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Wt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function $h(e,t){let r=Wa.default.get(U.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===Wa.default.get(U.REPLICATION_SHARD))))&&Wt().primaryStore.get(Ze())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function zle(){Od(e=>{za({},(t,r)=>{let n=e.name,s=h$.get(n);if(s||h$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=wd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Nd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Vh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Wa.default.get(U.REPLICATION_SECUREPORT)??(!Wa.default.get(U.REPLICATION_PORT)&&Wa.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Wa.default.get(U.REPLICATION_PORT)||Wa.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){p$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var p$,E$,Wa,_$,m$,h$,Nd,Dl=le(()=>{Me();is();rm();p$=require("worker_threads"),E$=w(_e()),Wa=w(ae());k();_$=w(ei());server.nodes=[];o(Wt,"getHDBNodeTable");o(wd,"getReplicationSharedStatus");o(Od,"subscribeToNodeUpdates");o($h,"shouldReplicateToNode");h$=new Map;iv((e,t,r)=>{if(r>server.nodes.length)throw new E$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Nd||(Nd=new Map,zle());let n=Nd.get(e);return n||(n=[],Nd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(zle,"startSubscriptionToReplications");o(Vh,"iterateRoutes")});var T$={};Oe(T$,{connectedToNode:()=>Ml,disconnectedFromNode:()=>Pd,ensureNode:()=>Ho,requestClusterStatus:()=>S$,startOnMainThread:()=>$w});async function $w(e){let t=0,r=it();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){PS.set(i,qh(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=Ze();function c(){let l=Wt().primaryStore.get(a);if(l!==null){let u=e.url??ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Ho(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of Vh(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}Od(s)});let n;function s(i,a=i?.name){let c=Ze()&&a===Ze()||ja()&&i?.url===ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Wt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ct.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let h;for(let[p,{worker:_,nodes:g}]of m){let y=g[0];if(y&&y.name==a){h=!0;for(let[T,{worker:R}]of m)m.delete(T),ct.warn("Node was deleted, unsubscribing from node",a,T,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:T,url:f});break}}if(h){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){ct.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ct.info(`Added node ${i.name} at ${i.url} for process ${Ze()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Cd)if(i.url===m.url){Cd.delete(f);break}Cd.set(i.name,i)}let u=it();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=za(e,(f,m,h)=>{h?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ct.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ct.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];PS.has(f)&&Kh.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:m,name:Ze(),startTime:PS.get(f),endTime:Date.now(),replicates:!0}),PS.delete(f));let g=$h(i,f),y=to.workers.filter(T=>T.name==="http");if(h?(p=h.worker,h.nodes=_):g&&(t=t%y.length,p=y[t++],l.set(f,{worker:p,nodes:_,url:i.url}),p?.on("exit",()=>{l.get(f)?.worker===p&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let T={type:"subscribe-to-node",database:f,nodes:_};p?p.postMessage(T):Yh(T)},jle);else{ct.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Wt().primaryStore.get(Ze())?.replicates}),Wt().primaryStore.get(Ze())?.replicates||(n=!1,ct.info("Disabling replication, this node name",Ze(),Wt().primaryStore.get(Ze()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):DS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Pd=o(function(i){try{ct.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Cd.keys()),c=a.sort(),l=c.indexOf(i.name||pi(i.url));if(l===-1){ct.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){ct.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!Kh.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,h=(l+1)%c.length;for(;l!==h;){let p=c[h],_=Cd.get(p);u=eo.get(_.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){h=(h+1)%c.length;continue}let{worker:y,nodes:T}=g,R=!1;for(let N of d.nodes){if(T.some(C=>C.name===N.name)){ct.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}N.endTime<Date.now()||(T.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){ct.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}ct.info(`Failing over ${i.database} from ${i.name} to ${p}`),y?y.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Yh({database:i.database,nodes:T});return}ct.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ct.error("Error failing over node",a)}},"disconnectedFromNode"),Ml=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){ct.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ct.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ct.debug("Connected node is not named yet",i.database,c);return}if(!Kh.default.get(U.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:h,connected:p}=f;if(h)if(p===!1&&h[0].shard===l.shard)u=!0,c.nodes.push(h[0]);else{let _=h.filter(g=>g&&g.name!==l.name);_.length<h.length&&(f.nodes=_,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:h}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Pd),(0,to.onMessageByType)("connected-to-node",Ml),(0,to.onMessageByType)("request-cluster-status",S$)}function S$(e,t){let r=[];for(let[n,s]of Cd)try{let i=eo.get(s.url);ct.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(h=>!(h.endTime<Date.now())).map(h=>h.name)});let c=(0,qw.cloneDeep)(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ct.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Ho(e,t){let r=Wt();e=e??pi(t.url),t.name=e;try{if(t.ca){let s=new g$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ct.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ct.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!Kh.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=(0,qw.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ct.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,LS,ct,qw,Kh,g$,jle,eo,Pd,Ml,Cd,PS,Wh=le(()=>{Me();to=w(st());is();LS=require("worker_threads");Dl();ct=w(Q()),qw=require("lodash"),Kh=w(ae());k();g$=require("crypto"),jle=200,eo=new Map,Cd=new Map,PS=new Map;o($w,"startOnMainThread");o(S$,"requestClusterStatus");LS.parentPort&&(Pd=o(e=>{LS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ml=o(e=>{LS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{Yh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{DS(e)}));o(Ho,"ensureNode")});var as=M(zt=>{"use strict";var hr=require("path"),{watch:N$}=require("chokidar"),Bn=require("fs-extra"),Ld=require("node-forge"),w$=require("net"),{generateKeyPair:Vw,X509Certificate:ko,createPrivateKey:O$}=require("crypto"),Qle=require("util");Vw=Qle.promisify(Vw);var Lt=Ld.pki,Ei=require("joi"),{v4:C$}=require("uuid"),{validateBySchema:zw}=dt(),{forComponent:Jle}=Q(),os=ae(),Ls=(k(),v(Y)),{CONFIG_PARAMS:Ul}=Ls,_i=KI(),{ClientError:Ja}=_e(),US=require("node:tls"),{relative:P$,join:Xle}=require("node:path"),{CERT_PREFERENCE_APP:JMe,CERTIFICATE_VALUES:R$}=_i,Zle=xc(),vS=wt(),{table:eue,getDatabases:tue,databases:MS}=(Me(),v(_t)),{getJWTRSAKeys:y$}=(Td(),v(vh)),ft=Jle("tls");zt.generateKeys=Xw;zt.updateConfigCert=x$;zt.createCsr=lue;zt.signCertificate=uue;zt.setCertTable=Dd;zt.loadCertificates=Jw;zt.reviewSelfSignedCert=eO;zt.createTLSSelector=F$;zt.listCertificates=k$;zt.addCertificate=Eue;zt.removeCertificate=gue;zt.createNatsCerts=mue;zt.generateCertsKeys=fue;zt.getReplicationCert=jh;zt.getReplicationCertAuth=aue;zt.renewSelfSigned=hue;zt.hostnamesFromCert=rO;zt.getKey=Sue;zt.getHostnamesFromCertificate=Tue;zt.getPrimaryHostName=tO;var{urlToNodeName:L$,getThisNodeUrl:rue,getThisNodeName:HS,clearThisNodeName:nue}=(is(),v(Go)),{readFileSync:sue,statSync:D$}=require("node:fs"),XMe=ae(),{getTicketKeys:iue,onMessageFromWorkers:oue}=st(),Qa=Q(),{isMainThread:Kw}=require("worker_threads"),{TLSSocket:M$,createSecureContext:ZMe}=require("node:tls"),jw=3650,zh=["127.0.0.1","localhost","::1"],Qw=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];oue(async e=>{e.type===Ls.ITC_EVENT_TYPES.RESTART&&(os.initSync(!0),await eO())});var Qr;function Za(){return Qr||(Qr=tue().system.hdb_certificate,Qr||(Qr=eue({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Qr}o(Za,"getCertTable");async function jh(){let e=F$("replication"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(HS());if(!r)return;let n=new ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(jh,"getReplicationCert");async function aue(){Za();let e=(await jh()).options.cert,r=new ko(e).issuer.match(/CN=(.*)/)?.[1];return Qr.get(r)}o(aue,"getReplicationCertAuth");var Yw,Xa=new Map,xS=[],A$;function Jw(){if(Yw)return;if(Yw=!0,!A$&&Kw){let n=vS.getConfigFilePath();A$=N$(n,{persistent:!1}).on("change",()=>{ft.warn?.("Config file changed, reloading certificates"),cue()})}let e=[{configKey:Ul.TLS},{configKey:Ul.OPERATIONSAPI_TLS}];Za();let t=hr.dirname(vS.getConfigFilePath()),r;for(let{configKey:n}of e){let s=vS.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&P$(Xle(t,"keys"),a);if(c){let l=b$(a,u=>{Xa.set(c,u)},"private key");l&&xS.push(l)}for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&Kw){let d=b$(u,f=>{if(R$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=B$(u),p=new ko(h),_;try{_=!l&&i.name||tO(p)}catch(C){ft.error("error extracting host name from certificate",C);return}if(_==null){ft.error("No host name found on certificate");return}if(p.checkIssued(new ko(R$.cert)))return;let g=Qr.primaryStore.get(_),y=D$(u).mtimeMs,T=!g||g.is_self_signed?1:g.fileTimestamp??g.__updatedtime__,R=i.uses??["https",...n.includes("operations")?["operations"]:[]],N=g&&y===T&&(JSON.stringify(g.uses)!==JSON.stringify(R)||g.ciphers!==i.ciphers||JSON.stringify(g.hostnames)!==JSON.stringify(m));if(g&&y<=T&&!N){y<T&&ft.info(`Certificate ${_} at ${u} is older (${new Date(y)}) than the certificate in the database (${T>1?new Date(T):"only self signed certificate available"})`);return}N&&ft.info?.(`Config values changed for certificate ${_}, updating record`),r=Qr.put({name:_,uses:R,ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:y,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject?.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate");d&&xS.push(d)}}}}}return r}o(Jw,"loadCertificates");function cue(){for(let e of xS)e.close();xS.length=0,Yw=!1,Jw()}o(cue,"reloadCertificates");function b$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&Kw&&ft.warn(`Reloading ${r}:`,i),n=c,t(B$(i)))}catch(c){ft.error(`Error loading ${r}:`,i,c)}},"loadFile");return Bn.existsSync(e)?s(e,D$(e)):ft.error?.(`${r} file not found:`,e),N$(e,{persistent:!1}).on("change",s)}o(b$,"loadAndWatch");function BS(){let e=rue();if(e==null){let t=zh[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return L$(e)}o(BS,"getHost");function FS(){let e=HS();if(e==null){let t=zh[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(FS,"getCommonName");async function lue(){let e=await jh(),t=Lt.certificateFromPem(e.options.cert),r=Lt.privateKeyFromPem(e.options.key);ft.info("Creating CSR with cert named:",e.name);let n=Lt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:FS()},...Qw];ft.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:v$()}];return ft.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Ld.pki.certificationRequestToPem(n)}o(lue,"createCsr");function v$(){let e=zh.includes(FS())?zh:[...zh,FS()];return e.includes(BS())||e.push(BS()),[{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=>w$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(v$,"certExtensions");async function uue(e){let t={},r=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Za();for await(let d of Qr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Xa.has(d.private_key_name)){n=Xa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Bn.exists(hr.join(r,d.private_key_name))){n=Bn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Ww();s=d.ca,n=d.private_key}n=Lt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Lt.certificateFromPem(s.certificate);ft.info("Signing CSR with cert named",s.name);let a=Lt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return ft.error(d),new Error("Error verifying CSR: "+d.message)}let c=Ld.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+jw),ft.info("sign cert setting validity:",c.validity),ft.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),ft.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;ft.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Ld.md.sha256.create()),t.certificate=Lt.certificateToPem(c)}else ft.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(uue,"signCertificate");async function due(e,t){await Dd({name:HS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Dd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Lt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(due,"createCertificateTable");async function Dd(e){let t=new ko(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Za(),await Qr.patch(e)}o(Dd,"setCertTable");async function Xw(){let e=await Vw("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Lt.publicKeyFromPem(e.publicKey),privateKey:Lt.privateKeyFromPem(e.privateKey)}}o(Xw,"generateKeys");async function Zw(e,t,r){let n=Lt.createCertificate();if(!t){let a=await jh();t=Lt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+jw);let i=[{name:"commonName",value:FS()},...Qw];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(v$()),n.sign(e,Ld.md.sha256.create()),Lt.certificateToPem(n)}o(Zw,"generateCertificates");async function Ww(){let e=await k$(),t;for(let r of e){if(!r.is_authority)continue;let n=await H$(r.private_key_name);if(r.private_key_name&&n&&new ko(r.certificate).checkPrivateKey(O$(n))){ft.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ft.trace("No CA found with matching private key")}o(Ww,"getCertAuthority");async function U$(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+jw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${os.get(Ul.REPLICATION_HOSTNAME)??L$(os.get(Ul.REPLICATION_URL))??C$().split("-")[0]}`},...Qw];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Ld.md.sha256.create());let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=hr.join(a,_i.PRIVATEKEY_PEM_NAME);return r&&await Bn.writeFile(c,Lt.privateKeyToPem(e)),n}o(U$,"generateCertAuthority");async function fue(){let{privateKey:e,publicKey:t}=await Xw(),r=await U$(e,t),n=await Zw(e,t,r);await due(n,r),x$()}o(fue,"generateCertsKeys");async function mue(){let e=await Zw(Lt.privateKeyFromPem(_i.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(_i.CERTIFICATE_VALUES.cert)),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME);await Bn.exists(r)||await Bn.writeFile(r,e);let n=hr.join(t,_i.NATS_CA_PEM_NAME);await Bn.exists(n)||await Bn.writeFile(n,_i.CERTIFICATE_VALUES.cert)}o(mue,"createNatsCerts");async function hue(){Za();for await(let e of Qr.search([{attribute:"is_self_signed",value:!0}]))await Qr.delete(e.name);await eO()}o(hue,"renewSelfSigned");async function eO(){nue(),await Jw(),Za();let e=await Ww();if(!e){ft.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Lt.privateKeyFromPem(Bn.readFileSync(u)),keyPath:u}}catch(d){return ft.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=os.get(Ul.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=os.get(Ul.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),c=P$(a,i);s||(ft.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await Xw(),Bn.existsSync(hr.join(a,_i.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${C$().split("-")[0]}.pem`),await Bn.writeFile(hr.join(a,c),Lt.privateKeyToPem(s)));let l=await U$(s,Lt.setRsaPublicKey(s.n,s.e),!1);await Dd({name:l.subject.getField("CN").value,uses:["https"],certificate:Lt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await jh()){let r=HS();ft.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Ww();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Zw(Lt.privateKeyFromPem(e.private_key),s,n);await Dd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(eO,"reviewSelfSignedCert");function x$(){let e=Zle(Object.keys(Ls.CONFIG_PARAM_MAP),!0),t=hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME),r=hr.join(t,_i.PRIVATEKEY_PEM_NAME),n=hr.join(t,_i.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,_i.NATS_CA_PEM_NAME),i=Ls.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),vS.updateConfigValue(void 0,void 0,a,!1,!0)}o(x$,"updateConfigCert");function B$(e){return e.startsWith("-----BEGIN")?e:sue(e,"utf8")}o(B$,"readPEM");var I$=US.createSecureContext;US.createSecureContext=function(e){if(!e.cert||!e.key)return I$(e);let t={...e};delete t.key,delete t.cert;let r=I$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var pue=M$.prototype._init;M$.prototype._init=function(e,t){pue.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var vl=new Map;function F$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),vl.clear();let d=0;if(MS===void 0){c();return}for await(let f of MS.system.hdb_certificate.search([])){let m=f.certificate,h=new ko(m);f.is_authority&&(h.asString=m,vl.set(h.subject,m))}for await(let f of MS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",h=f.is_self_signed?1:2;f.uses?.includes(e)&&(h+=1);let p=await H$(f.private_key_name),_=f.certificate,g=new ko(_);if(vl.has(g.issuer)&&(_+=`
|
|
23
|
+
`+vl.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let y={ciphers:f.ciphers,ticketKeys:iue(),availableCAs:vl,ca:t&&Array.from(vl.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(y.sessionIdContext=a.sessionIdContext);let T=f.hostnames??rO(g);Array.isArray(T)||(T=[T]);for(let C of T)C===BS()&&(h+=.1);let R=US.createSecureContext(y);R.name=f.name,R.options=y,R.quality=h,R.certificateAuthorities=Array.from(vl),R.certStart=_.toString().slice(0,100),Array.isArray(T)||(T=[T]);let N;for(let C of T)if(C){C[0]==="*"&&(s=!0,C=C.slice(1)),C===BS()&&(h+=2),w$.isIP(C)&&(N=!0);let G=r.get(C)?.quality??0;h>G&&r.set(C,R)}else Qa.error("No hostname found for certificate at",US.certificate);Qa.trace("Adding TLS",R.name,"for",a.ports||"client","cert named",f.name,"hostnames",T,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=R,d=h,a&&(a.defaultContext=R))}catch(m){Qa.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),MS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Qa.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Qa.debug("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?Qa.debug("No certificate found to match",a,"using the default certificate"):Qa.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Qa.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(F$,"createTLSSelector");async function H$(e){let t=Xa.get(e);return!t&&e?await Bn.readFile(hr.join(os.get(Ul.ROOTPATH),Ls.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(H$,"getPrivateKeyByName");async function k$(){Za();let e=[];for await(let t of Qr.search([]))e.push(t);return e}o(k$,"listCertificates");async function Eue(e){let t=zw(e,Ei.object({name:Ei.string().required(),certificate:Ei.string().required(),is_authority:Ei.boolean().required(),private_key:Ei.string(),hosts:Ei.array(),uses:Ei.array()}));if(t)throw new Ja(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new ko(n),c=!1,l=!1,u;for(let[h,p]of Xa)!s&&!c&&a.checkPrivateKey(O$(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new Ja("A suitable private key was not found for this certificate");let d;if(!r){try{d=tO(a)}catch(h){ft.error(h)}if(d==null)throw new Ja("Error extracting certificate host name, please provide a name parameter")}let f=_ue(r??d);s&&!c&&!l&&(await Bn.writeFile(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,f+".pem"),s),Xa.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Dd(m),"Successfully added certificate: "+f}o(Eue,"addCertificate");function _ue(e){return e.replace(/[^a-z0-9.]/gi,"-")}o(_ue,"sanitizeName");async function gue(e){let t=zw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;Za();let n=await Qr.get(r);if(!n)throw new Ja(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Qr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ft.info("Removing private key named",s),await Bn.remove(hr.join(os.getHdbBasePath(),Ls.LICENSE_KEY_DIR_NAME,s)))}return await Qr.delete(r),"Successfully removed "+r}o(gue,"removeCertificate");function tO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||rO(e)[0]}o(tO,"getPrimaryHostName");function rO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(rO,"hostnamesFromCert");async function Sue(e){if(e.bypass_auth!==!0)throw new Ja("Unauthorized","401");let t=zw(e,Ei.object({name:Ei.string().required()}));if(t)throw new Ja(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await y$()).privateKey;if(r===".jwtPublic")return(await y$()).publicKey;if(Xa.get(r))return Xa.get(e.name);throw new Ja("Key not found")}o(Sue,"getKey");function Tue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Tue,"getHostnamesFromCertificate")});var cV={};Oe(cV,{CONFIRMATION_STATUS_POSITION:()=>oV,LATENCY_POSITION:()=>jS,NodeReplicationConnection:()=>Ud,OPERATION_REQUEST:()=>oO,RECEIVED_TIME_POSITION:()=>WS,RECEIVED_VERSION_POSITION:()=>YS,RECEIVING_STATUS_POSITION:()=>zS,RECEIVING_STATUS_RECEIVING:()=>aV,RECEIVING_STATUS_WAITING:()=>aO,SENDING_TIME_POSITION:()=>Qh,createWebSocket:()=>QS,databaseSubscriptions:()=>tc,replicateOverWS:()=>Jh,tableUpdateListeners:()=>lO});async function QS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Ze(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!sO){let l=(0,tV.createTLSSelector)("replication"),u={secureContexts:null};await l.initialize(u),sO=u.secureContexts}if(i=sO.get(s),i&&ce.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,nV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(KS?.caCount!==qo.size&&(KS=rV.createSecureContext({...i.options,ca:[...qo,...i.options.availableCAs.values()]}),KS.caCount=qo.size),c.secureContext=KS),new Z$.WebSocket(e,"harperdb-replication-v1",c)}function Jh(e,t,r){let n=t.port||t.securePort,s=xl.pid%1e3+"-"+eV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ce.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||tc,f,m,h=!1,p=t.subscription;p?.then&&p.then(E=>{p=E,p.auditStore&&(f=p.auditStore)});let _=t.tables||u&&it()[u],g;if(!r){ce.error?.(s,"No authorization provided"),Ss(1008,"Unauthorized");return}let y=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,N,C,G,z,F,$,J=6e4,K,te=0,fe=0,oe=0,ge=X$.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Pe=new Map,Te=[],tt=0,xe;if(t.url){let E=o(()=>{z&&fe===e._socket?.bytesRead&&oe===e._socket?.bytesWritten?e.terminate():(z=performance.now(),e.ping(),fe=e._socket?.bytesRead,oe=e._socket?.bytesWritten)},"sendPing");C=setInterval(E,Q$).unref(),E()}else tn();e._socket?.setMaxListeners(200);function tn(){clearTimeout(G),fe=e._socket?.bytesRead,oe=e._socket?.bytesWritten,G=setTimeout(()=>{fe===e._socket?.bytesRead&&oe===e._socket?.bytesWritten&&(ce.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},Q$*2).unref()}o(tn,"resetPingTimer");function nt(){if(!(!g||!u||!f))return m||(m=wd(f,u,g)),m}o(nt,"getSharedStatus"),u&&ga(u);let pt,Cc,Pc=[],$t=[],vf,Uf=[],IE=[],NE=[],Gy=150,xf=25,Le=0,wE=0,Bf=!1,po,Pr,Rr,Ff;e.on("message",E=>{te=performance.now();try{let S=E.dataView=new Vc(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let P=(0,et.decode)(E),[L,D,H]=P;switch(L){case q$:{if(D){if(g){if(g!==D){ce.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,et.encode)([Md])),Ss(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Ho(g,B)}if(t.connection&&(t.connection.nodeName=g),ce.debug?.(s,"received node name:",g,"db:",u??P[2]),!u)try{ga(u=P[2]),u==="system"&&(pt=za(t,(B,ue)=>{pu(ue)&&Sa(ue)}),e.on("close",()=>{pt?.remove()}))}catch(B){ce.warn?.(s,"Error setting database",B),e.send((0,et.encode)([Md])),Ss(1008,B.message);return}Lr()}break}case z$:{ce.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let ue=P[2];B.database=ue;let me;pu(ue)&&(ue==="system"?ke[ue]?.[B.table]||(me=V(B,ke[ue]?.[B.table])):me=V(B,ke[ue]?.[B.table]),f||(f=me?.auditStore),_||(_=it()?.[ue]))}break}case Md:Ss();break;case oO:try{let B=r?.replicates||r?.subscribers||r?.name;ce.debug?.("Received operation request",D,"from",g),server.operation(D,{user:r},!B).then(ue=>{Array.isArray(ue)&&(ue={results:ue}),ue.requestId=D.requestId,e.send((0,et.encode)([GS,ue]))},ue=>{e.send((0,et.encode)([GS,{requestId:D.requestId,error:(0,vd.errorToString)(ue)}]))})}catch(B){e.send((0,et.encode)([GS,{requestId:D.requestId,error:(0,vd.errorToString)(B)}]))}break;case GS:let{resolve:O,reject:x}=y.get(D.requestId);D.error?x(new Error(D.error)):O(D),y.delete(D.requestId);break;case nO:let W=P[3];if(!_){u?ce.error?.(s,"No database found for",u):ce.error?.(s,"Database name never received"),Ss();return}let se=_[W];se=V({table:W,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},se),Pc[H]={name:W,decoder:new et.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return se.primaryStore.getEntry(B)},rootStore:se.primaryStore.rootStore};break;case $$:Ff=f?f$(D,f):new Map,vf=P[2],ce.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${vf}`);break;case V$:let ne=H;NE[ne]=D;break;case W$:nt()[oV]=D,ce.trace?.(s,"received and broadcasting committed update",D),nt().buffer.notify();break;case Y$:R=D,p.send({type:"end_txn",localTime:R,remoteNodeIds:T}),nt(),m[YS]=R,m[WS]=Date.now(),m[zS]=aO;break;case qS:{let B=P[1],{fileId:ue,size:me,finished:Se,error:ee}=B,j=Pe.get(ue);ce.debug?.("Received blob",ue,"has stream",!!j,"connectedToBlob",!!j?.connectedToBlob,"length",P[2].length,"finished",Se),j||(j=new iO.PassThrough,j.expectedSize=me,Pe.set(ue,j)),j.lastChunk=Date.now();let he=P[2];ot(he.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Se?(ee?(j.on("error",()=>{}),j.destroy(new Error("Blob error: "+ee+" for record "+(j.recordId??"unknown")+" from "+g))):j.end(he),j.connectedToBlob&&Pe.delete(ue)):j.write(he)}catch(Re){ce.error?.(`Error receiving blob for ${j.recordId} from ${g} and streaming to storage`,Re),Pe.delete(ue)}break}case K$:{let B=D,ue;try{let me=P[3],Se=$t[H]||($t[H]=_[P[4]]);if(!Se)return ce.warn?.("Unknown table id trying to handle record request",H);let ee=Se.primaryStore.getBinaryFast(Symbol.for("structures")),j=ee?.length??0;if(j>0&&j!==wE){wE=j;let Re=(0,et.decode)(ee);e.send((0,et.encode)([nO,{typedStructs:Re.typed,structures:Re.named},H,Se.tableName]))}let he=Se.primaryStore.getBinaryFast(me);if(he){let Re=Se.primaryStore.decoder.decode(he,{valueAsBuffer:!0}),de=ut||{};de.version=(0,sV.getLastVersion)(),ut&&ut[Ou]&$r&&(Re=Buffer.from(Re),fm(()=>Se.primaryStore.decoder.decode(he),We=>_a(We,me),Se.primaryStore.rootStore)),ue=(0,et.encode)([kS,B,{value:Re,expiresAt:de.expiresAt,version:de.version,residencyId:de.residencyId,nodeId:de.nodeId,user:de.user}])}else ue=(0,et.encode)([kS,B])}catch(me){ue=(0,et.encode)([kS,B,{error:me.message}])}e.send(ue);break}case kS:{let{resolve:B,reject:ue,tableId:me,key:Se}=y.get(P[1]),ee=P[2];if(ee?.error)ue(new Error(ee.error));else if(ee){let j;i_(()=>{let he=Pc[me].decoder.decode(ee.value);ee.value=he,ee.key=Se,B(ee)||j&&setTimeout(()=>j.forEach(r_),6e4).unref()},f?.rootStore,he=>{let Re=Lc(he,Se);return j||(j=[]),j.push(Re),Re})}else B();y.delete(P[1]);break}case G$:{Rr=D;let B,ue,me=!1;if(p){if(u!==p.databaseName&&!p.then){ce.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(ce.debug?.(s,"received subscription request for",u,"at",Rr),!p){let pe;p=new Promise(Et=>{ce.debug?.("Waiting for subscription to database "+u),pe=Et}),p.ready=pe,tc.set(u,p)}if(r.name)ue=Wt().subscribe(r.name),ue.then(async pe=>{B=pe;for await(let Et of B){let rt=Et.value;if(!(rt?.replicates===!0||rt?.replicates?.receives||rt?.subscriptions?.some(cr=>(cr.database||cr.schema)===u&&cr.publish!==!1))){me=!0,e.send((0,et.encode)([Md])),Ss(1008,`Unauthorized database subscription to ${u}`);return}}},pe=>{ce.error?.(s,"Error subscribing to HDB nodes",pe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,et.encode)([Md])),Ss(1008,`Unauthorized database subscription to ${u}`);return}if(Pr&&(ce.debug?.(s,"stopping previous subscription",u),Pr.emit("close")),Rr.length===0)return;let Se=Rr[0],ee=o(pe=>{if(pe&&(Se.replicateByDefault?!Se.tables.includes(pe.tableName):Se.tables.includes(pe.tableName)))return{table:pe}},"tableToTableEntry"),j={txnTime:0},he,Re,de=1/0,We,St=o((pe,Et)=>{if(pe.type==="end_txn"){j.txnTime&&(a[i]!==66&&ce.error?.("Invalid encoding of message"),Eu(9),Eu(E_),Mc(We=Et),mt()),i=c,j.txnTime=0;return}let rt=pe.nodeId,cr=pe.tableId,xt=Re[cr];if(!xt&&(xt=Re[cr]=ee(p.tableById[cr]),!xt))return ce.debug?.("Not subscribed to table",cr);let Ts=xt.table,Bt=Ts.primaryStore,Qs=Bt.encoder;(pe.extendedType&R_||!Qs.typedStructs)&&(Qs._mergeStructures(Qs.getStructures()),Qs.typedStructs&&(Qs.lastTypedStructuresLength=Qs.typedStructs.length));let _u=he[rt];if(!(_u&&_u.startTime<Et&&(!_u.endTime||_u.endTime>Et)))return VS&&ce.trace?.(s,"skipping replication update",pe.recordId,"to:",g,"from:",rt,"subscribed:",he),sM();VS&&ce.trace?.(s,"sending replication update",pe.recordId,"to:",g,"from:",rt,"subscribed:",he);let qy=pe.version,vc=pe.residencyId,$y=hu(vc,Ts),CE;if($y&&!$y.includes(g)){let Js=hu(pe.previousResidencyId,Ts);if(Js&&!Js.includes(g)&&(pe.type==="put"||pe.type==="patch")||Ts.getResidencyById)return sM();let kf=pe.recordId;ce.trace?.(s,"sending invalidation",kf,g,"from",rt);let Gf=0;vc&&(Gf|=Kc),pe.previousResidencyId&&(Gf|=Yc);let Yy,PE=null;for(let iM in Ts.indices){if(!PE){if(Yy=pe.getValue(Bt,!0),!Yy)break;PE={}}PE[iM]=Yy[iM]}CE=Wc(pe.version,cr,kf,null,rt,pe.user,pe.type==="put"||pe.type==="patch"?"invalidate":pe.type,Qs.encode(PE),Gf,vc,pe.previousResidencyId,pe.expiresAt)}function sM(){return ce.trace?.(s,"skipping audit record",pe.recordId),F||(F=setTimeout(()=>{F=null,(We||0)+j$/2<de&&(VS&&ce.trace?.(s,"sending skipped sequence update",de),e.send((0,et.encode)([Y$,de])))},j$).unref()),new Promise(setImmediate)}o(sM,"skipAuditRecord");let Vy=Qs.typedStructs,Ky=Qs.structures;if((Vy?.length!=xt.typed_length||Ky?.length!=xt.structure_length)&&(xt.typed_length=Vy?.length,xt.structure_length=Ky.length,ce.debug?.(s,"send table struct",xt.typed_length,xt.structure_length),xt.sentName||(xt.sentName=!0),e.send((0,et.encode)([nO,{typedStructs:Vy,structures:Ky,attributes:Ts.attributes,schemaDefined:Ts.schemaDefined},cr,xt.table.tableName]))),vc&&!IE[vc]&&(e.send((0,et.encode)([V$,$y,vc])),IE[vc]=!0),j.txnTime!==qy&&(j.txnTime&&(VS&&ce.trace?.(s,"new txn time, sending queued txn",j.txnTime),a[i]!==66&&ce.error?.("Invalid encoding of message"),mt()),j.txnTime=qy,i=c,Mc(qy)),CE)Eu(CE.length),Dc(CE);else{let Js=pe.encoded;pe.extendedType&$r&&fm(()=>pe.getValue(Bt),Gf=>_a(Gf,pe.recordId),Bt.rootStore);let kf=Js[0]===66?8:0;Eu(Js.length-kf),Dc(Js,kf),ce.trace?.("wrote record",pe.recordId,"length:",Js.length)}return e._socket.writableNeedDrain?new Promise(Js=>{ce.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Js)}):tt>xf?new Promise(Js=>{xe=Js}):new Promise(setImmediate)},"sendAuditRecord"),mt=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ce.debug?.(s,"Sent message, size:",c-i),ot(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ce.debug?.(s,"skipping empty transaction")},"sendQueuedData");Pr=new cO.EventEmitter,Pr.once("close",()=>{me=!0,B?.end()});for(let{startTime:pe}of Rr)pe<de&&(de=pe);(ue||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,Re=p.tableById.map(ee),he=[];for(let{name:Et,startTime:rt,endTime:cr}of Rr){let xt=CS(Et,f);ce.debug?.("subscription to",Et,"using local id",xt,"starting",rt),he[xt]={startTime:rt,endTime:cr}}Sa(u),pt||(pt=Il(Et=>{Et.databaseName===u&&Sa(u)}),Cc=Sh(Et=>{Et===u&&(e.send((0,et.encode)([Md])),Ss())}),e.on("close",()=>{pt?.remove(),Cc?.remove()})),e.send((0,et.encode)([$$,Gh(p.auditStore),Rr.map(({name:Et})=>Et)]));let pe=!0;do{isFinite(de)||(ce.warn?.("Invalid sequence id "+de),Ss(1008,"Invalid sequence id"+de));let Et;if(pe&&!me&&(pe=!1,de===0)){ce.info?.("Replicating all tables to",g);let rt=de,cr=JS(f);for(let xt in _){if(!ee(xt))continue;let Ts=_[xt];for(let Bt of Ts.primaryStore.getRange({snapshot:!1,versions:!0})){if(me)return;if(Bt.localTime>=de){ce.trace?.(s,"Copying record from",u,xt,Bt.key,Bt.localTime),rt=Math.max(Bt.localTime,rt),nt()[Qh]=1;let Qs=Wc(Bt.version,Ts.tableId,Bt.key,null,cr,null,"put",fm(()=>Ts.primaryStore.encoder.encode(Bt.value),_u=>_a(_u,Bt.key)),Bt.metadataFlags&-256,Bt.residencyId,null,Bt.expiresAt);await St({recordId:Bt.key,tableId:Ts.tableId,type:"put",getValue(){return Bt.value},encoded:Qs,version:Bt.version,residencyId:Bt.residencyId,nodeId:cr,extendedType:Bt.metadataFlags},Bt.localTime)}}}c-i>8&&St({type:"end_txn"},de),nt()[Qh]=0,de=rt}for(let{key:rt,value:cr}of f.getRange({start:de||1,exclusiveStart:!0,snapshot:!1})){if(me)return;let xt=Nt(cr);ce.debug?.("sending audit record",new Date(rt)),nt()[Qh]=rt,de=rt,await St(xt,rt),Pr.startTime=rt}c-i>8&&St({type:"end_txn"},de),nt()[Qh]=0,await AU(f)}while(!me)}).catch(pe=>{ce.error?.(s,"Error handling subscription to node",pe),Ss(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,b,I;do{nt();let P=S.readInt();if(P===9&&S.getUint8(S.position)==E_){S.position++,R=I=S.readFloat64(),m[YS]=R,m[WS]=Date.now(),m[zS]=aO,ce.trace?.("received remote sequence update",R,u);break}let L=S.position,D=Nt(E,L,L+P),H=Pc[D.tableId];H||ce.error?.(`No table found with an id of ${D.tableId}`);let O;D.residencyId&&(O=NE[D.residencyId],ce.trace?.(s,"received residency list",O,D.type,D.recordId));try{let x=D.recordId;i_(()=>{b={table:H.name,id:D.recordId,type:D.type,nodeId:Ff.get(D.nodeId),residencyList:O,timestamp:D.version,value:D.getValue(H),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},f?.rootStore,W=>Lc(W,x))}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(H.decoder.typedStructs),x}A=!1,ce.trace?.(s,"received replication message",D.type,"id",b.id,"version",new Date(D.version),"nodeId",b.nodeId),m[YS]=D.version,m[WS]=Date.now(),m[zS]=aV,p.send(b),S.position=L+P}while(S.position<E.byteLength);Le++,ot(E.byteLength,"bytes-received",`${g}.${u}.${b?.table||"unknown_table"}`,"replication","ingest"),Le>Gy&&!Bf&&(Bf=!0,e.pause(),ce.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:R,remoteNodeIds:T,async onCommit(){if(b){let P=Date.now()-b.timestamp;ot(P,"replication-latency",g+"."+u+"."+b.table,b.type,"ingest")}Le--,Bf&&(Bf=!1,e.resume(),ce.debug?.(`Replication resuming ${g}`)),Te.length>0&&await Promise.all(Te),ce.trace?.("All blobs finished"),!N&&I&&(ce.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,et.encode)([W$,N])),ce.trace?.(s,"sent confirmation of a commit at",N),N=null},yue)),N=I,ce.debug?.("last sequence committed",new Date(I),u)}})}catch(S){ce.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",tn),e.on("pong",()=>{if(t.connection){let E=performance.now()-z;t.connection.latency=E,nt()&&(m[jS]=E),t.isSubscriptionConnection&&Ml({name:g,database:u,url:t.url,latency:E})}z=null}),e.on("close",(E,S)=>{clearInterval(C),clearTimeout(G),clearInterval($),Pr&&Pr.emit("close"),po&&po.end();for(let[A,{reject:b}]of y)b(new Error(`Connection closed ${S?.toString()} ${E}`));ce.debug?.(s,"closed",E,S?.toString())});function Ss(E,S){try{e.isFinished=!0,ce.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){ce.error?.(s,"Error closing connection",A)}}o(Ss,"close");let Ea=new Set;async function _a(E,S){let A=n_(E);if(Ea.has(A)){ce.debug?.("Blob already being sent",A);return}Ea.add(A);try{let b;tt++;for await(let I of E.stream())b&&(ce.debug?.("Sending blob chunk",A,"length",b.length),e.send((0,et.encode)([qS,{fileId:A,size:E.size},b]))),b=I,e._socket.writableNeedDrain&&(ce.debug?.("draining",A),await new Promise(P=>e._socket.once("drain",P)),ce.debug?.("drained",A)),ot(I.length,"bytes-sent",`${g}.${u}`,"replication","blob");ce.debug?.("Sending final blob chunk",A,"length",b.length),e.send((0,et.encode)([qS,{fileId:A,size:E.size,finished:!0},b]))}catch(b){ce.warn?.("Error sending blob",b,"blob id",A,"for record",S),e.send((0,et.encode)([qS,{fileId:A,finished:!0,error:(0,vd.errorToString)(b)},Buffer.alloc(0)]))}finally{Ea.delete(A),tt--,tt<xf&&xe?.()}}o(_a,"sendBlobs");function Lc(E,S){let A=n_(E),b=Pe.get(A);ce.debug?.("Received transaction with blob",A,"has stream",!!b,"ended",!!b?.writableEnded),b?b.writableEnded&&Pe.delete(A):(b=new iO.PassThrough,Pe.set(A,b)),b.connectedToBlob=!0,b.lastChunk=Date.now(),b.recordId=S,E.size===void 0&&b.expectedSize&&(E.size=b.expectedSize);let I=b.blob??createBlob(b,E);b.blob=I;let P=Ao(()=>dm(I).saving,p.auditStore?.rootStore);return P&&(P.blobId=A,Te.push(P),P.finally(()=>{ce.debug?.(`Finished receiving blob stream ${A}`),Te.splice(Te.indexOf(P),1)})),I}o(Lc,"receiveBlobs");function Lr(){if(h||(h=!0,t.connection?.on("subscriptions-updated",Lr)),!f&&p&&(f=p.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let E=new Map;f||(f=p?.auditStore);try{for(let b of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of b.value.nodes||[])I.lastTxnTime>(E.get(I.id)??0)&&E.set(I.id,I.lastTxnTime)}catch(b){if(!b.message.includes("Can not re"))throw b}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((b,I)=>{let P=[],{replicateByDefault:L}=b;if(b.subscriptions){for(let x of b.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let W=x.table;_?.[W]?.replicate!==!1&&P.push(W)}L=!1}else for(let x in _)(L?_[x].replicate===!1:_[x].replicate)&&P.push(x);let D=f&&CS(b.name,f),H=p?.dbisDB?.get([Symbol.for("seq"),D])??1,O=Math.max(H?.seqId??1,(typeof b.startTime=="string"?new Date(b.startTime).getTime():b.startTime)??1);if(ce.debug?.("Starting time recorded in db",b.name,D,u,H?.seqId,"start time:",O,new Date(O)),S!==b){let x=f&&CS(S.name,f),W=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let se of W?.nodes||[])se.name===b.name&&(O=se.seqId,ce.debug?.("Using sequence id from proxy node",S.name,O))}if(D===void 0?ce.warn("Starting subscription request from node",b,"but no node id found"):T.push(D),E.get(D)>O&&(O=E.get(D),ce.debug?.("Updating start time from more recent txn recorded",S.name,O)),O===1&&$S)try{new URL($S).hostname===b.name?(ce.warn?.(`Requesting full copy of database ${u} from ${$S}`),O=0):O=Date.now()-6e4}catch(x){ce.error?.("Error parsing leader URL",$S,x)}return ce.trace?.(s,"defining subscription request",b.name,u,new Date(O)),{name:b.name,replicateByDefault:L,tables:P,startTime:O,endTime:b.endTime}});if(A)if(ce.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout(K),A.length>0)e.send((0,et.encode)([G$,A]));else{let b=o(()=>{let I=performance.now();K=setTimeout(()=>{te<=I?Ss(1008,"Connection has no subscriptions and is no longer used"):b()},J).unref()},"scheduleClose");b()}}o(Lr,"sendSubscriptionRequestUpdate");function hu(E,S){if(!E)return;let A=Uf[E];return A||(A=S.getResidencyRecord(E),Uf[E]=A),A}o(hu,"getResidence");function pu(E){return!(ec&&ec!="*"&&!ec[E]&&!ec.includes?.(E)&&!ec.some?.(S=>S.name===E))}o(pu,"checkDatabaseAccess");function ga(E){if(p=p||d.get(E),!pu(E))throw new Error(`Access to database "${E}" is not permitted`);p||ce.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=it()?.[E]);let S=Ze();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return OE(S,E),!0}o(ga,"setDatabase");function OE(E,S){let A=it()?.[S],b=[];for(let I in A){let P=A[I];b.push({table:I,schemaDefined:P.schemaDefined,attributes:P.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ce.trace?.("Sending database info for node",E,"database name",S),e.send((0,et.encode)([q$,E,S,b]))}o(OE,"sendNodeDBName");function Sa(E){let S=it()?.[E],A=[];for(let b in S){if(Rr&&!Rr.some(P=>P.replicateByDefault?!P.tables.includes(b):P.tables.includes(b)))continue;let I=S[b];A.push({table:b,schemaDefined:I.schemaDefined,attributes:I.attributes.map(P=>({name:P.name,type:P.type,isPrimaryKey:P.isPrimaryKey}))})}e.send((0,et.encode)([z$,A,E]))}o(Sa,"sendDBSchema"),$=setInterval(()=>{for(let[E,S]of Pe)S.lastChunk+ge<Date.now()&&(ce.warn?.(`Timeout waiting for blob stream to finish ${E} for record ${S.recordId??"unknown"} from ${g}`),Pe.delete(E),S.end())},ge).unref();let Ta=1,Hf=[];return{end(){po&&po.end(),Pr&&Pr.emit("close")},getRecord(E){let S=Ta++;return new Promise((A,b)=>{let I=[K$,S,E.table.tableId,E.id];Hf[E.table.tableId]||(I.push(E.table.tableName),Hf[E.table.tableId]=!0),e.send((0,et.encode)(I)),te=performance.now(),y.set(S,{tableId:E.table.tableId,key:E.id,resolve(P){let{table:L,entry:D}=E;if(A(P),P)return L._recordRelocate(D,P)},reject:b})})},sendOperation(E){let S=Ta++;return E.requestId=S,e.send((0,et.encode)([oO,E])),new Promise((A,b)=>{y.set(S,{resolve:A,reject:b})})}};function Eu(E){Ra(5),E<128?a[c++]=E:E<16384?(l.setUint16(c,E|32768),c+=2):E<1056964608?(l.setUint32(c,E|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,E),c+=5)}function Dc(E,S=0,A=E.length){let b=A-S;Ra(b),E.copy(a,c,S,A),c+=b}function Mc(E){Ra(8),l.setFloat64(c,E),c+=8}function Ra(E){if(E+16>a.length-c){let S=Buffer.allocUnsafeSlow(c+E-i+65536>>10<<11);a.copy(S,0,i,c),c=c-i,i=0,a=S,l=new DataView(a.buffer,0,a.length)}}function V(E,S){let A=E.database??"data";if(A!=="data"&&!ke[A]){ce.warn?.("Database not found",E.database);return}S||(S={});let b=S.schemaDefined,I=!1,P=E.schemaDefined,L=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let H=E.attributes[D],O=L.find(x=>x.name===H.name);(!O||O.type!==H.type)&&(b?ce.error?.(`Schema for '${u}.${E.table}' is defined locally, but attribute '${H.name}: ${H.type}' from '${g}' does not match local attribute ${O?"'"+O.name+": "+O.type+"'":"which does not exist"}`):(I=!0,P||(H.indexed=!0),O?L[L.indexOf(O)]=H:L.push(H)))}return I?(ce.debug?.("(Re)creating",E),ze({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:L,...S})):S}}var X$,et,Z$,eV,vd,cO,tV,rV,xl,nV,iO,sV,iV,ce,G$,q$,$$,Md,V$,nO,K$,kS,oO,GS,Y$,W$,z$,qS,oV,YS,WS,Qh,jS,zS,aO,aV,Rue,$S,lO,tc,VS,j$,yue,Q$,sO,KS,J$,Ud,uO=le(()=>{Me();Li();kw();sb();is();X$=w(ae());k();zc();et=require("msgpackr"),Z$=require("ws"),eV=require("worker_threads"),vd=w(Q());Wh();cO=require("events"),tV=w(as()),rV=w(require("node:tls"));Dl();xl=w(require("node:process")),nV=require("node:net");Wi();Kn();iO=require("node:stream"),sV=require("lmdb"),iV=w(require("minimist")),ce=(0,vd.forComponent)("replication").conditional,G$=129,q$=140,$$=141,Md=142,V$=130,nO=132,K$=133,kS=134,oO=136,GS=137,Y$=143,W$=144,z$=145,qS=146,oV=0,YS=1,WS=2,Qh=3,jS=4,zS=5,aO=0,aV=1,Rue=(0,iV.default)(xl.argv),$S=Rue.HDB_LEADER_URL??xl.env.HDB_LEADER_URL,lO=new Map,tc=new Map,VS=!0,j$=300,yue=2,Q$=3e4;o(QS,"createWebSocket");J$=500,Ud=class extends cO.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=J$;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??pi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await QS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ce.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${xl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ce[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=J$,this.nodeSubscriptions&&Ml({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Jh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ce.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ce.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`):ce.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Pd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ce.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(Jh,"replicateOverWS")});var Go={};Oe(Go,{clearThisNodeName:()=>Lue,disableReplication:()=>Nue,enabledDatabases:()=>ec,forEachReplicatedDatabase:()=>za,getThisNodeId:()=>JS,getThisNodeName:()=>Ze,getThisNodeUrl:()=>ja,hostnameToUrl:()=>rT,lastTimeInAuditStore:()=>qh,monitorNodeCAs:()=>_V,replicateOperation:()=>Mue,replicationCertificateAuthorities:()=>qo,sendOperationToNode:()=>Xh,servers:()=>bue,setReplicator:()=>SV,start:()=>Iue,startOnMainThread:()=>$w,subscribeToNode:()=>Yh,unsubscribeFromNode:()=>DS,urlToNodeName:()=>pi});function Iue(e){if(!e.port&&!e.securePort&&(e.port=Ds.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ds.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!Ze())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Vh(e))t.set(pi(s.url),s);wue(e),e={mtls:!0,usageType:"replication",maxPayload:10*1024*1024*1024,...e};let r=De.ws(async(s,i,a,c)=>{if(Dt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);await a,s._socket.unref(),Jh(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Dt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,De.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Dt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Dt.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Wt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,pV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){Dt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else Dt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:Dt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(qo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=tT.createSecureContext(u)}catch(l){Dt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}_V(()=>{for(let s of n)s()})}function _V(e){let t=0;Od(r=>{r?.ca&&(qo.add(r.ca),qo.size!==t&&(t=qo.size,e?.()))})}function Nue(e=!0){EV=e}function wue(e){EV||(it(),ec=e.databases,za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||tc;for(let[s,i]of ZS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];SV(r,s,e),lO.get(s)?.forEach(i=>i(s))}}))}function SV(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 gV extends Ur{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||tc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Dt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Vn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let p of c){if(u.has(p)||p===De.hostname)continue;let _=Cue(p,gV.subscription,e);if(_?.isConnected){let g=wd(t.auditStore,e,p)[jS];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new mV.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:Aue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;Dt.warn("Error in load from node",eT,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Oue(e,t,r,n,s){let i=ZS.get(e);i||ZS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Ud(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Cue(e,t,r){let n=lV.get(e);n||(n=new Map,lV.set(e,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new Ud(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Xh(e,t,r){r||(r={}),r.serverName=e.name;let n=await QS(e.url,r),s=Jh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Dt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Dt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Yh(e){try{hV.isMainThread&&Dt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=tc.get(e.database);if(!t){let n;t=new Promise(s=>{Dt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,tc.set(e.database,t)}let r=Oue(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>$h(n,e.database)),e.replicateByDefault)}catch(t){Dt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function DS({name:e,url:t,database:r}){Dt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=ZS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Pue(){if(dO!==void 0)return dO;let e=Ds.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Ds.default.get(U.TLS_CERTIFICATE);if(e)return dO=new dV.X509Certificate((0,fV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function Ze(){return eT||(eT=Ds.default.get("replication_hostname")??pi(Ds.default.get("replication_url"))??Pue()??uV("operationsapi_network_secureport")??uV("operationsapi_network_port")??"127.0.0.1")}function Lue(){eT=void 0}function uV(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function XS(e){let t=Ds.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[[\]]/g,""):+t}function JS(e){return Gh(e)?.[Ze()]}function ja(){let e=Ds.default.get("replication_url");return e||rT(Ze())}function rT(e){let t=XS("replication_port");if(t)return`ws://${e}:${t}`;if(t=XS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=XS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=XS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function pi(e){if(e)return new URL(e).hostname}function za(e,t){for(let n of Object.getOwnPropertyNames(ke))r(n);return Sh(n=>{r(n)}),Il((n,s)=>{r(n.databaseName)});function r(n){let s=ke[n];Dt.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Due(n)&&t(s,n,!1)}o(r,"forDatabase")}function Due(e){let t=ke[e];for(let r in t)if(t[r].replicate)return!0}function qh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Mue(e){let t={message:""};if(e.replicated){e.replicated=!1,Dt.trace?.("Replicating operation",e.operation,"to nodes",De.nodes.map(n=>n.name));let r=await Promise.allSettled(De.nodes.map(n=>Xh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=De.nodes[s]?.name,i})}return t}var Ds,Dt,dV,fV,tT,mV,hV,pV,EV,Aue,bue,qo,ec,ZS,lV,dO,eT,is=le(()=>{Me();Pa();Ru();uO();Dr();Ds=w(ae()),Dt=w(Q()),dV=require("crypto"),fV=require("fs");Wh();Dl();k();kw();tT=w(require("node:tls")),mV=w(_e()),hV=require("worker_threads"),pV=w(as()),Aue=1,bue=[],qo=Ds.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(tT.rootCertificates):new Set;o(Iue,"start");o(_V,"monitorNodeCAs");o(Nue,"disableReplication");o(wue,"assignReplicationSource");o(SV,"setReplicator");ZS=new Map;o(Oue,"getSubscriptionConnection");lV=new Map;o(Cue,"getRetrievalConnectionByName");o(Xh,"sendOperationToNode");o(Yh,"subscribeToNode");o(DS,"unsubscribeFromNode");o(Pue,"getCommonNameFromCert");o(Ze,"getThisNodeName");o(Lue,"clearThisNodeName");Object.defineProperty(De,"hostname",{get(){return Ze()}});o(uV,"getHostFromListeningPort");o(XS,"getPortFromListeningPort");o(JS,"getThisNodeId");De.replication={getThisNodeId:JS,exportIdMapping:Gh};o(ja,"getThisNodeUrl");o(rT,"hostnameToUrl");o(pi,"urlToNodeName");o(za,"forEachReplicatedDatabase");o(Due,"hasExplicitlyReplicatedTable");o(qh,"lastTimeInAuditStore");o(Mue,"replicateOperation")});var ep=M((Ive,bV)=>{"use strict";var xd=Uq(),{validateBySchema:Zh}=dt(),{commonValidators:Bd,schemaRegex:fO}=Hi(),pr=require("joi"),vue=Q(),Uue=require("uuid").v4,iT=Co(),Fd=(k(),v(Y)),xue=require("util"),rc=Jn(),{handleHDBError:$o,hdbErrors:Bue,ClientError:Bl}=_e(),{HDB_ERROR_MSGS:nT,HTTP_STATUS_CODES:Vo}=Bue,{SchemaEventMsg:oT}=oi(),TV=mr(),{getDatabases:Fue}=(Me(),v(_t)),{transformReq:Hd}=ie(),{replicateOperation:RV}=(is(),v(Go)),{cleanupOrphans:Hue}=(Kn(),v(o_)),sT=pr.string().min(1).max(Bd.schema_length.maximum).pattern(fO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message}),kue=pr.string().min(1).max(Bd.schema_length.maximum).pattern(fO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message}).required(),Gue=pr.string().min(1).max(Bd.schema_length.maximum).pattern(fO).messages({"string.pattern.base":"{:#label} "+Bd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();bV.exports={createSchema:que,createSchemaStructure:yV,createTable:$ue,createTableStructure:AV,createAttribute:zue,dropSchema:Vue,dropTable:Kue,dropAttribute:Yue,getBackup:jue,cleanupOrphanBlobs:Que};async function que(e){let t=await yV(e);return iT.signalSchemaChange(new oT(process.pid,e.operation,e.schema)),t}o(que,"createSchema");async function yV(e){let t=Zh(e,pr.object({database:sT,schema:sT}));if(t)throw new Bl(t.message);if(Hd(e),!await xd.checkSchemaExists(e.schema))throw $o(new Error,nT.SCHEMA_EXISTS_ERR(e.schema),Vo.BAD_REQUEST,Fd.LOG_LEVELS.ERROR,nT.SCHEMA_EXISTS_ERR(e.schema),!0);return await rc.createSchema(e),`database '${e.schema}' successfully created`}o(yV,"createSchemaStructure");async function $ue(e){return Hd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await AV(e)}o($ue,"createTable");async function AV(e){let t=Zh(e,pr.object({database:sT,schema:sT,table:kue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Gue}));if(t)throw new Bl(t.message);if(!await xd.checkSchemaTableExists(e.schema,e.table))throw $o(new Error,nT.TABLE_EXISTS_ERR(e.schema,e.table),Vo.BAD_REQUEST,Fd.LOG_LEVELS.ERROR,nT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Uue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await rc.createTable(n,e);else throw $o(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Vo.BAD_REQUEST);else await rc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(AV,"createTableStructure");async function Vue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaExists(e.schema);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);let n=await xd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await rc.dropSchema(e),iT.signalSchemaChange(new oT(process.pid,e.operation,e.schema)),await TV.purgeSchemaTableStreams(e.schema,s);let i=await RV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Vue,"dropSchema");async function Kue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);await rc.dropTable(e),await TV.purgeTableStream(e.schema,e.table);let n=await RV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Kue,"dropTable");async function Yue(e){let t=Zh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new Bl(t.message);Hd(e);let r=await xd.checkSchemaTableExists(e.schema,e.table);if(r)throw $o(new Error,r,Vo.NOT_FOUND,Fd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $o(new Error,"You cannot drop a hash attribute",Vo.BAD_REQUEST,void 0,void 0,!0);if(Fd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $o(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Vo.BAD_REQUEST,void 0,void 0,!0);try{return await rc.dropAttribute(e),Wue(e),iT.signalSchemaChange(new oT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw vue.error(`Got an error deleting attribute ${xue.inspect(e)}.`),n}}o(Yue,"dropAttribute");function Wue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Wue,"dropAttributeFromGlobal");async function zue(e){Hd(e);let t=Fue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $o(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Vo.BAD_REQUEST,void 0,void 0,!0);return await rc.createAttribute(e),iT.signalSchemaChange(new oT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(zue,"createAttribute");function jue(e){return rc.getBackup(e)}o(jue,"getBackup");function Que(e){if(!e.database)throw new Bl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Bl(`Unknown database '${e.database}'`);return Hue(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Que,"cleanupOrphanBlobs")});var NV=M((wve,IV)=>{"use strict";var{OPERATIONS_ENUM:Jue}=(k(),v(Y)),mO=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Jue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};IV.exports=mO});var hO=M((Pve,LV)=>{"use strict";var Xue=Jn(),Cve=NV(),aT=ie(),cT=(k(),v(Y)),Zue=ae(),{handleHDBError:wV,hdbErrors:ede}=_e(),{HDB_ERROR_MSGS:OV,HTTP_STATUS_CODES:CV}=ede,tde=Object.values(cT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),PV="To use this operation audit log must be enabled in harperdb-config.yaml";LV.exports=rde;async function rde(e){if(aT.isEmpty(e.schema))throw new Error(OV.SCHEMA_REQUIRED_ERR);if(aT.isEmpty(e.table))throw new Error(OV.TABLE_REQUIRED_ERR);if(!Zue.get(cT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wV(new Error,PV,CV.BAD_REQUEST,cT.LOG_LEVELS.ERROR,PV,!0);let t=aT.checkSchemaTableExist(e.schema,e.table);if(t)throw wV(new Error,t,CV.NOT_FOUND,cT.LOG_LEVELS.ERROR,t,!0);if(!aT.isEmpty(e.search_type)&&tde.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${e.search_type}'`);return await Xue.readAuditLog(e)}o(rde,"readAuditLog")});var MV=M((Dve,DV)=>{"use strict";var{OPERATIONS_ENUM:nde}=(k(),v(Y)),pO=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=nde.GET_BACKUP,this.schema=t,this.table=r}};DV.exports=pO});var xV=M((Uve,UV)=>{"use strict";var sde=Jn(),vve=MV(),EO=ie(),ide=(k(),v(Y)),{handleHDBError:ode,hdbErrors:ade}=_e(),{HDB_ERROR_MSGS:vV,HTTP_STATUS_CODES:cde}=ade;UV.exports=lde;async function lde(e){if(EO.isEmpty(e.schema))throw new Error(vV.SCHEMA_REQUIRED_ERR);if(EO.isEmpty(e.table))throw new Error(vV.TABLE_REQUIRED_ERR);let t=EO.checkSchemaTableExist(e.schema,e.table);if(t)throw ode(new Error,t,cde.NOT_FOUND,ide.LOG_LEVELS.ERROR,t,!0);return sde.getBackup(e)}o(lde,"getBackup")});var kV=M((Bve,HV)=>{"use strict";var ude=ae(),nc=require("joi"),dde=dt(),BV=require("moment"),fde=require("fs-extra"),_O=require("path"),mde=require("lodash"),tp=(k(),v(Y)),{LOG_LEVELS:Fl}=(k(),v(Y)),hde="YYYY-MM-DD hh:mm:ss",pde=_O.resolve(__dirname,"../logs");HV.exports=function(e){return dde.validateBySchema(e,Ede)};var Ede=nc.object({from:nc.custom(FV),until:nc.custom(FV),level:nc.valid(Fl.NOTIFY,Fl.FATAL,Fl.ERROR,Fl.WARN,Fl.INFO,Fl.DEBUG,Fl.TRACE),order:nc.valid("asc","desc"),limit:nc.number().min(1),start:nc.number().min(0),log_name:nc.custom(_de)});function FV(e,t){if(BV(e,BV.ISO_8601).format(hde)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(FV,"validateDatetime");function _de(e,t){if(mde.invert(tp.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=ude.get(tp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?tp.LOG_NAMES.HDB:e,i=s===tp.LOG_NAMES.INSTALL?_O.join(pde,tp.LOG_NAMES.INSTALL):_O.join(n,s);return fde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(_de,"validateReadLogPath")});var SO=M((Hve,qV)=>{"use strict";var lT=(k(),v(Y)),gde=Q(),Sde=ae(),Tde=kV(),gO=require("path"),GV=require("fs-extra"),{once:Rde}=require("events"),{handleHDBError:yde,hdbErrors:Ade}=_e(),{PACKAGE_ROOT:bde}=bt(),{replicateOperation:Ide}=(is(),v(Go)),Nde=gO.join(bde,"logs"),wde=1e3,Ode=200;qV.exports=Cde;async function Cde(e){let t=Tde(e);if(t)throw yde(t,t.message,Ade.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Ide(e),n=Sde.get(lT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?lT.LOG_NAMES.HDB:e.log_name,i=s===lT.LOG_NAMES.INSTALL?gO.join(Nde,lT.LOG_NAMES.INSTALL):gO.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?wde:e.limit,h=e.order===void 0?void 0:e.order,p=e.start===void 0?0:e.start,_=p+m,g=0;h==="desc"&&!u&&!f&&(g=Math.max(GV.statSync(i).size-(_+5)*Ode,0));let y=GV.createReadStream(i,{start:g});y.on("error",F=>{gde.error(F)});let T=0,R=[],N="",C;y.on("data",F=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+F;let J=0,K;for(;(K=$.exec(F))&&!y.destroyed;){C&&(C.message=F.slice(J,K.index),G(C));let[te,fe,oe]=K,ge=oe.split("] ["),Pe=ge[0],Te=ge[1];ge.splice(0,2),C={timestamp:fe,thread:Pe,level:Te,tags:ge,message:""},J=K.index+te.length}N=F.slice(J)}),y.on("end",F=>{y.destroyed||C&&(C.message=N.trim(),G(C))}),y.resume();function G(F){let $,J,K;switch(!0){case(a&&l&&d):$=new Date(F.timestamp),J=new Date(u),K=new Date(f),F.level===c&&$>=J&&$<=K&&T<p?T++:F.level===c&&$>=J&&$<=K&&(ro(F,h,R),T++,T===_&&y.destroy());break;case(a&&l):$=new Date(F.timestamp),J=new Date(u),F.level===c&&$>=J&&T<p?T++:F.level===c&&$>=J&&(ro(F,h,R),T++,T===_&&y.destroy());break;case(a&&d):$=new Date(F.timestamp),K=new Date(f),F.level===c&&$<=K&&T<p?T++:F.level===c&&$<=K&&(ro(F,h,R),T++,T===_&&y.destroy());break;case(l&&d):$=new Date(F.timestamp),J=new Date(u),K=new Date(f),$>=J&&$<=K&&T<p?T++:$>=J&&$<=K&&(ro(F,h,R),T++,T===_&&y.destroy());break;case a:F.level===c&&T<p?T++:F.level===c&&(ro(F,h,R),T++,T===_&&y.destroy());break;case l:$=new Date(F.timestamp),J=new Date(u),$>=J&&T<p?T++:$>=J&&T>=p&&(ro(F,h,R),T++,T===_&&y.destroy());break;case d:$=new Date(F.timestamp),K=new Date(f),$<=K&&T<p?T++:$<=K&&T>=p&&(ro(F,h,R),T++,T===_&&y.destroy());break;default:T<p?T++:(ro(F,h,R),T++,T===_&&y.destroy())}}o(G,"onLogMessage"),await Rde(y,"close");let z=await r;if(z.replicated){for(let F of R)F.node=server.hostname;for(let F of z.replicated){let $=F.node;if(F.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:$,message:`Error retrieving logs: ${F.reason}`},h,R);else for(let J of F.results)J.node=$,ro(J,h,R)}}return R}o(Cde,"readLog");function ro(e,t,r){t==="desc"?Pde(e,r):t==="asc"?Lde(e,r):r.push(e)}o(ro,"pushLineToResult");function Pde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(Pde,"insertDescending");function Lde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(Lde,"insertAscending")});var uT=M((Kve,YV)=>{"use strict";var TO=require("joi"),{string:kd,boolean:$V,date:Dde}=TO.types(),Mde=dt(),{validateSchemaExists:Gve,validateTableExists:qve,validateSchemaName:$ve}=Hi(),vde=(k(),v(Y)),Ude=Ot(),VV=ae();VV.initSync();var Vve=kd.invalid(VV.get(vde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Ude.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),KV={operation:kd.valid("add_node","update_node","set_node_replication"),node_name:kd.optional(),subscriptions:TO.array().items({table:kd.optional(),schema:kd.optional(),database:kd.optional(),subscribe:$V.required(),publish:$V.required().custom(Bde),start_time:Dde.iso()})};function xde(e){return Mde.validateBySchema(e,TO.object(KV))}o(xde,"addUpdateNodeValidator");function Bde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(Bde,"checkForFalsy");YV.exports={addUpdateNodeValidator:xde,validationSchema:KV}});var Gd=M((Wve,WV)=>{"use strict";var RO=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},yO=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};WV.exports={Node:RO,NodeSubscription:yO}});var jV=M((jve,zV)=>{"use strict";var Fde=(k(),v(Y)).OPERATIONS_ENUM,AO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Fde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};zV.exports=AO});var rp=M((Jve,QV)=>{"use strict";var bO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},IO=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};QV.exports={RemotePayloadObject:bO,RemotePayloadSubscription:IO}});var XV=M((Zve,JV)=>{"use strict";var NO=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};JV.exports=NO});var e1=M((iUe,ZV)=>{"use strict";var Hde=XV(),tUe=Vt(),rUe=Tt(),kde=Q(),{getSchemaPath:nUe,getTransactionAuditStorePath:sUe}=It(),{getDatabases:Gde}=(Me(),v(_t));ZV.exports=qde;async function qde(e){let t=new Hde;try{let r=Gde()[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){kde.warn(`unable to stat table dbi due to ${r}`)}return t}o(qde,"lmdbGetTableSize")});var r1=M((aUe,t1)=>{"use strict";var wO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};t1.exports=wO});var $d=M((mUe,o1)=>{"use strict";var $de=require("fs-extra"),Vde=require("path"),hn=require("systeminformation"),sc=Q(),n1=mr(),lUe=Ot(),qd=(k(),v(Y)),Kde=e1(),Yde=Ua(),{getThreadInfo:s1}=st(),np=ae();np.initSync();var Wde=r1(),{openEnvironment:uUe}=Tt(),{getSchemaPath:dUe}=It(),{database:fUe,databases:OO}=(Me(),v(_t)),dT;o1.exports={getHDBProcessInfo:DO,getNetworkInfo:vO,getDiskInfo:MO,getMemoryInfo:LO,getCPUInfo:PO,getTimeInfo:CO,getSystemInformation:UO,systemInformation:zde,getTableSize:xO,getMetrics:BO};function CO(){return hn.time()}o(CO,"getTimeInfo");async function PO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await hn.cpu();d.cpu_speed=await hn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:y,...T}=await hn.currentLoad();return T.cpus=[],y.forEach(R=>{let{rawLoad:N,rawLoadIdle:C,rawLoadIrq:G,rawLoadNice:z,rawLoadSystem:F,rawLoadUser:$,...J}=R;T.cpus.push(J)}),d.current_load=T,d}catch(e){return sc.error(`error in getCPUInfo: ${e}`),{}}}o(PO,"getCPUInfo");async function LO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await hn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return sc.error(`error in getMemoryInfo: ${e}`),{}}}o(LO,"getMemoryInfo");async function DO(){let e={core:[],clustering:[]};try{let t=await hn.processes(),r;try{r=Number.parseInt(await $de.readFile(Vde.join(np.get(qd.CONFIG_PARAMS.ROOTPATH),qd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===qd.NODE_ERROR_CODES.ENOENT)sc.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return sc.error(`error in getHDBProcessInfo: ${t}`),e}}o(DO,"getHDBProcessInfo");async function MO(){let e={};try{if(!np.get(qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await hn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await hn.fsStats();return e.read_write=u,e.size=await hn.fsSize(),e}catch(t){return sc.error(`error in getDiskInfo: ${t}`),e}}o(MO,"getDiskInfo");async function vO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return np.get(qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await hn.networkInterfaceDefault(),e.latency=await hn.inetChecksite("google.com"),(await hn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await hn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return sc.error(`error in getNetworkInfo: ${t}`),e}}o(vO,"getNetworkInfo");async function UO(){if(dT!==void 0)return dT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await hn.osInfo();e=c;let l=await hn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,dT=e,dT}catch(t){return sc.error(`error in getSystemInformation: ${t}`),e}}o(UO,"getSystemInformation");async function xO(){let e=[],t=await Yde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Kde(n));return e}o(xO,"getTableSize");async function BO(){let e={};for(let t in OO){let r=e[t]={},n=r.tables={};for(let s in OO[t])try{let i=OO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){sc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(BO,"getMetrics");async function i1(){if(np.get(qd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await n1.getNATSReferences(),t=await n1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(i1,"getNatsStreamInfo");async function zde(e){let t=new Wde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await UO(),t.time=CO(),t.cpu=await PO(),t.memory=await LO(),t.disk=await MO(),t.network=await vO(),t.harperdb_processes=await DO(),t.table_size=await xO(),t.metrics=await BO(),t.threads=await s1(),t.replication=await i1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await UO();break;case"time":t.time=CO();break;case"cpu":t.cpu=await PO();break;case"memory":t.memory=await LO();break;case"disk":t.disk=await MO();break;case"network":t.network=await vO();break;case"harperdb_processes":t.harperdb_processes=await DO();break;case"table_size":t.table_size=await xO();break;case"database_metrics":case"metrics":t.metrics=await BO();break;case"threads":t.threads=await s1();break;case"replication":t.replication=await i1();break;default:break}return t}o(zde,"systemInformation")});var Ko=M((gUe,u1)=>{"use strict";var jde=Mn(),FO=ie(),Qde=require("util"),Hl=(k(),v(Y)),a1=ae();a1.initSync();var Jde=Sw(),c1=on(),{Node:pUe,NodeSubscription:EUe}=Gd(),Xde=Ku(),Zde=jV(),{RemotePayloadObject:efe,RemotePayloadSubscription:tfe}=rp(),{handleHDBError:rfe,hdbErrors:nfe}=_e(),{HTTP_STATUS_CODES:sfe,HDB_ERROR_MSGS:ife}=nfe,ofe=ai(),afe=$d(),{packageJson:cfe}=bt(),{getDatabases:lfe}=(Me(),v(_t)),_Ue=Qde.promisify(Jde.authorize),ufe=c1.searchByHash,dfe=c1.searchByValue;u1.exports={isEmpty:ffe,getNodeRecord:mfe,upsertNodeRecord:hfe,buildNodePayloads:pfe,checkClusteringEnabled:Efe,getAllNodeRecords:_fe,getSystemInfo:gfe,reverseSubscription:l1};function ffe(e){return e==null}o(ffe,"isEmpty");async function mfe(e){let t=new Xde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return ufe(t)}o(mfe,"getNodeRecord");async function hfe(e){let t=new Zde(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return jde.upsert(t)}o(hfe,"upsertNodeRecord");function l1(e){if(FO.isEmpty(e.subscribe)||FO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(l1,"reverseSubscription");function pfe(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=FO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=l1(c),h=lfe()[l]?.[u],p=new tfe(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new efe(r,t,s,n)}o(pfe,"buildNodePayloads");function Efe(){if(!a1.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw rfe(new Error,ife.CLUSTERING_NOT_ENABLED,sfe.BAD_REQUEST,void 0,void 0,!0)}o(Efe,"checkClusteringEnabled");async function _fe(){let e=new ofe(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await dfe(e))}o(_fe,"getAllNodeRecords");async function gfe(){let e=await afe.getSystemInformation();return{hdb_version:cfe.version,node_version:e.node_version,platform:e.platform}}o(gfe,"getSystemInfo")});var HO=M((TUe,g1)=>{"use strict";var fT=mr(),d1=ie(),f1=Ot(),m1=(k(),v(Y)),mT=Q(),h1=ep(),Sfe=km(),{RemotePayloadObject:Tfe}=rp(),{handleHDBError:p1,hdbErrors:Rfe}=_e(),{HTTP_STATUS_CODES:E1}=Rfe,{NodeSubscription:_1}=Gd();g1.exports=yfe;async function yfe(e,t){let r;try{r=await fT.request(`${t}.${f1.REQUEST_SUFFIX}`,new Tfe(m1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),mT.trace("Response from remote describe all request:",r)}catch(a){mT.error(`addNode received error from describe all request to remote node: ${a}`);let c=fT.requestErrorHandler(a,"add_node",t);throw p1(new Error,c,E1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===f1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw p1(new Error,a,E1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===m1.SYSTEM_SCHEMA_NAME){await fT.createLocalTableStream(l,c);let p=new _1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=d1.doesSchemaExist(l),d=n[l]!==void 0,f=c?d1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(mT.trace(`addNode creating schema: ${l}`),await h1.createSchema({operation:"create_schema",schema:l})),!f&&m){mT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Sfe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await h1.createTable(p)}await fT.createLocalTableStream(l,c);let h=new _1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(yfe,"reviewSubscriptions")});var Vd={};Oe(Vd,{addNodeBack:()=>kO,removeNodeBack:()=>GO,setNode:()=>Nfe});async function Nfe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=pi(t)):t=rT(r);let n=(0,T1.validateBySchema)(e,Ife);if(n)throw(0,Yo.handleHDBError)(n,n.message,bfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Yo.ClientError("url or hostname is required for remove_node operation");let h=r,p=Wt(),_=await p.get(h);if(!_)throw new Yo.ClientError(h+" does not exist");try{await Xh({url:_.url},{operation:q.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?Ze():h},void 0)}catch(g){cs.warn(`Error removing node from target node ${h}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(h),`Successfully removed '${h}' from cluster`}if(!t)throw new Yo.ClientError("url required for this operation");let s=ja();if(s==null)throw new Yo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Ms.getReplicationCert)();let h=await(0,Ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed||e.force_signing?(a=await(0,Ms.createCsr)(),cs.info("Sending CSR to target node:",t)):h&&(c=h.certificate,cs.info("Sending CA named",h.name,"to target node",t))}let l={operation:q.ADD_NODE_BACK,hostname:(0,oc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(S1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=S1(e);l.subscribe=h.subscribe,l.publish=h.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Xh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,cs.warn("Error adding node:",t,"to cluster:",h),d=h}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(cs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ms.setCertTable)({name:Afe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ms.setCertTable)({name:Ze()+"-replication",uses:["replication"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,oc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Ho(Ze(),h)}await Ho(u?u.nodeName:f.name??pi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function kO(e){cs.trace("addNodeBack received request:",e);let t=await(0,Ms.signCertificate)(e),r;e.csr?(r=t.signingCA,cs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,cs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ms.getReplicationCertAuth)();if(n.replicates){let i={url:ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,oc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,oc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Ho(Ze(),i)}return await Ho(e.hostname,n),t.nodeName=Ze(),t.usingCA=s?.certificate,cs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function GO(e){cs.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function S1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ms,T1,ic,oc,cs,Yo,Afe,bfe,Ife,Kd=le(()=>{Ms=w(as()),T1=w(dt()),ic=w(require("joi")),oc=w(ae());k();Wh();Dl();is();cs=w(Q()),Yo=w(_e()),{pki:Afe}=require("node-forge"),{HTTP_STATUS_CODES:bfe}=Yo.hdbErrors,Ife=ic.default.object({hostname:ic.default.string(),verify_tls:ic.default.boolean(),replicates:ic.default.boolean(),subscriptions:ic.default.array(),revoked_certificates:ic.default.array(),shard:ic.default.number()});o(Nfe,"setNode");o(kO,"addNodeBack");o(GO,"removeNodeBack");o(S1,"reverseSubscription")});var gT=M((CUe,y1)=>{"use strict";var{handleHDBError:hT,hdbErrors:wfe}=_e(),{HTTP_STATUS_CODES:pT}=wfe,{addUpdateNodeValidator:Ofe}=uT(),ET=Q(),_T=(k(),v(Y)),R1=Ot(),Cfe=ie(),sp=mr(),ip=Ko(),qO=ae(),Pfe=HO(),{Node:Lfe,NodeSubscription:Dfe}=Gd(),{broadcast:Mfe}=st(),{setNode:vfe}=(Kd(),v(Vd)),wUe=ae(),OUe=(k(),v(Y)),Ufe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",xfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Bfe=qO.get(_T.CONFIG_PARAMS.CLUSTERING_NODENAME);y1.exports=Ffe;async function Ffe(e,t=!1){if(ET.trace("addNode called with:",e),qO.get(_T.CONFIG_PARAMS.REPLICATION_URL)||qO.get(_T.CONFIG_PARAMS.REPLICATION_HOSTNAME))return vfe(e);ip.checkClusteringEnabled();let r=Ofe(e);if(r)throw hT(r,r.message,pT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await ip.getNodeRecord(n);if(!Cfe.isEmptyOrZeroLength(f))throw hT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,pT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Pfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Ufe,a;let c=ip.buildNodePayloads(s,Bfe,_T.OPERATIONS_ENUM.ADD_NODE,await ip.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let h=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Dfe(h.schema,h.table,h.publish,h.subscribe))}ET.trace("addNode sending remote payload:",c);let u;try{u=await sp.request(`${n}.${R1.REQUEST_SUFFIX}`,c)}catch(f){ET.error(`addNode received error from request: ${f}`);for(let h=0,p=s.length;h<p;h++){let _=s[h];_.publish=!1,_.subscribe=!1,await sp.updateRemoteConsumer(_,n)}let m=sp.requestErrorHandler(f,"add_node",n);throw hT(new Error,m,pT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===R1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw hT(new Error,f,pT.INTERNAL_SERVER_ERROR,"error",f)}ET.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await sp.updateRemoteConsumer(h,n),h.subscribe===!0&&await sp.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new Lfe(n,l,u.system_info);return await ip.upsertNodeRecord(d),Mfe({type:"nats_update"}),i.length>0?a.message=xfe:a.message=`Successfully added '${n}' to manifest`,a}o(Ffe,"addNode")});var YO=M((DUe,b1)=>{"use strict";var{handleHDBError:$O,hdbErrors:Hfe}=_e(),{HTTP_STATUS_CODES:VO}=Hfe,{addUpdateNodeValidator:kfe}=uT(),op=Q(),ST=(k(),v(Y)),A1=Ot(),LUe=ie(),ap=mr(),cp=Ko(),KO=ae(),{cloneDeep:Gfe}=require("lodash"),qfe=HO(),{Node:$fe,NodeSubscription:Vfe}=Gd(),{broadcast:Kfe}=st(),{setNode:Yfe}=(Kd(),v(Vd)),Wfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",zfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",jfe=KO.get(ST.CONFIG_PARAMS.CLUSTERING_NODENAME);b1.exports=Qfe;async function Qfe(e){if(op.trace("updateNode called with:",e),KO.get(ST.CONFIG_PARAMS.REPLICATION_URL)??KO.get(ST.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Yfe(e);cp.checkClusteringEnabled();let t=kfe(e);if(t)throw $O(t,t.message,VO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await cp.getNodeRecord(r);s.length>0&&(n=Gfe(s));let{added:i,skipped:a}=await qfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Wfe,c;let l=cp.buildNodePayloads(i,jfe,ST.OPERATIONS_ENUM.UPDATE_NODE,await cp.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];op.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}op.trace("updateNode sending remote payload:",l);let u;try{u=await ap.request(`${r}.${A1.REQUEST_SUFFIX}`,l)}catch(d){op.error(`updateNode received error from request: ${d}`);let f=ap.requestErrorHandler(d,"update_node",r);throw $O(new Error,f,VO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===A1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw $O(new Error,d,VO.INTERNAL_SERVER_ERROR,"error",d)}op.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await ap.updateRemoteConsumer(m,r),m.subscribe===!0?await ap.updateConsumerIterator(m.schema,m.table,r,"start"):await ap.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new $fe(r,[],u.system_info)]),await Jfe(n[0],i,u.system_info),a.length>0?c.message=zfe:c.message=`Successfully updated '${r}'`,c}o(Qfe,"updateNode");async function Jfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Vfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await cp.upsertNodeRecord(n),Kfe({type:"nats_update"})}o(Jfe,"updateNodeTable")});var C1=M((vUe,O1)=>{"use strict";var w1=require("joi"),{string:I1}=w1.types(),Xfe=dt(),N1=(k(),v(Y)),Zfe=ae(),eme=Ot();O1.exports=tme;function tme(e){let t=I1.invalid(Zfe.get(N1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(eme.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=w1.object({operation:I1.valid(N1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Xfe.validateBySchema(e,r)}o(tme,"removeNodeValidator")});var TT=M((xUe,v1)=>{"use strict";var{handleHDBError:P1,hdbErrors:rme}=_e(),{HTTP_STATUS_CODES:L1}=rme,nme=C1(),lp=Q(),D1=Ko(),sme=ie(),Yd=(k(),v(Y)),M1=Ot(),WO=mr(),zO=ae(),{RemotePayloadObject:ime}=rp(),{NodeSubscription:ome}=Gd(),ame=Hm(),cme=El(),{broadcast:lme}=st(),{setNode:ume}=(Kd(),v(Vd)),dme=zO.get(Yd.CONFIG_PARAMS.CLUSTERING_NODENAME);v1.exports=fme;async function fme(e){if(lp.trace("removeNode called with:",e),zO.get(Yd.CONFIG_PARAMS.REPLICATION_URL)??zO.get(Yd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ume(e);D1.checkClusteringEnabled();let t=nme(e);if(t)throw P1(t,t.message,L1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await D1.getNodeRecord(r);if(sme.isEmptyOrZeroLength(n))throw P1(new Error,`Node '${r}' was not found.`,L1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new ime(Yd.OPERATIONS_ENUM.REMOVE_NODE,dme,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await WO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await WO.updateRemoteConsumer(new ome(d.schema,d.table,!1,!1),r)}catch(f){lp.error(f)}}try{i=await WO.request(`${r}.${M1.REQUEST_SUFFIX}`,s),lp.trace("Remove node reply from remote node:",r,i)}catch(l){lp.error("removeNode received error from request:",l),a=!0}let c=new ame(Yd.SYSTEM_SCHEMA_NAME,Yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await cme.deleteRecord(c),lme({type:"nats_update"}),i?.status===M1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(lp.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(fme,"removeNode")});var B1=M((FUe,x1)=>{"use strict";var U1=require("joi"),{string:mme,array:hme}=U1.types(),pme=dt(),Eme=uT();x1.exports=_me;function _me(e){let t=U1.object({operation:mme.valid("configure_cluster").required(),connections:hme.items(Eme.validationSchema).required()});return pme.validateBySchema(e,t)}o(_me,"configureClusterValidator")});var jO=M((kUe,q1)=>{"use strict";var F1=(k(),v(Y)),RT=Q(),gme=ie(),Sme=ae(),Tme=TT(),Rme=gT(),yme=Ko(),Ame=B1(),{handleHDBError:H1,hdbErrors:bme}=_e(),{HTTP_STATUS_CODES:k1}=bme,Ime="Configure cluster complete.",Nme="Failed to configure the cluster. Check the logs for more details.",wme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";q1.exports=Ome;async function Ome(e){RT.trace("configure cluster called with:",e);let t=Ame(e);if(t)throw H1(t,t.message,k1.BAD_REQUEST,void 0,void 0,!0);let r=await yme.getAllNodeRecords(),n=[];if(Sme.get(F1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await G1(Tme,{operation:F1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}RT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await G1(Rme,f,f.node_name);s.push(m)}RT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(RT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(gme.isEmptyOrZeroLength(a))return{message:Ime,connections:c};if(l)return{message:wme,failed_nodes:a,connections:c};throw H1(new Error,Nme,k1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(Ome,"configureCluster");async function G1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(G1,"functionWrapper")});var Y1=M((qUe,K1)=>{"use strict";var up=require("joi"),Cme=dt(),{validateSchemaExists:$1,validateTableExists:Pme,validateSchemaName:V1}=Hi(),Lme=up.object({operation:up.string().valid("purge_stream"),schema:up.string().custom($1).custom(V1).optional(),database:up.string().custom($1).custom(V1).optional(),table:up.string().custom(Pme).required()});function Dme(e){return Cme.validateBySchema(e,Lme)}o(Dme,"purgeStreamValidator");K1.exports=Dme});var QO=M((VUe,W1)=>{"use strict";var{handleHDBError:Mme,hdbErrors:vme}=_e(),{HTTP_STATUS_CODES:Ume}=vme,xme=Y1(),Bme=mr(),Fme=Ko();W1.exports=Hme;async function Hme(e){e.schema=e.schema??e.database;let t=xme(e);if(t)throw Mme(t,t.message,Ume.BAD_REQUEST,void 0,void 0,!0);Fme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Bme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Hme,"purgeStream")});var ZO=M((YUe,eK)=>{"use strict";var XO=Ko(),kme=mr(),AT=ae(),Wd=(k(),v(Y)),kl=Ot(),Gme=ie(),JO=Q(),{RemotePayloadObject:qme}=rp(),{ErrorCode:z1}=require("nats"),{parentPort:j1}=require("worker_threads"),{onMessageByType:$me}=st(),{getThisNodeName:Vme}=(is(),v(Go)),{requestClusterStatus:Kme}=(Wh(),v(T$)),{getReplicationSharedStatus:Yme,getHDBNodeTable:Wme}=(Dl(),v(Gw)),{CONFIRMATION_STATUS_POSITION:zme,RECEIVED_VERSION_POSITION:jme,RECEIVED_TIME_POSITION:Qme,SENDING_TIME_POSITION:Jme,RECEIVING_STATUS_POSITION:Xme,RECEIVING_STATUS_RECEIVING:Zme}=(uO(),v(cV)),Q1=AT.get(Wd.CONFIG_PARAMS.CLUSTERING_ENABLED),J1=AT.get(Wd.CONFIG_PARAMS.CLUSTERING_NODENAME);eK.exports={clusterStatus:ehe,buildNodeStatus:Z1};var X1;$me("cluster-status",async e=>{X1(e)});async function ehe(){if(AT.get(Wd.CONFIG_PARAMS.REPLICATION_URL)||AT.get(Wd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(j1){j1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{X1=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Yme(u,l,a);c.lastCommitConfirmed=yT(d[zme]),c.lastReceivedRemoteTime=yT(d[jme]),c.lastReceivedLocalTime=yT(d[Qme]),c.sendingMessage=yT(d[Jme]),c.lastReceivedStatus=d[Xme]===Zme?"Receiving":"Waiting"}}}else n=Kme();n.node_name=Vme();let s=Wme().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:J1,is_enabled:Q1,connections:[]};if(!Q1)return e;let t=await XO.getAllNodeRecords();if(Gme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(Z1(t[n],e.connections));return await Promise.allSettled(r),e}o(ehe,"clusterStatus");function yT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(yT,"asDate");async function Z1(e,t){let r=e.name,n=new qme(Wd.OPERATIONS_ENUM.CLUSTER_STATUS,J1,void 0,await XO.getSystemInfo()),s,i,a=kl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await kme.request(kl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===kl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=kl.CLUSTER_STATUS_STATUSES.CLOSED,JO.error(`Error getting node status from ${r} `,s))}catch(l){JO.warn(`Error getting node status from ${r}`,l),l.code===z1.NoResponders?a=kl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===z1.Timeout?a=kl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=kl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new the(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Wd.PRE_4_0_0_VERSION&&await XO.upsertNodeRecord(l)}catch(l){JO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(Z1,"buildNodeStatus");function the(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(the,"NodeStatusObject")});var tC=M((zUe,tK)=>{"use strict";var{handleHDBError:rhe,hdbErrors:nhe}=_e(),{HTTP_STATUS_CODES:she}=nhe,ihe=mr(),ohe=Ko(),eC=ie(),bT=require("joi"),ahe=dt(),che=2e3,lhe=bT.object({timeout:bT.number().min(1),connected_nodes:bT.boolean(),routes:bT.boolean()});tK.exports=uhe;async function uhe(e){ohe.checkClusteringEnabled();let t=ahe.validateBySchema(e,lhe);if(t)throw rhe(t,t.message,she.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||eC.autoCastBoolean(n),a=s===void 0||eC.autoCastBoolean(s),c={nodes:[]},l=await ihe.getServerList(r??che),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,h=l[d].data;if(m.name.endsWith("-hub")){let p={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(p.connected_nodes=[],u[m.name]&&u[m.name].forEach(_=>{p.connected_nodes.includes(_.name.slice(0,-4))||p.connected_nodes.push(_.name.slice(0,-4))})),a&&(p.routes=h.cluster?.urls?h.cluster?.urls.map(_=>({host:_.split(":")[0],port:eC.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(uhe,"clusterNetwork")});var iK=M((QUe,sK)=>{"use strict";var rC=require("joi"),rK=dt(),{routeConstraints:nK}=WI();sK.exports={setRoutesValidator:dhe,deleteRoutesValidator:fhe};function dhe(e){let t=rC.object({server:rC.valid("hub","leaf"),routes:nK.required()});return rK.validateBySchema(e,t)}o(dhe,"setRoutesValidator");function fhe(e){let t=rC.object({routes:nK.required()});return rK.validateBySchema(e,t)}o(fhe,"deleteRoutesValidator")});var IT=M((XUe,fK)=>{"use strict";var Wo=wt(),nC=ie(),vs=(k(),v(Y)),zd=ae(),oK=iK(),{handleHDBError:aK,hdbErrors:mhe}=_e(),{HTTP_STATUS_CODES:cK}=mhe,lK="cluster routes successfully set",uK="cluster routes successfully deleted";fK.exports={setRoutes:phe,getRoutes:Ehe,deleteRoutes:_he};function hhe(e){let t=Wo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=nC.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:lK,set:i,skipped:s}}o(hhe,"setRoutesNats");function phe(e){let t=oK.setRoutesValidator(e);if(t)throw aK(t,t.message,cK.BAD_REQUEST,void 0,void 0,!0);if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return hhe(e);let r=[],n=[],s=zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{dK(s,i)?n.push(i):(s.push(i),r.push(i))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:lK,set:r,skipped:n}}o(phe,"setRoutes");function dK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(dK,"existsInArray");function Ehe(){if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Wo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Ehe,"getRoutes");function _he(e){let t=oK.deleteRoutesValidator(e);if(t)throw aK(t,t.message,cK.BAD_REQUEST,void 0,void 0,!0);if(zd.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))return ghe(e);let r=[],n=[],s=zd.get(vs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{dK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Wo.updateConfigValue(vs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:uK,deleted:r,skipped:n}}o(_he,"deleteRoutes");function ghe(e){let t=Wo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,h=r.length;m<h;m++){let p=r[m];if(d.host===p.host&&d.port===p.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let h=0,p=n.length;h<p;h++){let _=n[h];if(d.host===_.host&&d.port===_.port){n.splice(h,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=nC.isEmptyOrZeroLength(r)?null:r,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=nC.isEmptyOrZeroLength(n)?null:n,Wo.updateConfigValue(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:uK,deleted:s,skipped:i}}o(ghe,"deleteRoutesNats")});var hK=M((e0e,mK)=>{"use strict";var dp=require("alasql"),Gl=require("recursive-iterator"),gi=Q(),She=ie(),fp=(k(),v(Y)),sC=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Rhe(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>fp.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!fp.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][fp.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=The(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!fp.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new dp.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function The(e){return e.filter(t=>t[fp.PERMS_CRUD_ENUM.READ])}o(The,"filterReadRestrictedAttrs");function Rhe(e,t,r,n,s){yhe(e,t,r,n,s)}o(Rhe,"interpretAST");function mp(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(mp,"addSchemaTableToMap");function yhe(e,t,r,n,s){if(!e){gi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof dp.yy.Insert?Nhe(e,t,r):e instanceof dp.yy.Select?Ahe(e,t,r,n,s):e instanceof dp.yy.Update?bhe(e,t,r):e instanceof dp.yy.Delete?Ihe(e,t,r):gi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(yhe,"getRecordAttributesAST");function Ahe(e,t,r,n,s){if(!e){gi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(She.isEmptyOrZeroLength(i)){gi.error("No schema specified");return}e.from.forEach(c=>{mp(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),mp(c.table,t,r,n,s)});let a=new Gl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{gi.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Gl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Gl(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{gi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Gl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{gi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Ahe,"getSelectAttributes");function bhe(e,t,r){if(!e){gi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iC(e.table.tableid,s,i.columnid,t,r)}o(bhe,"getUpdateAttributes");function Ihe(e,t,r){if(!e){gi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gl(e.where),s=e.table.databaseid;mp(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iC(e.table.tableid,s,i.columnid,t,r)}o(Ihe,"getDeleteAttributes");function Nhe(e,t,r){if(!e){gi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.into.databaseid;mp(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&iC(e.into.tableid,s,i.columnid,t,r)}o(Nhe,"getInsertAttributes");function iC(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(iC,"pushAttribute");mK.exports=sC});var EK=M((r0e,pK)=>{"use strict";var NT=(k(),v(Y)),wT=class{static{o(this,"BaseLicense")}constructor(t=0,r=NT.RAM_ALLOCATION_ENUM.DEFAULT,n=NT.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},oC=class extends wT{static{o(this,"ExtendedLicense")}constructor(t=0,r=NT.RAM_ALLOCATION_ENUM.DEFAULT,n=NT.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};pK.exports={BaseLicense:wT,ExtendedLicense:oC}});var Jd=M((s0e,yK)=>{"use strict";var Qd=require("fs-extra"),OT=(mg(),v(fg)),gK=require("crypto"),whe=require("moment"),Ohe=require("uuid").v4,pn=Q(),cC=require("path"),Che=ie(),ql=(k(),v(Y)),{totalmem:_K}=require("os"),Phe=EK().ExtendedLicense,jd="invalid license key format",Lhe="061183",Dhe="mofi25",Mhe="aes-256-cbc",vhe=16,Uhe=32,SK=ae(),{resolvePath:TK}=wt();SK.initSync();var aC;yK.exports={validateLicense:RK,generateFingerPrint:Bhe,licenseSearch:dC,getLicense:khe,checkMemoryLimit:Ghe};function lC(){return cC.join(SK.getHdbBasePath(),ql.LICENSE_KEY_DIR_NAME,ql.LICENSE_FILE_NAME)}o(lC,"getLicenseDirPath");function xhe(){let e=lC();return TK(cC.join(e,ql.LICENSE_FILE_NAME))}o(xhe,"getLicenseFilePath");function uC(){let e=lC();return TK(cC.join(e,ql.REG_KEY_FILE_NAME))}o(uC,"getFingerPrintFilePath");async function Bhe(){let e=uC();try{return await Qd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Fhe();throw pn.error(`Error writing fingerprint file to ${e}`),pn.error(t),new Error("There was an error generating the fingerprint")}}o(Bhe,"generateFingerPrint");async function Fhe(){let e=Ohe(),t=OT.hash(e,OT.HASH_FUNCTION.MD5),r=uC();try{await Qd.mkdirp(lC()),await Qd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw pn.error(`Error writing fingerprint file to ${r}`),pn.error(n),new Error("There was an error generating the fingerprint")}return t}o(Fhe,"writeFingerprint");function RK(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ql.RAM_ALLOCATION_ENUM.DEFAULT,version:ql.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return pn.error("empty license key passed to validate."),r;let n=uC(),s=!1;try{s=Qd.statSync(n)}catch(i){pn.error(i)}if(s){let i;try{i=Qd.readFileSync(n,"utf8")}catch{pn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Dhe),c=a[1];c=Buffer.concat([Buffer.from(c)],vhe);let l=Buffer.concat([Buffer.from(i)],Uhe),u=gK.createDecipheriv(Mhe,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let h=Hhe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(jd),pn.error(jd),new Error(jd)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(jd),pn.error(jd),new Error(jd)}else r.exp_date=d;r.exp_date<whe().valueOf()&&(r.valid_date=!1),OT.validate(a[1],`${Lhe}${i}${t}`,OT.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||pn.error("Invalid licence"),r}o(RK,"validateLicense");function Hhe(e,t){try{let r=gK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{pn.warn("Check old license failed")}}o(Hhe,"checkOldLicense");function dC(){let e=new Phe,t=[];try{t=Qd.readFileSync(xhe(),"utf-8").split(`\r
|
|
24
|
+
`)}catch(r){r.code==="ENOENT"?pn.debug("no license file found"):pn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Che.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=RK(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){pn.error("There was an error parsing the license string."),pn.error(s),e.ram_allocation=ql.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return aC=e,e}o(dC,"licenseSearch");async function khe(){return aC||await dC(),aC}o(khe,"getLicense");function Ghe(){let e=dC().ram_allocation,t=process.constrainedMemory?.()||_K();if(t=Math.round(Math.min(t,_K())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(Ghe,"checkMemoryLimit")});var hC=M((o0e,NK)=>{var CT=Jd(),AK=require("chalk"),ls=Q(),bK=require("prompt"),{promisify:qhe}=require("util"),fC=(k(),v(Y)),$he=require("fs-extra"),Vhe=require("path"),Khe=ie(),{packageJson:Yhe}=bt(),IK=ae();IK.initSync();var Whe=require("moment"),zhe=qhe(bK.get),jhe=Vhe.join(IK.getHdbBasePath(),fC.LICENSE_KEY_DIR_NAME,fC.LICENSE_FILE_NAME,fC.LICENSE_FILE_NAME);NK.exports={getFingerprint:Jhe,setLicense:Qhe,parseLicense:mC,register:Xhe,getRegistrationInfo:epe};async function Qhe(e){if(e&&e.key&&e.company){try{ls.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await mC(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ls.error(r),ls.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Qhe,"setLicense");async function Jhe(){let e={};try{e=await CT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ls.error(r),ls.error(t),new Error(r)}return e}o(Jhe,"getFingerprint");async function mC(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ls.info("Validating license input...");let r=CT.validateLicense(e,t);if(ls.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ls.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ls.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ls.info("writing license to disk"),await $he.writeFile(jhe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ls.error("Failed to write License"),n}return"Registration successful."}o(mC,"parseLicense");async function Xhe(){let e=await Zhe();return mC(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(Xhe,"register");async function Zhe(){let e=await CT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:AK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:AK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{bK.start()}catch(n){ls.error(n)}let r;try{r=await zhe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(Zhe,"promptForRegistration");async function epe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await CT.getLicense()}catch(r){throw ls.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Khe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Yhe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Whe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(epe,"getRegistrationInfo")});var OK=M((c0e,wK)=>{"use strict";var tpe=Ot(),pC=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,h,p){this.port=t,a===null&&(a=void 0),this.server_name=r+tpe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:h},HDB:{users:p}},this.system_account="SYS"}};wK.exports=pC});var LK=M((u0e,PK)=>{"use strict";var CK=Ot(),EC=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+CK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+CK.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};PK.exports=EC});var MK=M((f0e,DK)=>{"use strict";var _C=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};DK.exports=_C});var UK=M((h0e,vK)=>{"use strict";var rpe=Ot(),gC=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+rpe.SERVER_SUFFIX.ADMIN,this.password=r}};vK.exports=gC});var MT=M((E0e,FK)=>{"use strict";var $l=require("path"),Vl=require("fs-extra"),npe=OK(),spe=LK(),ipe=MK(),ope=UK(),SC=ts(),Zd=ie(),Fn=wt(),LT=(k(),v(Y)),hp=Ot(),{CONFIG_PARAMS:nr}=LT,ef=Q(),pp=ae(),xK=$i(),TC=mr(),ape=as(),Xd="clustering",cpe=1e4,BK=50;FK.exports={generateNatsConfig:upe,removeNatsConfig:dpe,getHubConfigPath:lpe};function lpe(){let e=pp.get(nr.ROOTPATH);return $l.join(e,Xd,hp.NATS_CONFIG_FILES.HUB_SERVER)}o(lpe,"getHubConfigPath");async function upe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=pp.get(nr.ROOTPATH);Vl.ensureDirSync($l.join(r,"clustering","leaf")),pp.initSync();let n=Fn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Fn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Fn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Vl.exists(i)&&!await Vl.exists(!n)&&await ape.createNatsCerts();let a=$l.join(r,Xd,hp.PID_FILES.HUB),c=$l.join(r,Xd,hp.PID_FILES.LEAF),l=Fn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=$l.join(r,Xd,hp.NATS_CONFIG_FILES.HUB_SERVER),d=$l.join(r,Xd,hp.NATS_CONFIG_FILES.LEAF_SERVER),f=Fn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Fn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),h=Fn.getConfigFromFile(nr.CLUSTERING_NODENAME),p=Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await TC.checkNATSServerInstalled()||DT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await SC.listUsers(),g=Fn.getConfigFromFile(nr.CLUSTERING_USER),y=await SC.getClusterUser();(Zd.isEmpty(y)||y.active!==!0)&&DT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await PT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await PT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await PT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await PT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[J,K]of _.entries())K.role?.role===LT.ROLE_TYPES_ENUM.CLUSTER_USER&&K.active&&(T.push(new ope(K.username,xK.decrypt(K.hash))),R.push(new ipe(K.username,xK.decrypt(K.hash))));let N=[],{hub_routes:C}=Fn.getClusteringRoutes();if(!Zd.isEmptyOrZeroLength(C))for(let J of C)N.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${J.host}:${J.port}`);let G=new npe(Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Fn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,R);n==null&&(delete G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=Zd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===LT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vl.writeJson(u,G),ef.trace(`Hub server config written to ${u}`));let z=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,F=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,$=new spe(Fn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[z],[F],T,R,i,s,n,f);n==null&&delete $.tls.ca_file,(t===void 0||t===LT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vl.writeJson(d,$),ef.trace(`Leaf server config written to ${d}`))}o(upe,"generateNatsConfig");async function PT(e){let t=pp.get(e);return Zd.isEmpty(t)&&DT(`port undefined for '${e}'`),await Zd.isPortTaken(t)&&DT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(PT,"isPortAvailable");function DT(e){let t=`Error generating clustering config: ${e}`;ef.error(t),console.error(t),process.exit(1)}o(DT,"generateNatsConfigError");async function dpe(e){let{port:t,config_file:r}=TC.getServerConfig(e),{username:n,decrypt_hash:s}=await SC.getClusterUser(),i=0,a=2e3;for(;i<BK;){try{let d=await TC.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){ef.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=BK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&ef.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Zd.asyncSetTimeout(u)}let c="0".repeat(cpe),l=$l.join(pp.get(nr.ROOTPATH),Xd,r);await Vl.writeFile(l,c),await Vl.remove(l),ef.notify(e,"started.")}o(dpe,"removeNatsConfig")});var VK=M((g0e,$K)=>{"use strict";var us=ae(),fpe=Jd(),Ke=(k(),v(Y)),Ep=Ot(),zo=require("path"),{PACKAGE_ROOT:UT}=bt(),HK=ae(),vT=ie(),tf="/dev/null",mpe=zo.join(UT,"launchServiceScripts"),kK=zo.join(UT,"utility/scripts"),hpe=zo.join(kK,Ke.HDB_RESTART_SCRIPT),GK=zo.resolve(UT,"dependencies",`${process.platform}-${process.arch}`,Ep.NATS_BINARY_NAME);function qK(){let t=fpe.licenseSearch().ram_allocation||Ke.RAM_ALLOCATION_ENUM.DEFAULT,r=Ke.MEM_SETTING_KEY+t,n={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return vT.noBootFile()&&(n[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=vT.getEnvCliRootPath()),{name:Ke.PROCESS_DESCRIPTORS.HDB,script:Ke.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:UT}}o(qK,"generateMainServerConfig");var ppe=9930;function Epe(){us.initSync(!0);let e=us.get(Ke.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.HUB_SERVER),r=zo.join(us.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=HK.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==ppe?"-"+n:""),script:GK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tf,i.error_file=tf),i}o(Epe,"generateNatsHubServerConfig");var _pe=9940;function gpe(){us.initSync(!0);let e=us.get(Ke.CONFIG_PARAMS.ROOTPATH),t=zo.join(e,"clustering",Ep.NATS_CONFIG_FILES.LEAF_SERVER),r=zo.join(us.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=HK.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ep.LOG_LEVEL_FLAGS[us.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==_pe?"-"+n:""),script:GK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tf,i.error_file=tf),i}o(gpe,"generateNatsLeafServerConfig");function Spe(){us.initSync();let e=zo.join(us.get(Ke.CONFIG_PARAMS.LOGGING_ROOT),Ke.LOG_NAMES.HDB),t={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ke.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:mpe,autorestart:!1};return us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=tf,t.error_file=tf),t}o(Spe,"generateClusteringUpgradeV4ServiceConfig");function Tpe(){let e={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.RESTART_HDB};return vT.noBootFile()&&(e[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=vT.getEnvCliRootPath()),{...{name:Ke.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:kK},script:hpe}}o(Tpe,"generateRestart");function Rpe(){return{apps:[qK()]}}o(Rpe,"generateAllServiceConfigs");$K.exports={generateAllServiceConfigs:Rpe,generateMainServerConfig:qK,generateRestart:Tpe,generateNatsHubServerConfig:Epe,generateNatsLeafServerConfig:gpe,generateClusteringUpgradeV4ServiceConfig:Spe}});var gp=M((R0e,sY)=>{"use strict";var lt=(k(),v(Y)),ype=ie(),Qo=MT(),xT=mr(),jo=Ot(),ac=VK(),BT=ae(),Kl=Q(),Ape=Ko(),{startWorker:KK,onMessageFromWorkers:bpe}=st(),Ipe=$d(),T0e=require("util"),Npe=require("child_process"),wpe=require("fs"),{execFile:Ope}=Npe,Je;sY.exports={enterPM2Mode:Cpe,start:cc,stop:RC,reload:WK,restart:zK,list:yC,describe:JK,connect:Jo,kill:vpe,startAllServices:Upe,startService:AC,getUniqueServicesList:XK,restartAllServices:xpe,isServiceRegistered:ZK,reloadStopStart:eY,restartHdb:QK,deleteProcess:Dpe,startClusteringProcesses:rY,startClusteringThreads:nY,isHdbRestartRunning:Mpe,isClusteringRunning:Fpe,stopClustering:Bpe,reloadClustering:Hpe,expectedRestartOfChildren:jK};var _p=!1;bpe(e=>{e.type==="restart"&&BT.initSync(!0)});function Cpe(){_p=!0}o(Cpe,"enterPM2Mode");function Jo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(Jo,"connect");var En,Ppe=10,YK;function cc(e,t=!1){if(_p)return Lpe(e);let r=Ope(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=En.indexOf(r);a>-1&&En.splice(a,1),!YK&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Ppe&&(wpe.existsSync(Qo.getHubConfigPath())?cc(e):(await Qo.generateNatsConfig(!0),cc(e),await new Promise(c=>setTimeout(c,3e3)),await Qo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Qo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=BT.get(lt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Kl.OUTPUTS.STDERR:Kl.OUTPUTS.STDOUT;Kl.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=jo.LOG_LEVELS[m]}if(jo.LOG_LEVEL_HIERARCHY[a]>=jo.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===jo.LOG_LEVELS.ERR||d===jo.LOG_LEVELS.WRN?Kl.OUTPUTS.STDERR:Kl.OUTPUTS.STDOUT;Kl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!En&&(En=[],!t)){let i=o(()=>{YK=!0,En&&(En.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}En.push(r)}o(cc,"start");function Lpe(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Lpe,"startWithPM2");function RC(e){if(!_p){for(let t of En||[])t.name===e&&(En.splice(En.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,a)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(a)})})})}o(RC,"stop");function WK(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(WK,"reload");function zK(e){if(!_p){jK();for(let t of En||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(zK,"restart");function jK(){for(let e of En||[])e.config&&(e.config.restarts=0)}o(jK,"expectedRestartOfChildren");function Dpe(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Dpe,"deleteProcess");async function QK(){await cc(ac.generateRestart())}o(QK,"restartHdb");async function Mpe(){let e=await yC();for(let t in e)if(e[t].name===lt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Mpe,"isHdbRestartRunning");function yC(){return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(yC,"list");function JK(e){return new Promise(async(t,r)=>{try{await Jo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(JK,"describe");function vpe(){if(!_p){for(let e of En||[])e.kill();En=[];return}return new Promise(async(e,t)=>{try{await Jo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(vpe,"kill");async function Upe(){try{await rY(),await nY(),await cc(ac.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(Upe,"startAllServices");async function AC(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case lt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ac.generateMainServerConfig();break;case lt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ac.generateNatsIngestServiceConfig();break;case lt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ac.generateNatsReplyServiceConfig();break;case lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ac.generateNatsHubServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ac.generateNatsLeafServerConfig(),await cc(r,t),await Qo.removeNatsConfig(e);return;case lt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ac.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await cc(r)}catch(r){throw Je?.disconnect(),r}}o(AC,"startService");async function XK(){try{let e=await yC(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Je?.disconnect(),e}}o(XK,"getUniqueServicesList");async function xpe(e=[]){try{let t=!1,r=await XK();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===lt.PROCESS_DESCRIPTORS.HDB?t=!0:await zK(a))}t&&await eY(lt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(xpe,"restartAllServices");async function ZK(e){if(En?.find(r=>r.name===e))return!0;let t=await Ipe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(ZK,"isServiceRegistered");async function eY(e){let t=BT.get(lt.CONFIG_PARAMS.THREADS_COUNT)??BT.get(lt.CONFIG_PARAMS.THREADS),r=await JK(e),n=ype.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await RC(e),await AC(e)):e===lt.PROCESS_DESCRIPTORS.HDB?await QK():await WK(e)}o(eY,"reloadStopStart");var tY;async function rY(e=!1){for(let t in lt.CLUSTERING_PROCESSES){let r=lt.CLUSTERING_PROCESSES[t];await AC(r,e)}}o(rY,"startClusteringProcesses");async function nY(){tY=KK(lt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:lt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await xT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await xT.updateLocalStreams();let e=await Ape.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===lt.PRE_4_0_0_VERSION){Kl.info("Starting clustering upgrade 4.0.0 process"),KK(lt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(nY,"startClusteringThreads");async function Bpe(){for(let e in lt.CLUSTERING_PROCESSES)if(e!==lt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===lt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await tY.terminate();else{let t=lt.CLUSTERING_PROCESSES[e];await RC(t)}}o(Bpe,"stopClustering");async function Fpe(){for(let e in lt.CLUSTERING_PROCESSES){let t=lt.CLUSTERING_PROCESSES[e];if(await ZK(t)===!1)return!1}return!0}o(Fpe,"isClusteringRunning");async function Hpe(){await Qo.generateNatsConfig(!0),await xT.reloadNATSHub(),await xT.reloadNATSLeaf(),await Qo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Qo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Hpe,"reloadClustering")});var NC={};Oe(NC,{compactOnStart:()=>kpe,copyDb:()=>uY});async function kpe(){lc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,bC.get)(U.ROOTPATH),t=new Map,r=it();(0,IC.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,FT.join)(e,"backup",n+".mdb"),a=(0,FT.join)(e,Uc,n+"-copy.mdb"),c=0;try{c=await iY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){lc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await uY(n,a),console.log("Backing up",n,"to",i);try{await(0,Yl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,Yl.move)(a,s,{overwrite:!0}),await(0,Yl.remove)((0,FT.join)(e,Uc,`${n}-copy.mdb-lock`))}try{ld()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{ld()}catch(n){lc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){lc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,IC.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Yl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw ld(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=await iY(n);if(console.log("Database",n,"after compact has a total record count of",a),i!==a){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
25
25
|
Total record count before compaction: ${i}, total after: ${a}.
|
|
26
|
-
Database backup has not been removed and can be found here: ${s}`;lc.error(c),console.error(c)}(0,
|
|
27
|
-
${r.stack}`;throw OC.error(n),pY(new Error)}}}o(eEe,"getRolePermissions");function tEe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Fn.SYSTEM_SCHEMA_NAME]=n[Fn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=rEe(t[i]);return}r[i]=SY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=nEe(c,l);r[i].describe||RY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=CC()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=CC()})}),r}o(tEe,"translateRolePermissions");function rEe(e){let t=SY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CC(!0,!0,!0,!0,!0)}),t}o(rEe,"createStructureUserPermissions");function nEe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return Fn.TIME_STAMP_NAMES.includes(f)&&(m=_Y(f,d[yp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=EY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=AY(d),s.attribute_permissions.push(d),c||sEe(d,l)}else if(u!==a){let d;Fn.TIME_STAMP_NAMES.includes(u)?d=_Y(u):d=EY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=gY(s),s}else return e.describe=gY(e),e}o(nEe,"getTableAttrPerms");function gY(e){return RY.filter(t=>e[t]).length>0}o(gY,"getSchemaTableDescribePerm");function AY(e){return yY.filter(t=>e[t]).length>0}o(AY,"getAttributeDescribePerm");function sEe(e,t){yY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(sEe,"checkForHashPerms")});var Ap={};we(Ap,{authentication:()=>MY,bypassAuth:()=>mEe,login:()=>vC,logout:()=>UC,start:()=>hEe});function mEe(){DY=!0}async function MY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?lEe?cEe:[]:aEe?oEe:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=En.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Os([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return kT&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),kT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(kT){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let _ of p)if(_.startsWith(h)){let g=_.indexOf(";");l=_.slice(h.length,g===-1?_.length:g),u=await NY.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new GT.AuthAuditLog(h,p,ya.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=_,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Zs.SUCCESS?DC.notify(g):DC.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&DC.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Le.getUser(h,null,e),d(h,Zs.SUCCESS,"mTLS")):iEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=zl.get(n),!f){let h=n.indexOf(" "),p=n.slice(0,h),_=n.slice(h+1),g,R;try{switch(p){case"Basic":let T=atob(_),y=T.indexOf(":");g=T.slice(0,y),R=T.slice(y+1),f=g||R?await Le.getUser(g,R,e):null;break;case"Bearer":try{f=await pw(_)}catch(N){if(N.message==="invalid token")try{return await _S(_),c({status:-1})}catch{throw N}}break}}catch(T){return dEe&&(zl.get(_)||(zl.set(_,_),d(g,Zs.FAILURE,p))),c({status:401,body:ba({error:T.message},e)})}zl.set(n,f),uEe&&d(f.username,Zs.SUCCESS,p)}e.user=f}else u?.user?e.user=await Le.getUser(u.user,null,e):(DY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,OY.getSuperUser)());kT&&(e.session.update=function(h){let p=En.get(U.AUTHENTICATION_COOKIE_EXPIRES),_=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,CY.v4)();let g=En.get(U.AUTHENTICATION_COOKIE_DOMAINS),R=p?new Date(Date.now()+(0,MC.convertToMS)(p)).toUTCString():fEe,T=g?.find(O=>r.host?.endsWith(O)),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;T&&(N+=`; Domain=${T}`),_&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return _&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),h.id=l,NY.put(h,{expiresAt:p?Date.now()+(0,MC.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await Le.authenticateUser(h,p,e);e.session.update({user:_&&(_.getId?.()??_.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&bs.loginPath?(m.status=302,m.headers.set("Location",bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Os);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function hEe({server:e,port:t,securePort:r}){e.http(MY,t||r?{port:t,securePort:r}:{port:"all"}),wY||(wY=!0,setInterval(()=>{zl=new Map},En.get(U.AUTHENTICATION_CACHETTL)).unref(),PY.user.addListener(()=>{zl=new Map}))}async function vC(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password??""),"Login successful"}async function UC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var OY,CY,En,GT,PY,MC,LY,iEe,DC,oEe,aEe,cEe,lEe,NY,kT,DY,uEe,dEe,fEe,zl,wY,qT=ce(()=>{OY=w(ts());Dr();Fu();Td();Me();CY=require("uuid"),En=w(oe());k();GT=w(Q()),PY=w(sh());uh();MC=w(ie());Ro();LY=(0,GT.forComponent)("authentication"),{debug:iEe}=LY,DC=LY.withTag("auth-event");En.initSync();oEe=En.get(U.HTTP_CORSACCESSLIST),aEe=En.get(U.HTTP_CORS),cEe=En.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),lEe=En.get(U.OPERATIONSAPI_NETWORK_CORS),NY=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),kT=En.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,DY=process.env.AUTHENTICATION_AUTHORIZELOCAL??En.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,uEe=En.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,dEe=En.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fEe="Tue, 01 Oct 8307 19:33:20 GMT",zl=new Map;Le.onInvalidatedUser(()=>{zl=new Map});o(mEe,"bypassAuth");o(MY,"authentication");o(hEe,"start");o(vC,"login");o(UC,"logout")});var kY=M((k0e,HY)=>{"use strict";var Ne=require("joi"),vY=require("fs-extra"),UY=require("path"),ds=ut(),xY=oe(),BY=(k(),v(W)),FY=Q(),{hdbErrors:pEe}=ge(),{HDB_ERROR_MSGS:_n}=pEe,Xo=/^[a-zA-Z0-9-_]+$/,EEe=/^[a-zA-Z0-9-_]+$/;HY.exports={getDropCustomFunctionValidator:gEe,setCustomFunctionValidator:SEe,addComponentValidator:AEe,dropCustomFunctionProjectValidator:bEe,packageComponentValidator:IEe,deployComponentValidator:NEe,setComponentFileValidator:TEe,getComponentFileValidator:yEe,dropComponentFileValidator:REe,addSSHKeyValidator:wEe,updateSSHKeyValidator:OEe,deleteSSHKeyValidator:CEe,setSSHKnownHostsValidator:PEe};function $T(e,t,r){try{let n=xY.get(BY.CONFIG_PARAMS.COMPONENTSROOT),s=UY.join(n,t);return vY.existsSync(s)?e?t:r.message(_n.PROJECT_EXISTS):e?r.message(_n.NO_PROJECT):t}catch(n){return FY.error(n),r.message(_n.VALIDATION_ERR)}}o($T,"checkProjectExists");function bp(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(bp,"checkFilePath");function _Ee(e,t,r,n){try{let s=xY.get(BY.CONFIG_PARAMS.COMPONENTSROOT),i=UY.join(s,e,t,r+".js");return vY.existsSync(i)?r:n.message(_n.NO_FILE)}catch(s){return FY.error(s),n.message(_n.VALIDATION_ERR)}}o(_Ee,"checkFileExists");function gEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Xo).custom(_Ee.bind(null,e.project,e.type)).custom(bp).required().messages({"string.pattern.base":_n.BAD_FILE_NAME})});return ds.validateBySchema(e,t)}o(gEe,"getDropCustomFunctionValidator");function SEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(bp).required(),function_content:Ne.string().required()});return ds.validateBySchema(e,t)}o(SEe,"setCustomFunctionValidator");function TEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),file:Ne.string().custom(bp).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(TEe,"setComponentFileValidator");function REe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),file:Ne.string().custom(bp).optional()});return ds.validateBySchema(e,t)}o(REe,"dropComponentFileValidator");function yEe(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(bp).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(yEe,"getComponentFileValidator");function AEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!1)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(AEe,"addComponentValidator");function bEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).custom($T.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(bEe,"dropCustomFunctionProjectValidator");function IEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return ds.validateBySchema(e,t)}o(IEe,"packageComponentValidator");function NEe(e){let t=Ne.object({project:Ne.string().pattern(Xo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return ds.validateBySchema(e,t)}o(NEe,"deployComponentValidator");function wEe(e){let t=Ne.object({name:Ne.string().pattern(EEe).required().messages({"string.pattern.base":_n.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return ds.validateBySchema(e,t)}o(wEe,"addSSHKeyValidator");function OEe(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return ds.validateBySchema(e,t)}o(OEe,"updateSSHKeyValidator");function CEe(e){let t=Ne.object({name:Ne.string().required()});return ds.validateBySchema(e,t)}o(CEe,"deleteSSHKeyValidator");function PEe(e){let t=Ne.object({known_hosts:Ne.string().required()});return ds.validateBySchema(e,t)}o(PEe,"setSSHKnownHostsValidator")});var wp=M((q0e,KY)=>{"use strict";var VT=require("joi"),uc=require("path"),of=require("fs-extra"),{exec:LEe,spawn:DEe}=require("child_process"),MEe=require("util"),vEe=MEe.promisify(LEe),af=(k(),v(W)),{PACKAGE_ROOT:UEe}=bt(),{handleHDBError:Ip,hdbErrors:xEe}=ge(),{HTTP_STATUS_CODES:Np}=xEe,jl=oe(),BEe=ut(),dc=Q(),{once:FEe}=require("events");jl.initSync();var xC=jl.get(af.CONFIG_PARAMS.COMPONENTSROOT),GY="npm install --force --omit=dev --json",HEe=`${GY} --dry-run`,kEe=jl.get(af.CONFIG_PARAMS.ROOTPATH),KT=uc.join(kEe,"ssh");KY.exports={installModules:VEe,auditModules:KEe,installAllRootModules:GEe,uninstallRootModule:qEe,linkHarperdb:$Ee,runCommand:cf};async function GEe(e=!1,t=jl.get(af.CONFIG_PARAMS.ROOTPATH)){await YT();let r=!1,n=process.env;of.pathExistsSync(KT)&&of.readdirSync(KT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+uc.join(KT,"config")+" -o UserKnownHostsFile="+uc.join(KT,"known_hosts"),...process.env},r=!0)});try{let s=jl.get(af.CONFIG_PARAMS.ROOTPATH),i=uc.join(s,"node_modules","harperdb");of.lstatSync(i).isSymbolicLink()&&of.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&dc.error("Error removing symlink:",s)}await cf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(GEe,"installAllRootModules");async function qEe(e){await cf(`npm uninstall ${e}`,jl.get(af.CONFIG_PARAMS.ROOTPATH))}o(qEe,"uninstallRootModule");async function $Ee(){await YT(),await cf(`npm link ${UEe}`,jl.get(af.CONFIG_PARAMS.ROOTPATH))}o($Ee,"linkHarperdb");async function cf(e,t=void 0,r=process.env){dc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=DEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();dc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();dc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await FEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(cf,"runCommand");async function VEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";dc.warn(t,e.projects);let r=VY(e);if(r)throw Ip(r,r.message,Np.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?HEe:GY;await YT(),await $Y(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=uc.join(xC,u),f,m=null;try{let{stdout:h,stderr:p}=await vEe(i,{cwd:d});f=h?h.replace(`
|
|
26
|
+
Database backup has not been removed and can be found here: ${s}`;lc.error(c),console.error(c)}(0,bC.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,Yl.remove)(s))}}async function iY(e){let t=await(0,lY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function rf(){}async function uY(e,t){console.log(`Copying database ${e} to ${t}`);let r=it()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=rf,m.primaryStore.remove=rf;for(let h in m.indices){let p=m.indices[h];p.put=rf,p.remove=rf}m.auditStore&&(m.auditStore.put=rf,m.auditStore.remove=rf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,oY.open)(new aY.default(t)),c=a.openDB(HT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:h}of s.getRange({transaction:d})){let p=h.is_hash_attribute||h.isPrimaryKey,_,g;if(p&&(_=h.compression,g=Gg(),g?h.compression=g:delete h.compression,_?.dictionary?.toString()===g?.dictionary?.toString()&&(_=null,g=null)),c.put(m,h),!(p||h.indexed))continue;let y=new cY.default(!p,p);y.encoding="binary",y.compression=_;let T=n.openDB(m,y);T.decoder=null,T.decoderCopies=!1,T.encoding="binary",y.compression=g;let R=a.openDB(m,y);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(T,R,p,d)}if(i){let m=n.openDB(HT.AUDIT_STORE_NAME,Em);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,h,p,_){let g=0,y=0,T=0,R=1e7,N=null;for(;R-- >0;)try{for(let C of m.getKeys({start:N,transaction:_}))try{N=C;let{value:G,version:z}=m.getEntry(C,{transaction:_});if(G?.length<14&&p){T++;continue}l=h.put(C,G,p?z:void 0),g++,_.openTimer&&(_.openTimer=0),y+=(C?.length||10)+G.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"delete records,",y,"bytes"),u=0)}catch(G){console.error("Error copying record",typeof C=="symbol"?"symbol":C,"from",e,"to",t,G)}console.log("finish copying, copied",g,"entries",T,"delete records,",y,"bytes");return}catch{if(typeof N=="string"){if(N==="z")return console.error("Reached end of dbi",N,"for",e,"to",t);N=N.slice(0,-2)+"z"}else if(typeof N=="number")N++;else return console.error("Unknown key type",N,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var oY,FT,Yl,bC,aY,cY,HT,lY,IC,lc,wC=le(()=>{Me();oY=require("lmdb"),FT=require("path"),Yl=require("fs-extra"),bC=w(ae()),aY=w(Nm()),cY=w(Im()),HT=w(Vt());k();Li();lY=w(Ua()),IC=w(wt()),lc=w(Q());o(kpe,"compactOnStart");o(iY,"getTotalDBRecordCount");o(rf,"noop");o(uY,"copyDb")});var sf=M((P0e,_Y)=>{"use strict";var Gpe=require("minimist"),{isMainThread:CC,parentPort:Tp,threadId:w0e}=require("worker_threads"),ht=(k(),v(Y)),no=Q(),PC=ie(),GT=MT(),kT=mr(),O0e=Ot(),hY=wt(),Si=gp(),dY=$d(),{compactOnStart:qpe}=(wC(),v(NC)),$pe=xc(),{restartWorkers:qT,onMessageByType:Vpe}=st(),{handleHDBError:Kpe,hdbErrors:Ype}=_e(),{HTTP_STATUS_CODES:Wpe}=Ype,Rp=ae(),{sendOperationToNode:fY,getThisNodeName:zpe,monitorNodeCAs:jpe}=(is(),v(Go)),{getHDBNodeTable:C0e}=(Dl(),v(Gw));Rp.initSync();var Sp=`Restarting HarperDB. This may take up to ${ht.RESTART_TIMEOUT_MS/1e3} seconds.`,Qpe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",mY="Clustering is not enabled so cannot be restarted",Jpe="Invalid service",nf,Us;_Y.exports={restart:pY,restartService:LC};CC&&Vpe(ht.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await LC({service:e.workerType}):pY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function pY(e){Us=Object.keys(e).length===0,nf=await Si.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB);let t=Gpe(process.argv);if(t.service){await LC(t);return}if(Us&&!nf){console.error(Qpe);return}if(Us&&console.log(Sp),nf){Si.enterPM2Mode(),no.notify(Sp);let r=$pe(Object.keys(ht.CONFIG_PARAM_MAP),!0);return PC.isEmptyOrZeroLength(Object.keys(r))||hY.updateConfigValue(void 0,void 0,r,!0,!0),Xpe(),Sp}return CC?(no.notify(Sp),Rp.get(ht.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await qpe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{qT()},50)):Tp.postMessage({type:ht.ITC_EVENT_TYPES.RESTART}),Sp}o(pY,"restart");async function LC(e){let{service:t}=e;if(ht.HDB_PROCESS_SERVICES[t]===void 0)throw Kpe(new Error,Jpe,Wpe.BAD_REQUEST,void 0,void 0,!0);if(Si.expectedRestartOfChildren(),nf=await Si.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB),!CC){e.replicated&&jpe(),Tp.postMessage({type:ht.ITC_EVENT_TYPES.RESTART,workerType:t}),Tp.ref(),await new Promise(s=>{Tp.on("message",i=>{i.type==="restart-complete"&&(s(),Tp.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===zpe())continue;let i;try{({job_id:i}=await fY(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let h=new Error("Timed out waiting for restart job to complete");h.replicated=n,c(h)}let m=(await fY(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let h=new Error(m.message);h.replicated=n,c(h)}},250)}))}return{replicated:n}}return}let r;switch(t){case ht.HDB_PROCESS_SERVICES.clustering:if(!Rp.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=mY;break}Us&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await EY();break;case ht.HDB_PROCESS_SERVICES.clustering_config:case ht.HDB_PROCESS_SERVICES["clustering config"]:if(!Rp.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=mY;break}Us&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Si.reloadClustering();break;case"custom_functions":case"custom functions":case ht.HDB_PROCESS_SERVICES.harperdb:case ht.HDB_PROCESS_SERVICES.http_workers:case ht.HDB_PROCESS_SERVICES.http:if(Us&&!nf){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Us&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),Us?await Si.restart(ht.PROCESS_DESCRIPTORS.HDB):await qT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),Us&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(LC,"restartService");async function Xpe(){await EY(),await Si.restart(ht.PROCESS_DESCRIPTORS.HDB),await PC.asyncSetTimeout(2e3),Rp.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OC(),Us&&(await kT.closeConnection(),process.exit(0))}o(Xpe,"restartPM2Mode");async function EY(){if(!hY.getConfigFromFile(ht.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await dY.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await GT.generateNatsConfig(!0),await Si.startClusteringProcesses(),await Si.startClusteringThreads(),await OC(),Us&&await kT.closeConnection();else{await GT.generateNatsConfig(!0),nf?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Si.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Si.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await dY.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await PC.asyncSetTimeout(3e3),await OC(),await kT.updateLocalStreams(),Us&&await kT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=qT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=qT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(EY,"restartClustering");async function OC(){await GT.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await GT.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(OC,"removeNatsConfig")});var OY=M((M0e,wY)=>{"use strict";var D0e=require("lodash"),Hn=(k(),v(Y)),{handleHDBError:gY,hdbErrors:Zpe}=_e(),{HDB_ERROR_MSGS:eEe,HTTP_STATUS_CODES:tEe}=Zpe,DC=Q();wY.exports={getRolePermissions:nEe};var Wl=Object.create(null),rEe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),yY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),AY=o((e=!1,t=!1,r=!1,n=!1)=>({[Hn.PERMS_CRUD_ENUM.READ]:e,[Hn.PERMS_CRUD_ENUM.INSERT]:t,[Hn.PERMS_CRUD_ENUM.UPDATE]:r,[Hn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),MC=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...AY(t,r,n,s)}),"tablePermsTemplate"),SY=o((e,t=AY())=>({attribute_name:e,describe:NY(t),[yp]:t[yp],[vC]:t[vC],[UC]:t[UC]}),"attrPermsTemplate"),TY=o((e,t=!1)=>({attribute_name:e,describe:t,[yp]:t}),"timestampAttrPermsTemplate"),{READ:yp,INSERT:vC,UPDATE:UC}=Hn.PERMS_CRUD_ENUM,bY=Object.values(Hn.PERMS_CRUD_ENUM),IY=[yp,vC,UC];function nEe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Hn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Wl[t]&&Wl[t].key===n)return Wl[t].perms;let s=sEe(e,r);return Wl[t]?Wl[t].key=n:Wl[t]=rEe(n),Wl[t].perms=s,s}catch(r){if(!e[Hn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Hn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Hn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw DC.error(n),DC.debug(r),gY(new Error,eEe.OUTDATED_PERMS_TRANSLATION_ERROR,tEe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
27
|
+
${r.stack}`;throw DC.error(n),gY(new Error)}}}o(nEe,"getRolePermissions");function sEe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Hn.SYSTEM_SCHEMA_NAME]=n[Hn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=iEe(t[i]);return}r[i]=yY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=oEe(c,l);r[i].describe||bY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=MC()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=MC()})}),r}o(sEe,"translateRolePermissions");function iEe(e){let t=yY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=MC(!0,!0,!0,!0,!0)}),t}o(iEe,"createStructureUserPermissions");function oEe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return Hn.TIME_STAMP_NAMES.includes(f)&&(m=TY(f,d[yp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=SY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=NY(d),s.attribute_permissions.push(d),c||aEe(d,l)}else if(u!==a){let d;Hn.TIME_STAMP_NAMES.includes(u)?d=TY(u):d=SY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=RY(s),s}else return e.describe=RY(e),e}o(oEe,"getTableAttrPerms");function RY(e){return bY.filter(t=>e[t]).length>0}o(RY,"getSchemaTableDescribePerm");function NY(e){return IY.filter(t=>e[t]).length>0}o(NY,"getAttributeDescribePerm");function aEe(e,t){IY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(aEe,"checkForHashPerms")});var Ap={};Oe(Ap,{authentication:()=>xY,bypassAuth:()=>EEe,login:()=>FC,logout:()=>HC,start:()=>_Ee});function EEe(){UY=!0}async function xY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?fEe?dEe:[]:uEe?lEe:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=_n.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Os([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return $T&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),$T&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if($T){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let _ of p)if(_.startsWith(h)){let g=_.indexOf(";");l=_.slice(h.length,g===-1?_.length:g),u=await CY.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new VT.AuthAuditLog(h,p,ya.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=_,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Zs.SUCCESS?xC.notify(g):xC.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&xC.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await De.getUser(h,null,e),d(h,Zs.SUCCESS,"mTLS")):cEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=zl.get(n),!f){let h=n.indexOf(" "),p=n.slice(0,h),_=n.slice(h+1),g,y;try{switch(p){case"Basic":let T=atob(_),R=T.indexOf(":");g=T.slice(0,R),y=T.slice(R+1),f=g||y?await De.getUser(g,y,e):null;break;case"Bearer":try{f=await gw(_)}catch(N){if(N.message==="invalid token")try{return await _S(_),c({status:-1})}catch{throw N}}break}}catch(T){return hEe&&(zl.get(_)||(zl.set(_,_),d(g,Zs.FAILURE,p))),c({status:401,body:ba({error:T.message},e)})}zl.set(n,f),mEe&&d(f.username,Zs.SUCCESS,p)}e.user=f}else u?.user?e.user=await De.getUser(u.user,null,e):(UY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,LY.getSuperUser)());$T&&(e.session.update=function(h){let p=_n.get(U.AUTHENTICATION_COOKIE_EXPIRES),_=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,DY.v4)();let g=_n.get(U.AUTHENTICATION_COOKIE_DOMAINS),y=p?new Date(Date.now()+(0,BC.convertToMS)(p)).toUTCString():pEe,T=g?.find(C=>r.host?.endsWith(C)),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${y}; HttpOnly`;T&&(N+=`; Domain=${T}`),_&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return _&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),h.id=l,CY.put(h,{expiresAt:p?Date.now()+(0,BC.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await De.authenticateUser(h,p,e);e.session.update({user:_&&(_.getId?.()??_.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&bs.loginPath?(m.status=302,m.headers.set("Location",bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Os);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function _Ee({server:e,port:t,securePort:r}){e.http(xY,t||r?{port:t,securePort:r}:{port:"all"}),PY||(PY=!0,setInterval(()=>{zl=new Map},_n.get(U.AUTHENTICATION_CACHETTL)).unref(),MY.user.addListener(()=>{zl=new Map}))}async function FC(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 HC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var LY,DY,_n,VT,MY,BC,vY,cEe,xC,lEe,uEe,dEe,fEe,CY,$T,UY,mEe,hEe,pEe,zl,PY,KT=le(()=>{LY=w(ts());Dr();Fu();Td();Me();DY=require("uuid"),_n=w(ae());k();VT=w(Q()),MY=w(sh());uh();BC=w(ie());Ro();vY=(0,VT.forComponent)("authentication"),{debug:cEe}=vY,xC=vY.withTag("auth-event");_n.initSync();lEe=_n.get(U.HTTP_CORSACCESSLIST),uEe=_n.get(U.HTTP_CORS),dEe=_n.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),fEe=_n.get(U.OPERATIONSAPI_NETWORK_CORS),CY=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),$T=_n.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,UY=process.env.AUTHENTICATION_AUTHORIZELOCAL??_n.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,mEe=_n.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,hEe=_n.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,pEe="Tue, 01 Oct 8307 19:33:20 GMT",zl=new Map;De.onInvalidatedUser(()=>{zl=new Map});o(EEe,"bypassAuth");o(xY,"authentication");o(_Ee,"start");o(FC,"login");o(HC,"logout")});var $Y=M(($0e,qY)=>{"use strict";var we=require("joi"),BY=require("fs-extra"),FY=require("path"),ds=dt(),HY=ae(),kY=(k(),v(Y)),GY=Q(),{hdbErrors:gEe}=_e(),{HDB_ERROR_MSGS:gn}=gEe,Xo=/^[a-zA-Z0-9-_]+$/,SEe=/^[a-zA-Z0-9-_]+$/;qY.exports={getDropCustomFunctionValidator:REe,setCustomFunctionValidator:yEe,addComponentValidator:NEe,dropCustomFunctionProjectValidator:wEe,packageComponentValidator:OEe,deployComponentValidator:CEe,setComponentFileValidator:AEe,getComponentFileValidator:IEe,dropComponentFileValidator:bEe,addSSHKeyValidator:PEe,updateSSHKeyValidator:LEe,deleteSSHKeyValidator:DEe,setSSHKnownHostsValidator:MEe};function YT(e,t,r){try{let n=HY.get(kY.CONFIG_PARAMS.COMPONENTSROOT),s=FY.join(n,t);return BY.existsSync(s)?e?t:r.message(gn.PROJECT_EXISTS):e?r.message(gn.NO_PROJECT):t}catch(n){return GY.error(n),r.message(gn.VALIDATION_ERR)}}o(YT,"checkProjectExists");function bp(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(bp,"checkFilePath");function TEe(e,t,r,n){try{let s=HY.get(kY.CONFIG_PARAMS.COMPONENTSROOT),i=FY.join(s,e,t,r+".js");return BY.existsSync(i)?r:n.message(gn.NO_FILE)}catch(s){return GY.error(s),n.message(gn.VALIDATION_ERR)}}o(TEe,"checkFileExists");function REe(e){let t=we.object({project:we.string().pattern(Xo).custom(YT.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(Xo).custom(TEe.bind(null,e.project,e.type)).custom(bp).required().messages({"string.pattern.base":gn.BAD_FILE_NAME})});return ds.validateBySchema(e,t)}o(REe,"getDropCustomFunctionValidator");function yEe(e){let t=we.object({project:we.string().pattern(Xo).custom(YT.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(bp).required(),function_content:we.string().required()});return ds.validateBySchema(e,t)}o(yEe,"setCustomFunctionValidator");function AEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),file:we.string().custom(bp).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(AEe,"setComponentFileValidator");function bEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),file:we.string().custom(bp).optional()});return ds.validateBySchema(e,t)}o(bEe,"dropComponentFileValidator");function IEe(e){let t=we.object({project:we.string().required(),file:we.string().custom(bp).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(IEe,"getComponentFileValidator");function NEe(e){let t=we.object({project:we.string().pattern(Xo).custom(YT.bind(null,!1)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(NEe,"addComponentValidator");function wEe(e){let t=we.object({project:we.string().pattern(Xo).custom(YT.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(wEe,"dropCustomFunctionProjectValidator");function OEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),skip_node_modules:we.boolean(),skip_symlinks:we.boolean()});return ds.validateBySchema(e,t)}o(OEe,"packageComponentValidator");function CEe(e){let t=we.object({project:we.string().pattern(Xo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),package:we.string().optional(),restart:we.alternatives().try(we.boolean(),we.string().valid("rolling")).optional()});return ds.validateBySchema(e,t)}o(CEe,"deployComponentValidator");function PEe(e){let t=we.object({name:we.string().pattern(SEe).required().messages({"string.pattern.base":gn.BAD_SSH_KEY_NAME}),key:we.string().required(),host:we.string().required(),hostname:we.string().required(),known_hosts:we.string().optional()});return ds.validateBySchema(e,t)}o(PEe,"addSSHKeyValidator");function LEe(e){let t=we.object({name:we.string().required(),key:we.string().required()});return ds.validateBySchema(e,t)}o(LEe,"updateSSHKeyValidator");function DEe(e){let t=we.object({name:we.string().required()});return ds.validateBySchema(e,t)}o(DEe,"deleteSSHKeyValidator");function MEe(e){let t=we.object({known_hosts:we.string().required()});return ds.validateBySchema(e,t)}o(MEe,"setSSHKnownHostsValidator")});var wp=M((K0e,zY)=>{"use strict";var WT=require("joi"),uc=require("path"),of=require("fs-extra"),{exec:vEe,spawn:UEe}=require("child_process"),xEe=require("util"),BEe=xEe.promisify(vEe),af=(k(),v(Y)),{PACKAGE_ROOT:FEe}=bt(),{handleHDBError:Ip,hdbErrors:HEe}=_e(),{HTTP_STATUS_CODES:Np}=HEe,jl=ae(),kEe=dt(),dc=Q(),{once:GEe}=require("events");jl.initSync();var kC=jl.get(af.CONFIG_PARAMS.COMPONENTSROOT),VY="npm install --force --omit=dev --json",qEe=`${VY} --dry-run`,$Ee=jl.get(af.CONFIG_PARAMS.ROOTPATH),zT=uc.join($Ee,"ssh");zY.exports={installModules:WEe,auditModules:zEe,installAllRootModules:VEe,uninstallRootModule:KEe,linkHarperdb:YEe,runCommand:cf};async function VEe(e=!1,t=jl.get(af.CONFIG_PARAMS.ROOTPATH)){await jT();let r=!1,n=process.env;of.pathExistsSync(zT)&&of.readdirSync(zT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+uc.join(zT,"config")+" -o UserKnownHostsFile="+uc.join(zT,"known_hosts"),...process.env},r=!0)});try{let s=jl.get(af.CONFIG_PARAMS.ROOTPATH),i=uc.join(s,"node_modules","harperdb");of.lstatSync(i).isSymbolicLink()&&of.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&dc.error("Error removing symlink:",s)}await cf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(VEe,"installAllRootModules");async function KEe(e){await cf(`npm uninstall ${e}`,jl.get(af.CONFIG_PARAMS.ROOTPATH))}o(KEe,"uninstallRootModule");async function YEe(){await jT(),await cf(`npm link ${FEe}`,jl.get(af.CONFIG_PARAMS.ROOTPATH))}o(YEe,"linkHarperdb");async function cf(e,t=void 0,r=process.env){dc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=UEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();dc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();dc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await GEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(cf,"runCommand");async function WEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";dc.warn(t,e.projects);let r=WY(e);if(r)throw Ip(r,r.message,Np.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?qEe:VY;await jT(),await YY(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=uc.join(kC,u),f,m=null;try{let{stdout:h,stderr:p}=await BEe(i,{cwd:d});f=h?h.replace(`
|
|
28
28
|
`,""):null,m=p?p.replace(`
|
|
29
|
-
`,""):null}catch(h){h.stderr?a[u].npm_error=
|
|
30
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(qY,"parseNPMStdErr");async function KEe(e){dc.info(`starting auditModules for request: ${e}`);let t=VY(e);if(t)throw Ip(t,t.message,Np.BAD_REQUEST);let{projects:r}=e;await YT(),await $Y(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=uc.join(xC,a);n[a]={npm_output:null,npm_error:null};try{let l=await cf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=qY(l.stderr)}}return dc.info(`finished auditModules with response ${n}`),n}o(KEe,"auditModules");async function YT(){return await cf("npm -v"),!0}o(YT,"checkNPMInstalled");async function $Y(e){if(!Array.isArray(e)||e.length===0)throw Ip(new Error,"projects argument must be an array with at least 1 element",Np.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=uc.join(xC,i.toString());if(!await of.pathExists(a)){t.push(i);continue}let l=uc.join(a,"package.json");await of.pathExists(l)||r.push(i)}if(t.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Np.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Np.BAD_REQUEST,void 0,void 0,!0)}o($Y,"checkProjectPaths");function VY(e){let t=VT.object({projects:VT.array().min(1).items(VT.string()).required(),dry_run:VT.boolean().default(!1)});return BEe.validateBySchema(e,t)}o(VY,"modulesValidator")});var FC=M((V0e,JY)=>{"use strict";var xs=require("fs-extra"),Cp=require("path"),Op=Q(),YY=ie(),{PACKAGE_ROOT:YEe}=bt(),BC=(k(),v(W)),QY=oe(),WEe=wt();JY.exports=zEe;async function zEe(){let e=jEe(),t=QY.get(BC.CONFIG_PARAMS.ROOTPATH),r=Cp.join(t,"package.json"),n={dependencies:{harperdb:"file:"+YEe}},s=Cp.join(t,"node_modules");xs.ensureDirSync(s);let i,a=!0,c=!1;try{i=xs.readJsonSync(r)}catch(l){if(YY.isEmptyOrZeroLength(e))return;if(l.code!==BC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!YY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=zY(u);n.dependencies[l]=d+u}if(!a){Op.notify("Installing components"),await jY(r,n,null),await WY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=zY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(xs.statSync(new URL(u+"/package.json")).mtimeMs>xs.statSync(r).mtimeMs){c=!0;break}}catch(m){Op.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Op.notify("Removing component",l),c=!0);c&&(Op.notify("Updating components."),await jY(r,n,i),await WY(t,e))}o(zEe,"installComponents");function WY(e,t){return Promise.all(t.map(({name:r})=>{let n=Cp.join(e,"node_modules",r),s=Cp.join(e,"components",r);if(xs.existsSync(n)&&xs.lstatSync(n).isDirectory())return xs.move(n,s,{overwrite:!0}).then(()=>{xs.symlink(s,n)})}))}o(WY,"moveModuleToComponents");function jEe(){let e=WEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(jEe,"getComponentsConfig");function zY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Cp.extname(e)||xs.existsSync(e)?"file:":"github:"}o(zY,"getPkgPrefix");async function jY(e,t,r){Op.trace("npm installing components package.json",t),xs.writeFileSync(e,JSON.stringify(t,null," "));try{await wp().installAllRootModules(QY.get(BC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?xs.writeFileSync(e,JSON.stringify(r,null," ")):xs.unlinkSync(e),n}}o(jY,"installPackages")});var tW={};we(tW,{packageDirectory:()=>QEe});function QEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];ZY.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,XY.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,eW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var XY,ZY,eW,rW=ce(()=>{XY=require("path"),ZY=w(require("tar-fs")),eW=require("node:zlib");o(QEe,"packageDirectory")});var GC=M(ir=>{"use strict";var Ie=require("fs-extra"),HC=require("fast-glob"),Oe=require("path"),JEe=require("tar-fs"),XEe=require("gunzip-maybe"),kC=require("normalize-path"),Hn=kY(),jt=Q(),gt=(k(),v(W)),sr=oe(),WT=wt(),ZEe=ie(),{PACKAGE_ROOT:e_e}=bt(),{handleHDBError:Qt,hdbErrors:t_e}=ge(),{basename:r_e}=require("path"),n_e=FC(),sW=oe(),{Readable:s_e}=require("stream"),{isMainThread:i_e}=require("worker_threads"),{HDB_ERROR_MSGS:Ql,HTTP_STATUS_CODES:Jt}=t_e,iW=nt(),{replicateOperation:Ti}=(is(),v(Go)),{packageDirectory:o_e}=(rW(),v(tW)),nW=wp(),a_e=Oe.join(e_e,"application-template"),c_e=sr.get(gt.CONFIG_PARAMS.ROOTPATH),fc=Oe.join(c_e,"ssh"),Zo=Oe.join(fc,"known_hosts");function l_e(){jt.trace("getting custom api status");let e={};try{e={port:sr.get(gt.CONFIG_PARAMS.HTTP_PORT),directory:sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Qt(new Error,Ql.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,t)}return e}o(l_e,"customFunctionsStatus");function u_e(){jt.trace("getting custom api endpoints");let e={},t=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT);try{HC.sync(kC(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:HC.sync(kC(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:HC.sync(kC(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,Ql.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,r)}return e}o(u_e,"getCustomFunctions");function d_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Hn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("getting custom api endpoint file content");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Oe.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw Qt(new Error,Ql.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}o(d_e,"getCustomFunction");async function f_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Hn.setCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("setting custom function file content");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Oe.join(r,n,s,i+".js"),a);let c=await Ti(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,Ql.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}o(f_e,"setCustomFunction");async function m_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Hn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function file");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Oe.join(r,n,s,i+".js"));let a=await Ti(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Qt(new Error,Ql.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,a)}}o(m_e,"dropCustomFunction");async function h_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Hn.addComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("adding component");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(a_e,s);let i=await Ti(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Qt(new Error,Ql.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,s)}}o(h_e,"addComponent");async function p_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Hn.dropCustomFunctionProjectValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function project");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=sr.get(gt.CONFIG_PARAMS.APPS);if(!ZEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return WT.updateConfigValue(gt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await Ti(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Qt(new Error,Ql.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,jt.ERR,i)}}o(p_e,"dropCustomFunctionProject");async function E_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Hn.packageComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;jt.trace("packaging component",n);let s;try{s=await Ie.realpath(Oe.join(r,n))}catch(a){if(a.code!==gt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Oe.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===gt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await o_e(s,e)).toString("base64");return{project:n,payload:i}}o(E_e,"packageComponent");async function __e(e){e.project?e.project=Oe.parse(e.project).name:e.package&&(e.project=g_e(e.package));let t=Hn.deployComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(jt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Oe.join(r,n),i="file:"+c,await Ie.emptyDir(c);let _=s_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,y)=>{_.pipe(XEe()).pipe(JEe.extract(c,{finish:T})).on("error",y)});let g=await Ie.readdir(c);g.length===1&&g[0]==="package"&&(await Ie.copy(Oe.join(c,"package"),c),await Ie.remove(Oe.join(c,"package")));let R=Oe.join(c,"node_modules");a?await nW.runCommand(a,c):Ie.existsSync(R)||await nW.installAllRootModules(!1,c)}else{await WT.addConfig(n,{package:i}),await n_e();let _=sW.get(gt.CONFIG_PARAMS.ROOTPATH);c=Oe.join(_,"node_modules",n)}if(i_e)return;let l=new Map;l.isWorker=!0;let u=(lf(),v(Pp)),d;u.setErrorReporter(_=>d=_);let f=r_e(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;jt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await Ti(e);if(e.restart===!0)iW.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await($C(),v(qC)).executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}o(__e,"deployComponent");function g_e(e){if(e.startsWith("git+ssh://"))return Oe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Oe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Oe.join(e,"package.json"),"utf8"));return Oe.basename(t)}catch{}return Oe.basename(e)}o(g_e,"getProjectNameFromPackage");async function S_e(){let e=o(async(s,i)=>{try{let a=await Ie.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Oe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ie.stat(u),f={name:Oe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return jt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{name:sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:[]}),n=(lf(),v(Pp)).componentErrors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}o(S_e,"getComponents");async function T_e(e){let t=Hn.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let n=WT.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(sW.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules"):sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Oe.join(n,e.project,e.file));return{message:await Ie.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===gt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}o(T_e,"getComponentFile");async function R_e(e){let t=Hn.setComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ie.ensureFile(n),await Ie.outputFile(n,e.payload,r)):await Ie.ensureDir(n);let s=await Ti(e);return s.message="Successfully set component: "+e.file,s}o(R_e,"setComponentFile");async function y_e(e){let t=Hn.dropComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Oe.join(r,n):r,i=Oe.join(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),s),a=Oe.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Oe.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ie.pathExists(c)){let u=JSON.parse(await Ie.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ie.writeFile(c,JSON.stringify(u,null,2),"utf8")}WT.deleteConfigFromFile([r]);let l=await Ti(e);return e.restart===!0?(iW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(y_e,"dropComponent");async function A_e(e){let t=Hn.addSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;jt.trace("adding ssh key",r);let c=Oe.join(fc,r+".key"),l=Oe.join(fc,"config");if(await Ie.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ie.outputFile(c,n),await Ie.chmod(c,"0600");let u=`#${r}
|
|
29
|
+
`,""):null}catch(h){h.stderr?a[u].npm_error=KY(h.stderr):a[u].npm_error=h.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return dc.info(`finished installModules with response ${a}`),a.warning=t,a}o(WEe,"installModules");function KY(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
30
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(KY,"parseNPMStdErr");async function zEe(e){dc.info(`starting auditModules for request: ${e}`);let t=WY(e);if(t)throw Ip(t,t.message,Np.BAD_REQUEST);let{projects:r}=e;await jT(),await YY(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=uc.join(kC,a);n[a]={npm_output:null,npm_error:null};try{let l=await cf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=KY(l.stderr)}}return dc.info(`finished auditModules with response ${n}`),n}o(zEe,"auditModules");async function jT(){return await cf("npm -v"),!0}o(jT,"checkNPMInstalled");async function YY(e){if(!Array.isArray(e)||e.length===0)throw Ip(new Error,"projects argument must be an array with at least 1 element",Np.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=uc.join(kC,i.toString());if(!await of.pathExists(a)){t.push(i);continue}let l=uc.join(a,"package.json");await of.pathExists(l)||r.push(i)}if(t.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Np.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ip(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Np.BAD_REQUEST,void 0,void 0,!0)}o(YY,"checkProjectPaths");function WY(e){let t=WT.object({projects:WT.array().min(1).items(WT.string()).required(),dry_run:WT.boolean().default(!1)});return kEe.validateBySchema(e,t)}o(WY,"modulesValidator")});var qC=M((W0e,eW)=>{"use strict";var xs=require("fs-extra"),Cp=require("path"),Op=Q(),jY=ie(),{PACKAGE_ROOT:jEe}=bt(),GC=(k(),v(Y)),ZY=ae(),QEe=wt();eW.exports=JEe;async function JEe(){let e=XEe(),t=ZY.get(GC.CONFIG_PARAMS.ROOTPATH),r=Cp.join(t,"package.json"),n={dependencies:{harperdb:"file:"+jEe}},s=Cp.join(t,"node_modules");xs.ensureDirSync(s);let i,a=!0,c=!1;try{i=xs.readJsonSync(r)}catch(l){if(jY.isEmptyOrZeroLength(e))return;if(l.code!==GC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!jY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=JY(u);n.dependencies[l]=d+u}if(!a){Op.notify("Installing components"),await XY(r,n,null),await QY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=JY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(xs.statSync(new URL(u+"/package.json")).mtimeMs>xs.statSync(r).mtimeMs){c=!0;break}}catch(m){Op.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Op.notify("Removing component",l),c=!0);c&&(Op.notify("Updating components."),await XY(r,n,i),await QY(t,e))}o(JEe,"installComponents");function QY(e,t){return Promise.all(t.map(({name:r})=>{let n=Cp.join(e,"node_modules",r),s=Cp.join(e,"components",r);if(xs.existsSync(n)&&xs.lstatSync(n).isDirectory())return xs.move(n,s,{overwrite:!0}).then(()=>{xs.symlink(s,n)})}))}o(QY,"moveModuleToComponents");function XEe(){let e=QEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(XEe,"getComponentsConfig");function JY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Cp.extname(e)||xs.existsSync(e)?"file:":"github:"}o(JY,"getPkgPrefix");async function XY(e,t,r){Op.trace("npm installing components package.json",t),xs.writeFileSync(e,JSON.stringify(t,null," "));try{await wp().installAllRootModules(ZY.get(GC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?xs.writeFileSync(e,JSON.stringify(r,null," ")):xs.unlinkSync(e),n}}o(XY,"installPackages")});var sW={};Oe(sW,{packageDirectory:()=>ZEe});function ZEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];rW.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,tW.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,nW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var tW,rW,nW,iW=le(()=>{tW=require("path"),rW=w(require("tar-fs")),nW=require("node:zlib");o(ZEe,"packageDirectory")});var KC=M(ir=>{"use strict";var Ne=require("fs-extra"),$C=require("fast-glob"),Ce=require("path"),e_e=require("tar-fs"),t_e=require("gunzip-maybe"),VC=require("normalize-path"),kn=$Y(),jt=Q(),gt=(k(),v(Y)),sr=ae(),QT=wt(),r_e=ie(),{PACKAGE_ROOT:n_e}=bt(),{handleHDBError:Qt,hdbErrors:s_e}=_e(),{basename:i_e}=require("path"),o_e=qC(),aW=ae(),{Readable:a_e}=require("stream"),{isMainThread:c_e}=require("worker_threads"),{HDB_ERROR_MSGS:Ql,HTTP_STATUS_CODES:Jt}=s_e,cW=st(),{replicateOperation:Ti}=(is(),v(Go)),{packageDirectory:l_e}=(iW(),v(sW)),oW=wp(),u_e=Ce.join(n_e,"application-template"),d_e=sr.get(gt.CONFIG_PARAMS.ROOTPATH),fc=Ce.join(d_e,"ssh"),Zo=Ce.join(fc,"known_hosts");function f_e(){jt.trace("getting custom api status");let e={};try{e={port:sr.get(gt.CONFIG_PARAMS.HTTP_PORT),directory:sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Qt(new Error,Ql.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,t)}return e}o(f_e,"customFunctionsStatus");function m_e(){jt.trace("getting custom api endpoints");let e={},t=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT);try{$C.sync(VC(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:$C.sync(VC(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:$C.sync(VC(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,Ql.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,r)}return e}o(m_e,"getCustomFunctions");function h_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=kn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("getting custom api endpoint file content");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Ce.join(r,n,s,i+".js");try{return Ne.readFileSync(a,{encoding:"utf8"})}catch(c){throw Qt(new Error,Ql.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}o(h_e,"getCustomFunction");async function p_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=kn.setCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("setting custom function file content");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ne.outputFileSync(Ce.join(r,n,s,i+".js"),a);let c=await Ti(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,Ql.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}o(p_e,"setCustomFunction");async function E_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=kn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function file");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ne.unlinkSync(Ce.join(r,n,s,i+".js"));let a=await Ti(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Qt(new Error,Ql.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,a)}}o(E_e,"dropCustomFunction");async function __e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=kn.addComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("adding component");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ce.join(r,n);Ne.mkdirSync(s,{recursive:!0}),Ne.copySync(u_e,s);let i=await Ti(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Qt(new Error,Ql.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,s)}}o(__e,"addComponent");async function g_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=kn.dropCustomFunctionProjectValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function project");let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=sr.get(gt.CONFIG_PARAMS.APPS);if(!r_e.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return QT.updateConfigValue(gt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Ce.join(r,n);Ne.rmSync(i,{recursive:!0});let a=await Ti(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Qt(new Error,Ql.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,jt.ERR,i)}}o(g_e,"dropCustomFunctionProject");async function S_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=kn.packageComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;jt.trace("packaging component",n);let s;try{s=await Ne.realpath(Ce.join(r,n))}catch(a){if(a.code!==gt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ne.realpath(Ce.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===gt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await l_e(s,e)).toString("base64");return{project:n,payload:i}}o(S_e,"packageComponent");async function T_e(e){e.project?e.project=Ce.parse(e.project).name:e.package&&(e.project=R_e(e.package));let t=kn.deployComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(jt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Ce.join(r,n),i="file:"+c,await Ne.emptyDir(c);let _=a_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,R)=>{_.pipe(t_e()).pipe(e_e.extract(c,{finish:T})).on("error",R)});let g=await Ne.readdir(c);g.length===1&&g[0]==="package"&&(await Ne.copy(Ce.join(c,"package"),c),await Ne.remove(Ce.join(c,"package")));let y=Ce.join(c,"node_modules");a?await oW.runCommand(a,c):Ne.existsSync(y)||await oW.installAllRootModules(!1,c)}else{await QT.addConfig(n,{package:i}),await o_e();let _=aW.get(gt.CONFIG_PARAMS.ROOTPATH);c=Ce.join(_,"node_modules",n)}if(c_e)return;let l=new Map;l.isWorker=!0;let u=(lf(),v(Pp)),d;u.setErrorReporter(_=>d=_);let f=i_e(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;jt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await Ti(e);if(e.restart===!0)cW.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await(WC(),v(YC)).executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}o(T_e,"deployComponent");function R_e(e){if(e.startsWith("git+ssh://"))return Ce.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Ce.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ne.readFileSync(Ce.join(e,"package.json"),"utf8"));return Ce.basename(t)}catch{}return Ce.basename(e)}o(R_e,"getProjectNameFromPackage");async function y_e(){let e=o(async(s,i)=>{try{let a=await Ne.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Ce.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ne.stat(u),f={name:Ce.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return jt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),{name:sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT).split(Ce.sep).slice(-1).pop(),entries:[]}),n=(lf(),v(Pp)).componentErrors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}o(y_e,"getComponents");async function A_e(e){let t=kn.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let n=QT.getConfigObj()[e.project]||e.project==="harperdb"?Ce.join(aW.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules"):sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ne.stat(Ce.join(n,e.project,e.file));return{message:await Ne.readFile(Ce.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===gt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ce.join(e.project,e.file)}'`):i}}o(A_e,"getComponentFile");async function b_e(e){let t=kn.setComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Ce.join(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ne.ensureFile(n),await Ne.outputFile(n,e.payload,r)):await Ne.ensureDir(n);let s=await Ti(e);return s.message="Successfully set component: "+e.file,s}o(b_e,"setComponentFile");async function I_e(e){let t=kn.dropComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Ce.join(r,n):r,i=Ce.join(sr.get(gt.CONFIG_PARAMS.COMPONENTSROOT),s),a=Ce.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ne.pathExists(a)&&await Ne.unlink(a),await Ne.pathExists(i)&&await Ne.remove(i);let c=Ce.join(sr.get(gt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ne.pathExists(c)){let u=JSON.parse(await Ne.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ne.writeFile(c,JSON.stringify(u,null,2),"utf8")}QT.deleteConfigFromFile([r]);let l=await Ti(e);return e.restart===!0?(cW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(I_e,"dropComponent");async function N_e(e){let t=kn.addSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;jt.trace("adding ssh key",r);let c=Ce.join(fc,r+".key"),l=Ce.join(fc,"config");if(await Ne.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ne.outputFile(c,n),await Ne.chmod(c,"0600");let u=`#${r}
|
|
31
31
|
Host ${s}
|
|
32
32
|
HostName ${i}
|
|
33
33
|
User git
|
|
34
34
|
IdentityFile ${c}
|
|
35
|
-
IdentitiesOnly yes`;await
|
|
36
|
-
`+u):await
|
|
37
|
-
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(Zo,a);let f=await Ti(e);return f.message=`Added ssh key: ${r}${d}`,f}o(A_e,"addSSHKey");async function b_e(e){let t=Hn.updateSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n}=e;jt.trace("updating ssh key",r);let s=Oe.join(fc,r+".key");if(!await Ie.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ie.outputFile(s,n);let i=await Ti(e);return i.message=`Updated ssh key: ${r}`,i}o(b_e,"updateSSHKey");async function I_e(e){let t=Hn.deleteSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r}=e;jt.trace("deleting ssh key",r);let n=Oe.join(fc,r+".key"),s=Oe.join(fc,"config");if(!await Ie.pathExists(n))throw new Error("Key does not exist");let i=await Ie.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ie.outputFile(s,i),Ie.removeSync(n);let c=await Ti(e);return c.message=`Deleted ssh key: ${r}`,c}o(I_e,"deleteSSHKey");async function N_e(e){let t=[];return await Ie.pathExists(fc)&&(await Ie.readdir(fc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(N_e,"listSSHKeys");async function w_e(e){let t=Hn.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(Zo,r);let n=await Ti(e);return n.message="Known hosts successfully set",n}o(w_e,"setSSHKnownHosts");async function O_e(e){return await Ie.pathExists(Zo)?{known_hosts:await Ie.readFile(Zo,"utf8")}:{known_hosts:null}}o(O_e,"getSSHKnownHosts");ir.customFunctionsStatus=l_e;ir.getCustomFunctions=u_e;ir.getCustomFunction=d_e;ir.setCustomFunction=f_e;ir.dropCustomFunction=m_e;ir.addComponent=h_e;ir.dropCustomFunctionProject=p_e;ir.packageComponent=E_e;ir.deployComponent=__e;ir.getComponents=S_e;ir.getComponentFile=T_e;ir.setComponentFile=R_e;ir.dropComponent=y_e;ir.addSSHKey=A_e;ir.updateSSHKey=b_e;ir.deleteSSHKey=I_e;ir.listSSHKeys=N_e;ir.setSSHKnownHosts=w_e;ir.getSSHKnownHosts=O_e});var VC=M((j0e,aW)=>{"use strict";var Bs=require("joi"),oW=ut();aW.exports={readTransactionLogValidator:C_e,deleteTransactionLogsBeforeValidator:P_e};function C_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),from:Bs.date().timestamp(),to:Bs.date().timestamp(),limit:Bs.number().min(1)});return oW.validateBySchema(e,t)}o(C_e,"readTransactionLogValidator");function P_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),timestamp:Bs.date().timestamp().required()});return oW.validateBySchema(e,t)}o(P_e,"deleteTransactionLogsBeforeValidator")});var QT=M((J0e,mW)=>{"use strict";var KC=(k(),v(W)),Lp=mr(),cW=ie(),lW=oe(),uW=$i(),dW=Q(),{handleHDBError:zT,hdbErrors:L_e}=ge(),{HTTP_STATUS_CODES:jT}=L_e,{readTransactionLogValidator:D_e,deleteTransactionLogsBeforeValidator:M_e}=VC(),fW=Jn(),v_e="Logs successfully deleted from transaction log.",U_e="All logs successfully deleted from transaction log.";mW.exports={readTransactionLog:x_e,deleteTransactionLogsBefore:F_e};async function x_e(e){let t=D_e(e);if(t)throw zT(t,t.message,jT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=cW.checkSchemaTableExist(e.database,e.table);if(r)throw zT(new Error,r,jT.NOT_FOUND,void 0,void 0,!0);return lW.get(KC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await B_e(e):(dW.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),fW.readAuditLog(e))}o(x_e,"readTransactionLog");async function*B_e(e){let t=uW.createNatsTableStreamName(e.database,e.table),r=await Lp.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===KC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(B_e,"readTransactionLogNats");async function F_e(e){let t=M_e(e);if(t)throw zT(t,t.message,jT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!lW.get(KC.CONFIG_PARAMS.CLUSTERING_ENABLED))return dW.info("Delete transaction logs called for Plexus"),fW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=cW.checkSchemaTableExist(r,n);if(i)throw zT(new Error,i,jT.NOT_FOUND,void 0,void 0,!0);let a=uW.createNatsTableStreamName(r,n),{jsm:c}=await Lp.getNATSReferences(),l=await Lp.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=v_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=U_e):f=(await Lp.viewStream(a,parseInt(s),1))[0].nats_sequence,await Lp.purgeTableStream(r,n,{seq:f}),d}o(F_e,"deleteTransactionLogsBefore")});var jC={};we(jC,{describeMetric:()=>SW,describeMetricOp:()=>zC,get:()=>_W,getOp:()=>YC,listMetrics:()=>gW,listMetricsOp:()=>WC});async function k_e(e){return(await yg().get(e)).hostname}function hW(e,t){return e.length===0||e.includes(t)}function YC(e){return Dp.trace?.("get_analytics request:",e),_W(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function EW(e){return"conditions"in e?{...e,conditions:e.conditions.map(EW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function _W(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(EW));let a=t??[];hW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),Dp.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],hW(a,"node")&&(Dp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await k_e(d)),Dp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function WC(e){return gW(e.metric_types,e.custom_metrics_window)}async function gW(e=["builtin"],t=H_e){let r=[],n=Object.values(vo);if(e.includes("builtin")&&(r=n),e.includes("custom")){let i=[{attribute:"id",comparator:"greater_than",value:Date.now()-t}],a=n.map(d=>({attribute:"metric",comparator:"not_equal",value:d}));i.push(...a);let c={select:["metric"],conditions:i},l=new Set,u=await databases.system.hdb_analytics.search(c);for await(let d of u)l.add(d.metric);r.push(...Array.from(l.values()))}return r}function zC(e){return SW(e.metric)}async function SW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Dp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var pW,H_e,Dp,QC=ce(()=>{pW=w(Q());cN();lN();H_e=1e3*60*60*24*7,Dp=(0,pW.forComponent)("analytics").conditional;o(k_e,"lookupHostname");o(hW,"isSelected");o(YC,"getOp");o(EW,"conformCondition");o(_W,"get");o(WC,"listMetricsOp");o(gW,"listMetrics");o(zC,"describeMetricOp");o(SW,"describeMetric")});var JT,XT,Mp,ZT=ce(()=>{JT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},XT=Object.keys(JT),Mp="primary"});function RW(e){return TW.validateBySchema(e,V_e)}var vp,TW,G_e,q_e,$_e,V_e,yW=ce(()=>{vp=w(require("joi")),TW=w(ut());ZT();G_e=XT,q_e=Object.entries(JT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),$_e=o(()=>{let e=vp.default.string().min(1).max(512);return Object.entries(JT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:vp.default.string().valid(...r.allowedValues).messages({"any.only":q_e[t]})}))}),e.required()},"createStatusValidationSchema"),V_e=vp.default.object({id:vp.default.string().valid(...G_e).required(),status:$_e()});o(RW,"validateStatus")});var tP={};we(tP,{DEFAULT_STATUS_ID:()=>Mp,STATUS_IDS:()=>XT,Status:()=>ea,clear:()=>XC,get:()=>ZC,set:()=>eP});function xp(){return JC||(JC=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),JC}function XC({id:e}){return Up.debug?.("clearStatus",e),xp().delete(e)}function Y_e(){return Up.debug?.("getAllStatus"),xp().get({})}function ZC({id:e}){return e?(Up.debug?.("getStatus",e),xp().get(e)):(Up.debug?.("getStatus","all"),Y_e())}function eP({status:e,id:t=Mp}){let r=RW({status:e,id:t});if(r)throw(0,eR.handleHDBError)(r,r.message,K_e.BAD_REQUEST);return Up.debug?.("setStatus",t,e),xp().put(t,{status:e})}var eR,AW,K_e,JC,ea,Up,Bp=ce(()=>{Me();eR=w(ge()),AW=w(ei());yW();ZT();ZT();({HTTP_STATUS_CODES:K_e}=eR.hdbErrors);o(xp,"getStatusTable");ea={get primaryStore(){return xp().primaryStore}},Up=(0,AW.loggerWithTag)("status");o(XC,"clearStatus");o(Y_e,"getAllStatus");o(ZC,"getStatus");o(eP,"setStatus")});var IW=M((pxe,bW)=>{"use strict";var rP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};bW.exports=rP});var wW=M((_xe,NW)=>{"use strict";var nP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};NW.exports=nP});var iP=M((Sxe,CW)=>{"use strict";var OW=IW(),W_e=wW(),{HDB_ERROR_MSGS:z_e}=tn(),sP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=z_e.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new OW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new W_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new OW(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};CW.exports=sP});var sR=M((Rxe,YW)=>{"use strict";var oP=Dn(),tR=sn(),Fs=ep(),kp=Ua(),aP=El(),j_e=uO(),Q_e=MV(),Gp=ts(),rR=Oh(),Nr=Q(),J_e=pO(),X_e=pT(),Z_e=qO(),ege=_T(),tge=KO(),rge=YO(),nge=jO(),sge=JO(),cP=yT(),ta=ie(),ige=dK(),lP=uC(),DW=sf(),gn=(k(),v(W)),MW=IY(),oge=$d(),vW=(Td(),v(vh)),UW=(qT(),v(Ap)),xW=wt(),Er=GC(),age=require("alasql"),BW=QT(),FW=wp(),uf=as(),HW=(Kd(),v(Vd)),uP=(QC(),v(jC)),dP=(Bp(),v(tP)),kW=iP(),{handleHDBError:kn,hdbErrors:GW}=ge(),{HDB_ERROR_MSGS:Jr,HTTP_STATUS_CODES:Fp}=GW,{cleanupOrphanBlobs:cge}=ep(),X=new Map,qW="delete",mc="insert",Hs="read",Jl="update",Hp="describe",PW=kp.describeSchema.name,LW=kp.describeTable.name,$W={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},lge={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},uge="catchup",dge="handleGetJob",fge="handleGetJobsByStartDate",nR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mge=[Fs.createTable.name,Fs.createAttribute.name,Fs.dropTable.name,Fs.dropAttribute.name],VW={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},te=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};X.set(oP.insert.name,new te(!1,[mc]));X.set(oP.update.name,new te(!1,[Jl]));X.set(oP.upsert.name,new te(!1,[mc,Jl]));X.set(tR.searchByConditions.name,new te(!1,[Hs]));X.set(tR.searchByHash.name,new te(!1,[Hs]));X.set(tR.searchByValue.name,new te(!1,[Hs]));X.set(tR.search.name,new te(!1,[Hs]));X.set(Fs.createSchema.name,new te(!0,[]));X.set(Fs.createTable.name,new te(!0,[]));X.set(Fs.createAttribute.name,new te(!1,[mc]));X.set(Fs.dropSchema.name,new te(!0,[]));X.set(Fs.dropTable.name,new te(!0,[]));X.set(Fs.dropAttribute.name,new te(!0,[]));X.set(kp.describeSchema.name,new te(!1,[Hs]));X.set(kp.describeTable.name,new te(!1,[Hs]));X.set(aP.deleteRecord.name,new te(!1,[qW]));X.set(Gp.addUser.name,new te(!0,[]));X.set(Gp.alterUser.name,new te(!0,[]));X.set(Gp.dropUser.name,new te(!0,[]));X.set(Gp.listUsersExternal.name,new te(!0,[]));X.set(rR.listRoles.name,new te(!0,[]));X.set(rR.addRole.name,new te(!0,[]));X.set(rR.alterRole.name,new te(!0,[]));X.set(rR.dropRole.name,new te(!0,[]));X.set(J_e.name,new te(!0,[]));X.set(X_e.name,new te(!0,[]));X.set(Z_e.name,new te(!0,[]));X.set(ege.name,new te(!0,[]));X.set(tge.name,new te(!0,[]));X.set(rge.name,new te(!0,[]));X.set(cP.setRoutes.name,new te(!0,[]));X.set(cP.getRoutes.name,new te(!0,[]));X.set(cP.deleteRoutes.name,new te(!0,[]));X.set(xW.setConfiguration.name,new te(!0,[]));X.set(nge.clusterStatus.name,new te(!0,[]));X.set(sge.name,new te(!0,[]));X.set(lP.getFingerprint.name,new te(!0,[]));X.set(lP.setLicense.name,new te(!0,[]));X.set(aP.deleteFilesBefore.name,new te(!0,[]));X.set(aP.deleteAuditLogsBefore.name,new te(!0,[]));X.set(DW.restart.name,new te(!0,[]));X.set(DW.restartService.name,new te(!0,[]));X.set(j_e.name,new te(!0,[]));X.set(Q_e.name,new te(!0,[Hs]));X.set(cge.name,new te(!0,[]));X.set(oge.systemInformation.name,new te(!0,[]));X.set(xW.getConfiguration.name,new te(!0,[]));X.set(BW.readTransactionLog.name,new te(!0,[]));X.set(BW.deleteTransactionLogsBefore.name,new te(!0,[]));X.set(FW.installModules.name,new te(!0,[]));X.set(FW.auditModules.name,new te(!0,[]));X.set(uf.createCsr.name,new te(!0,[]));X.set(uf.signCertificate.name,new te(!0,[]));X.set(uf.listCertificates.name,new te(!0,[]));X.set(uf.addCertificate.name,new te(!0,[]));X.set(uf.removeCertificate.name,new te(!0,[]));X.set(uf.getKey.name,new te(!0,[]));X.set(HW.addNodeBack.name,new te(!0,[]));X.set(HW.removeNodeBack.name,new te(!0,[]));X.set(uP.getOp.name,new te(!1,[Hs]));X.set(uP.listMetricsOp.name,new te(!1,[Hs]));X.set(uP.describeMetricOp.name,new te(!1,[Hs]));X.set(dP.clear.name,new te(!0,[]));X.set(dP.get.name,new te(!0,[]));X.set(dP.set.name,new te(!0,[]));X.set(vW.createTokens.name,new te(!1,[]));X.set(vW.refreshOperationToken.name,new te(!1,[]));X.set(UW.login.name,new te(!1,[]));X.set(UW.logout.name,new te(!1,[]));X.set(Er.customFunctionsStatus.name,new te(!0,[]));X.set(Er.getCustomFunctions.name,new te(!0,[]));X.set(Er.getComponents.name,new te(!0,[]));X.set(Er.getComponentFile.name,new te(!0,[]));X.set(Er.setComponentFile.name,new te(!0,[]));X.set(Er.dropComponent.name,new te(!0,[]));X.set(Er.getCustomFunction.name,new te(!0,[]));X.set(Er.setCustomFunction.name,new te(!0,[]));X.set(Er.dropCustomFunction.name,new te(!0,[]));X.set(Er.addComponent.name,new te(!0,[]));X.set(Er.dropCustomFunctionProject.name,new te(!0,[]));X.set(Er.packageComponent.name,new te(!0,[]));X.set(Er.deployComponent.name,new te(!0,[]));X.set(Er.addSSHKey.name,new te(!0,[]));X.set(Er.updateSSHKey.name,new te(!0,[]));X.set(Er.deleteSSHKey.name,new te(!0,[]));X.set(Er.listSSHKeys.name,new te(!0,[]));X.set(Er.setSSHKnownHosts.name,new te(!0,[]));X.set(Er.getSSHKnownHosts.name,new te(!0,[]));X.set(lP.getRegistrationInfo.name,new te(!1,[]));X.set(Gp.userInfo.name,new te(!1,[]));X.set(kp.describeAll.name,new te(!1,[]));X.set(dge,new te(!1,[]));X.set(fge,new te(!0,[]));X.set(uge,new te(!0,[]));X.set(nR.CSV_DATA_LOAD,new te(!1,[mc,Jl]));X.set(nR.CSV_URL_LOAD,new te(!1,[mc,Jl]));X.set(nR.CSV_FILE_LOAD,new te(!1,[mc,Jl]));X.set(nR.IMPORT_FROM_S3,new te(!1,[mc,Jl]));X.set(VW.EXPORT_TO_S3,new te(!0,[]));X.set(VW.EXPORT_LOCAL,new te(!0,[]));X.set(gn.VALID_SQL_OPS_ENUM.DELETE,new te(!1,[qW]));X.set(gn.VALID_SQL_OPS_ENUM.SELECT,new te(!1,[Hs]));X.set(gn.VALID_SQL_OPS_ENUM.INSERT,new te(!1,[mc]));X.set(gn.VALID_SQL_OPS_ENUM.UPDATE,new te(!1,[Jl]));YW.exports={verifyPerms:pge,verifyPermsAst:hge,verifyBulkLoadAttributePerms:_ge};function hge(e,t,r){if(ta.isEmptyOrZeroLength(e))throw Nr.info("verify_perms_ast has an empty user parameter"),kn(new Error);if(ta.isEmptyOrZeroLength(t))throw Nr.info("verify_perms_ast has an empty user parameter"),kn(new Error);if(ta.isEmptyOrZeroLength(r))throw Nr.info("verify_perms_ast has a null operation parameter"),kn(new Error);try{let n=new kW,s=new ige(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Nr.info("No schemas defined in verifyPermsAst(), will not continue."),kn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&$W[r])throw kn(new Error,Jr.DROP_SYSTEM,Fp.FORBIDDEN);if(c&&!l)return null;let u=MW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof age.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=KW(t,r,a,n);return d||(a.forEach((f,m)=>{for(let h=0;h<f.length;h++){let p=s.getAttributesBySchemaTableName(m,f[h]),_=mP(t.role.permission,m,f[h]);fP(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw kn(n)}}o(hge,"verifyPermsAst");function pge(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Nr.info("null required parameter in verifyPerms"),kn(new Error,Jr.DEFAULT_INVALID_REQUEST,Fp.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new kW;if(ta.isEmptyOrZeroLength(e.hdb_user?.role)||ta.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Nr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Jr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(gn.SYSTEM_SCHEMA_NAME)||s===gn.SYSTEM_SCHEMA_NAME;if(l&&d&&lge[e.operation]&&(i===gn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&$W[r])throw kn(new Error,Jr.DROP_SYSTEM,Fp.FORBIDDEN);if(l&&!d||u===!0&&(r===Fs.createSchema.name||r===Fs.dropSchema.name))return null;if(mge.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=MW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===PW||r===LW)&&!f.super_user){if(s===gn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Jr.SCHEMA_PERM_ERROR(s));if(r===PW&&(!f[s]||!f[s][Hp]))return c.handleInvalidItem(Jr.SCHEMA_NOT_FOUND(s));if(r===LW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Hp]))return c.handleInvalidItem(Jr.TABLE_NOT_FOUND(s,i))}let m=KW(e.hdb_user,r,a,c,n);if(m)return m;if(X.get(r)&&X.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&gn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[gn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[gn.PERMS_CRUD_ENUM.READ]).forEach(T=>{_.push(T.attribute_name)}):_=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=_)}let h=Ege(e),p=mP(e.hdb_user?.role?.permission,s,i);return fP(h,p,r,i,s,c,n),c.getPermsResponse()}o(pge,"verifyPerms");function KW(e,t,r,n,s){if(ta.arrayHasEmptyValues([e,t,r]))throw Nr.info("hasPermissions has an invalid parameter"),kn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||X.get(t).requires_su))return null;if(!X.get(t))throw Nr.info(`operation ${t} not found.`),kn(new Error,Jr.OP_NOT_FOUND(t),Fp.BAD_REQUEST);if(X.get(t)&&X.get(t).requires_su)return Nr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Jr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][Hp]===!1){n.addInvalidItem(Jr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Jr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[Hp]===!1)n.addInvalidItem(Jr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=X.get(t).perms;!ta.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(Nr.info(`Required ${_} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(_))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let h=Jr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Nr.error(h),Nr.error(m),kn(GW.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(KW,"hasPermissions");function fP(e,t,r,n,s,i,a){if(!e||!t)throw Nr.info("no attributes specified in checkAttributePerms."),kn(new Error);let c=X.get(r).perms;if(!c||c==="")throw Nr.info(`no permissions found for ${r} in checkAttributePerms().`),kn(new Error);if(ta.isEmptyOrZeroLength(t))return Nr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Hp]===!1){i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(gn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Hs)throw kn(new Error,Jr.SYSTEM_TIMESTAMP_PERMS_ERR,Fp.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(fP,"checkAttributePerms");function Ege(e){let t=new Set;try{if(e.action)return t;if(e.operation===gn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Nr.info(r)}return t}o(Ege,"getRecordAttributes");function mP(e,t,r){let n=new Map;if(ta.isEmpty(e))return Nr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Nr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(mP,"getAttributePermissions");function _ge(e,t,r,n,s,i,a){let c=new Set(i),l=mP(e,n,s);fP(c,l,t,s,n,a,r)}o(_ge,"verifyBulkLoadAttributePerms")});var oR=M((Axe,JW)=>{"use strict";JW.exports={evaluateSQL:Pge,processAST:QW,convertSQLToAST:jW,checkASTPermissions:zW};var gge=Dn(),WW=require("util"),Sge=WW.callbackify(gge.insert),Tge=sn().search,Rge=bq().update,yge=WW.callbackify(Rge),Age=Nq().convertDelete,hc=require("alasql"),bge=sR(),iR=Q(),Ige=rg(),Nge=ie(),qp=(k(),v(W)),{hdbErrors:wge,handleHDBError:hP}=ge(),{HTTP_STATUS_CODES:pP}=wge;Ige(hc);var Oge=403,Cge="There was a problem performing this insert. Please check the logs and try again.",EP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Pge(e,t){let r=e.parsed_sql_object;if(!r){r=jW(e.sql);let n,s=r.ast.statements[0];if(s instanceof hc.yy.Insert?n=s.into.databaseid:s instanceof hc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof hc.yy.Update||s instanceof hc.yy.Delete?n=s.table.databaseid:iR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof hc.yy.Select)&&Nge.isEmptyOrZeroLength(n))return t("No schema specified",null)}QW(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Pge,"evaluateSQL");function zW(e,t){let r;try{r=bge.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(zW,"checkASTPermissions");function jW(e){let t=new EP;if(!e)throw hP(new Error,"The 'sql' parameter is missing from the request body",pP.BAD_REQUEST);try{let r=e.trim(),n=hc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
38
|
-
`);throw n[1]?hP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,pP.BAD_REQUEST):hP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",pP.BAD_REQUEST)}return t}o(jW,"convertSQLToAST");function QW(e,t,r){try{let n=Lge;if(!e.bypass_auth&&!t.permissions_checked){let i=zW(e,t);if(i&&i.length>0)return r(Oge,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case qp.VALID_SQL_OPS_ENUM.SELECT:n=Tge,s=t.ast.statements[0];break;case qp.VALID_SQL_OPS_ENUM.INSERT:n=Dge;break;case qp.VALID_SQL_OPS_ENUM.UPDATE:n=yge;break;case qp.VALID_SQL_OPS_ENUM.DELETE:n=Age;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(QW,"processAST");function Lge(e,t){iR.info(e),t("unknown sql statement")}o(Lge,"nullFunction");function Dge({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=Mge(i,e.values)}catch(a){return r(a)}Sge(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){iR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Dge,"convertInsert");function Mge(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=hc.compile(`SELECT ${s.toString()} AS [${qp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iR.error(r),new Error(Cge)}}o(Mge,"createDataObjects")});var yP=M((wxe,tz)=>{var uR=require("clone"),dR=ut(),vge=ie(),cR=(k(),v(W)),Ixe=Q(),_P=require("fs"),SP=require("joi"),{string:lR}=SP.types(),{hdbErrors:Uge,handleHDBError:aR}=ge(),{HDB_ERROR_MSGS:Nxe,HTTP_STATUS_CODES:gP}=Uge,{commonValidators:df}=Hi(),XW=" is required",xge=["insert","update","upsert"],TP={database:{presence:!1,format:df.schema_format,length:df.schema_length},schema:{presence:!1,format:df.schema_format,length:df.schema_length},table:{presence:!0,format:df.schema_format,length:df.schema_length},action:{inclusion:{within:xge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Bge={schema:lR.required(),table:lR.required(),action:lR.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Fge,AWS_SECRET:Hge,AWS_BUCKET:kge,AWS_FILE_KEY:Gge,REGION:qge}=cR.S3_BUCKET_AUTH_KEYS,$ge={s3:{presence:!0},[`s3.${Fge}`]:{presence:!0,type:"String"},[`s3.${Hge}`]:{presence:!0,type:"String"},[`s3.${kge}`]:{presence:!0,type:"String"},[`s3.${Gge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${qge}`]:{presence:!0,type:"String"}},ZW=uR(TP);ZW.data.presence={message:XW};var ez=uR(TP);ez.file_path.presence={message:XW};var Vge=Object.assign(uR(TP),$ge),RP=uR(Bge);RP.csv_url=lR.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();RP.passthrough_headers=SP.object();function Kge(e){let t=dR.validateObject(e,ZW);return fR(e,t)}o(Kge,"dataObject");function Yge(e){let t=dR.validateBySchema(e,SP.object(RP));return fR(e,t)}o(Yge,"urlObject");function Wge(e){let t=dR.validateObject(e,ez);return fR(e,t)}o(Wge,"fileObject");function zge(e){let t=dR.validateObject(e,Vge);return fR(e,t)}o(zge,"s3FileObject");function fR(e,t){if(!t){let r=vge.checkGlobalSchemaTable(e.schema,e.table);if(r)return aR(new Error,r,gP.BAD_REQUEST);if(e.operation===cR.OPERATIONS_ENUM.CSV_FILE_LOAD)try{_P.accessSync(e.file_path,_P.constants.R_OK|_P.constants.F_OK)}catch(n){return n.code===cR.NODE_ERROR_CODES.ENOENT?aR(n,`No such file or directory ${n.path}`,gP.BAD_REQUEST):n.code===cR.NODE_ERROR_CODES.EACCES?aR(n,`Permission denied ${n.path}`,gP.BAD_REQUEST):aR(n)}}return t}o(fR,"postValidateChecks");tz.exports={dataObject:Kge,urlObject:Yge,fileObject:Wge,s3FileObject:zge}});var AP=M((Cxe,rz)=>{"use strict";var $p=Q(),mR=(k(),v(W));async function jge(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===mR.OPERATIONS_ENUM.INSERT||t.operation===mR.OPERATIONS_ENUM.UPDATE||t.operation===mR.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===mR.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?($p.info(i.message),i):i.http_resp_msg?($p.error(`Error calling operation: ${e.name}`),$p.error(i.http_resp_msg),i):($p.error(`Error calling operation: ${e.name}`),$p.error(i),i)}}o(jge,"callOperationFunctionAsAwait");rz.exports={callOperationFunctionAsAwait:jge}});var bP=M((Lxe,sz)=>{"use strict";var{S3:Qge,GetObjectCommand:Jge}=require("@aws-sdk/client-s3");sz.exports={getFileStreamFromS3:Xge,getS3AuthObj:nz};async function Xge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await nz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Jge(r))).Body}o(Xge,"getFileStreamFromS3");function nz(e,t,r){return new Qge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(nz,"getS3AuthObj")});var oz=M((Mxe,iz)=>{"use strict";var IP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},NP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};iz.exports={BulkLoadFileObject:IP,BulkLoadDataObject:NP}});var OP=M((Uxe,az)=>{"use strict";var wP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};az.exports=wP});var vP=M((Gxe,bz)=>{"use strict";var hR=Dn(),ER=yP(),Zge=require("needle"),Ri=(k(),v(W)),Bxe=Ot(),ff=ie(),{handleHDBError:Xt,hdbErrors:Ez}=ge(),{HTTP_STATUS_CODES:Xr,HDB_ERROR_MSGS:wr,CHECK_LOGS_WRAPPER:Zl}=Ez,mf=Q(),CP=require("papaparse");ff.promisifyPapaParse();var yi=require("fs-extra"),eSe=require("path"),{chain:cz}=require("stream-chain"),lz=require("stream-json/streamers/StreamArray"),uz=require("stream-json/utils/Batch"),dz=require("stream-chain/utils/comp"),{finished:fz}=require("stream"),tSe=oe(),_z=AP(),rSe=bP(),{BulkLoadFileObject:LP,BulkLoadDataObject:nSe}=oz(),DP=iP(),{verifyBulkLoadAttributePerms:gz}=sR(),Fxe=OP(),Hxe=mr(),kxe=$i(),{databases:sSe}=(Me(),v(Et)),{coerceType:iSe}=(w_(),v(uk)),mz="No records parsed from csv file.",Xl=`${tSe.get("HDB_ROOT")}/tmp`,{schemaRegex:oSe}=Hi(),hz=1024*1024*2,pz=5e3,aSe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};bz.exports={csvDataLoad:cSe,csvURLLoad:lSe,csvFileLoad:uSe,importFromS3:dSe};async function cSe(e,t){let r=ER.dataObject(e);if(r)throw Xt(r,r.message,Xr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Rz(e.schema,e.table),i=CP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:PP.bind(null,s),dynamicTyping:!1}),a=new DP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&gz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Xt(new Error,c,Xr.BAD_REQUEST,void 0,void 0,!0);let l=new nSe(e.action,e.schema,e.table,i.data);return n=await _z.callOperationFunctionAsAwait(yz,l,null),n.message===mz?mz:Az(n.records,n.number_written)}catch(s){throw eu(s)}}o(cSe,"csvDataLoad");async function lSe(e){let t=ER.urlObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Xl}/${r}`;try{await fSe(e,r)}catch(s){throw mf.error(wr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,Zl(wr.DOWNLOAD_FILE_ERR(r)))}try{let s=new LP(this.job_operation_function.name,e.action,e.schema,e.table,n,Ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await MP(s);return await pR(n),i}catch(s){throw await pR(n),eu(s)}}o(lSe,"csvURLLoad");async function uSe(e){let t=ER.fileObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=new LP(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await MP(r)}catch(n){throw eu(n)}}o(uSe,"csvFileLoad");async function dSe(e){let t=ER.s3FileObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=eSe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Xl}/${s}`;let i=new LP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await mSe(s,e);let a=await MP(i);return await pR(r),a}catch(n){throw await pR(r),eu(n)}}o(dSe,"importFromS3");async function fSe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Zge("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Xt(n,s,n.statusCode,Ri.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}pSe(r,e.csv_url),await hSe(t,r.raw)}o(fSe,"downloadCSVFile");async function mSe(e,t){try{let r=`${Xl}/${e}`;await yi.mkdirp(Xl),await yi.writeFile(`${Xl}/${e}`,"",{flag:"a+"});let n=await yi.createWriteStream(r),s=await rSe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){mf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw mf.error(wr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,Zl(wr.S3_DOWNLOAD_ERR))}}o(mSe,"downloadFileFromS3");async function hSe(e,t){try{await yi.mkdirp(Xl),await yi.writeFile(`${Xl}/${e}`,t)}catch(r){throw mf.error(wr.WRITE_TEMP_FILE_ERR),Xt(r,Zl(wr.DEFAULT_BULK_LOAD_ERR))}}o(hSe,"writeFileToTempFolder");async function pR(e){if(e)try{await yi.access(e),await yi.unlink(e)}catch{mf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(pR,"deleteTempFile");function pSe(e,t){if(e.statusCode!==Ez.HTTP_STATUS_CODES.OK)throw Xt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Xr.BAD_REQUEST);if(!aSe[e.headers["content-type"]])throw Xt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Xr.BAD_REQUEST);if(!e.raw)throw Xt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Xr.BAD_REQUEST)}o(pSe,"validateURLResponse");async function MP(e){try{let t;switch(e.file_type){case Ri.VALID_S3_FILE_TYPES.CSV:t=await ESe(e);break;case Ri.VALID_S3_FILE_TYPES.JSON:t=await _Se(e);break;default:throw Xt(new Error,wr.DEFAULT_BULK_LOAD_ERR,Xr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,wr.INVALID_FILE_EXT_ERR(e))}return Az(t.records,t.number_written)}catch(t){throw eu(t)}}o(MP,"fileLoad");async function Sz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await hR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&gz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Xt(c);r(l)}}o(Sz,"validateChunk");async function Tz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ff.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!ff.isEmpty(c)&&!ff.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await _z.callOperationFunctionAsAwait(yz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,Zl(wr.INSERT_CSV_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.INSERT_CSV_ERR+" - "+c);r(l)}}o(Tz,"insertChunk");async function ESe(e){let t={records:0,number_written:0},r=Rz(e.schema,e.table);try{let n=new DP,s=yi.createReadStream(e.file_path,{highWaterMark:hz});s.setEncoding("utf8"),await CP.parsePromise(s,Sz.bind(null,e,n),PP.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,Xr.BAD_REQUEST);return s=yi.createReadStream(e.file_path,{highWaterMark:hz}),s.setEncoding("utf8"),await CP.parsePromise(s,Tz.bind(null,e,t),PP.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,Zl(wr.PAPA_PARSE_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.PAPA_PARSE_ERR+n)}}o(ESe,"callPapaParse");function Rz(e,t){let r=sSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>iSe(i,s));return n}o(Rz,"createTransformMap");function PP(e,t,r){let n=e.get(r);return n?n(t):ff.autoCast(t)}o(PP,"typeFunction");async function _Se(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new DP,s=cz([yi.createReadStream(e.file_path,{encoding:"utf-8"}),lz.withParser(),c=>c.value,new uz({batchSize:pz}),dz(async c=>{await Sz(e,n,r,c)})]);await new Promise((c,l)=>{fz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,Xr.BAD_REQUEST);let a=cz([yi.createReadStream(e.file_path,{encoding:"utf-8"}),lz.withParser(),c=>c.value,new uz({batchSize:pz}),dz(async c=>{await Tz(e,t,r,c)})]);return await new Promise((c,l)=>{fz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Xt(n,Zl(wr.INSERT_JSON_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.INSERT_JSON_ERR+n)}}o(_Se,"insertJson");async function yz(e){let t={};try{e.data&&e.data.length>0&&gSe(e.data[0])?t=await SSe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",mf.info(t.message))}catch(r){throw eu(r)}return t}o(yz,"callBulkFileLoad");function gSe(e){let t=Object.keys(e);for(let r of t)if(!oSe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(gSe,"validateColumnNames");async function SSe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=hR.insert;break;case"update":i=hR.update;break;case"upsert":i=hR.upsert;break;default:throw Xt(new Error,wr.INVALID_ACTION_PARAM_ERR(n),Xr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,wr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=ff.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw eu(a)}}o(SSe,"bulkFileLoad");function Az(e,t){return`successfully loaded ${t} of ${e} records`}o(Az,"buildResponseMsg");function eu(e){return Xt(e,Zl(wr.DEFAULT_BULK_LOAD_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(eu,"buildTopLevelErrMsg")});var BP=M(($xe,Dz)=>{"use strict";var xP=sn(),TSe=bP(),{AsyncParser:RSe}=require("json2csv"),_R=require("stream"),fs=ie(),UP=require("fs-extra"),ySe=require("path"),ks=Q(),{promisify:wz}=require("util"),Vp=ie(),{handleHDBError:_r,hdbErrors:ASe}=ge(),{HDB_ERROR_MSGS:Gn,HTTP_STATUS_CODES:gr}=ASe,{streamAsJSON:bSe}=(EA(),v(fv)),{Upload:ISe}=require("@aws-sdk/lib-storage"),{toCsvStream:NSe}=(Ro(),v(yv)),Iz=["search_by_value","search_by_hash","sql","search_by_conditions"],Nz=["json","csv"],Oz="json",Cz="csv",wSe="Successfully exported JSON locally.",OSe="Successfully exported CSV locally.",CSe=1e3,PSe=xP.searchByHash,LSe=xP.searchByValue,DSe=wz(_R.finished);Dz.exports={export_to_s3:xSe,export_local:MSe};async function MSe(e){ks.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Pz(e);if(!fs.isEmpty(t))throw ks.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(fs.isEmpty(e.path))throw ks.error(Gn.MISSING_VALUE("path")),_r(new Error,Gn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(fs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(ySe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=fs.buildFolderPath(e.path,r);await vSe(e.path);let s=await Lz(e);return await USe(n,e.format,s)}o(MSe,"export_local");async function vSe(e){if(ks.trace("in confirmPath"),fs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await UP.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,ks.error(n),_r(new Error,n,gr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ks.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(vSe,"confirmPath");async function USe(e,t,r){if(ks.trace("in saveToLocal"),Vp.isEmptyOrZeroLength(e))throw _r(new Error,Gn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmptyOrZeroLength(t))throw _r(new Error,Gn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmpty(r))throw _r(new Error,Gn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===Oz){let n=UP.createWriteStream(e);return bSe(r).pipe(n),await DSe(n),{message:wSe,path:e}}else if(t===Cz){let n=UP.createWriteStream(e),s=_R.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new RSe(i,c).fromInput(s).toOutput(n).promise(!1),{message:OSe,path:e}}throw _r(new Error,Gn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(USe,"saveToLocal");async function xSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Gn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Gn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Gn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Gn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Gn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Gn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Pz(e);if(!fs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);ks.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Lz(e)}catch(l){throw ks.error(l),l}let n,s=await TSe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new _R.PassThrough;if(e.format===Cz){i=e.s3.key+".csv";let l=NSe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Oz){i=e.s3.key+".json";let l=new _R.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let h=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=h,f!==0&&f%CSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Gn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new ISe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(xSe,"export_to_s3");function Pz(e){if(ks.trace("in exportCoreValidation"),fs.isEmpty(e.format))return"format missing";if(Nz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Nz.join(", ")}`;let t=e.search_operation.operation;if(fs.isEmpty(t))return"search_operation.operation missing";if(Iz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Iz.join(", ")}`}o(Pz,"exportCoreValidation");async function Lz(e){ks.trace("in getRecords");let t,r;if(Vp.isEmpty(e.search_operation)||Vp.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Gn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=LSe;break;case"search_by_hash":t=PSe;break;case"search_by_conditions":t=xP.searchByConditions;break;case"sql":{let n=oR();t=wz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ks.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Lz,"getRecords")});var vz=M((Kxe,Mz)=>{"use strict";var FP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Mz.exports=FP});var Bz=M((Wxe,xz)=>{"use strict";var BSe=(k(),v(W)),Uz=require("moment"),FSe=require("uuid").v4,HP=class{static{o(this,"JobObject")}constructor(){this.id=FSe(),this.type=void 0,this.start_datetime=Uz().valueOf(),this.created_datetime=Uz().valueOf(),this.end_datetime=void 0,this.status=BSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};xz.exports=HP});var kP=M((jxe,Kz)=>{"use strict";var HSe=require("uuid").v4,qz=Dn(),$z=sn(),kSe=ai(),GSe=Ku(),qSe=vz(),Mt=(k(),v(W)),$Se=Bz(),VSe=dS(),Ai=Q(),KSe=Zf(),hf=ie(),{promisify:YSe}=require("util"),tu=require("moment"),WSe=oR(),gR=yP(),Fz=OI(),{deleteTransactionLogsBeforeValidator:zSe}=VC(),{handleHDBError:Hz,hdbErrors:jSe,ClientError:QSe}=ge(),{HTTP_STATUS_CODES:kz}=jSe,Gz=$z.searchByValue,JSe=$z.searchByHash,XSe=qz.insert,ZSe=YSe(WSe.evaluateSQL),eTe=qz.update;Kz.exports={addJob:nTe,updateJob:iTe,handleGetJob:tTe,handleGetJobsByStartDate:rTe,getJobById:Vz};async function tTe(e){if(e.id===void 0)throw new QSe("'id' is required");let t=await Vz(e.id);return hf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(tTe,"handleGetJob");async function rTe(e){try{let t=await sTe(e);if(Ai.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=tu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=tu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ai.error(r),new Error(r)}}o(rTe,"handleGetJobsByStartDate");async function nTe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||hf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ai.info(d),t.error=d,t}if(!Mt.JOB_TYPE_ENUM[e.operation])return Ai.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Mt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=gR.fileObject(e);break;case Mt.OPERATIONS_ENUM.CSV_URL_LOAD:n=gR.urlObject(e);break;case Mt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=gR.dataObject(e);break;case Mt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=gR.s3FileObject(e);break;case Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Fz(e,"date");break;case Mt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Fz(e,"timestamp");break;case Mt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=zSe(e);break;case Mt.OPERATIONS_ENUM.RESTART_SERVICE:if(Mt.HDB_PROCESS_SERVICES[e.service]===void 0)throw Hz(new Error,"Invalid service",kz.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Hz(n,n.message,kz.BAD_REQUEST,void 0,void 0,!0);let s=new $Se;s.type=e.operation===Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new kSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Gz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=HSe();try{a=await Gz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ai.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new KSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await XSe(l)}catch(d){return Ai.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ai.trace(d)}return t}o(nTe,"addJob");async function sTe(e){let t=tu(e.from_date,tu.ISO_8601),r=tu(e.to_date,tu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new qSe(n,e.hdb_user);try{return await ZSe(s)}catch(i){throw Ai.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(sTe,"getJobsInDateRange");async function Vz(e){if(hf.isEmptyOrZeroLength(e))return hf.errorizeMessage("Invalid job ID specified.");let t=new GSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await JSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ai.error(n),hf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Vz,"getJobById");async function iTe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(hf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Mt.JOB_STATUS_ENUM.COMPLETE||e.status===Mt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=tu().valueOf());let t=new VSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await eTe(t),r}o(iTe,"updateJob")});var Zz=M((Jxe,Xz)=>{"use strict";var Yz=ie(),Or=(k(),v(W)),oTe=require("moment"),SR=vP(),Kp=Q(),Wz=kP(),zz=BP(),jz=El(),Qz=nt(),aTe=QT(),cTe=sf(),{parentPort:lTe,isMainThread:Jz}=require("worker_threads"),{onMessageByType:uTe}=nt(),GP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function dTe(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(Yz.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Yz.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await so(e,SR.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await so(e,SR.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await so(e,SR.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await so(e,SR.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await so(e,zz.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await so(e,zz.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await so(e,jz.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,jz.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,aTe.deleteTransactionLogsBefore);break;case Or.JOB_TYPE_ENUM.restart_service:return await so(e,cTe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(dTe,"parseMessage");async function so(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=oTe().valueOf(),await Wz.updateJob(e.job),await fTe(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Kp.error(`There was an error running ${t.name} job with id ${e.job.id}`),Kp.error(n),e.job.message=n,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await Wz.updateJob(e.job)}catch(s){throw Kp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function fTe(e){Kp.trace("launching job thread:",e),Jz?Qz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):lTe.postMessage({type:Or.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(fTe,"launchJobThread");Jz&&uTe(Or.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Qz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Kp.error(r)}});Xz.exports={parseMessage:dTe,RunnerMessage:GP}});var tj=M((Zxe,ej)=>{"use strict";var mTe=ie(),qP=oe(),pc=(k(),v(W)),hTe=Ot(),pTe=mr(),io=Q(),ETe=OP(),_Te=$i();qP.initSync();ej.exports={postOperationHandler:STe,sendOperationTransaction:Yp};async function Yp(e,t,r,n){if(e.schema===pc.SYSTEM_SCHEMA_NAME)return;let s=gTe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await pTe.publishToStream(`${hTe.SUBJECT_PREFIXES.TXN}.${e.schema}`,_Te.createNatsTableStreamName(e.schema,e.table),n,s))}o(Yp,"sendOperationTransaction");function gTe(e,t,r){if(mTe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(gTe,"convertCRUDOperationToTransaction");async function STe(e,t,r){if(!qP.get(pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=qP.get(pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new ETe(t.txn_time,n,s);switch(e.operation){case pc.OPERATIONS_ENUM.INSERT:try{await Yp(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case pc.OPERATIONS_ENUM.DELETE:try{await Yp(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPDATE:try{await Yp(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPSERT:try{await Yp(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(STe,"postOperationHandler")});var J,rj=ce(()=>{J=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var qC={};we(qC,{chooseOperation:()=>Rj,executeJob:()=>Gs,getOperationFunction:()=>yj,operation:()=>JP,processLocalTransaction:()=>Tj});async function Tj(e,t){try{if(e.body.operation!=="read_log"&&(Qp.default.log_level===Vf.INFO||Qp.default.log_level===Vf.DEBUG||Qp.default.log_level===Vf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Sn.info(c)}}catch(n){Sn.error(n)}let r=await gj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return yTe[e.body.operation]&&hj.default.setSchemaDataToGlobal(n=>{n&&Sn.error(n)}),r}function Rj(e){let t;try{t=yj(e)}catch(s){throw Sn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=yR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=yR.default.checkASTPermissions(e,i);if(a)throw Sn.error(`${nj.FORBIDDEN} from operation ${e.operation}`),Sn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.LOGIN&&e.operation!==q.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=mj.default.verifyPerms(i,s);if(a)throw Sn.error(`${nj.FORBIDDEN} from operation ${e.operation}`),Sn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function yj(e){if(Sn.trace(`getOperationFunction with operation: ${e.operation}`),sj.has(e.operation))return sj.get(e.operation);throw(0,qs.handleHDBError)(new Error,qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function JP(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Rj(e);return Tj({body:e},n)}async function ATe(e){Sn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[Jy]=!0;let a;switch(i.operation){case q.INSERT:a=await nu.default.insert(i);break;case q.UPDATE:a=await nu.default.update(i);break;case q.UPSERT:a=await nu.default.upsert(i);break;case q.DELETE:a=await _f.default.deleteRecord(i);break;default:Sn.warn("invalid operation in catchup");break}await Sj.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){Sn.info("Invalid operation in transaction"),Sn.error(a)}}async function Gs(e){(0,_j.transformReq)(e);let t,r;try{if(r=await AR.default.addJob(e),r){t=r.createdJob,Sn.info("addJob result",r);let n=new YP.default.RunnerMessage(t,e);return{message:await YP.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Sn.error(i),(0,qs.handleHDBError)(n,i)}}function bTe(){let e=new Map;return e.set(q.INSERT,new J(nu.default.insert)),e.set(q.UPDATE,new J(nu.default.update)),e.set(q.UPSERT,new J(nu.default.upsert)),e.set(q.SEARCH_BY_CONDITIONS,new J(Ef.default.searchByConditions)),e.set(q.SEARCH_BY_HASH,new J(Ef.default.searchByHash)),e.set(q.SEARCH_BY_ID,new J(Ef.default.searchByHash)),e.set(q.SEARCH_BY_VALUE,new J(Ef.default.searchByValue)),e.set(q.SEARCH,new J(TTe)),e.set(q.SQL,new J(RTe)),e.set(q.CSV_DATA_LOAD,new J(Gs,Wp.default.csvDataLoad)),e.set(q.CSV_FILE_LOAD,new J(Gs,Wp.default.csvFileLoad)),e.set(q.CSV_URL_LOAD,new J(Gs,Wp.default.csvURLLoad)),e.set(q.IMPORT_FROM_S3,new J(Gs,Wp.default.importFromS3)),e.set(q.CREATE_SCHEMA,new J(bi.default.createSchema)),e.set(q.CREATE_DATABASE,new J(bi.default.createSchema)),e.set(q.CREATE_TABLE,new J(bi.default.createTable)),e.set(q.CREATE_ATTRIBUTE,new J(bi.default.createAttribute)),e.set(q.DROP_SCHEMA,new J(bi.default.dropSchema)),e.set(q.DROP_DATABASE,new J(bi.default.dropSchema)),e.set(q.DROP_TABLE,new J(bi.default.dropTable)),e.set(q.DROP_ATTRIBUTE,new J(bi.default.dropAttribute)),e.set(q.DESCRIBE_SCHEMA,new J(zp.default.describeSchema)),e.set(q.DESCRIBE_DATABASE,new J(zp.default.describeSchema)),e.set(q.DESCRIBE_TABLE,new J(zp.default.describeTable)),e.set(q.DESCRIBE_ALL,new J(zp.default.describeAll)),e.set(q.DELETE,new J(_f.default.deleteRecord)),e.set(q.ADD_USER,new J(pf.default.addUser)),e.set(q.ALTER_USER,new J(pf.default.alterUser)),e.set(q.DROP_USER,new J(pf.default.dropUser)),e.set(q.LIST_USERS,new J(pf.default.listUsersExternal)),e.set(q.LIST_ROLES,new J(jp.default.listRoles)),e.set(q.ADD_ROLE,new J(jp.default.addRole)),e.set(q.ALTER_ROLE,new J(jp.default.alterRole)),e.set(q.DROP_ROLE,new J(jp.default.dropRole)),e.set(q.USER_INFO,new J(pf.default.userInfo)),e.set(q.READ_LOG,new J(oj.default)),e.set(q.ADD_NODE,new J(aj.default)),e.set(q.UPDATE_NODE,new J($P.default)),e.set(q.SET_NODE_REPLICATION,new J($P.default)),e.set(q.REMOVE_NODE,new J(cj.default)),e.set(q.CONFIGURE_CLUSTER,new J(lj.default)),e.set(q.PURGE_STREAM,new J(uj.default)),e.set(q.SET_CONFIGURATION,new J(WP.default.setConfiguration)),e.set(q.CLUSTER_STATUS,new J(dj.default.clusterStatus)),e.set(q.CLUSTER_NETWORK,new J(fj.default)),e.set(q.CLUSTER_SET_ROUTES,new J(TR.default.setRoutes)),e.set(q.CLUSTER_GET_ROUTES,new J(TR.default.getRoutes)),e.set(q.CLUSTER_DELETE_ROUTES,new J(TR.default.deleteRoutes)),e.set(q.EXPORT_TO_S3,new J(Gs,VP.default.export_to_s3)),e.set(q.CREATE_CSR,new J(ru.default.createCsr)),e.set(q.SIGN_CERTIFICATE,new J(ru.default.signCertificate)),e.set(q.LIST_CERTIFICATES,new J(ru.default.listCertificates)),e.set(q.ADD_CERTIFICATES,new J(ru.default.addCertificate)),e.set(q.REMOVE_CERTIFICATE,new J(ru.default.removeCertificate)),e.set(q.GET_KEY,new J(ru.default.getKey)),e.set(q.ADD_NODE_BACK,new J(xO)),e.set(q.REMOVE_NODE_BACK,new J(BO)),e.set(q.DELETE_FILES_BEFORE,new J(Gs,_f.default.deleteFilesBefore)),e.set(q.DELETE_RECORDS_BEFORE,new J(Gs,_f.default.deleteFilesBefore)),e.set(q.EXPORT_LOCAL,new J(Gs,VP.default.export_local)),e.set(q.SEARCH_JOBS_BY_START_DATE,new J(AR.default.handleGetJobsByStartDate)),e.set(q.GET_JOB,new J(AR.default.handleGetJob)),e.set(q.GET_FINGERPRINT,new J(RR.default.getFingerprint)),e.set(q.SET_LICENSE,new J(RR.default.setLicense)),e.set(q.GET_REGISTRATION_INFO,new J(RR.default.getRegistrationInfo)),e.set(q.RESTART,new J(KP.default.restart)),e.set(q.RESTART_SERVICE,new J(Gs,KP.default.restartService)),e.set(q.CATCHUP,new J(ATe)),e.set(q.SYSTEM_INFORMATION,new J(pj.default.systemInformation)),e.set(q.DELETE_AUDIT_LOGS_BEFORE,new J(Gs,_f.default.deleteAuditLogsBefore)),e.set(q.READ_AUDIT_LOG,new J(ij.default)),e.set(q.CREATE_AUTHENTICATION_TOKENS,new J(mw)),e.set(q.REFRESH_OPERATION_TOKEN,new J(hw)),e.set(q.LOGIN,new J(vC)),e.set(q.LOGOUT,new J(UC)),e.set(q.GET_CONFIGURATION,new J(WP.default.getConfiguration)),e.set(q.CUSTOM_FUNCTIONS_STATUS,new J(vt.default.customFunctionsStatus)),e.set(q.GET_CUSTOM_FUNCTIONS,new J(vt.default.getCustomFunctions)),e.set(q.GET_COMPONENT_FILE,new J(vt.default.getComponentFile)),e.set(q.GET_COMPONENTS,new J(vt.default.getComponents)),e.set(q.SET_COMPONENT_FILE,new J(vt.default.setComponentFile)),e.set(q.DROP_COMPONENT,new J(vt.default.dropComponent)),e.set(q.GET_CUSTOM_FUNCTION,new J(vt.default.getCustomFunction)),e.set(q.SET_CUSTOM_FUNCTION,new J(vt.default.setCustomFunction)),e.set(q.DROP_CUSTOM_FUNCTION,new J(vt.default.dropCustomFunction)),e.set(q.ADD_CUSTOM_FUNCTION_PROJECT,new J(vt.default.addComponent)),e.set(q.ADD_COMPONENT,new J(vt.default.addComponent)),e.set(q.DROP_CUSTOM_FUNCTION_PROJECT,new J(vt.default.dropCustomFunctionProject)),e.set(q.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(vt.default.packageComponent)),e.set(q.PACKAGE_COMPONENT,new J(vt.default.packageComponent)),e.set(q.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(vt.default.deployComponent)),e.set(q.DEPLOY_COMPONENT,new J(vt.default.deployComponent)),e.set(q.READ_TRANSACTION_LOG,new J(zP.default.readTransactionLog)),e.set(q.DELETE_TRANSACTION_LOGS_BEFORE,new J(Gs,zP.default.deleteTransactionLogsBefore)),e.set(q.INSTALL_NODE_MODULES,new J(jP.default.installModules)),e.set(q.AUDIT_NODE_MODULES,new J(jP.default.auditModules)),e.set(q.GET_BACKUP,new J(bi.default.getBackup)),e.set(q.CLEANUP_ORPHAN_BLOBS,new J(bi.default.cleanupOrphanBlobs)),e.set(q.ADD_SSH_KEY,new J(vt.default.addSSHKey)),e.set(q.UPDATE_SSH_KEY,new J(vt.default.updateSSHKey)),e.set(q.DELETE_SSH_KEY,new J(vt.default.deleteSSHKey)),e.set(q.LIST_SSH_KEYS,new J(vt.default.listSSHKeys)),e.set(q.SET_SSH_KNOWN_HOSTS,new J(vt.default.setSSHKnownHosts)),e.set(q.GET_SSH_KNOWN_HOSTS,new J(vt.default.getSSHKnownHosts)),e.set(q.GET_ANALYTICS,new J(YC)),e.set(q.LIST_METRICS,new J(WC)),e.set(q.DESCRIBE_METRIC,new J(zC)),e.set(q.GET_STATUS,new J(ZC)),e.set(q.SET_STATUS,new J(eP)),e.set(q.CLEAR_STATUS,new J(XC)),e}var Ef,yR,Wp,bi,zp,_f,ij,pf,jp,vt,Qp,oj,aj,$P,cj,lj,uj,dj,fj,TR,VP,mj,AR,qs,RR,KP,QP,nu,hj,pj,YP,WP,zP,jP,Ej,_j,ru,gj,Sj,nj,Sn,TTe,RTe,yTe,sj,$C=ce(()=>{Ef=w(sn()),yR=w(oR()),Wp=w(vP()),bi=w(ep()),zp=w(Ua()),_f=w(El()),ij=w(uO()),pf=w(ts()),jp=w(Oh()),vt=w(GC()),Qp=w(Q()),oj=w(pO()),aj=w(pT()),$P=w(qO()),cj=w(_T()),lj=w(KO()),uj=w(YO()),dj=w(jO()),fj=w(JO()),TR=w(yT()),VP=w(BP()),mj=w(sR()),AR=w(kP());k();qs=w(ge()),RR=w(uC()),KP=w(sf()),QP=w(require("util")),nu=w(Dn()),hj=w(ii()),pj=w($d()),YP=w(Zz());Td();qT();WP=w(wt()),zP=w(QT()),jP=w(wp()),Ej=w(Xs()),_j=w(ie());Dr();ru=w(as());Kd();QC();gj=w(AP()),Sj=w(tj());Bp();rj();({HTTP_STATUS_CODES:nj}=qs.hdbErrors),Sn=Qp.default.loggerWithTag("operation"),TTe=QP.promisify(Ef.default.search),RTe=QP.promisify(yR.default.evaluateSQL),yTe={[q.CREATE_ATTRIBUTE]:!0,[q.CREATE_TABLE]:!0,[q.CREATE_SCHEMA]:!0,[q.DROP_ATTRIBUTE]:!0,[q.DROP_TABLE]:!0,[q.DROP_SCHEMA]:!0};o(Tj,"processLocalTransaction");sj=bTe();Le.operation=JP;o(Rj,"chooseOperation");o(yj,"getOperationFunction");(0,Ej._assignPackageExport)("operation",JP);o(JP,"operation");o(ATe,"catchup");o(Gs,"executeJob");o(bTe,"initializeOperationFunctionMap")});var NR=M((oBe,Ij)=>{"use strict";var bR=(k(),v(W)),ITe=ie(),Jp=Q(),{handleHDBError:XP,hdbErrors:IR}=ge(),{isMainThread:NTe}=require("worker_threads"),{Readable:wTe}=require("stream"),Aj=require("os"),OTe=require("util"),CTe=Ew(),PTe=OTe.promisify(CTe.authorize),bj=($C(),v(qC)),{createGzip:LTe,constants:DTe}=require("zlib"),MTe=[bR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,bR.OPERATIONS_ENUM.LOGIN,bR.OPERATIONS_ENUM.LOGOUT];function vTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Aj.EOL}Stack: ${e.stack} ${Aj.EOL}Terminating ${NTe?"HDB":"thread"}.`;console.error(t),Jp.fatal(t),process.exit(1)}o(vTe,"handleServerUncaughtException");function UTe(e,t,r){if(Jp[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:IR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(UTe,"serverErrorHandler");function xTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=XP(new Error,"Invalid JSON.",IR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(ITe.isEmpty(e.body.operation)){let n=XP(new Error,"Request body must include an 'operation' property.",IR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(xTe,"reqBodyValidationHandler");function BTe(e,t,r){let n;!MTe.includes(e.body.operation)||e.body.operation===bR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?PTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Jp.warn(i),Jp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(XP(i,a,IR.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(BTe,"authHandler");async function FTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=bj.chooseOperation(e.body);let s=await bj.processLocalTransaction(e,n);if(s instanceof wTe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(LTe({level:DTe.Z_BEST_SPEED})))}return s}catch(s){throw Jp.error(s),s}}o(FTe,"handlePostRequest");Ij.exports={authHandler:BTe,handlePostRequest:FTe,handleServerUncaughtException:vTe,serverErrorHandler:UTe,reqBodyValidationHandler:xTe}});var Cj=M((cBe,Oj)=>{"use strict";var HTe=require("fastify-plugin"),{handlePostRequest:Nj,authHandler:kTe,reqBodyValidationHandler:GTe}=NR();async function qTe(e){e.decorate("hdbCore",{preValidation:[GTe,kTe],request:o((t,r)=>wj(Nj(t,r)),"request"),requestWithoutAuthentication:o((t,r)=>wj(Nj(t,r,!0)),"requestWithoutAuthentication")})}o(qTe,"hdbCore");async function wj(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(wj,"convertAsyncIterators");Oj.exports=HTe(qTe)});var Lj=M((dBe,Pj)=>{"use strict";var uBe=require("fs"),wR=oe();wR.initSync();var{CONFIG_PARAMS:ZP}=(k(),v(W)),$Te=1024*1024*1024;function VTe(e){let t=wR.get(ZP.HTTP_TIMEOUT),r=wR.get(ZP.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:$Te,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:wR.get(ZP.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(VTe,"getServerOptions");Pj.exports=VTe});var vj=M((mBe,Mj)=>{"use strict";var eL=oe();eL.initSync();var{CONFIG_PARAMS:Dj}=(k(),v(W));function KTe(){let e=eL.get(Dj.HTTP_CORSACCESSLIST),t=eL.get(Dj.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(KTe,"getCORSOptions");Mj.exports=KTe});var Bj=M((pBe,xj)=>{"use strict";var Uj=oe();Uj.initSync();var YTe=(k(),v(W));function WTe(){return Uj.get(YTe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(WTe,"getHeaderTimeoutConfig");xj.exports=WTe});var rL={};we(rL,{customFunctionsServer:()=>QTe,ready:()=>Jj,start:()=>jTe});function jTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ra||(ra=Qj(t),Le.http((await ra).server));let a=await ra,c=(0,tL.dirname)(s),l=(0,tL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Fj.has(c)){Fj.add(c);try{a.register(XTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")yt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Jj}}async function QTe(){try{yt.info("In Custom Functions Fastify server"+process.cwd()),yt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yt.debug(`Custom Functions server process ${process.pid} starting up.`),await JTe();let e=Vj.get(U.HTTP_SECUREPORT)>0,t;try{t=ra=await Qj(e)}catch(r){throw yt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw yt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){yt.error(`Custom Functions ${process.pid} Error: ${e}`),yt.error(e),process.exit(1)}}async function JTe(){try{yt.info("Custom Functions starting configuration."),await Kj.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function XTe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,Hj.existsSync)(e)&&r.register($j.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:yt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?yt.error(s.message):s&&yt.error(s),a()})}catch(n){yt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Qj(e){yt.info("Custom Functions starting buildServer.");let t=(0,Yj.default)(e),r=(0,kj.default)(t);r.server.headersTimeout=(0,zj.default)(),r.setErrorHandler(jj.serverErrorHandler);let n=(0,Wj.default)();return n&&r.register(Gj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(qj.default),await r.register(zTe),await r.after(),am(r),yt.info("Custom Functions completed buildServer."),r}function Jj(){if(ra)return ra.then?ra.then(e=>e.ready()):ra.ready()}var tL,Hj,kj,Gj,qj,$j,Vj,yt,zTe,Kj,Yj,Wj,zj,jj,ra,Fj,Xj=ce(()=>{tL=require("path"),Hj=require("fs"),kj=w(require("fastify")),Gj=w(require("@fastify/cors")),qj=w(lw()),$j=w(require("@fastify/autoload")),Vj=w(oe());k();yt=w(Q()),zTe=w(Cj()),Kj=w(ts()),Yj=w(Lj()),Wj=w(vj()),zj=w(Bj()),jj=w(NR());Ro();Dr();Fj=new Set;o(jTe,"start");o(QTe,"customFunctionsServer");o(JTe,"setUp");o(XTe,"buildRouteFolder");o(Qj,"buildServer");o(Jj,"ready")});var nL={};we(nL,{start:()=>ZTe});function ZTe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,n2.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(a=>n(s._nodeRequest,s._nodeResponse,()=>{a(i(s))}))}),!0}},handleFile(t,r,n){e2||(e2=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=Zj.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,t2.default)(s,(0,r2.realpathSync)(a))}}return i(s)},{runFirst:!0})),Zj.set(r,n)}}}var t2,r2,n2,Zj,e2,s2=ce(()=>{t2=w(require("send")),r2=require("fs"),n2=w(require("serve-static")),Zj=new Map;o(ZTe,"start")});var sL={};we(sL,{start:()=>eRe});function eRe({override:e}){return{handleFile:o((t,r,n)=>{OR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,i2.parse)(t))){if(process.env[s]!==void 0)if(OR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)OR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var i2,OR,o2=ce(()=>{i2=require("dotenv"),OR=w(Q());o(eRe,"start")});var aL={};we(aL,{DataLoaderError:()=>ms,DataLoaderResult:()=>gf,EmptyFileError:()=>DR,FileParseError:()=>LR,InvalidPropertyTypeError:()=>MR,MissingRequiredPropertyError:()=>Xp,RecordProcessingError:()=>Zp,SystemDatabaseError:()=>vR,UnsupportedFileExtensionError:()=>PR,computeRecordHash:()=>oL,handleApplication:()=>nRe,loadDataFile:()=>h2,suppressHandleApplicationWarning:()=>rRe});function oL(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,c2.createHash)("sha256").update(n).digest("hex")}function m2(e){return e.system&&e.system[iL]?e.system[iL]:CR||(CR=ze({database:"system",table:iL,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),CR)}async function tRe(e,t,r,n){try{let s=m2(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return $s.error?.(`Failed to get stored hash: ${s.message}`),null}}async function a2(e,t,r,n,s){try{let i=m2(s),a=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:a,hash:n})}catch(i){$s.error?.(`Failed to store hash: ${i.message}`)}}function nRe(e){if((0,u2.getWorkerIndex)()!==0){$s.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||h2(t,ln,He).then(r=>{$s.debug?.("Data loader processed file: %s: %s",(0,na.basename)(t.absolutePath),r.message)})})}async function h2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,na.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,l2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new PR(t,i)}catch(f){throw f instanceof ms?f:new LR(t,f)}if(!a)throw new DR(t);let{database:c,table:l,records:u}=a;if(!l)throw new Xp(t,"table");if(!u)throw new Xp(t,"records");if(!Array.isArray(u))throw new MR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new vR(c,l);try{let f;if(c&&s[c]&&s[c][l])$s.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])$s.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{$s.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let T=u[0];Object.keys(T).map(y=>{let N={name:y,type:typeof T[y]};return y==="id"&&(N.isPrimaryKey=!0),N}).forEach(y=>{R.push(y)})}f=await ze({database:c,table:l,attributes:R})}let m=u.length,h=0,p=0,_=0,g=100;for(let R=0;R<u.length;R+=g){let T=u.slice(R,R+g),y=[];for(let N of T)y.push(async()=>{try{let O=null,F=N.id;F!==void 0&&(O=await f.get(F));let Z=oL(N);if(!O){h++;let $=await f.put(N);return await a2(c,l,F,Z,s),$}let G=await tRe(c,l,F,s);if(!G)return _++,Promise.resolve({inserted:0,updated:0});let Y={};for(let $ of Object.keys(N))$ in O&&(Y[$]=O[$]);return oL(Y)!==G?(_++,Promise.resolve({inserted:0,updated:0})):Z!==G?(p++,await f.patch(F,N),await a2(c,l,F,Z,s),{updated:1}):(_++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof ms)$s.error?.(`Record processing error: ${O.message}`);else{let F=new Zp(d,O);$s.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(y.map(N=>N()))}if(h>0||p>0){let R=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(R+=` (${_} records skipped)`),$s.info?.(R),new gf(t,c,l,"success",h+p,R)}else if(_>0){let R=`All ${_} records in ${d} already up-to-date`;return $s.info?.(R),new gf(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return $s.info?.(R),new gf(t,c,l,"success",0,R)}}catch(f){throw f instanceof ms?f:new Zp(d,f)}}var na,c2,l2,u2,sa,d2,f2,$s,iL,CR,rRe,ms,PR,LR,DR,Xp,MR,vR,Zp,gf,p2=ce(()=>{na=require("node:path"),c2=require("node:crypto"),l2=require("yaml");Me();u2=w(nt()),sa=w(tn()),d2=w(ge()),f2=w(Q()),$s=f2.default.forComponent("dataLoader"),iL="hdb_dataloader_hash";o(oL,"computeRecordHash");o(m2,"getHashTrackingTable");o(tRe,"getStoredHash");o(a2,"storeHash");rRe=!0;o(nRe,"handleApplication");o(h2,"loadDataFile");ms=class extends d2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=sa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},PR=class extends ms{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},LR=class extends ms{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,na.basename)(t)}: ${r.message}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},DR=class extends ms{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,na.basename)(t)} is empty or invalid`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},Xp=class extends ms{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,na.basename)(t)} is missing required "${r}" property`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},MR=class extends ms{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,na.basename)(t)} has invalid "${r}" property, expected ${n}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},vR=class extends ms{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,sa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Zp=class extends ms{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},gf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var cL={};we(cL,{hdbServer:()=>aRe,start:()=>aRe});async function aRe(e){try{oo.default.debug("In Fastify server"+process.cwd()),oo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),oo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=E2.default.isMaster,await cRe();let t=e.securePort>0;Sf=lRe(t),await Sf.ready(),e||(e={}),e.isOperationsServer=!0;try{Le.http(Sf.server,e),Sf.server.closeIdleConnections||await Sf.listen({port:0,host:"::"})}catch(r){throw Sf.close(),oo.default.error(r),oo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),oo.default.fatal(t),process.exit(1)}}async function cRe(){oo.default.trace("Configuring HarperDB process."),b2.default.setSchemaDataToGlobal(),await N2.default.setUsersWithRolesCache(),await w2.default.getLicense()}function lRe(e){oo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=uRe(e),r=(0,_2.default)(t);r.server.headersTimeout=fRe(),r.setErrorHandler(_c.serverErrorHandler);let n=dRe();n&&r.register(g2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(R2.default),r.register(S2.default),r.register(T2.default,{root:y2.default.join(A2.PACKAGE_ROOT,"studio/build-local")}),am(r);let s=Ec.default.get(jy.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!I2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[_c.reqBodyValidationHandler,_c.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,_c.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),oo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function uRe(e){let t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ec.default.get(eE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:iRe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function dRe(){let e=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORS),t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===oRe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function fRe(){return Ec.default.get(eE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??sRe}var E2,Ec,oo,_2,g2,S2,T2,R2,y2,A2,b2,I2,N2,w2,_c,sRe,iRe,oRe,eE,Sf,O2=ce(()=>{E2=w(require("cluster")),Ec=w(oe());k();oo=w(Q()),_2=w(require("fastify")),g2=w(require("@fastify/cors")),S2=w(require("@fastify/compress")),T2=w(require("@fastify/static")),R2=w(lw()),y2=w(require("path")),A2=w(bt()),b2=w(ii()),I2=w(ie()),N2=w(ts()),w2=w(Jd());Dr();_c=w(NR());Ro();Ec.default.initSync();sRe=6e4,iRe=1024*1024*1024,oRe="TRUE",{CONFIG_PARAMS:eE}=W;o(aRe,"operationsServer");o(cRe,"setUp");o(lRe,"buildServer");o(uRe,"getServerOptions");o(dRe,"getCORSOpts");o(fRe,"getHeaderTimeoutConfig")});var hL={};we(hL,{disableNATS:()=>hRe,publishToStream:()=>BR,setNATSReplicator:()=>lL,setPublishToStream:()=>pRe,setSubscription:()=>mL,start:()=>mRe});function mRe(){tE.default.get(U.CLUSTERING_ENABLED)&&_Re()}function hRe(e=!0){M2=e}function pRe(e,t){BR=e,mL=t}function _Re(){if(M2||process.env._DISABLE_NATS)return;let e=st(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];lL(s,r,i)}}Il((r,n)=>{lL(r.tableName,r.databaseName,r),n&&U2(r)}),!C2&&(C2=!0)}function lL(e,t,r){if(t==="system"&&gRe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Ur{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){U2(i)}static subscribe(){let i=new Vn;return mL(t,e,i),i}static subscribeOnThisThread(i){return i<(tE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ERe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new UR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=v2;return i}o(n,"getNATSTransaction")}function U2(e){let t=tE.default.get(U.CLUSTERING_NODENAME);BR(`${dL.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,fL.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var P2,dL,fL,L2,D2,tE,xR,M2,BR,mL,ERe,v2,C2,gRe,UR,uL,x2=ce(()=>{Me();Pa();P2=w(mr()),dL=w(Ot()),fL=w($i());Ru();L2=w(Iw()),D2=w(yn()),tE=w(oe());k();xR=w(Q());o(mRe,"start");o(hRe,"disableNATS");BR=P2.publishToStream,mL=L2.setSubscription;o(pRe,"setPublishToStream");ERe=2;o(_Re,"assignReplicationSource");gRe=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(lL,"setNATSReplicator");o(U2,"publishSchema");UR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=tE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(xR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(BR(`${dL.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,fL.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw xR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},uL=class extends UR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,D2.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};v2=new uL});var EL=M((xBe,B2)=>{"use strict";var rE=oe();rE.initSync();var Tf=require("fs-extra"),pL=require("path"),Rf=(k(),v(W)),SRe=require("crypto"),TRe=require("uuid").v4;B2.exports=RRe;function RRe(){if(rE.getHdbBasePath()!==void 0){let e=pL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=pL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=pL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Tf.accessSync(r),Tf.accessSync(e),Tf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=TRe(),i=SRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Tf.writeFileSync(r,s),Tf.writeFileSync(e,i.privateKey),Tf.writeFileSync(t,i.publicKey)}else throw n}}}o(RRe,"checkJWTTokenExist")});var H2=M((FBe,F2)=>{"use strict";var _L=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};F2.exports={HdbInfoInsertObject:_L}});var q2=M((kBe,G2)=>{"use strict";var k2=(k(),v(W)),gL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[k2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[k2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};G2.exports={UpgradeObject:gL}});var FR=M((qBe,V2)=>{"use strict";var Vs=require("prompt"),yf=require("chalk"),$2=Q(),Ii=require("os"),SL=xc(),TL=["yes","y"];async function yRe(e){let t=`${Ii.EOL}`+yf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ii.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ii.EOL}${Ii.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ii.EOL}`;Vs.override=SL(["CONFIRM_UPGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:yf.magenta(`${Ii.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Vs.get([r])}catch(s){return $2.error("There was an error when prompting user about an upgrade."),$2.error(s),!1}return TL.includes(n.CONFIRM_UPGRADE)}o(yRe,"forceUpdatePrompt");async function ARe(e){let t=`${Ii.EOL}`+yf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ii.EOL}`);Vs.override=SL(["CONFIRM_DOWNGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:yf.magenta(`${Ii.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Vs.get([r]);return TL.includes(n.CONFIRM_DOWNGRADE)}o(ARe,"forceDowngradePrompt");async function bRe(){let e=`${Ii.EOL}`+yf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Vs.override=SL(["GENERATE_CERTS"]),Vs.start(),Vs.message=e;let t={properties:{GENERATE_CERTS:{description:yf.magenta(`${Ii.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Vs.get([t]);return TL.includes(r.GENERATE_CERTS)}o(bRe,"upgradeCertsPrompt");V2.exports={forceUpdatePrompt:yRe,forceDowngradePrompt:ARe,upgradeCertsPrompt:bRe}});var yL=M((VBe,K2)=>{"use strict";var RL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};K2.exports=RL});var W2=M((QBe,Y2)=>{"use strict";var IRe=ie(),NRe=wt(),YBe=Q(),WBe=require("path"),zBe=require("fs"),jBe=(k(),v(W));Y2.exports={getOldPropsValue:wRe};function wRe(e,t,r=!1){let n=t.getRaw(e);return IRe.isNotEmptyAndHasValue(n)?n:r?NRe.getDefaultConfig(e):""}o(wRe,"getOldPropsValue")});var J2=M((XBe,Q2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),ORe=require("properties-reader"),CRe=yL(),Sr=Q(),{getOldPropsValue:At}=W2(),{HDB_SETTINGS_NAMES:ye,CONFIG_PARAMS:su}=(k(),v(W)),iu=wt(),HR=oe(),z2=ie(),ao=(k(),v(W)),AL=new CRe("3.1.0"),j2=[];function PRe(){let e=ORe(HR.get(ye.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
|
|
35
|
+
IdentitiesOnly yes`;await Ne.pathExists(l)?await Ne.appendFile(l,`
|
|
36
|
+
`+u):await Ne.outputFile(l,u);let d="";if(await Ne.pathExists(Zo)||(await Ne.writeFile(Zo,""),await Ne.chmod(Zo,"0600")),i=="github.com"&&!(await Ne.readFile(Zo,"utf8")).includes("github.com"))try{let _=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of _)Ne.appendFile(Zo,"github.com "+g+`
|
|
37
|
+
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ne.appendFile(Zo,a);let f=await Ti(e);return f.message=`Added ssh key: ${r}${d}`,f}o(N_e,"addSSHKey");async function w_e(e){let t=kn.updateSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n}=e;jt.trace("updating ssh key",r);let s=Ce.join(fc,r+".key");if(!await Ne.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ne.outputFile(s,n);let i=await Ti(e);return i.message=`Updated ssh key: ${r}`,i}o(w_e,"updateSSHKey");async function O_e(e){let t=kn.deleteSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r}=e;jt.trace("deleting ssh key",r);let n=Ce.join(fc,r+".key"),s=Ce.join(fc,"config");if(!await Ne.pathExists(n))throw new Error("Key does not exist");let i=await Ne.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ne.outputFile(s,i),Ne.removeSync(n);let c=await Ti(e);return c.message=`Deleted ssh key: ${r}`,c}o(O_e,"deleteSSHKey");async function C_e(e){let t=[];return await Ne.pathExists(fc)&&(await Ne.readdir(fc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(C_e,"listSSHKeys");async function P_e(e){let t=kn.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await Ne.outputFile(Zo,r);let n=await Ti(e);return n.message="Known hosts successfully set",n}o(P_e,"setSSHKnownHosts");async function L_e(e){return await Ne.pathExists(Zo)?{known_hosts:await Ne.readFile(Zo,"utf8")}:{known_hosts:null}}o(L_e,"getSSHKnownHosts");ir.customFunctionsStatus=f_e;ir.getCustomFunctions=m_e;ir.getCustomFunction=h_e;ir.setCustomFunction=p_e;ir.dropCustomFunction=E_e;ir.addComponent=__e;ir.dropCustomFunctionProject=g_e;ir.packageComponent=S_e;ir.deployComponent=T_e;ir.getComponents=y_e;ir.getComponentFile=A_e;ir.setComponentFile=b_e;ir.dropComponent=I_e;ir.addSSHKey=N_e;ir.updateSSHKey=w_e;ir.deleteSSHKey=O_e;ir.listSSHKeys=C_e;ir.setSSHKnownHosts=P_e;ir.getSSHKnownHosts=L_e});var zC=M((X0e,uW)=>{"use strict";var Bs=require("joi"),lW=dt();uW.exports={readTransactionLogValidator:D_e,deleteTransactionLogsBeforeValidator:M_e};function D_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),from:Bs.date().timestamp(),to:Bs.date().timestamp(),limit:Bs.number().min(1)});return lW.validateBySchema(e,t)}o(D_e,"readTransactionLogValidator");function M_e(e){let t=Bs.object({schema:Bs.string(),database:Bs.string(),table:Bs.string().required(),timestamp:Bs.date().timestamp().required()});return lW.validateBySchema(e,t)}o(M_e,"deleteTransactionLogsBeforeValidator")});var ZT=M((exe,EW)=>{"use strict";var jC=(k(),v(Y)),Lp=mr(),dW=ie(),fW=ae(),mW=$i(),hW=Q(),{handleHDBError:JT,hdbErrors:v_e}=_e(),{HTTP_STATUS_CODES:XT}=v_e,{readTransactionLogValidator:U_e,deleteTransactionLogsBeforeValidator:x_e}=zC(),pW=Jn(),B_e="Logs successfully deleted from transaction log.",F_e="All logs successfully deleted from transaction log.";EW.exports={readTransactionLog:H_e,deleteTransactionLogsBefore:G_e};async function H_e(e){let t=U_e(e);if(t)throw JT(t,t.message,XT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=dW.checkSchemaTableExist(e.database,e.table);if(r)throw JT(new Error,r,XT.NOT_FOUND,void 0,void 0,!0);return fW.get(jC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await k_e(e):(hW.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)),pW.readAuditLog(e))}o(H_e,"readTransactionLog");async function*k_e(e){let t=mW.createNatsTableStreamName(e.database,e.table),r=await Lp.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===jC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(k_e,"readTransactionLogNats");async function G_e(e){let t=x_e(e);if(t)throw JT(t,t.message,XT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!fW.get(jC.CONFIG_PARAMS.CLUSTERING_ENABLED))return hW.info("Delete transaction logs called for Plexus"),pW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=dW.checkSchemaTableExist(r,n);if(i)throw JT(new Error,i,XT.NOT_FOUND,void 0,void 0,!0);let a=mW.createNatsTableStreamName(r,n),{jsm:c}=await Lp.getNATSReferences(),l=await Lp.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=B_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=F_e):f=(await Lp.viewStream(a,parseInt(s),1))[0].nats_sequence,await Lp.purgeTableStream(r,n,{seq:f}),d}o(G_e,"deleteTransactionLogsBefore")});var ZC={};Oe(ZC,{describeMetric:()=>yW,describeMetricOp:()=>XC,get:()=>TW,getOp:()=>QC,listMetrics:()=>RW,listMetricsOp:()=>JC});async function $_e(e){return(await yg().get(e)).hostname}function _W(e,t){return e.length===0||e.includes(t)}function QC(e){return Dp.trace?.("get_analytics request:",e),TW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function SW(e){return"conditions"in e?{...e,conditions:e.conditions.map(SW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function TW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(SW));let a=t??[];_W(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),Dp.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],_W(a,"node")&&(Dp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await $_e(d)),Dp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function JC(e){return RW(e.metric_types,e.custom_metrics_window)}async function RW(e=["builtin"],t=q_e){let r=[],n=Object.values(vo);if(e.includes("builtin")&&(r=n),e.includes("custom")){let i=[{attribute:"id",comparator:"greater_than",value:Date.now()-t}],a=n.map(d=>({attribute:"metric",comparator:"not_equal",value:d}));i.push(...a);let c={select:["metric"],conditions:i},l=new Set,u=await databases.system.hdb_analytics.search(c);for await(let d of u)l.add(d.metric);r.push(...Array.from(l.values()))}return r}function XC(e){return yW(e.metric)}async function yW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Dp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var gW,q_e,Dp,eP=le(()=>{gW=w(Q());dN();fN();q_e=1e3*60*60*24*7,Dp=(0,gW.forComponent)("analytics").conditional;o($_e,"lookupHostname");o(_W,"isSelected");o(QC,"getOp");o(SW,"conformCondition");o(TW,"get");o(JC,"listMetricsOp");o(RW,"listMetrics");o(XC,"describeMetricOp");o(yW,"describeMetric")});var eR,tR,Mp,rR=le(()=>{eR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},tR=Object.keys(eR),Mp="primary"});function bW(e){return AW.validateBySchema(e,W_e)}var vp,AW,V_e,K_e,Y_e,W_e,IW=le(()=>{vp=w(require("joi")),AW=w(dt());rR();V_e=tR,K_e=Object.entries(eR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),Y_e=o(()=>{let e=vp.default.string().min(1).max(512);return Object.entries(eR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:vp.default.string().valid(...r.allowedValues).messages({"any.only":K_e[t]})}))}),e.required()},"createStatusValidationSchema"),W_e=vp.default.object({id:vp.default.string().valid(...V_e).required(),status:Y_e()});o(bW,"validateStatus")});var iP={};Oe(iP,{DEFAULT_STATUS_ID:()=>Mp,STATUS_IDS:()=>tR,Status:()=>ea,clear:()=>rP,get:()=>nP,set:()=>sP});function xp(){return tP||(tP=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),tP}function rP({id:e}){return Up.debug?.("clearStatus",e),xp().delete(e)}function j_e(){return Up.debug?.("getAllStatus"),xp().get({})}function nP({id:e}){return e?(Up.debug?.("getStatus",e),xp().get(e)):(Up.debug?.("getStatus","all"),j_e())}function sP({status:e,id:t=Mp}){let r=bW({status:e,id:t});if(r)throw(0,nR.handleHDBError)(r,r.message,z_e.BAD_REQUEST);return Up.debug?.("setStatus",t,e),xp().put(t,{status:e})}var nR,NW,z_e,tP,ea,Up,Bp=le(()=>{Me();nR=w(_e()),NW=w(ei());IW();rR();rR();({HTTP_STATUS_CODES:z_e}=nR.hdbErrors);o(xp,"getStatusTable");ea={get primaryStore(){return xp().primaryStore}},Up=(0,NW.loggerWithTag)("status");o(rP,"clearStatus");o(j_e,"getAllStatus");o(nP,"getStatus");o(sP,"setStatus")});var OW=M((gxe,wW)=>{"use strict";var oP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};wW.exports=oP});var PW=M((Txe,CW)=>{"use strict";var aP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};CW.exports=aP});var lP=M((yxe,DW)=>{"use strict";var LW=OW(),Q_e=PW(),{HDB_ERROR_MSGS:J_e}=rn(),cP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=J_e.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new LW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Q_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new LW(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};DW.exports=cP});var aR=M((bxe,jW)=>{"use strict";var uP=Mn(),sR=on(),Fs=ep(),kp=Ua(),dP=El(),X_e=hO(),Z_e=xV(),Gp=ts(),iR=Oh(),Nr=Q(),ege=SO(),tge=gT(),rge=YO(),nge=TT(),sge=jO(),ige=QO(),oge=ZO(),age=tC(),fP=IT(),ta=ie(),cge=hK(),mP=hC(),UW=sf(),Sn=(k(),v(Y)),xW=OY(),lge=$d(),BW=(Td(),v(vh)),FW=(KT(),v(Ap)),HW=wt(),Er=KC(),uge=require("alasql"),kW=ZT(),GW=wp(),uf=as(),qW=(Kd(),v(Vd)),hP=(eP(),v(ZC)),pP=(Bp(),v(iP)),$W=lP(),{handleHDBError:Gn,hdbErrors:VW}=_e(),{HDB_ERROR_MSGS:Jr,HTTP_STATUS_CODES:Fp}=VW,{cleanupOrphanBlobs:dge}=ep(),Z=new Map,KW="delete",mc="insert",Hs="read",Jl="update",Hp="describe",MW=kp.describeSchema.name,vW=kp.describeTable.name,YW={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},fge={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},mge="catchup",hge="handleGetJob",pge="handleGetJobsByStartDate",oR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Ege=[Fs.createTable.name,Fs.createAttribute.name,Fs.dropTable.name,Fs.dropAttribute.name],WW={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(uP.insert.name,new re(!1,[mc]));Z.set(uP.update.name,new re(!1,[Jl]));Z.set(uP.upsert.name,new re(!1,[mc,Jl]));Z.set(sR.searchByConditions.name,new re(!1,[Hs]));Z.set(sR.searchByHash.name,new re(!1,[Hs]));Z.set(sR.searchByValue.name,new re(!1,[Hs]));Z.set(sR.search.name,new re(!1,[Hs]));Z.set(Fs.createSchema.name,new re(!0,[]));Z.set(Fs.createTable.name,new re(!0,[]));Z.set(Fs.createAttribute.name,new re(!1,[mc]));Z.set(Fs.dropSchema.name,new re(!0,[]));Z.set(Fs.dropTable.name,new re(!0,[]));Z.set(Fs.dropAttribute.name,new re(!0,[]));Z.set(kp.describeSchema.name,new re(!1,[Hs]));Z.set(kp.describeTable.name,new re(!1,[Hs]));Z.set(dP.deleteRecord.name,new re(!1,[KW]));Z.set(Gp.addUser.name,new re(!0,[]));Z.set(Gp.alterUser.name,new re(!0,[]));Z.set(Gp.dropUser.name,new re(!0,[]));Z.set(Gp.listUsersExternal.name,new re(!0,[]));Z.set(iR.listRoles.name,new re(!0,[]));Z.set(iR.addRole.name,new re(!0,[]));Z.set(iR.alterRole.name,new re(!0,[]));Z.set(iR.dropRole.name,new re(!0,[]));Z.set(ege.name,new re(!0,[]));Z.set(tge.name,new re(!0,[]));Z.set(rge.name,new re(!0,[]));Z.set(nge.name,new re(!0,[]));Z.set(sge.name,new re(!0,[]));Z.set(ige.name,new re(!0,[]));Z.set(fP.setRoutes.name,new re(!0,[]));Z.set(fP.getRoutes.name,new re(!0,[]));Z.set(fP.deleteRoutes.name,new re(!0,[]));Z.set(HW.setConfiguration.name,new re(!0,[]));Z.set(oge.clusterStatus.name,new re(!0,[]));Z.set(age.name,new re(!0,[]));Z.set(mP.getFingerprint.name,new re(!0,[]));Z.set(mP.setLicense.name,new re(!0,[]));Z.set(dP.deleteFilesBefore.name,new re(!0,[]));Z.set(dP.deleteAuditLogsBefore.name,new re(!0,[]));Z.set(UW.restart.name,new re(!0,[]));Z.set(UW.restartService.name,new re(!0,[]));Z.set(X_e.name,new re(!0,[]));Z.set(Z_e.name,new re(!0,[Hs]));Z.set(dge.name,new re(!0,[]));Z.set(lge.systemInformation.name,new re(!0,[]));Z.set(HW.getConfiguration.name,new re(!0,[]));Z.set(kW.readTransactionLog.name,new re(!0,[]));Z.set(kW.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(GW.installModules.name,new re(!0,[]));Z.set(GW.auditModules.name,new re(!0,[]));Z.set(uf.createCsr.name,new re(!0,[]));Z.set(uf.signCertificate.name,new re(!0,[]));Z.set(uf.listCertificates.name,new re(!0,[]));Z.set(uf.addCertificate.name,new re(!0,[]));Z.set(uf.removeCertificate.name,new re(!0,[]));Z.set(uf.getKey.name,new re(!0,[]));Z.set(qW.addNodeBack.name,new re(!0,[]));Z.set(qW.removeNodeBack.name,new re(!0,[]));Z.set(hP.getOp.name,new re(!1,[Hs]));Z.set(hP.listMetricsOp.name,new re(!1,[Hs]));Z.set(hP.describeMetricOp.name,new re(!1,[Hs]));Z.set(pP.clear.name,new re(!0,[]));Z.set(pP.get.name,new re(!0,[]));Z.set(pP.set.name,new re(!0,[]));Z.set(BW.createTokens.name,new re(!1,[]));Z.set(BW.refreshOperationToken.name,new re(!1,[]));Z.set(FW.login.name,new re(!1,[]));Z.set(FW.logout.name,new re(!1,[]));Z.set(Er.customFunctionsStatus.name,new re(!0,[]));Z.set(Er.getCustomFunctions.name,new re(!0,[]));Z.set(Er.getComponents.name,new re(!0,[]));Z.set(Er.getComponentFile.name,new re(!0,[]));Z.set(Er.setComponentFile.name,new re(!0,[]));Z.set(Er.dropComponent.name,new re(!0,[]));Z.set(Er.getCustomFunction.name,new re(!0,[]));Z.set(Er.setCustomFunction.name,new re(!0,[]));Z.set(Er.dropCustomFunction.name,new re(!0,[]));Z.set(Er.addComponent.name,new re(!0,[]));Z.set(Er.dropCustomFunctionProject.name,new re(!0,[]));Z.set(Er.packageComponent.name,new re(!0,[]));Z.set(Er.deployComponent.name,new re(!0,[]));Z.set(Er.addSSHKey.name,new re(!0,[]));Z.set(Er.updateSSHKey.name,new re(!0,[]));Z.set(Er.deleteSSHKey.name,new re(!0,[]));Z.set(Er.listSSHKeys.name,new re(!0,[]));Z.set(Er.setSSHKnownHosts.name,new re(!0,[]));Z.set(Er.getSSHKnownHosts.name,new re(!0,[]));Z.set(mP.getRegistrationInfo.name,new re(!1,[]));Z.set(Gp.userInfo.name,new re(!1,[]));Z.set(kp.describeAll.name,new re(!1,[]));Z.set(hge,new re(!1,[]));Z.set(pge,new re(!0,[]));Z.set(mge,new re(!0,[]));Z.set(oR.CSV_DATA_LOAD,new re(!1,[mc,Jl]));Z.set(oR.CSV_URL_LOAD,new re(!1,[mc,Jl]));Z.set(oR.CSV_FILE_LOAD,new re(!1,[mc,Jl]));Z.set(oR.IMPORT_FROM_S3,new re(!1,[mc,Jl]));Z.set(WW.EXPORT_TO_S3,new re(!0,[]));Z.set(WW.EXPORT_LOCAL,new re(!0,[]));Z.set(Sn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[KW]));Z.set(Sn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Hs]));Z.set(Sn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[mc]));Z.set(Sn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[Jl]));jW.exports={verifyPerms:gge,verifyPermsAst:_ge,verifyBulkLoadAttributePerms:Tge};function _ge(e,t,r){if(ta.isEmptyOrZeroLength(e))throw Nr.info("verify_perms_ast has an empty user parameter"),Gn(new Error);if(ta.isEmptyOrZeroLength(t))throw Nr.info("verify_perms_ast has an empty user parameter"),Gn(new Error);if(ta.isEmptyOrZeroLength(r))throw Nr.info("verify_perms_ast has a null operation parameter"),Gn(new Error);try{let n=new $W,s=new cge(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Nr.info("No schemas defined in verifyPermsAst(), will not continue."),Gn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&YW[r])throw Gn(new Error,Jr.DROP_SYSTEM,Fp.FORBIDDEN);if(c&&!l)return null;let u=xW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof uge.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=zW(t,r,a,n);return d||(a.forEach((f,m)=>{for(let h=0;h<f.length;h++){let p=s.getAttributesBySchemaTableName(m,f[h]),_=_P(t.role.permission,m,f[h]);EP(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw Gn(n)}}o(_ge,"verifyPermsAst");function gge(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Nr.info("null required parameter in verifyPerms"),Gn(new Error,Jr.DEFAULT_INVALID_REQUEST,Fp.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new $W;if(ta.isEmptyOrZeroLength(e.hdb_user?.role)||ta.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Nr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Jr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(Sn.SYSTEM_SCHEMA_NAME)||s===Sn.SYSTEM_SCHEMA_NAME;if(l&&d&&fge[e.operation]&&(i===Sn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Sn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&YW[r])throw Gn(new Error,Jr.DROP_SYSTEM,Fp.FORBIDDEN);if(l&&!d||u===!0&&(r===Fs.createSchema.name||r===Fs.dropSchema.name))return null;if(Ege.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=xW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===MW||r===vW)&&!f.super_user){if(s===Sn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Jr.SCHEMA_PERM_ERROR(s));if(r===MW&&(!f[s]||!f[s][Hp]))return c.handleInvalidItem(Jr.SCHEMA_NOT_FOUND(s));if(r===vW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Hp]))return c.handleInvalidItem(Jr.TABLE_NOT_FOUND(s,i))}let m=zW(e.hdb_user,r,a,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Sn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[Sn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[Sn.PERMS_CRUD_ENUM.READ]).forEach(T=>{_.push(T.attribute_name)}):_=global.hdb_schema[s][i].attributes.map(y=>y.attribute),e.get_attributes=_)}let h=Sge(e),p=_P(e.hdb_user?.role?.permission,s,i);return EP(h,p,r,i,s,c,n),c.getPermsResponse()}o(gge,"verifyPerms");function zW(e,t,r,n,s){if(ta.arrayHasEmptyValues([e,t,r]))throw Nr.info("hasPermissions has an invalid parameter"),Gn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Nr.info(`operation ${t} not found.`),Gn(new Error,Jr.OP_NOT_FOUND(t),Fp.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Nr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Jr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][Hp]===!1){n.addInvalidItem(Jr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Jr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[Hp]===!1)n.addInvalidItem(Jr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=Z.get(t).perms;!ta.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(Nr.info(`Required ${_} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(_))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let h=Jr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Nr.error(h),Nr.error(m),Gn(VW.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(zW,"hasPermissions");function EP(e,t,r,n,s,i,a){if(!e||!t)throw Nr.info("no attributes specified in checkAttributePerms."),Gn(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Nr.info(`no permissions found for ${r} in checkAttributePerms().`),Gn(new Error);if(ta.isEmptyOrZeroLength(t))return Nr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Hp]===!1){i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Sn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Hs)throw Gn(new Error,Jr.SYSTEM_TIMESTAMP_PERMS_ERR,Fp.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(EP,"checkAttributePerms");function Sge(e){let t=new Set;try{if(e.action)return t;if(e.operation===Sn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Nr.info(r)}return t}o(Sge,"getRecordAttributes");function _P(e,t,r){let n=new Map;if(ta.isEmpty(e))return Nr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Nr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(_P,"getAttributePermissions");function Tge(e,t,r,n,s,i,a){let c=new Set(i),l=_P(e,n,s);EP(c,l,t,s,n,a,r)}o(Tge,"verifyBulkLoadAttributePerms")});var lR=M((Nxe,ez)=>{"use strict";ez.exports={evaluateSQL:Mge,processAST:ZW,convertSQLToAST:XW,checkASTPermissions:JW};var Rge=Mn(),QW=require("util"),yge=QW.callbackify(Rge.insert),Age=on().search,bge=Oq().update,Ige=QW.callbackify(bge),Nge=Pq().convertDelete,hc=require("alasql"),wge=aR(),cR=Q(),Oge=rg(),Cge=ie(),qp=(k(),v(Y)),{hdbErrors:Pge,handleHDBError:gP}=_e(),{HTTP_STATUS_CODES:SP}=Pge;Oge(hc);var Lge=403,Dge="There was a problem performing this insert. Please check the logs and try again.",TP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Mge(e,t){let r=e.parsed_sql_object;if(!r){r=XW(e.sql);let n,s=r.ast.statements[0];if(s instanceof hc.yy.Insert?n=s.into.databaseid:s instanceof hc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof hc.yy.Update||s instanceof hc.yy.Delete?n=s.table.databaseid:cR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof hc.yy.Select)&&Cge.isEmptyOrZeroLength(n))return t("No schema specified",null)}ZW(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Mge,"evaluateSQL");function JW(e,t){let r;try{r=wge.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(JW,"checkASTPermissions");function XW(e){let t=new TP;if(!e)throw gP(new Error,"The 'sql' parameter is missing from the request body",SP.BAD_REQUEST);try{let r=e.trim(),n=hc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
38
|
+
`);throw n[1]?gP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,SP.BAD_REQUEST):gP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",SP.BAD_REQUEST)}return t}o(XW,"convertSQLToAST");function ZW(e,t,r){try{let n=vge;if(!e.bypass_auth&&!t.permissions_checked){let i=JW(e,t);if(i&&i.length>0)return r(Lge,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case qp.VALID_SQL_OPS_ENUM.SELECT:n=Age,s=t.ast.statements[0];break;case qp.VALID_SQL_OPS_ENUM.INSERT:n=Uge;break;case qp.VALID_SQL_OPS_ENUM.UPDATE:n=Ige;break;case qp.VALID_SQL_OPS_ENUM.DELETE:n=Nge;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(ZW,"processAST");function vge(e,t){cR.info(e),t("unknown sql statement")}o(vge,"nullFunction");function Uge({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=xge(i,e.values)}catch(a){return r(a)}yge(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){cR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Uge,"convertInsert");function xge(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=hc.compile(`SELECT ${s.toString()} AS [${qp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw cR.error(r),new Error(Dge)}}o(xge,"createDataObjects")});var NP=M((Pxe,sz)=>{var mR=require("clone"),hR=dt(),Bge=ie(),dR=(k(),v(Y)),Oxe=Q(),RP=require("fs"),AP=require("joi"),{string:fR}=AP.types(),{hdbErrors:Fge,handleHDBError:uR}=_e(),{HDB_ERROR_MSGS:Cxe,HTTP_STATUS_CODES:yP}=Fge,{commonValidators:df}=Hi(),tz=" is required",Hge=["insert","update","upsert"],bP={database:{presence:!1,format:df.schema_format,length:df.schema_length},schema:{presence:!1,format:df.schema_format,length:df.schema_length},table:{presence:!0,format:df.schema_format,length:df.schema_length},action:{inclusion:{within:Hge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},kge={schema:fR.required(),table:fR.required(),action:fR.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Gge,AWS_SECRET:qge,AWS_BUCKET:$ge,AWS_FILE_KEY:Vge,REGION:Kge}=dR.S3_BUCKET_AUTH_KEYS,Yge={s3:{presence:!0},[`s3.${Gge}`]:{presence:!0,type:"String"},[`s3.${qge}`]:{presence:!0,type:"String"},[`s3.${$ge}`]:{presence:!0,type:"String"},[`s3.${Vge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Kge}`]:{presence:!0,type:"String"}},rz=mR(bP);rz.data.presence={message:tz};var nz=mR(bP);nz.file_path.presence={message:tz};var Wge=Object.assign(mR(bP),Yge),IP=mR(kge);IP.csv_url=fR.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();IP.passthrough_headers=AP.object();function zge(e){let t=hR.validateObject(e,rz);return pR(e,t)}o(zge,"dataObject");function jge(e){let t=hR.validateBySchema(e,AP.object(IP));return pR(e,t)}o(jge,"urlObject");function Qge(e){let t=hR.validateObject(e,nz);return pR(e,t)}o(Qge,"fileObject");function Jge(e){let t=hR.validateObject(e,Wge);return pR(e,t)}o(Jge,"s3FileObject");function pR(e,t){if(!t){let r=Bge.checkGlobalSchemaTable(e.schema,e.table);if(r)return uR(new Error,r,yP.BAD_REQUEST);if(e.operation===dR.OPERATIONS_ENUM.CSV_FILE_LOAD)try{RP.accessSync(e.file_path,RP.constants.R_OK|RP.constants.F_OK)}catch(n){return n.code===dR.NODE_ERROR_CODES.ENOENT?uR(n,`No such file or directory ${n.path}`,yP.BAD_REQUEST):n.code===dR.NODE_ERROR_CODES.EACCES?uR(n,`Permission denied ${n.path}`,yP.BAD_REQUEST):uR(n)}}return t}o(pR,"postValidateChecks");sz.exports={dataObject:zge,urlObject:jge,fileObject:Qge,s3FileObject:Jge}});var wP=M((Dxe,iz)=>{"use strict";var $p=Q(),ER=(k(),v(Y));async function Xge(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===ER.OPERATIONS_ENUM.INSERT||t.operation===ER.OPERATIONS_ENUM.UPDATE||t.operation===ER.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ER.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?($p.info(i.message),i):i.http_resp_msg?($p.error(`Error calling operation: ${e.name}`),$p.error(i.http_resp_msg),i):($p.error(`Error calling operation: ${e.name}`),$p.error(i),i)}}o(Xge,"callOperationFunctionAsAwait");iz.exports={callOperationFunctionAsAwait:Xge}});var OP=M((vxe,az)=>{"use strict";var{S3:Zge,GetObjectCommand:eSe}=require("@aws-sdk/client-s3");az.exports={getFileStreamFromS3:tSe,getS3AuthObj:oz};async function tSe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await oz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new eSe(r))).Body}o(tSe,"getFileStreamFromS3");function oz(e,t,r){return new Zge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(oz,"getS3AuthObj")});var lz=M((xxe,cz)=>{"use strict";var CP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},PP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};cz.exports={BulkLoadFileObject:CP,BulkLoadDataObject:PP}});var DP=M((Fxe,uz)=>{"use strict";var LP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};uz.exports=LP});var FP=M((Vxe,wz)=>{"use strict";var _R=Mn(),SR=NP(),rSe=require("needle"),Ri=(k(),v(Y)),kxe=Ot(),ff=ie(),{handleHDBError:Xt,hdbErrors:Sz}=_e(),{HTTP_STATUS_CODES:Xr,HDB_ERROR_MSGS:wr,CHECK_LOGS_WRAPPER:Zl}=Sz,mf=Q(),MP=require("papaparse");ff.promisifyPapaParse();var yi=require("fs-extra"),nSe=require("path"),{chain:dz}=require("stream-chain"),fz=require("stream-json/streamers/StreamArray"),mz=require("stream-json/utils/Batch"),hz=require("stream-chain/utils/comp"),{finished:pz}=require("stream"),sSe=ae(),Tz=wP(),iSe=OP(),{BulkLoadFileObject:UP,BulkLoadDataObject:oSe}=lz(),xP=lP(),{verifyBulkLoadAttributePerms:Rz}=aR(),Gxe=DP(),qxe=mr(),$xe=$i(),{databases:aSe}=(Me(),v(_t)),{coerceType:cSe}=(w_(),v(hk)),Ez="No records parsed from csv file.",Xl=`${sSe.get("HDB_ROOT")}/tmp`,{schemaRegex:lSe}=Hi(),_z=1024*1024*2,gz=5e3,uSe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};wz.exports={csvDataLoad:dSe,csvURLLoad:fSe,csvFileLoad:mSe,importFromS3:hSe};async function dSe(e,t){let r=SR.dataObject(e);if(r)throw Xt(r,r.message,Xr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=bz(e.schema,e.table),i=MP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:vP.bind(null,s),dynamicTyping:!1}),a=new xP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&Rz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Xt(new Error,c,Xr.BAD_REQUEST,void 0,void 0,!0);let l=new oSe(e.action,e.schema,e.table,i.data);return n=await Tz.callOperationFunctionAsAwait(Iz,l,null),n.message===Ez?Ez:Nz(n.records,n.number_written)}catch(s){throw eu(s)}}o(dSe,"csvDataLoad");async function fSe(e){let t=SR.urlObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Xl}/${r}`;try{await pSe(e,r)}catch(s){throw mf.error(wr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,Zl(wr.DOWNLOAD_FILE_ERR(r)))}try{let s=new UP(this.job_operation_function.name,e.action,e.schema,e.table,n,Ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await BP(s);return await gR(n),i}catch(s){throw await gR(n),eu(s)}}o(fSe,"csvURLLoad");async function mSe(e){let t=SR.fileObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=new UP(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await BP(r)}catch(n){throw eu(n)}}o(mSe,"csvFileLoad");async function hSe(e){let t=SR.s3FileObject(e);if(t)throw Xt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=nSe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Xl}/${s}`;let i=new UP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await ESe(s,e);let a=await BP(i);return await gR(r),a}catch(n){throw await gR(r),eu(n)}}o(hSe,"importFromS3");async function pSe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await rSe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Xt(n,s,n.statusCode,Ri.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}gSe(r,e.csv_url),await _Se(t,r.raw)}o(pSe,"downloadCSVFile");async function ESe(e,t){try{let r=`${Xl}/${e}`;await yi.mkdirp(Xl),await yi.writeFile(`${Xl}/${e}`,"",{flag:"a+"});let n=await yi.createWriteStream(r),s=await iSe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){mf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw mf.error(wr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,Zl(wr.S3_DOWNLOAD_ERR))}}o(ESe,"downloadFileFromS3");async function _Se(e,t){try{await yi.mkdirp(Xl),await yi.writeFile(`${Xl}/${e}`,t)}catch(r){throw mf.error(wr.WRITE_TEMP_FILE_ERR),Xt(r,Zl(wr.DEFAULT_BULK_LOAD_ERR))}}o(_Se,"writeFileToTempFolder");async function gR(e){if(e)try{await yi.access(e),await yi.unlink(e)}catch{mf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(gR,"deleteTempFile");function gSe(e,t){if(e.statusCode!==Sz.HTTP_STATUS_CODES.OK)throw Xt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Xr.BAD_REQUEST);if(!uSe[e.headers["content-type"]])throw Xt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Xr.BAD_REQUEST);if(!e.raw)throw Xt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Xr.BAD_REQUEST)}o(gSe,"validateURLResponse");async function BP(e){try{let t;switch(e.file_type){case Ri.VALID_S3_FILE_TYPES.CSV:t=await SSe(e);break;case Ri.VALID_S3_FILE_TYPES.JSON:t=await TSe(e);break;default:throw Xt(new Error,wr.DEFAULT_BULK_LOAD_ERR,Xr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,wr.INVALID_FILE_EXT_ERR(e))}return Nz(t.records,t.number_written)}catch(t){throw eu(t)}}o(BP,"fileLoad");async function yz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await _R.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&Rz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Xt(c);r(l)}}o(yz,"validateChunk");async function Az(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ff.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!ff.isEmpty(c)&&!ff.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await Tz.callOperationFunctionAsAwait(Iz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,Zl(wr.INSERT_CSV_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.INSERT_CSV_ERR+" - "+c);r(l)}}o(Az,"insertChunk");async function SSe(e){let t={records:0,number_written:0},r=bz(e.schema,e.table);try{let n=new xP,s=yi.createReadStream(e.file_path,{highWaterMark:_z});s.setEncoding("utf8"),await MP.parsePromise(s,yz.bind(null,e,n),vP.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,Xr.BAD_REQUEST);return s=yi.createReadStream(e.file_path,{highWaterMark:_z}),s.setEncoding("utf8"),await MP.parsePromise(s,Az.bind(null,e,t),vP.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,Zl(wr.PAPA_PARSE_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.PAPA_PARSE_ERR+n)}}o(SSe,"callPapaParse");function bz(e,t){let r=aSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>cSe(i,s));return n}o(bz,"createTransformMap");function vP(e,t,r){let n=e.get(r);return n?n(t):ff.autoCast(t)}o(vP,"typeFunction");async function TSe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new xP,s=dz([yi.createReadStream(e.file_path,{encoding:"utf-8"}),fz.withParser(),c=>c.value,new mz({batchSize:gz}),hz(async c=>{await yz(e,n,r,c)})]);await new Promise((c,l)=>{pz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,Xr.BAD_REQUEST);let a=dz([yi.createReadStream(e.file_path,{encoding:"utf-8"}),fz.withParser(),c=>c.value,new mz({batchSize:gz}),hz(async c=>{await Az(e,t,r,c)})]);return await new Promise((c,l)=>{pz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Xt(n,Zl(wr.INSERT_JSON_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.INSERT_JSON_ERR+n)}}o(TSe,"insertJson");async function Iz(e){let t={};try{e.data&&e.data.length>0&&RSe(e.data[0])?t=await ySe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",mf.info(t.message))}catch(r){throw eu(r)}return t}o(Iz,"callBulkFileLoad");function RSe(e){let t=Object.keys(e);for(let r of t)if(!lSe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(RSe,"validateColumnNames");async function ySe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=_R.insert;break;case"update":i=_R.update;break;case"upsert":i=_R.upsert;break;default:throw Xt(new Error,wr.INVALID_ACTION_PARAM_ERR(n),Xr.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,wr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=ff.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw eu(a)}}o(ySe,"bulkFileLoad");function Nz(e,t){return`successfully loaded ${t} of ${e} records`}o(Nz,"buildResponseMsg");function eu(e){return Xt(e,Zl(wr.DEFAULT_BULK_LOAD_ERR),Xr.INTERNAL_SERVER_ERROR,Ri.LOG_LEVELS.ERROR,wr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(eu,"buildTopLevelErrMsg")});var GP=M((Yxe,Uz)=>{"use strict";var kP=on(),ASe=OP(),{AsyncParser:bSe}=require("json2csv"),TR=require("stream"),fs=ie(),HP=require("fs-extra"),ISe=require("path"),ks=Q(),{promisify:Pz}=require("util"),Vp=ie(),{handleHDBError:_r,hdbErrors:NSe}=_e(),{HDB_ERROR_MSGS:qn,HTTP_STATUS_CODES:gr}=NSe,{streamAsJSON:wSe}=(SA(),v(Ev)),{Upload:OSe}=require("@aws-sdk/lib-storage"),{toCsvStream:CSe}=(Ro(),v(Nv)),Oz=["search_by_value","search_by_hash","sql","search_by_conditions"],Cz=["json","csv"],Lz="json",Dz="csv",PSe="Successfully exported JSON locally.",LSe="Successfully exported CSV locally.",DSe=1e3,MSe=kP.searchByHash,vSe=kP.searchByValue,USe=Pz(TR.finished);Uz.exports={export_to_s3:HSe,export_local:xSe};async function xSe(e){ks.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Mz(e);if(!fs.isEmpty(t))throw ks.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(fs.isEmpty(e.path))throw ks.error(qn.MISSING_VALUE("path")),_r(new Error,qn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(fs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(ISe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=fs.buildFolderPath(e.path,r);await BSe(e.path);let s=await vz(e);return await FSe(n,e.format,s)}o(xSe,"export_local");async function BSe(e){if(ks.trace("in confirmPath"),fs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await HP.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,ks.error(n),_r(new Error,n,gr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ks.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(BSe,"confirmPath");async function FSe(e,t,r){if(ks.trace("in saveToLocal"),Vp.isEmptyOrZeroLength(e))throw _r(new Error,qn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmptyOrZeroLength(t))throw _r(new Error,qn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(Vp.isEmpty(r))throw _r(new Error,qn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===Lz){let n=HP.createWriteStream(e);return wSe(r).pipe(n),await USe(n),{message:PSe,path:e}}else if(t===Dz){let n=HP.createWriteStream(e),s=TR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new bSe(i,c).fromInput(s).toOutput(n).promise(!1),{message:LSe,path:e}}throw _r(new Error,qn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(FSe,"saveToLocal");async function HSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,qn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,qn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,qn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,qn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,qn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,qn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Mz(e);if(!fs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);ks.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vz(e)}catch(l){throw ks.error(l),l}let n,s=await ASe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new TR.PassThrough;if(e.format===Dz){i=e.s3.key+".csv";let l=CSe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Lz){i=e.s3.key+".json";let l=new TR.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let h=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=h,f!==0&&f%DSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,qn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new OSe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(HSe,"export_to_s3");function Mz(e){if(ks.trace("in exportCoreValidation"),fs.isEmpty(e.format))return"format missing";if(Cz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Cz.join(", ")}`;let t=e.search_operation.operation;if(fs.isEmpty(t))return"search_operation.operation missing";if(Oz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Oz.join(", ")}`}o(Mz,"exportCoreValidation");async function vz(e){ks.trace("in getRecords");let t,r;if(Vp.isEmpty(e.search_operation)||Vp.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,qn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=vSe;break;case"search_by_hash":t=MSe;break;case"search_by_conditions":t=kP.searchByConditions;break;case"sql":{let n=lR();t=Pz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ks.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(vz,"getRecords")});var Bz=M((zxe,xz)=>{"use strict";var qP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};xz.exports=qP});var kz=M((Qxe,Hz)=>{"use strict";var kSe=(k(),v(Y)),Fz=require("moment"),GSe=require("uuid").v4,$P=class{static{o(this,"JobObject")}constructor(){this.id=GSe(),this.type=void 0,this.start_datetime=Fz().valueOf(),this.created_datetime=Fz().valueOf(),this.end_datetime=void 0,this.status=kSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Hz.exports=$P});var VP=M((Xxe,zz)=>{"use strict";var qSe=require("uuid").v4,Kz=Mn(),Yz=on(),$Se=ai(),VSe=Ku(),KSe=Bz(),Mt=(k(),v(Y)),YSe=kz(),WSe=dS(),Ai=Q(),zSe=Zf(),hf=ie(),{promisify:jSe}=require("util"),tu=require("moment"),QSe=lR(),RR=NP(),Gz=LI(),{deleteTransactionLogsBeforeValidator:JSe}=zC(),{handleHDBError:qz,hdbErrors:XSe,ClientError:ZSe}=_e(),{HTTP_STATUS_CODES:$z}=XSe,Vz=Yz.searchByValue,eTe=Yz.searchByHash,tTe=Kz.insert,rTe=jSe(QSe.evaluateSQL),nTe=Kz.update;zz.exports={addJob:oTe,updateJob:cTe,handleGetJob:sTe,handleGetJobsByStartDate:iTe,getJobById:Wz};async function sTe(e){if(e.id===void 0)throw new ZSe("'id' is required");let t=await Wz(e.id);return hf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(sTe,"handleGetJob");async function iTe(e){try{let t=await aTe(e);if(Ai.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=tu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=tu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ai.error(r),new Error(r)}}o(iTe,"handleGetJobsByStartDate");async function oTe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||hf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ai.info(d),t.error=d,t}if(!Mt.JOB_TYPE_ENUM[e.operation])return Ai.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Mt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=RR.fileObject(e);break;case Mt.OPERATIONS_ENUM.CSV_URL_LOAD:n=RR.urlObject(e);break;case Mt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=RR.dataObject(e);break;case Mt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=RR.s3FileObject(e);break;case Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Gz(e,"date");break;case Mt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Gz(e,"timestamp");break;case Mt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=JSe(e);break;case Mt.OPERATIONS_ENUM.RESTART_SERVICE:if(Mt.HDB_PROCESS_SERVICES[e.service]===void 0)throw qz(new Error,"Invalid service",$z.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw qz(n,n.message,$z.BAD_REQUEST,void 0,void 0,!0);let s=new YSe;s.type=e.operation===Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new $Se(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Vz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=qSe();try{a=await Vz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ai.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ai.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new zSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await tTe(l)}catch(d){return Ai.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ai.trace(d)}return t}o(oTe,"addJob");async function aTe(e){let t=tu(e.from_date,tu.ISO_8601),r=tu(e.to_date,tu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new KSe(n,e.hdb_user);try{return await rTe(s)}catch(i){throw Ai.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(aTe,"getJobsInDateRange");async function Wz(e){if(hf.isEmptyOrZeroLength(e))return hf.errorizeMessage("Invalid job ID specified.");let t=new VSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await eTe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ai.error(n),hf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Wz,"getJobById");async function cTe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(hf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Mt.JOB_STATUS_ENUM.COMPLETE||e.status===Mt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=tu().valueOf());let t=new WSe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await nTe(t),r}o(cTe,"updateJob")});var rj=M((eBe,tj)=>{"use strict";var jz=ie(),Or=(k(),v(Y)),lTe=require("moment"),yR=FP(),Kp=Q(),Qz=VP(),Jz=GP(),Xz=El(),Zz=st(),uTe=ZT(),dTe=sf(),{parentPort:fTe,isMainThread:ej}=require("worker_threads"),{onMessageByType:mTe}=st(),KP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function hTe(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(jz.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(jz.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await so(e,yR.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await so(e,yR.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await so(e,yR.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await so(e,yR.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await so(e,Jz.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await so(e,Jz.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await so(e,Xz.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,Xz.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,uTe.deleteTransactionLogsBefore);break;case Or.JOB_TYPE_ENUM.restart_service:return await so(e,dTe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(hTe,"parseMessage");async function so(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=lTe().valueOf(),await Qz.updateJob(e.job),await pTe(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Kp.error(`There was an error running ${t.name} job with id ${e.job.id}`),Kp.error(n),e.job.message=n,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await Qz.updateJob(e.job)}catch(s){throw Kp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function pTe(e){Kp.trace("launching job thread:",e),ej?Zz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):fTe.postMessage({type:Or.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(pTe,"launchJobThread");ej&&mTe(Or.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Zz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Kp.error(r)}});tj.exports={parseMessage:hTe,RunnerMessage:KP}});var sj=M((rBe,nj)=>{"use strict";var ETe=ie(),YP=ae(),pc=(k(),v(Y)),_Te=Ot(),gTe=mr(),io=Q(),STe=DP(),TTe=$i();YP.initSync();nj.exports={postOperationHandler:yTe,sendOperationTransaction:Yp};async function Yp(e,t,r,n){if(e.schema===pc.SYSTEM_SCHEMA_NAME)return;let s=RTe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await gTe.publishToStream(`${_Te.SUBJECT_PREFIXES.TXN}.${e.schema}`,TTe.createNatsTableStreamName(e.schema,e.table),n,s))}o(Yp,"sendOperationTransaction");function RTe(e,t,r){if(ETe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(RTe,"convertCRUDOperationToTransaction");async function yTe(e,t,r){if(!YP.get(pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=YP.get(pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new STe(t.txn_time,n,s);switch(e.operation){case pc.OPERATIONS_ENUM.INSERT:try{await Yp(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case pc.OPERATIONS_ENUM.DELETE:try{await Yp(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPDATE:try{await Yp(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPSERT:try{await Yp(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(yTe,"postOperationHandler")});var X,ij=le(()=>{X=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var YC={};Oe(YC,{chooseOperation:()=>bj,executeJob:()=>Gs,getOperationFunction:()=>Ij,operation:()=>tL,processLocalTransaction:()=>Aj});async function Aj(e,t){try{if(e.body.operation!=="read_log"&&(Qp.default.log_level===Vf.INFO||Qp.default.log_level===Vf.DEBUG||Qp.default.log_level===Vf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Tn.info(c)}}catch(n){Tn.error(n)}let r=await Rj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ITe[e.body.operation]&&_j.default.setSchemaDataToGlobal(n=>{n&&Tn.error(n)}),r}function bj(e){let t;try{t=Ij(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=IR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=IR.default.checkASTPermissions(e,i);if(a)throw Tn.error(`${oj.FORBIDDEN} from operation ${e.operation}`),Tn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.LOGIN&&e.operation!==q.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=Ej.default.verifyPerms(i,s);if(a)throw Tn.error(`${oj.FORBIDDEN} from operation ${e.operation}`),Tn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,qs.handleHDBError)(new Error,a,qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function Ij(e){if(Tn.trace(`getOperationFunction with operation: ${e.operation}`),aj.has(e.operation))return aj.get(e.operation);throw(0,qs.handleHDBError)(new Error,qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function tL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=bj(e);return Aj({body:e},n)}async function NTe(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[eA]=!0;let a;switch(i.operation){case q.INSERT:a=await nu.default.insert(i);break;case q.UPDATE:a=await nu.default.update(i);break;case q.UPSERT:a=await nu.default.upsert(i);break;case q.DELETE:a=await _f.default.deleteRecord(i);break;default:Tn.warn("invalid operation in catchup");break}await yj.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){Tn.info("Invalid operation in transaction"),Tn.error(a)}}async function Gs(e){(0,Tj.transformReq)(e);let t,r;try{if(r=await NR.default.addJob(e),r){t=r.createdJob,Tn.info("addJob result",r);let n=new QP.default.RunnerMessage(t,e);return{message:await QP.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Tn.error(i),(0,qs.handleHDBError)(n,i)}}function wTe(){let e=new Map;return e.set(q.INSERT,new X(nu.default.insert)),e.set(q.UPDATE,new X(nu.default.update)),e.set(q.UPSERT,new X(nu.default.upsert)),e.set(q.SEARCH_BY_CONDITIONS,new X(Ef.default.searchByConditions)),e.set(q.SEARCH_BY_HASH,new X(Ef.default.searchByHash)),e.set(q.SEARCH_BY_ID,new X(Ef.default.searchByHash)),e.set(q.SEARCH_BY_VALUE,new X(Ef.default.searchByValue)),e.set(q.SEARCH,new X(ATe)),e.set(q.SQL,new X(bTe)),e.set(q.CSV_DATA_LOAD,new X(Gs,Wp.default.csvDataLoad)),e.set(q.CSV_FILE_LOAD,new X(Gs,Wp.default.csvFileLoad)),e.set(q.CSV_URL_LOAD,new X(Gs,Wp.default.csvURLLoad)),e.set(q.IMPORT_FROM_S3,new X(Gs,Wp.default.importFromS3)),e.set(q.CREATE_SCHEMA,new X(bi.default.createSchema)),e.set(q.CREATE_DATABASE,new X(bi.default.createSchema)),e.set(q.CREATE_TABLE,new X(bi.default.createTable)),e.set(q.CREATE_ATTRIBUTE,new X(bi.default.createAttribute)),e.set(q.DROP_SCHEMA,new X(bi.default.dropSchema)),e.set(q.DROP_DATABASE,new X(bi.default.dropSchema)),e.set(q.DROP_TABLE,new X(bi.default.dropTable)),e.set(q.DROP_ATTRIBUTE,new X(bi.default.dropAttribute)),e.set(q.DESCRIBE_SCHEMA,new X(zp.default.describeSchema)),e.set(q.DESCRIBE_DATABASE,new X(zp.default.describeSchema)),e.set(q.DESCRIBE_TABLE,new X(zp.default.describeTable)),e.set(q.DESCRIBE_ALL,new X(zp.default.describeAll)),e.set(q.DELETE,new X(_f.default.deleteRecord)),e.set(q.ADD_USER,new X(pf.default.addUser)),e.set(q.ALTER_USER,new X(pf.default.alterUser)),e.set(q.DROP_USER,new X(pf.default.dropUser)),e.set(q.LIST_USERS,new X(pf.default.listUsersExternal)),e.set(q.LIST_ROLES,new X(jp.default.listRoles)),e.set(q.ADD_ROLE,new X(jp.default.addRole)),e.set(q.ALTER_ROLE,new X(jp.default.alterRole)),e.set(q.DROP_ROLE,new X(jp.default.dropRole)),e.set(q.USER_INFO,new X(pf.default.userInfo)),e.set(q.READ_LOG,new X(lj.default)),e.set(q.ADD_NODE,new X(uj.default)),e.set(q.UPDATE_NODE,new X(WP.default)),e.set(q.SET_NODE_REPLICATION,new X(WP.default)),e.set(q.REMOVE_NODE,new X(dj.default)),e.set(q.CONFIGURE_CLUSTER,new X(fj.default)),e.set(q.PURGE_STREAM,new X(mj.default)),e.set(q.SET_CONFIGURATION,new X(JP.default.setConfiguration)),e.set(q.CLUSTER_STATUS,new X(hj.default.clusterStatus)),e.set(q.CLUSTER_NETWORK,new X(pj.default)),e.set(q.CLUSTER_SET_ROUTES,new X(AR.default.setRoutes)),e.set(q.CLUSTER_GET_ROUTES,new X(AR.default.getRoutes)),e.set(q.CLUSTER_DELETE_ROUTES,new X(AR.default.deleteRoutes)),e.set(q.EXPORT_TO_S3,new X(Gs,zP.default.export_to_s3)),e.set(q.CREATE_CSR,new X(ru.default.createCsr)),e.set(q.SIGN_CERTIFICATE,new X(ru.default.signCertificate)),e.set(q.LIST_CERTIFICATES,new X(ru.default.listCertificates)),e.set(q.ADD_CERTIFICATES,new X(ru.default.addCertificate)),e.set(q.REMOVE_CERTIFICATE,new X(ru.default.removeCertificate)),e.set(q.GET_KEY,new X(ru.default.getKey)),e.set(q.ADD_NODE_BACK,new X(kO)),e.set(q.REMOVE_NODE_BACK,new X(GO)),e.set(q.DELETE_FILES_BEFORE,new X(Gs,_f.default.deleteFilesBefore)),e.set(q.DELETE_RECORDS_BEFORE,new X(Gs,_f.default.deleteFilesBefore)),e.set(q.EXPORT_LOCAL,new X(Gs,zP.default.export_local)),e.set(q.SEARCH_JOBS_BY_START_DATE,new X(NR.default.handleGetJobsByStartDate)),e.set(q.GET_JOB,new X(NR.default.handleGetJob)),e.set(q.GET_FINGERPRINT,new X(bR.default.getFingerprint)),e.set(q.SET_LICENSE,new X(bR.default.setLicense)),e.set(q.GET_REGISTRATION_INFO,new X(bR.default.getRegistrationInfo)),e.set(q.RESTART,new X(jP.default.restart)),e.set(q.RESTART_SERVICE,new X(Gs,jP.default.restartService)),e.set(q.CATCHUP,new X(NTe)),e.set(q.SYSTEM_INFORMATION,new X(gj.default.systemInformation)),e.set(q.DELETE_AUDIT_LOGS_BEFORE,new X(Gs,_f.default.deleteAuditLogsBefore)),e.set(q.READ_AUDIT_LOG,new X(cj.default)),e.set(q.CREATE_AUTHENTICATION_TOKENS,new X(Ew)),e.set(q.REFRESH_OPERATION_TOKEN,new X(_w)),e.set(q.LOGIN,new X(FC)),e.set(q.LOGOUT,new X(HC)),e.set(q.GET_CONFIGURATION,new X(JP.default.getConfiguration)),e.set(q.CUSTOM_FUNCTIONS_STATUS,new X(vt.default.customFunctionsStatus)),e.set(q.GET_CUSTOM_FUNCTIONS,new X(vt.default.getCustomFunctions)),e.set(q.GET_COMPONENT_FILE,new X(vt.default.getComponentFile)),e.set(q.GET_COMPONENTS,new X(vt.default.getComponents)),e.set(q.SET_COMPONENT_FILE,new X(vt.default.setComponentFile)),e.set(q.DROP_COMPONENT,new X(vt.default.dropComponent)),e.set(q.GET_CUSTOM_FUNCTION,new X(vt.default.getCustomFunction)),e.set(q.SET_CUSTOM_FUNCTION,new X(vt.default.setCustomFunction)),e.set(q.DROP_CUSTOM_FUNCTION,new X(vt.default.dropCustomFunction)),e.set(q.ADD_CUSTOM_FUNCTION_PROJECT,new X(vt.default.addComponent)),e.set(q.ADD_COMPONENT,new X(vt.default.addComponent)),e.set(q.DROP_CUSTOM_FUNCTION_PROJECT,new X(vt.default.dropCustomFunctionProject)),e.set(q.PACKAGE_CUSTOM_FUNCTION_PROJECT,new X(vt.default.packageComponent)),e.set(q.PACKAGE_COMPONENT,new X(vt.default.packageComponent)),e.set(q.DEPLOY_CUSTOM_FUNCTION_PROJECT,new X(vt.default.deployComponent)),e.set(q.DEPLOY_COMPONENT,new X(vt.default.deployComponent)),e.set(q.READ_TRANSACTION_LOG,new X(XP.default.readTransactionLog)),e.set(q.DELETE_TRANSACTION_LOGS_BEFORE,new X(Gs,XP.default.deleteTransactionLogsBefore)),e.set(q.INSTALL_NODE_MODULES,new X(ZP.default.installModules)),e.set(q.AUDIT_NODE_MODULES,new X(ZP.default.auditModules)),e.set(q.GET_BACKUP,new X(bi.default.getBackup)),e.set(q.CLEANUP_ORPHAN_BLOBS,new X(bi.default.cleanupOrphanBlobs)),e.set(q.ADD_SSH_KEY,new X(vt.default.addSSHKey)),e.set(q.UPDATE_SSH_KEY,new X(vt.default.updateSSHKey)),e.set(q.DELETE_SSH_KEY,new X(vt.default.deleteSSHKey)),e.set(q.LIST_SSH_KEYS,new X(vt.default.listSSHKeys)),e.set(q.SET_SSH_KNOWN_HOSTS,new X(vt.default.setSSHKnownHosts)),e.set(q.GET_SSH_KNOWN_HOSTS,new X(vt.default.getSSHKnownHosts)),e.set(q.GET_ANALYTICS,new X(QC)),e.set(q.LIST_METRICS,new X(JC)),e.set(q.DESCRIBE_METRIC,new X(XC)),e.set(q.GET_STATUS,new X(nP)),e.set(q.SET_STATUS,new X(sP)),e.set(q.CLEAR_STATUS,new X(rP)),e}var Ef,IR,Wp,bi,zp,_f,cj,pf,jp,vt,Qp,lj,uj,WP,dj,fj,mj,hj,pj,AR,zP,Ej,NR,qs,bR,jP,eL,nu,_j,gj,QP,JP,XP,ZP,Sj,Tj,ru,Rj,yj,oj,Tn,ATe,bTe,ITe,aj,WC=le(()=>{Ef=w(on()),IR=w(lR()),Wp=w(FP()),bi=w(ep()),zp=w(Ua()),_f=w(El()),cj=w(hO()),pf=w(ts()),jp=w(Oh()),vt=w(KC()),Qp=w(Q()),lj=w(SO()),uj=w(gT()),WP=w(YO()),dj=w(TT()),fj=w(jO()),mj=w(QO()),hj=w(ZO()),pj=w(tC()),AR=w(IT()),zP=w(GP()),Ej=w(aR()),NR=w(VP());k();qs=w(_e()),bR=w(hC()),jP=w(sf()),eL=w(require("util")),nu=w(Mn()),_j=w(ii()),gj=w($d()),QP=w(rj());Td();KT();JP=w(wt()),XP=w(ZT()),ZP=w(wp()),Sj=w(Xs()),Tj=w(ie());Dr();ru=w(as());Kd();eP();Rj=w(wP()),yj=w(sj());Bp();ij();({HTTP_STATUS_CODES:oj}=qs.hdbErrors),Tn=Qp.default.loggerWithTag("operation"),ATe=eL.promisify(Ef.default.search),bTe=eL.promisify(IR.default.evaluateSQL),ITe={[q.CREATE_ATTRIBUTE]:!0,[q.CREATE_TABLE]:!0,[q.CREATE_SCHEMA]:!0,[q.DROP_ATTRIBUTE]:!0,[q.DROP_TABLE]:!0,[q.DROP_SCHEMA]:!0};o(Aj,"processLocalTransaction");aj=wTe();De.operation=tL;o(bj,"chooseOperation");o(Ij,"getOperationFunction");(0,Sj._assignPackageExport)("operation",tL);o(tL,"operation");o(NTe,"catchup");o(Gs,"executeJob");o(wTe,"initializeOperationFunctionMap")});var CR=M((lBe,Oj)=>{"use strict";var wR=(k(),v(Y)),OTe=ie(),Jp=Q(),{handleHDBError:rL,hdbErrors:OR}=_e(),{isMainThread:CTe}=require("worker_threads"),{Readable:PTe}=require("stream"),Nj=require("os"),LTe=require("util"),DTe=Sw(),MTe=LTe.promisify(DTe.authorize),wj=(WC(),v(YC)),{createGzip:vTe,constants:UTe}=require("zlib"),xTe=[wR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,wR.OPERATIONS_ENUM.LOGIN,wR.OPERATIONS_ENUM.LOGOUT];function BTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Nj.EOL}Stack: ${e.stack} ${Nj.EOL}Terminating ${CTe?"HDB":"thread"}.`;console.error(t),Jp.fatal(t),process.exit(1)}o(BTe,"handleServerUncaughtException");function FTe(e,t,r){if(Jp[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:OR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(FTe,"serverErrorHandler");function HTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=rL(new Error,"Invalid JSON.",OR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(OTe.isEmpty(e.body.operation)){let n=rL(new Error,"Request body must include an 'operation' property.",OR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(HTe,"reqBodyValidationHandler");function kTe(e,t,r){let n;!xTe.includes(e.body.operation)||e.body.operation===wR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?MTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Jp.warn(i),Jp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(rL(i,a,OR.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(kTe,"authHandler");async function GTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=wj.chooseOperation(e.body);let s=await wj.processLocalTransaction(e,n);if(s instanceof PTe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(vTe({level:UTe.Z_BEST_SPEED})))}return s}catch(s){throw Jp.error(s),s}}o(GTe,"handlePostRequest");Oj.exports={authHandler:kTe,handlePostRequest:GTe,handleServerUncaughtException:BTe,serverErrorHandler:FTe,reqBodyValidationHandler:HTe}});var Dj=M((dBe,Lj)=>{"use strict";var qTe=require("fastify-plugin"),{handlePostRequest:Cj,authHandler:$Te,reqBodyValidationHandler:VTe}=CR();async function KTe(e){e.decorate("hdbCore",{preValidation:[VTe,$Te],request:o((t,r)=>Pj(Cj(t,r)),"request"),requestWithoutAuthentication:o((t,r)=>Pj(Cj(t,r,!0)),"requestWithoutAuthentication")})}o(KTe,"hdbCore");async function Pj(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(Pj,"convertAsyncIterators");Lj.exports=qTe(KTe)});var vj=M((hBe,Mj)=>{"use strict";var mBe=require("fs"),PR=ae();PR.initSync();var{CONFIG_PARAMS:nL}=(k(),v(Y)),YTe=1024*1024*1024;function WTe(e){let t=PR.get(nL.HTTP_TIMEOUT),r=PR.get(nL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:YTe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:PR.get(nL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(WTe,"getServerOptions");Mj.exports=WTe});var Bj=M((EBe,xj)=>{"use strict";var sL=ae();sL.initSync();var{CONFIG_PARAMS:Uj}=(k(),v(Y));function zTe(){let e=sL.get(Uj.HTTP_CORSACCESSLIST),t=sL.get(Uj.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(zTe,"getCORSOptions");xj.exports=zTe});var kj=M((gBe,Hj)=>{"use strict";var Fj=ae();Fj.initSync();var jTe=(k(),v(Y));function QTe(){return Fj.get(jTe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(QTe,"getHeaderTimeoutConfig");Hj.exports=QTe});var oL={};Oe(oL,{customFunctionsServer:()=>ZTe,ready:()=>e2,start:()=>XTe});function XTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ra||(ra=Zj(t),De.http((await ra).server));let a=await ra,c=(0,iL.dirname)(s),l=(0,iL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Gj.has(c)){Gj.add(c);try{a.register(tRe(c,l))}catch(u){if(u.message==="Root plugin has already booted")yt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:e2}}async function ZTe(){try{yt.info("In Custom Functions Fastify server"+process.cwd()),yt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yt.debug(`Custom Functions server process ${process.pid} starting up.`),await eRe();let e=Wj.get(U.HTTP_SECUREPORT)>0,t;try{t=ra=await Zj(e)}catch(r){throw yt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw yt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){yt.error(`Custom Functions ${process.pid} Error: ${e}`),yt.error(e),process.exit(1)}}async function eRe(){try{yt.info("Custom Functions starting configuration."),await zj.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function tRe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,qj.existsSync)(e)&&r.register(Yj.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:yt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?yt.error(s.message):s&&yt.error(s),a()})}catch(n){yt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Zj(e){yt.info("Custom Functions starting buildServer.");let t=(0,jj.default)(e),r=(0,$j.default)(t);r.server.headersTimeout=(0,Jj.default)(),r.setErrorHandler(Xj.serverErrorHandler);let n=(0,Qj.default)();return n&&r.register(Vj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(Kj.default),await r.register(JTe),await r.after(),am(r),yt.info("Custom Functions completed buildServer."),r}function e2(){if(ra)return ra.then?ra.then(e=>e.ready()):ra.ready()}var iL,qj,$j,Vj,Kj,Yj,Wj,yt,JTe,zj,jj,Qj,Jj,Xj,ra,Gj,t2=le(()=>{iL=require("path"),qj=require("fs"),$j=w(require("fastify")),Vj=w(require("@fastify/cors")),Kj=w(fw()),Yj=w(require("@fastify/autoload")),Wj=w(ae());k();yt=w(Q()),JTe=w(Dj()),zj=w(ts()),jj=w(vj()),Qj=w(Bj()),Jj=w(kj()),Xj=w(CR());Ro();Dr();Gj=new Set;o(XTe,"start");o(ZTe,"customFunctionsServer");o(eRe,"setUp");o(tRe,"buildRouteFolder");o(Zj,"buildServer");o(e2,"ready")});var aL={};Oe(aL,{start:()=>rRe});function rRe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,o2.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(a=>n(s._nodeRequest,s._nodeResponse,()=>{a(i(s))}))}),!0}},handleFile(t,r,n){n2||(n2=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=r2.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,s2.default)(s,(0,i2.realpathSync)(a))}}return i(s)},{runFirst:!0})),r2.set(r,n)}}}var s2,i2,o2,r2,n2,a2=le(()=>{s2=w(require("send")),i2=require("fs"),o2=w(require("serve-static")),r2=new Map;o(rRe,"start")});var cL={};Oe(cL,{start:()=>nRe});function nRe({override:e}){return{handleFile:o((t,r,n)=>{LR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,c2.parse)(t))){if(process.env[s]!==void 0)if(LR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)LR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var c2,LR,l2=le(()=>{c2=require("dotenv"),LR=w(Q());o(nRe,"start")});var dL={};Oe(dL,{DataLoaderError:()=>ms,DataLoaderResult:()=>gf,EmptyFileError:()=>UR,FileParseError:()=>vR,InvalidPropertyTypeError:()=>xR,MissingRequiredPropertyError:()=>Xp,RecordProcessingError:()=>Zp,SystemDatabaseError:()=>BR,UnsupportedFileExtensionError:()=>MR,computeRecordHash:()=>uL,handleApplication:()=>oRe,loadDataFile:()=>_2,suppressHandleApplicationWarning:()=>iRe});function uL(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,d2.createHash)("sha256").update(n).digest("hex")}function E2(e){return e.system&&e.system[lL]?e.system[lL]:DR||(DR=ze({database:"system",table:lL,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),DR)}async function sRe(e,t,r,n){try{let s=E2(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return $s.error?.(`Failed to get stored hash: ${s.message}`),null}}async function u2(e,t,r,n,s){try{let i=E2(s),a=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:a,hash:n})}catch(i){$s.error?.(`Failed to store hash: ${i.message}`)}}function oRe(e){if((0,m2.getWorkerIndex)()!==0){$s.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||_2(t,un,ke).then(r=>{$s.debug?.("Data loader processed file: %s: %s",(0,na.basename)(t.absolutePath),r.message)})})}async function _2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,na.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,f2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new MR(t,i)}catch(f){throw f instanceof ms?f:new vR(t,f)}if(!a)throw new UR(t);let{database:c,table:l,records:u}=a;if(!l)throw new Xp(t,"table");if(!u)throw new Xp(t,"records");if(!Array.isArray(u))throw new xR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new BR(c,l);try{let f;if(c&&s[c]&&s[c][l])$s.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])$s.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{$s.debug?.(`Table ${d} not found, creating new table`);let y=[];if(u.length>0){let T=u[0];Object.keys(T).map(R=>{let N={name:R,type:typeof T[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{y.push(R)})}f=await ze({database:c,table:l,attributes:y})}let m=u.length,h=0,p=0,_=0,g=100;for(let y=0;y<u.length;y+=g){let T=u.slice(y,y+g),R=[];for(let N of T)R.push(async()=>{try{let C=null,G=N.id;G!==void 0&&(C=await f.get(G));let z=uL(N);if(!C){h++;let K=await f.put(N);return await u2(c,l,G,z,s),K}let F=await sRe(c,l,G,s);if(!F)return _++,Promise.resolve({inserted:0,updated:0});let $={};for(let K of Object.keys(N))K in C&&($[K]=C[K]);return uL($)!==F?(_++,Promise.resolve({inserted:0,updated:0})):z!==F?(p++,await f.patch(G,N),await u2(c,l,G,z,s),{updated:1}):(_++,Promise.resolve({inserted:0,updated:0}))}catch(C){if(C instanceof ms)$s.error?.(`Record processing error: ${C.message}`);else{let G=new Zp(d,C);$s.error?.(`Record processing error: ${G.message}`)}return Promise.resolve({inserted:0,updated:0,error:C.message})}});await Promise.all(R.map(N=>N()))}if(h>0||p>0){let y=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(y+=` (${_} records skipped)`),$s.info?.(y),new gf(t,c,l,"success",h+p,y)}else if(_>0){let y=`All ${_} records in ${d} already up-to-date`;return $s.info?.(y),new gf(t,c,l,"skipped",m,y)}else{let y=`No records to process in ${d}`;return $s.info?.(y),new gf(t,c,l,"success",0,y)}}catch(f){throw f instanceof ms?f:new Zp(d,f)}}var na,d2,f2,m2,sa,h2,p2,$s,lL,DR,iRe,ms,MR,vR,UR,Xp,xR,BR,Zp,gf,g2=le(()=>{na=require("node:path"),d2=require("node:crypto"),f2=require("yaml");Me();m2=w(st()),sa=w(rn()),h2=w(_e()),p2=w(Q()),$s=p2.default.forComponent("dataLoader"),lL="hdb_dataloader_hash";o(uL,"computeRecordHash");o(E2,"getHashTrackingTable");o(sRe,"getStoredHash");o(u2,"storeHash");iRe=!0;o(oRe,"handleApplication");o(_2,"loadDataFile");ms=class extends h2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=sa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},MR=class extends ms{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},vR=class extends ms{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,na.basename)(t)}: ${r.message}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},UR=class extends ms{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,na.basename)(t)} is empty or invalid`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},Xp=class extends ms{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,na.basename)(t)} is missing required "${r}" property`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},xR=class extends ms{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,na.basename)(t)} has invalid "${r}" property, expected ${n}`,sa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},BR=class extends ms{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,sa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Zp=class extends ms{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},gf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var fL={};Oe(fL,{hdbServer:()=>uRe,start:()=>uRe});async function uRe(e){try{oo.default.debug("In Fastify server"+process.cwd()),oo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),oo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=S2.default.isMaster,await dRe();let t=e.securePort>0;Sf=fRe(t),await Sf.ready(),e||(e={}),e.usageType="operations-api";try{De.http(Sf.server,e),Sf.server.closeIdleConnections||await Sf.listen({port:0,host:"::"})}catch(r){throw Sf.close(),oo.default.error(r),oo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),oo.default.fatal(t),process.exit(1)}}async function dRe(){oo.default.trace("Configuring HarperDB process."),w2.default.setSchemaDataToGlobal(),await C2.default.setUsersWithRolesCache(),await P2.default.getLicense()}function fRe(e){oo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=mRe(e),r=(0,T2.default)(t);r.server.headersTimeout=pRe(),r.setErrorHandler(_c.serverErrorHandler);let n=hRe();n&&r.register(R2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){u.sent||u.raw.headersSent||u.raw.writableEnded||r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(b2.default),r.register(y2.default),r.register(A2.default,{root:I2.default.join(N2.PACKAGE_ROOT,"studio/build-local")}),am(r);let s=Ec.default.get(Xy.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!O2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[_c.reqBodyValidationHandler,_c.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,_c.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),oo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function mRe(e){let t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ec.default.get(eE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:cRe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function hRe(){let e=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORS),t=Ec.default.get(eE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===lRe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function pRe(){return Ec.default.get(eE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??aRe}var S2,Ec,oo,T2,R2,y2,A2,b2,I2,N2,w2,O2,C2,P2,_c,aRe,cRe,lRe,eE,Sf,L2=le(()=>{S2=w(require("cluster")),Ec=w(ae());k();oo=w(Q()),T2=w(require("fastify")),R2=w(require("@fastify/cors")),y2=w(require("@fastify/compress")),A2=w(require("@fastify/static")),b2=w(fw()),I2=w(require("path")),N2=w(bt()),w2=w(ii()),O2=w(ie()),C2=w(ts()),P2=w(Jd());Dr();_c=w(CR());Ro();Ec.default.initSync();aRe=6e4,cRe=1024*1024*1024,lRe="TRUE",{CONFIG_PARAMS:eE}=Y;o(uRe,"operationsServer");o(dRe,"setUp");o(fRe,"buildServer");o(mRe,"getServerOptions");o(hRe,"getCORSOpts");o(pRe,"getHeaderTimeoutConfig")});var gL={};Oe(gL,{disableNATS:()=>_Re,publishToStream:()=>kR,setNATSReplicator:()=>mL,setPublishToStream:()=>gRe,setSubscription:()=>_L,start:()=>ERe});function ERe(){tE.default.get(U.CLUSTERING_ENABLED)&&TRe()}function _Re(e=!0){x2=e}function gRe(e,t){kR=e,_L=t}function TRe(){if(x2||process.env._DISABLE_NATS)return;let e=it(),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];mL(s,r,i)}}Il((r,n)=>{mL(r.tableName,r.databaseName,r),n&&F2(r)}),!D2&&(D2=!0)}function mL(e,t,r){if(t==="system"&&RRe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Ur{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){F2(i)}static subscribe(){let i=new Vn;return _L(t,e,i),i}static subscribeOnThisThread(i){return i<(tE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??SRe)}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 FR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=B2;return i}o(n,"getNATSTransaction")}function F2(e){let t=tE.default.get(U.CLUSTERING_NODENAME);kR(`${pL.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,EL.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 M2,pL,EL,v2,U2,tE,HR,x2,kR,_L,SRe,B2,D2,RRe,FR,hL,H2=le(()=>{Me();Pa();M2=w(mr()),pL=w(Ot()),EL=w($i());Ru();v2=w(Ow()),U2=w(An()),tE=w(ae());k();HR=w(Q());o(ERe,"start");o(_Re,"disableNATS");kR=M2.publishToStream,_L=v2.setSubscription;o(gRe,"setPublishToStream");SRe=2;o(TRe,"assignReplicationSource");RRe=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(mL,"setNATSReplicator");o(F2,"publishSchema");FR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=tE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(HR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(kR(`${pL.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,EL.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw HR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},hL=class extends FR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,U2.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};B2=new hL});var TL=M((HBe,k2)=>{"use strict";var rE=ae();rE.initSync();var Tf=require("fs-extra"),SL=require("path"),Rf=(k(),v(Y)),yRe=require("crypto"),ARe=require("uuid").v4;k2.exports=bRe;function bRe(){if(rE.getHdbBasePath()!==void 0){let e=SL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=SL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=SL.join(rE.getHdbBasePath(),Rf.LICENSE_KEY_DIR_NAME,Rf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Tf.accessSync(r),Tf.accessSync(e),Tf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=ARe(),i=yRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Tf.writeFileSync(r,s),Tf.writeFileSync(e,i.privateKey),Tf.writeFileSync(t,i.publicKey)}else throw n}}}o(bRe,"checkJWTTokenExist")});var q2=M((GBe,G2)=>{"use strict";var RL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};G2.exports={HdbInfoInsertObject:RL}});var K2=M(($Be,V2)=>{"use strict";var $2=(k(),v(Y)),yL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[$2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[$2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};V2.exports={UpgradeObject:yL}});var GR=M((KBe,W2)=>{"use strict";var Vs=require("prompt"),yf=require("chalk"),Y2=Q(),Ii=require("os"),AL=xc(),bL=["yes","y"];async function IRe(e){let t=`${Ii.EOL}`+yf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ii.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ii.EOL}${Ii.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ii.EOL}`;Vs.override=AL(["CONFIRM_UPGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:yf.magenta(`${Ii.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Vs.get([r])}catch(s){return Y2.error("There was an error when prompting user about an upgrade."),Y2.error(s),!1}return bL.includes(n.CONFIRM_UPGRADE)}o(IRe,"forceUpdatePrompt");async function NRe(e){let t=`${Ii.EOL}`+yf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ii.EOL}`);Vs.override=AL(["CONFIRM_DOWNGRADE"]),Vs.start(),Vs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:yf.magenta(`${Ii.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Vs.get([r]);return bL.includes(n.CONFIRM_DOWNGRADE)}o(NRe,"forceDowngradePrompt");async function wRe(){let e=`${Ii.EOL}`+yf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Vs.override=AL(["GENERATE_CERTS"]),Vs.start(),Vs.message=e;let t={properties:{GENERATE_CERTS:{description:yf.magenta(`${Ii.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Vs.get([t]);return bL.includes(r.GENERATE_CERTS)}o(wRe,"upgradeCertsPrompt");W2.exports={forceUpdatePrompt:IRe,forceDowngradePrompt:NRe,upgradeCertsPrompt:wRe}});var NL=M((WBe,z2)=>{"use strict";var IL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};z2.exports=IL});var Q2=M((ZBe,j2)=>{"use strict";var ORe=ie(),CRe=wt(),jBe=Q(),QBe=require("path"),JBe=require("fs"),XBe=(k(),v(Y));j2.exports={getOldPropsValue:PRe};function PRe(e,t,r=!1){let n=t.getRaw(e);return ORe.isNotEmptyAndHasValue(n)?n:r?CRe.getDefaultConfig(e):""}o(PRe,"getOldPropsValue")});var eQ=M((tFe,Z2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),LRe=require("properties-reader"),DRe=NL(),Sr=Q(),{getOldPropsValue:At}=Q2(),{HDB_SETTINGS_NAMES:Ae,CONFIG_PARAMS:su}=(k(),v(Y)),iu=wt(),qR=ae(),J2=ie(),ao=(k(),v(Y)),wL=new DRe("3.1.0"),X2=[];function MRe(){let e=LRe(qR.get(Ae.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
|
|
39
39
|
|
|
40
40
|
;The directory selected during install where the database files reside.
|
|
41
|
-
${
|
|
41
|
+
${Ae.HDB_ROOT_KEY} = ${At(Ae.HDB_ROOT_KEY,e)}
|
|
42
42
|
;The port the HarperDB REST interface will listen on.
|
|
43
|
-
${
|
|
43
|
+
${Ae.SERVER_PORT_KEY} = ${At(Ae.SERVER_PORT_KEY,e)}
|
|
44
44
|
;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
|
|
45
|
-
${
|
|
45
|
+
${Ae.HTTP_SECURE_ENABLED_KEY} = ${At(Ae.HTTP_SECURE_ENABLED_KEY,e)}
|
|
46
46
|
;The path to the SSL certificate used when running with HTTPS enabled.
|
|
47
|
-
${
|
|
47
|
+
${Ae.CERT_KEY} = ${At(Ae.CERT_KEY,e)}
|
|
48
48
|
;The path to the SSL private key used when running with HTTPS enabled.
|
|
49
|
-
${
|
|
49
|
+
${Ae.PRIVATE_KEY_KEY} = ${At(Ae.PRIVATE_KEY_KEY,e)}
|
|
50
50
|
;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
|
|
51
|
-
${
|
|
51
|
+
${Ae.CORS_ENABLED_KEY} = ${At(Ae.CORS_ENABLED_KEY,e)}
|
|
52
52
|
;Allows for setting allowable domains with CORS. Comma separated list.
|
|
53
|
-
${
|
|
53
|
+
${Ae.CORS_WHITELIST_KEY} = ${At(Ae.CORS_WHITELIST_KEY,e)}
|
|
54
54
|
;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
|
|
55
|
-
${
|
|
55
|
+
${Ae.SERVER_TIMEOUT_KEY} = ${At(Ae.SERVER_TIMEOUT_KEY,e,!0)}
|
|
56
56
|
;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
|
|
57
|
-
${
|
|
57
|
+
${Ae.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${At(Ae.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
|
|
58
58
|
;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
|
|
59
|
-
${
|
|
59
|
+
${Ae.SERVER_HEADERS_TIMEOUT_KEY} = ${At(Ae.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
|
|
60
60
|
;Define whether to log to file or not.
|
|
61
|
-
${
|
|
61
|
+
${Ae.LOG_TO_FILE} = ${iu.getDefaultConfig(su.LOGGING_FILE)}
|
|
62
62
|
;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
|
|
63
|
-
${
|
|
63
|
+
${Ae.LOG_TO_STDSTREAMS} = ${iu.getDefaultConfig(su.LOGGING_STDSTREAMS)}
|
|
64
64
|
;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
|
|
65
|
-
${
|
|
65
|
+
${Ae.LOG_LEVEL_KEY} = ${At(Ae.LOG_LEVEL_KEY,e)}
|
|
66
66
|
;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
|
|
67
|
-
${
|
|
67
|
+
${Ae.LOG_PATH_KEY} = ${At(Ae.LOG_PATH_KEY,e)}
|
|
68
68
|
;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
|
|
69
|
-
${
|
|
69
|
+
${Ae.LOG_DAILY_ROTATE_KEY} = ${At(Ae.LOG_DAILY_ROTATE_KEY,e)}
|
|
70
70
|
;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
|
|
71
71
|
;daily log files which may consume a large amount of storage depending on your log settings.
|
|
72
|
-
${
|
|
72
|
+
${Ae.LOG_MAX_DAILY_FILES_KEY} = ${At(Ae.LOG_MAX_DAILY_FILES_KEY,e)}
|
|
73
73
|
;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
|
|
74
|
-
${
|
|
74
|
+
${Ae.PROPS_ENV_KEY} = ${At(Ae.PROPS_ENV_KEY,e)}
|
|
75
75
|
;This allows self signed certificates to be used in clustering. This is a security risk
|
|
76
76
|
;as clustering will not validate the cert, so should only be used internally.
|
|
77
77
|
;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
|
|
78
|
-
${
|
|
78
|
+
${Ae.ALLOW_SELF_SIGNED_SSL_CERTS} = ${At(Ae.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
|
|
79
79
|
;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
|
|
80
|
-
${
|
|
80
|
+
${Ae.MAX_HDB_PROCESSES} = ${At(Ae.MAX_HDB_PROCESSES,e)}
|
|
81
81
|
;Set to true to enable clustering. Requires a valid enterprise license.
|
|
82
|
-
${
|
|
82
|
+
${Ae.CLUSTERING_ENABLED_KEY} = ${At(Ae.CLUSTERING_ENABLED_KEY,e,!0)}
|
|
83
83
|
;The port that will be used for HarperDB clustering.
|
|
84
|
-
${
|
|
84
|
+
${Ae.CLUSTERING_PORT_KEY} = ${At(Ae.CLUSTERING_PORT_KEY,e)}
|
|
85
85
|
;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
|
|
86
|
-
${
|
|
86
|
+
${Ae.CLUSTERING_NODE_NAME_KEY} = ${At(Ae.CLUSTERING_NODE_NAME_KEY,e)}
|
|
87
87
|
;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
|
|
88
|
-
${
|
|
88
|
+
${Ae.CLUSTERING_USER_KEY} = ${At(Ae.CLUSTERING_USER_KEY,e)}
|
|
89
89
|
;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
|
|
90
|
-
${
|
|
90
|
+
${Ae.DISABLE_TRANSACTION_LOG_KEY} = ${At(Ae.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
|
|
91
91
|
;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
92
|
-
${
|
|
92
|
+
${Ae.OPERATION_TOKEN_TIMEOUT_KEY} = ${At(Ae.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
93
93
|
;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
94
|
-
${
|
|
94
|
+
${Ae.REFRESH_TOKEN_TIMEOUT_KEY} = ${At(Ae.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
95
95
|
;The port the IPC server will run on.
|
|
96
|
-
${
|
|
96
|
+
${Ae.IPC_SERVER_PORT} = ${iu.getDefaultConfig(su.IPC_NETWORK_PORT)}
|
|
97
97
|
;Run HDB in the foreground.
|
|
98
|
-
${
|
|
98
|
+
${Ae.RUN_IN_FOREGROUND} = ${iu.getDefaultConfig(su.OPERATIONSAPI_FOREGROUND)}
|
|
99
99
|
;Set to true to enable custom API endpoints. Requires a valid enterprise license.
|
|
100
|
-
${
|
|
100
|
+
${Ae.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${iu.getDefaultConfig(su.CUSTOMFUNCTIONS_ENABLED)}
|
|
101
101
|
;The port used to access the custom functions server.
|
|
102
|
-
${
|
|
102
|
+
${Ae.CUSTOM_FUNCTIONS_PORT_KEY} = ${iu.getDefaultConfig(su.HTTP_PORT)}
|
|
103
103
|
;The path to the folder containing HarperDB custom function files.
|
|
104
|
-
${
|
|
104
|
+
${Ae.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${gc.join(At(Ae.HDB_ROOT_KEY,e),"custom_functions")}
|
|
105
105
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
106
|
-
${
|
|
107
|
-
`,n=
|
|
106
|
+
${Ae.MAX_CUSTOM_FUNCTION_PROCESSES} = ${iu.getDefaultConfig(su.HTTP_THREADS)}
|
|
107
|
+
`,n=qR.get("settings_path"),s=gc.dirname(n),i=gc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Sc.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Sc.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Sc.copySync(i,n),c}qR.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(MRe,"updateSettingsFile310");function vRe(){let e=gc.join(J2.getHomeDir(),ao.HDB_HOME_DIR_NAME,ao.LICENSE_KEY_DIR_NAME,ao.LICENSE_FILE_NAME),t=gc.join(J2.getHomeDir(),ao.HDB_HOME_DIR_NAME,ao.LICENSE_KEY_DIR_NAME,ao.REG_KEY_FILE_NAME),r=gc.join(qR.getHdbBasePath(),ao.LICENSE_KEY_DIR_NAME,ao.LICENSE_FILE_NAME),n=gc.join(r,ao.LICENSE_FILE_NAME),s=gc.join(r,ao.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Sc.mkdirpSync(r);try{Sc.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Sc.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(vRe,"moveLicenseFiles");wL.sync_functions.push(MRe);wL.sync_functions.push(vRe);X2.push(wL);Z2.exports=X2});var iQ=M((nFe,sQ)=>{"use strict";var hs=Tt(),{insertRecords:URe}=rl(),xRe=An(),Tc=Vt(),BRe=ie(),ia=Q(),FRe=ie(),co=require("fs-extra"),oa=require("path"),HRe=require("cli-progress"),nE=require("assert"),kRe=require("pino"),GRe=ae();sQ.exports=qRe;var $R,tQ,VR,OL,Rn,sE=!1;async function qRe(e=!0){return $R=GRe.getHdbBasePath(),tQ=oa.join($R,"schema"),VR=oa.join($R,"4_0_0_upgrade_tmp"),OL=oa.join($R,"transactions"),console.info("Reindexing upgrade started for schemas"),ia.notify("Reindexing upgrade started for schemas"),await rQ(tQ,!1,e),await co.pathExists(OL)&&(console.info(`
|
|
108
108
|
|
|
109
|
-
Reindexing upgrade started for transaction logs`),ia.notify("Reindexing upgrade started for transaction logs"),await
|
|
110
|
-
install_user = ${l}`;try{Rc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{IL.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{Rc.removeSync(r),console.log(d),ou.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(iye,"updateSettingsFile400");aE.async_functions.push(iye);aE.async_functions.push(nye);aE.async_functions.push(tye);aE.async_functions.push(sye);iQ.push(aE);oQ.exports=iQ});var NL=M((iFe,dQ)=>{"use strict";var au=ie(),oye=(k(),v(W)),cQ=Q(),{DATA_VERSION:aye,UPGRADE_VERSION:cye}=oye.UPGRADE_JSON_FIELD_NAMES_ENUM,lQ=J2(),VR=aQ(),cu=new Map;lQ&&lQ.forEach(e=>{cu.set(e.version,e)});VR&&VR.forEach(e=>{cu.set(e.version,e)});VR&&VR.forEach(e=>{cu.set(e.version,e)});function lye(){return[...cu.keys()].sort(au.compareVersions)}o(lye,"getSortedVersions");function uQ(e){let t=e[aye],r=e[cye];return au.isEmptyOrZeroLength(t)||au.isEmptyOrZeroLength(r)?(cQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),cQ.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...cu.keys()].sort(au.compareVersions).filter(function(n){return au.compareVersions(n,t)>0&&au.compareVersions(n,r)<=0})}o(uQ,"getVersionsForUpgrade");function uye(e){return uQ(e).length>0}o(uye,"hasUpgradesRequired");function dye(e){return au.isEmptyOrZeroLength(e)?null:cu.has(e)?cu.get(e):null}o(dye,"getDirectiveByVersion");dQ.exports={getSortedVersions:lye,getDirectiveByVersion:dye,getVersionsForUpgrade:uQ,hasUpgradesRequired:uye}});var YR=M((aFe,EQ)=>{"use strict";var fye=require("util"),wL=require("chalk"),mye=require("os"),mQ=Dn(),hye=sn(),ps=(k(),v(W)),hQ=H2(),CL=MI(),{UpgradeObject:fQ}=q2(),{forceDowngradePrompt:pye}=FR(),{packageJson:Eye}=bt(),KR=Q(),Af=ie(),PL=ii(),_ye=(Me(),v(Et)),gye=NL(),Sye=fye.promisify(PL.setSchemaDataToGlobal),Tye=hye.searchByValue,Rye="info_id",yye="2.9.9",Aye="3.0.0";async function bye(e){let t=new hQ.HdbInfoInsertObject(1,e,e),r=new CL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return PL.setSchemaDataToGlobal(),mQ.insert(r)}o(bye,"insertHdbInstallInfo");async function OL(e){let t,r=await pQ(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new hQ.HdbInfoInsertObject(i,e,e);let a=new CL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await Sye(),mQ.insert(a)}o(OL,"insertHdbUpgradeInfo");async function pQ(){let e=new CL.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Rye,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Tye(e))}catch(r){console.error(r)}return t}o(pQ,"getAllHdbInfoRecords");async function Iye(){let e=await pQ();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(Iye,"getLatestHdbInfoRecord");async function Nye(){KR.info("Checking if HDB software has been updated");try{let e=Eye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Iye(),r;if(Af.isEmpty(t))r=yye;else if(r=t.data_version_num,Af.compareVersions(r.toString(),e.toString())>0){if(!Af.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(wL.yellow(`This instance's data was last run on version ${r}`)),console.error(wL.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${mye.EOL}${ps.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Af.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(wL.yellow(`This instance's data was last run on version ${r}`)),await pye(new fQ(r,e))?await OL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(PL.setSchemaDataToGlobal(),wye(r),e.toString()===r.toString())return;let n=new fQ(r,e);if(gye.hasUpgradesRequired(n))return n;Af.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await OL(n.upgrade_version),KR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw KR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),KR.fatal(e),e}}o(Nye,"getVersionUpdateInfo");function wye(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${ps.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in _ye.databases.system))throw console.log(t),new Error(t);if(!Af.isEmpty(e)&&e<Aye)throw console.log(t),new Error(t)}o(wye,"checkIfInstallIsSupported");EQ.exports={insertHdbInstallInfo:bye,insertHdbUpgradeInfo:OL,getVersionUpdateInfo:Nye}});var TQ=M((lFe,SQ)=>{"use strict";var WR=require("joi"),{boolean:Oye,string:LL,number:Cye}=WR.types(),_Q=require("fs-extra"),cE=(k(),v(W)),gQ=require("path"),Pye=ut();SQ.exports=Lye;function Lye(e){let t=LL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=WR.object({[cE.INSTALL_PROMPTS.ROOTPATH]:WR.custom(Dye),[cE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:WR.alternatives([Cye.min(0),LL]).allow("null",null),[cE.INSTALL_PROMPTS.TC_AGREEMENT]:LL.valid("yes","YES","Yes"),[cE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[cE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Oye});return Pye.validateBySchema(e,r)}o(Lye,"installValidator");function Dye(e,t){if(_Q.existsSync(gQ.join(e,"system/hdb_user/data.mdb"))||_Q.existsSync(gQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(Dye,"validateRootAvailable")});var yQ=M((dFe,RQ)=>{"use strict";var{mkdirpSync:Mye,copySync:vye}=require("fs-extra"),yc=require("path"),lE=(k(),v(W)),{PACKAGE_ROOT:Uye}=bt(),ML=Q(),xye=Jn(),DL=No(),Bye=It();RQ.exports=Fye;async function Fye(e){ML.trace("Mounting HarperDB"),lu(e),lu(yc.join(e,"backup")),lu(yc.join(e,"keys")),lu(yc.join(e,"keys",lE.LICENSE_FILE_NAME)),lu(yc.join(e,"log")),lu(yc.join(e,"database")),lu(yc.join(e,"components")),vye(yc.resolve(Uye,"./utility/install/README.md"),yc.join(e,"README.md")),await Hye()}o(Fye,"mountHdb");async function Hye(){let e=km(),t=Object.keys(DL);for(let r=0;r<t.length;r++){let n=t[r],s=DL[n].hash_attribute;try{Bye.initSystemSchemaPaths(lE.SYSTEM_SCHEMA_NAME,n);let i=new e(lE.SYSTEM_SCHEMA_NAME,n,s);i.attributes=DL[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(n)&&(i.audit=!0),await xye.createTable(n,i)}catch(i){throw ML.error(`issue creating environment for ${lE.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(Hye,"createLMDBTables");function lu(e){Mye(e,{mode:lE.HDB_FILE_PERMISSIONS}),ML.info(`Directory ${e} created`)}o(lu,"makeDirectory")});var xQ=M((pFe,UQ)=>{"use strict";var UL=require("os"),wQ=require("inquirer"),Ys=require("fs-extra"),kye=require("properties-reader"),du=require("chalk"),uo=require("path"),Gye=require("human-readable-ids").hri,qye=require("ora"),$ye=require("yaml"),Tr=Q(),Ac=oe(),uE=ie(),jR=xc(),OQ=YR(),{packageJson:CQ}=bt(),_e=(k(),v(W)),{CONFIG_PARAM_MAP:mFe,CONFIG_PARAMS:qt}=_e,Vye=TQ(),Kye=yQ(),xL=wt(),Yye=ts(),Wye=Oh(),zye=EL(),jye=ii(),Qye=require("util").promisify,Jye=Qye(jye.setSchemaDataToGlobal),AQ=as(),uu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),en=o(e=>du.magenta.bold(e),"HDB_PROMPT_MSG"),Xye="https://harperdb.io/legal/end-user-license-agreement",bc=UL.EOL,aa="",Zye="yes",bQ="Starting HarperDB install...",IQ="HarperDB installation was successful.",NQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",eAe="An out of date version of HarperDB is already installed.",vL="It appears that HarperDB is already installed. Exiting install...",tAe="Aborting install",hFe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),rAe=new RegExp(/^[^\s.,*>]+$/),nAe=UL.homedir(),sAe=uo.join(nAe,_e.HDB_ROOT_DIR_NAME),iAe="HDB_ADMIN",oAe="CLUSTER_USER",aAe="dev",cAe="localhost",zR={[qt.HTTP_CORS]:!0,[qt.HTTP_CORSACCESSLIST]:["*"],[qt.HTTP_PORT]:9926,[qt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[qt.THREADS_COUNT]:1,[qt.THREADS_DEBUG]:!0,[qt.LOGGING_STDSTREAMS]:!0,[qt.LOGGING_LEVEL]:"info",[qt.OPERATIONSAPI_NETWORK_PORT]:9925,[qt.LOCALSTUDIO_ENABLED]:!0},Zr={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Ic=jR([_e.INSTALL_PROMPTS.HDB_CONFIG]),lo,PQ=!1,BL=!1,LQ=!1;UQ.exports={install:DQ,updateConfigEnv:SAe,setIgnoreExisting:TAe};DQ.createSuperUser=vQ;async function DQ(){console.log(en(bc+bQ+bc)),Tr.notify(bQ);let e;Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&(e=lAe());let t=dAe();Object.assign(t,e),t[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&t[_e.INSTALL_PROMPTS.ROOTPATH]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(LQ=!0,t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Vye(t);if(r)throw r.message;await fAe(),await mAe(t);let n=await uAe(t);lo=n[_e.INSTALL_PROMPTS.ROOTPATH],Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&uo.dirname(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG])===lo&&(PQ=!0),!BL&&!Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&await Ys.pathExists(uo.join(lo,_e.HDB_CONFIG_FILE))&&(console.error(vL),process.exit());let s=qye({prefixText:en("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),uE.isEmpty(lo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(lo),await Kye(lo),await hAe(),await pAe(n),Tr.initLogSettings(!0),await vQ(n),await _Ae(n),await AQ.updateConfigCert(),await AQ.generateCertsKeys(),await gAe(),zye(),s.stop(),console.log(en(bc+IQ+bc)),Tr.notify(IQ)}o(DQ,"install");function lAe(){let e=$ye.parseDocument(Ys.readFileSync(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=xL.flattenConfig(e.toJSON());return t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(lAe,"getConfigFromFile");async function uAe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.ROOTPATH],Zr.DESTINATION),name:_e.INSTALL_PROMPTS.ROOTPATH,prefix:aa,default:sAe,validate:o(async s=>Ks(s)?Ks(s):await Ys.pathExists(uo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:en(Zr.DESTINATION)},{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Zr.HDB_USERNAME),name:_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:aa,default:iAe,validate:o(s=>Ks(s)?Ks(s):(t=s,!0),"validate"),message:en(Zr.HDB_USERNAME)},{type:"password",when:ca(e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Zr.HDB_PASS),name:_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:aa,validate:o(s=>Ks(s)?Ks(s):!0,"validate"),message:en(Zr.HDB_PASS)},{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.DEFAULTS_MODE],Zr.DEFAULTS_MODE),name:_e.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:aa,default:aAe,validate:o(s=>Ks(s)?Ks(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:en(Zr.DEFAULTS_MODE)}];if(LQ||r.push({type:"input",name:_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Zr.REPLICATION_HOSTNAME),prefix:aa,default:cAe,message:en(Zr.REPLICATION_HOSTNAME)}),uE.autoCastBoolean(e[_e.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_NODENAME],Zr.NODE_NAME),name:_e.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:aa,default:Gye.random(),validate:o(i=>rAe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:en(Zr.NODE_NAME)},{type:"input",transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_USER],Zr.CLUSTER_USERNAME),name:_e.INSTALL_PROMPTS.CLUSTERING_USER,prefix:aa,default:oAe,validate:o(i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:en(Zr.CLUSTER_USERNAME)},{type:"password",when:ca(e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Zr.CLUSTER_PASS),name:_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:aa,validate:o(i=>Ks(i)?Ks(i):!0,"validate"),message:en(Zr.CLUSTER_PASS)}];r.push(...s)}let n=await wQ.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(uAe,"installPrompts");function ca(e,t){return e!==void 0?(t.includes("password")?(console.log(`${en(t)} ${du.gray("[hidden]")}`),Tr.trace(`${en(t)} [hidden]`)):(console.log(`${en(t)} ${e}`),Tr.trace(`${en(t)} ${e}`)),!1):!0}o(ca,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Ks,"checkForEmptyValue");function dAe(){let e=Object.keys(_e.INSTALL_PROMPTS),t=jR(e),r=jR(Object.keys(_e.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=_e.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(dAe,"checkForPromptOverride");async function fAe(){Tr.trace("Checking for existing install.");let e=uE.getPropsFilePath(),t=await Ys.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=kye(e),s=xL.getConfigValue(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ys.pathExists(s)}if(!t&&uE.noBootFile()&&(r=!0),r&&!BL){if(Tr.trace(`Install found existing HDB config at:${e}`),await OQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${CQ.version}. Exiting install...`;console.log(bc+du.magenta.bold(eAe)),console.log(du.magenta.bold(s)),Tr.error(s)}else console.log(bc+du.magenta.bold(vL)),Tr.error(vL);process.exit(0)}}o(fAe,"checkForExistingInstall");async function mAe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Xye}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:aa,transformer:uu,when:ca(e[_e.INSTALL_PROMPTS.TC_AGREEMENT],t),name:_e.INSTALL_PROMPTS.TC_AGREEMENT,message:en(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:du.yellow("Please enter 'yes' or 'no'"),"validate")},n=await wQ.prompt([r]);n[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&n[_e.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Zye&&(console.log(du.yellow(NQ)),Tr.error(NQ),process.exit(0))}o(mAe,"termsAgreement");async function hAe(){let e=uo.join(lo,_e.HDB_CONFIG_FILE),t;try{t=UL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
111
|
-
install_user = ${t}`,n=uE.getHomeDir(),s=uo.join(n,_e.HDB_HOME_DIR_NAME),i=uo.join(s,_e.LICENSE_KEY_DIR_NAME);try{Ys.mkdirpSync(s,{mode:_e.HDB_FILE_PERMISSIONS}),Ys.mkdirpSync(i,{mode:_e.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${_e.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=uo.join(s,_e.BOOT_PROPS_FILE_NAME);try{await Ys.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(_e.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(hAe,"createBootPropertiesFile");async function pAe(e){Tr.trace("Creating HarperDB config file");let t=jR(Object.keys(_e.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[_e.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in zR){if(r===qt.HTTP_PORT&&t[qt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zR[r],t[qt.HTTP_SECUREPORT]=null;continue}else if(r===qt.HTTP_PORT)continue;if(r===qt.OPERATIONSAPI_NETWORK_PORT&&t[qt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??zR[r],t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===qt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=zR[r])}}else t[qt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[qt.HTTP_PORT.toLowerCase()]&&(t[qt.HTTP_SECUREPORT]=null);try{Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]||xL.createConfigFile(t),Ac.initSync()}catch(r){EAe(r)}}o(pAe,"createConfigFile");function EAe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(tAe);let t=uo.resolve(Ac.get(Ac.BOOT_PROPS_FILE_PATH),"../");t&&Ys.removeSync(t),lo&&(PQ?Ys.readdirSync(lo,{withFileTypes:!0}).forEach(n=>{let s=uo.join(n.path,n.name);s!==Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&Ys.removeSync(s)}):Ys.removeSync(lo)),process.exit(1)}o(EAe,"rollbackInstall");async function MQ(e,t){Tr.trace("Creating admin user"),await Jye();let r;try{r=await Wye.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Yye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(MQ,"createAdminUser");async function vQ(e){Tr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await MQ(t,r),delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(vQ,"createSuperUser");async function _Ae(e){Tr.trace("Creating Cluster user.");let t;e[_e.INSTALL_PROMPTS.CLUSTERING_USER]&&e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[_e.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await MQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[_e.INSTALL_PROMPTS.CLUSTERING_USER],delete e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(_Ae,"createClusterUser");async function gAe(){let e=CQ.version;if(e)await OQ.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(gAe,"insertHdbVersionInfo");function SAe(e){Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]=e}o(SAe,"updateConfigEnv");function TAe(e){BL=e}o(TAe,"setIgnoreExisting")});var HQ=M((_Fe,FQ)=>{"use strict";var FL=ie(),Es=Q(),BQ=NL();FQ.exports={processDirectives:RAe};async function RAe(e){console.log("Starting upgrade process...");let t=BQ.getVersionsForUpgrade(e),r=bAe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Es.notify(c),console.log(c);let l=[],u=[];try{l=yAe(a.sync_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await AAe(a.async_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(RAe,"processDirectives");function yAe(e){if(FL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Es.info(`Running function ${r.name}`),!(r instanceof Function)){Es.info("Variable being processed is not a function");continue}let n=r();Es.info(n),t.push(n)}return t}o(yAe,"runSyncFunctions");async function AAe(e){if(FL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Es.info(`Running function ${s.name}`),!(s instanceof Function)){Es.info("Variable being processed is not a function");continue}let i=await s();Es.info(i),t.push(i)}return t}o(AAe,"runAsyncFunctions");function bAe(e){if(FL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=BQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(bAe,"getUpgradeDirectivesToInstall")});var YQ=M((SFe,KQ)=>{"use strict";var QR=oe();QR.initSync();var $Q=require("chalk"),kQ=require("fs-extra"),ua=Q(),la=(k(),v(W)),IAe=HQ(),HL=ie(),VQ=YR(),NAe=FR(),GQ=tA(),wAe=ii(),{packageJson:qQ}=bt(),OAe=require("util").promisify,CAe=OAe(wAe.setSchemaDataToGlobal),kL,{UPGRADE_VERSION:GL}=la.UPGRADE_JSON_FIELD_NAMES_ENUM;KQ.exports={upgrade:PAe};async function PAe(e){await CAe(),kL===void 0&&(kL=gp()),kQ.existsSync(QR.get(QR.BOOT_PROPS_FILE_PATH))||(dE("The hdb_boot_properties file was not found. Please install HDB.",la.LOG_LEVELS.ERROR),process.exit(1)),kQ.existsSync(QR.get(la.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(dE("The hdb settings file was not found. Please make sure HDB is installed.",la.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await VQ.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),dE(`This version of HarperDB is ${qQ.version}`,la.LOG_LEVELS.INFO);let r=t[GL]??qQ.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${la.HDB_SUPPORT_ADDRESS}`),ua.notify("Missing new version field from upgrade info object"),process.exit(1)),await LAe();let n,s=0;try{n=await NAe.forceUpdatePrompt(t)}catch(i){ua.error("There was an error when prompting user about upgrade."),ua.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),ua.info(`Starting upgrade to version ${r}`),await DAe(t),dE(`HarperDB was successfully upgraded to version ${t[GL]}`,la.LOG_LEVELS.INFO)}o(PAe,"upgrade");async function LAe(){let e=!1,t=await GQ.findPs(la.HDB_PROC_NAME);if(HL.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await GQ.findPs("hdb_express");HL.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await kL.list();HL.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log($Q.red(r)),ua.error(r),process.exit(1)}}o(LAe,"checkIfRunning");async function DAe(e){try{await IAe.processDirectives(e)}catch(t){throw dE("There was an error during the data upgrade. Please check the logs.",la.LOG_LEVELS.ERROR),t}try{await VQ.insertHdbUpgradeInfo(e[GL])}catch(t){ua.error("Error updating the 'hdb_info' system table."),ua.error(t)}}o(DAe,"runUpgrade");function dE(e,t=void 0){t||(t=ua.info),ua[t](e),console.log($Q.magenta(e))}o(dE,"printToLogAndConsole")});var ZQ=M(fE=>{"use strict";var Ae=oe();Ae.initSync();sf();var or=(k(),v(W)),{CONFIG_PARAMS:Ue}=or,_s=Q(),da=require("fs-extra"),fa=require("path"),MAe=EL(),{install:vAe}=xQ(),qL=require("chalk"),{packageJson:UAe,PACKAGE_ROOT:xAe}=bt(),ma=ie(),$L=wt(),zQ=xc(),WQ=PT(),BAe=YQ(),{compactOnStart:FAe}=(AC(),v(yC)),HAe=require("minimist"),kAe=as(),{startHTTPThreads:GAe}=(XR(),v(VL)),qAe=YR(),{isMainThread:$Ae}=require("worker_threads"),RFe=No(),yFe=Ua(),AFe=Zb(),bFe=km(),JR=(k(),v(W)),fo,bf,jQ=!1,VAe="Upgrade complete. Starting HarperDB.",KAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",YAe="HarperDB not found, starting install process.",WAe="There was an error during install, check install_log.log for more details. Exiting.",zAe="HarperDB successfully started.";function jAe(){if(!jQ){let e=o(()=>{da.removeSync(fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(jAe,"addExitListeners");async function QQ(e=!1,t=!1){if(console.log(qL.magenta("Starting HarperDB...")),_s.suppressLogging?.(()=>{console.log(qL.magenta(""+da.readFileSync(fa.join(xAe,"utility/install/ascii_logo.txt"))))}),await XQ()===!1){console.log(YAe);try{await vAe()}catch(l){console.error(WAe,l),_s.error(l),process.exit(1)}}if(!e){let l=zQ(Object.keys(or.CONFIG_PARAM_MAP),!0);!ma.isEmpty(l)&&!ma.isEmptyOrZeroLength(Object.keys(l))&&$L.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=bf?.service==="clustering";bf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE),i=ebe(s);i&&i!==1&&tbe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),fo===void 0&&(fo=gp()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await WQ.generateNatsConfig(),await fo.startClusteringProcesses(!0),process.exit()),jAe(),await da.writeFile(fa.join(Ae.get(JR.CONFIG_PARAMS.ROOTPATH),JR.HDB_PID_FILE),`${process.pid}`),_s.info("HarperDB PID",process.pid);let a;try{let l=await qAe.getVersionUpdateInfo();l!==void 0&&(a=l[or.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await BAe.upgrade(l),console.log(VAe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),_s.error(l)):(console.error(KAe,l),_s.error(l)),process.exit(1)}MAe(),XAe(),await kAe.reviewSelfSignedCert(),ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&$Ae&&await WQ.generateNatsConfig(t)}o(QQ,"initialize");async function QAe(e=!1){try{bf=HAe(process.argv),bf.ROOTPATH&&$L.updateConfigObject("settings_path",fa.join(bf.ROOTPATH,or.HDB_CONFIG_FILE)),await QQ(e,!0),Ae.get(or.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await FAe();let t=process.env.IS_SCRIPTED_SERVICE&&!bf.service;ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await fo.startClusteringProcesses(),await fo.startClusteringThreads()),await GAe(process.env.DEV_MODE?1:Ae.get(JR.CONFIG_PARAMS.THREADS_COUNT)??Ae.get(JR.CONFIG_PARAMS.THREADS)),t||JQ()}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(QAe,"main");function JQ(){_s.suppressLogging(()=>{console.log(qL.magenta(`HarperDB ${UAe.version} successfully started`))}),_s.notify(zAe)}o(JQ,"started");async function JAe(e=!0){jQ=!e;try{fo===void 0&&(fo=gp()),fo.enterPM2Mode(),await QQ(),ma.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await fo.startClusteringProcesses(),await fo.startService(or.PROCESS_DESCRIPTORS.HDB),JQ(),e&&process.exit(0)}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(JAe,"launch");function XAe(){let e=fa.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.LICENSE_KEY_DIR_NAME,or.LICENSE_FILE_NAME),t=fa.join(e,or.LICENSE_FILE_NAME),r=fa.join(e,or.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=zQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ma.isEmpty(n)||ma.isEmpty(s))return;da.mkdirpSync(e),da.writeFileSync(r,n),da.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),_s.error(s)}}o(XAe,"writeLicenseFromVars");fE.launch=JAe;fE.main=QAe;fE.isHdbInstalled=XQ;fE.startupLog=ZAe;async function XQ(){try{await da.stat(ma.getPropsFilePath()),await da.stat(Ae.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ma.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw _s.error(`Error checking for HDB install - ${e}`),e}return!0}o(XQ,"isHdbInstalled");function ZAe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
|
|
112
|
-
`;
|
|
113
|
-
`),
|
|
114
|
-
`),n+=`${r("Worker Threads:")}${
|
|
115
|
-
`,n+=`${r("Root Path:")}${
|
|
116
|
-
`,
|
|
109
|
+
Reindexing upgrade started for transaction logs`),ia.notify("Reindexing upgrade started for transaction logs"),await rQ(OL,!0,e)),ia.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(sE?", but errors occurred":"")}o(qRe,"reindexUpgrade");async function rQ(e,t,r){let n=await co.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=oa.join(e,a.toString());if(a===".DS_Store")continue;let l=await co.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&co.statSync(oa.join(c,f)).isDirectory())try{await $Re(a,f,t),Rn.info(`Reindexing started for ${a}.${f}`),ia.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await KRe(a,f,c,t,r),Rn.info(`Reindexing completed for ${a}.${f}`),ia.notify(`Reindexing completed for ${a}.${f}`)}catch(m){sE=!0,m.schema_path=c,m.table_name=f,ia.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ia.error(m),Rn.error(m),console.error(m)}}}if(!sE)try{await co.rm(VR,{recursive:!0})}catch{}}o(rQ,"processTables");async function $Re(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=oa.join(VR,s);await co.ensureDir(VR),await co.writeFile(i,""),Rn=kRe({level:"debug",formatters:{bindings(){}}},i)}o($Re,"initPinoLogger");var VRe=20;async function KRe(e,t,r,n,s){let i;try{i=await hs.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){ia.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Rn.error(T);return}throw T}let a=zRe(i.dbis),c=hs.openDBI(i,a),l=Object.keys(i.dbis),u=hs.statDBI(i,a);Rn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new HRe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await hs.createEnvironment(r,t,!1);hs.createDBI(f,a,!1,!0);let m=[];try{for(let T of c.getRange({start:!1}))T.value={...T.value},m.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),m.length>VRe&&await h();await h()}catch(T){throw sE=!0,Rn.error(T),T}async function h(){let T,R=m.map(({value:C})=>C);n?T=await Promise.all(R.map(C=>YRe(f,C))):T=await URe(f,a,l.filter(C=>C!=="__blob__"),R,!1);for(let C=0,G=m.length;C<G;C++){let{key:z,value:F}=m[C];Rn.info(`Record hash value: ${z} hash: ${a}`);let $;n?$=T[C]:$=T.written_hashes.indexOf(z)>-1,nE($,!0),WRe(f,a,F[a],n),Rn.info(`Insert success, written hashes: ${T.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ia.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Rn.info(`${d.value}/${d.total} records inserted`)}o(h,"finishOutstanding"),d.stop();let p=hs.statDBI(i,a),_=hs.statDBI(f,a);if(Rn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${_.entryCount}`),nE.deepStrictEqual(p.entryCount,_.entryCount),await hs.closeEnvironment(i),await hs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let T=oa.join(r,t),R=oa.join(T,"data.mdb"),N=oa.join(T,"lock.mdb");await co.unlink(R),await co.unlink(N),await co.rmdir(T),Rn.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await hs.openEnvironment(r,t),y=hs.statDBI(g,a);Rn.info(`New stats: ${JSON.stringify(_)}. New stats after move: ${JSON.stringify(y)}`),nE.deepStrictEqual(y.entryCount,_.entryCount),await hs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(KRe,"processTable");async function YRe(e,t){hs.initializeDBIs(e,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),FRe.isEmpty(t.user_name)||e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(YRe,"insertTransaction");function WRe(e,t,r,n){let i=e.dbis[t].get(r);nE.deepStrictEqual(typeof i,"object");let a;if(n){let c={[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!BRe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];nQ(e,c,f,r)}else nQ(e,c,l,r)}o(WRe,"validateIndices");function nQ(e,t,r,n){try{let s=!1,i=xRe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Rn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),nE.deepStrictEqual(s,!0)}catch(s){sE=!0,Rn.error(s),console.error(s)}}o(nQ,"validateIndex");function zRe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(zRe,"getHashDBI")});var uQ=M((oFe,lQ)=>{"use strict";var KR=require("path"),Rc=require("fs-extra"),jRe=NL(),ou=Q(),oQ=wt(),CL=ae(),Ni=(k(),v(Y)),YR=ie(),QRe=require("properties-reader"),JRe=ai(),XRe=dS(),ZRe=on(),iFe=require("util"),eye=ZRe.searchByValue,tye=Mn(),rye=IT(),nye=Ot(),sye=iQ(),aQ=as(),iye=GR(),aE=new jRe("4.0.0"),cQ=[],iE,oE;async function oye(){try{if(await iye.upgradeCertsPrompt()){if(console.log("Generating new certificates."),iE){let t=YR.changeExtension(iE,".bak");await Rc.move(iE,t)}if(oE){let t=YR.changeExtension(oE,".bak");await Rc.move(oE,t)}await aQ.generateKeys()}else console.log("Using existing certificates."),aQ.updateConfigCert(iE,oE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(oye,"generateNewKeys");async function aye(){console.log("Updating HarperDB nodes."),ou.info("Updating HarperDB nodes.");let e=[];try{let t=new JRe(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await eye(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!nye.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],h=m.channel.split(":");u.push({schema:h[0],table:h[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ni.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(YR.isEmptyOrZeroLength(n))return;let s=new XRe(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await tye.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{rye.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(aye,"updateNodes");async function cye(){let e=CL.get(Ni.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(KR.join("config","settings.js"))){ou.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ou.info(t);let r=KR.dirname(e),n=CL.get(Ni.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=KR.join(n,"backup","4_0_0_upgrade_settings.bak"),i=KR.join(n,Ni.HDB_CONFIG_FILE);try{ou.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Rc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{ou.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ou.info("Updating env variables with new settings values");let f=oQ.initOldConfig(e);iE=f[Ni.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],oE=f[Ni.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],oQ.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=YR.getPropsFilePath();Rc.accessSync(a,Rc.constants.F_OK|Rc.constants.R_OK);let l=QRe(a).get(Ni.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
110
|
+
install_user = ${l}`;try{Rc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{CL.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{Rc.removeSync(r),console.log(d),ou.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(cye,"updateSettingsFile400");aE.async_functions.push(cye);aE.async_functions.push(oye);aE.async_functions.push(sye);aE.async_functions.push(aye);cQ.push(aE);lQ.exports=cQ});var PL=M((cFe,hQ)=>{"use strict";var au=ie(),lye=(k(),v(Y)),dQ=Q(),{DATA_VERSION:uye,UPGRADE_VERSION:dye}=lye.UPGRADE_JSON_FIELD_NAMES_ENUM,fQ=eQ(),WR=uQ(),cu=new Map;fQ&&fQ.forEach(e=>{cu.set(e.version,e)});WR&&WR.forEach(e=>{cu.set(e.version,e)});WR&&WR.forEach(e=>{cu.set(e.version,e)});function fye(){return[...cu.keys()].sort(au.compareVersions)}o(fye,"getSortedVersions");function mQ(e){let t=e[uye],r=e[dye];return au.isEmptyOrZeroLength(t)||au.isEmptyOrZeroLength(r)?(dQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),dQ.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...cu.keys()].sort(au.compareVersions).filter(function(n){return au.compareVersions(n,t)>0&&au.compareVersions(n,r)<=0})}o(mQ,"getVersionsForUpgrade");function mye(e){return mQ(e).length>0}o(mye,"hasUpgradesRequired");function hye(e){return au.isEmptyOrZeroLength(e)?null:cu.has(e)?cu.get(e):null}o(hye,"getDirectiveByVersion");hQ.exports={getSortedVersions:fye,getDirectiveByVersion:hye,getVersionsForUpgrade:mQ,hasUpgradesRequired:mye}});var jR=M((uFe,SQ)=>{"use strict";var pye=require("util"),LL=require("chalk"),Eye=require("os"),EQ=Mn(),_ye=on(),ps=(k(),v(Y)),_Q=q2(),ML=xI(),{UpgradeObject:pQ}=K2(),{forceDowngradePrompt:gye}=GR(),{packageJson:Sye}=bt(),zR=Q(),Af=ie(),vL=ii(),Tye=(Me(),v(_t)),Rye=PL(),yye=pye.promisify(vL.setSchemaDataToGlobal),Aye=_ye.searchByValue,bye="info_id",Iye="2.9.9",Nye="3.0.0";async function wye(e){let t=new _Q.HdbInfoInsertObject(1,e,e),r=new ML.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return vL.setSchemaDataToGlobal(),EQ.insert(r)}o(wye,"insertHdbInstallInfo");async function DL(e){let t,r=await gQ(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new _Q.HdbInfoInsertObject(i,e,e);let a=new ML.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await yye(),EQ.insert(a)}o(DL,"insertHdbUpgradeInfo");async function gQ(){let e=new ML.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,bye,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Aye(e))}catch(r){console.error(r)}return t}o(gQ,"getAllHdbInfoRecords");async function Oye(){let e=await gQ();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(Oye,"getLatestHdbInfoRecord");async function Cye(){zR.info("Checking if HDB software has been updated");try{let e=Sye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Oye(),r;if(Af.isEmpty(t))r=Iye;else if(r=t.data_version_num,Af.compareVersions(r.toString(),e.toString())>0){if(!Af.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(LL.yellow(`This instance's data was last run on version ${r}`)),console.error(LL.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.${Eye.EOL}${ps.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Af.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(LL.yellow(`This instance's data was last run on version ${r}`)),await gye(new pQ(r,e))?await DL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(vL.setSchemaDataToGlobal(),Pye(r),e.toString()===r.toString())return;let n=new pQ(r,e);if(Rye.hasUpgradesRequired(n))return n;Af.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await DL(n.upgrade_version),zR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw zR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),zR.fatal(e),e}}o(Cye,"getVersionUpdateInfo");function Pye(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${ps.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Tye.databases.system))throw console.log(t),new Error(t);if(!Af.isEmpty(e)&&e<Nye)throw console.log(t),new Error(t)}o(Pye,"checkIfInstallIsSupported");SQ.exports={insertHdbInstallInfo:wye,insertHdbUpgradeInfo:DL,getVersionUpdateInfo:Cye}});var AQ=M((fFe,yQ)=>{"use strict";var QR=require("joi"),{boolean:Lye,string:UL,number:Dye}=QR.types(),TQ=require("fs-extra"),cE=(k(),v(Y)),RQ=require("path"),Mye=dt();yQ.exports=vye;function vye(e){let t=UL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=QR.object({[cE.INSTALL_PROMPTS.ROOTPATH]:QR.custom(Uye),[cE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:QR.alternatives([Dye.min(0),UL]).allow("null",null),[cE.INSTALL_PROMPTS.TC_AGREEMENT]:UL.valid("yes","YES","Yes"),[cE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[cE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Lye});return Mye.validateBySchema(e,r)}o(vye,"installValidator");function Uye(e,t){if(TQ.existsSync(RQ.join(e,"system/hdb_user/data.mdb"))||TQ.existsSync(RQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(Uye,"validateRootAvailable")});var IQ=M((hFe,bQ)=>{"use strict";var{mkdirpSync:xye,copySync:Bye}=require("fs-extra"),yc=require("path"),lE=(k(),v(Y)),{PACKAGE_ROOT:Fye}=bt(),BL=Q(),Hye=Jn(),xL=No(),kye=It();bQ.exports=Gye;async function Gye(e){BL.trace("Mounting HarperDB"),lu(e),lu(yc.join(e,"backup")),lu(yc.join(e,"keys")),lu(yc.join(e,"keys",lE.LICENSE_FILE_NAME)),lu(yc.join(e,"log")),lu(yc.join(e,"database")),lu(yc.join(e,"components")),Bye(yc.resolve(Fye,"./utility/install/README.md"),yc.join(e,"README.md")),await qye()}o(Gye,"mountHdb");async function qye(){let e=km(),t=Object.keys(xL);for(let r=0;r<t.length;r++){let n=t[r],s=xL[n].hash_attribute;try{kye.initSystemSchemaPaths(lE.SYSTEM_SCHEMA_NAME,n);let i=new e(lE.SYSTEM_SCHEMA_NAME,n,s);i.attributes=xL[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(n)&&(i.audit=!0),await Hye.createTable(n,i)}catch(i){throw BL.error(`issue creating environment for ${lE.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(qye,"createLMDBTables");function lu(e){xye(e,{mode:lE.HDB_FILE_PERMISSIONS}),BL.info(`Directory ${e} created`)}o(lu,"makeDirectory")});var HQ=M((gFe,FQ)=>{"use strict";var HL=require("os"),PQ=require("inquirer"),Ys=require("fs-extra"),$ye=require("properties-reader"),du=require("chalk"),uo=require("path"),Vye=require("human-readable-ids").hri,Kye=require("ora"),Yye=require("yaml"),Tr=Q(),Ac=ae(),uE=ie(),XR=xc(),LQ=jR(),{packageJson:DQ}=bt(),Ee=(k(),v(Y)),{CONFIG_PARAM_MAP:EFe,CONFIG_PARAMS:qt}=Ee,Wye=AQ(),zye=IQ(),kL=wt(),jye=ts(),Qye=Oh(),Jye=TL(),Xye=ii(),Zye=require("util").promisify,eAe=Zye(Xye.setSchemaDataToGlobal),NQ=as(),uu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),en=o(e=>du.magenta.bold(e),"HDB_PROMPT_MSG"),tAe="https://harperdb.io/legal/end-user-license-agreement",bc=HL.EOL,aa="",rAe="yes",wQ="Starting HarperDB install...",OQ="HarperDB installation was successful.",CQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",nAe="An out of date version of HarperDB is already installed.",FL="It appears that HarperDB is already installed. Exiting install...",sAe="Aborting install",_Fe=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])$/),iAe=new RegExp(/^[^\s.,*>]+$/),oAe=HL.homedir(),aAe=uo.join(oAe,Ee.HDB_ROOT_DIR_NAME),cAe="HDB_ADMIN",lAe="CLUSTER_USER",uAe="dev",dAe="localhost",JR={[qt.HTTP_CORS]:!0,[qt.HTTP_CORSACCESSLIST]:["*"],[qt.HTTP_PORT]:9926,[qt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[qt.THREADS_COUNT]:1,[qt.THREADS_DEBUG]:!0,[qt.LOGGING_STDSTREAMS]:!0,[qt.LOGGING_LEVEL]:"info",[qt.OPERATIONSAPI_NETWORK_PORT]:9925,[qt.LOCALSTUDIO_ENABLED]:!0},Zr={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Ic=XR([Ee.INSTALL_PROMPTS.HDB_CONFIG]),lo,MQ=!1,GL=!1,vQ=!1;FQ.exports={install:UQ,updateConfigEnv:yAe,setIgnoreExisting:AAe};UQ.createSuperUser=BQ;async function UQ(){console.log(en(bc+wQ+bc)),Tr.notify(wQ);let e;Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=fAe());let t=hAe();Object.assign(t,e),t[Ee.INSTALL_PROMPTS.TC_AGREEMENT]&&t[Ee.INSTALL_PROMPTS.ROOTPATH]&&t[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[Ee.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(vQ=!0,t[Ee.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Wye(t);if(r)throw r.message;await pAe(),await EAe(t);let n=await mAe(t);lo=n[Ee.INSTALL_PROMPTS.ROOTPATH],Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&uo.dirname(Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG])===lo&&(MQ=!0),!GL&&!Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Ys.pathExists(uo.join(lo,Ee.HDB_CONFIG_FILE))&&(console.error(FL),process.exit());let s=Kye({prefixText:en("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),uE.isEmpty(lo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(lo),await zye(lo),await _Ae(),await gAe(n),Tr.initLogSettings(!0),await BQ(n),await TAe(n),await NQ.updateConfigCert(),await NQ.generateCertsKeys(),await RAe(),Jye(),s.stop(),console.log(en(bc+OQ+bc)),Tr.notify(OQ)}o(UQ,"install");function fAe(){let e=Yye.parseDocument(Ys.readFileSync(Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=kL.flattenConfig(e.toJSON());return t[Ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[Ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(fAe,"getConfigFromFile");async function mAe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:uu,when:ca(e[Ee.INSTALL_PROMPTS.ROOTPATH],Zr.DESTINATION),name:Ee.INSTALL_PROMPTS.ROOTPATH,prefix:aa,default:aAe,validate:o(async s=>Ks(s)?Ks(s):await Ys.pathExists(uo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:en(Zr.DESTINATION)},{type:"input",transformer:uu,when:ca(e[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Zr.HDB_USERNAME),name:Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:aa,default:cAe,validate:o(s=>Ks(s)?Ks(s):(t=s,!0),"validate"),message:en(Zr.HDB_USERNAME)},{type:"password",when:ca(e[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Zr.HDB_PASS),name:Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:aa,validate:o(s=>Ks(s)?Ks(s):!0,"validate"),message:en(Zr.HDB_PASS)},{type:"input",transformer:uu,when:ca(e[Ee.INSTALL_PROMPTS.DEFAULTS_MODE],Zr.DEFAULTS_MODE),name:Ee.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:aa,default:uAe,validate:o(s=>Ks(s)?Ks(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:en(Zr.DEFAULTS_MODE)}];if(vQ||r.push({type:"input",name:Ee.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:uu,when:ca(e[Ee.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Zr.REPLICATION_HOSTNAME),prefix:aa,default:dAe,message:en(Zr.REPLICATION_HOSTNAME)}),uE.autoCastBoolean(e[Ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:uu,when:ca(e[Ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],Zr.NODE_NAME),name:Ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:aa,default:Vye.random(),validate:o(i=>iAe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:en(Zr.NODE_NAME)},{type:"input",transformer:uu,when:ca(e[Ee.INSTALL_PROMPTS.CLUSTERING_USER],Zr.CLUSTER_USERNAME),name:Ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:aa,default:lAe,validate:o(i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:en(Zr.CLUSTER_USERNAME)},{type:"password",when:ca(e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Zr.CLUSTER_PASS),name:Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:aa,validate:o(i=>Ks(i)?Ks(i):!0,"validate"),message:en(Zr.CLUSTER_PASS)}];r.push(...s)}let n=await PQ.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(mAe,"installPrompts");function ca(e,t){return e!==void 0?(t.includes("password")?(console.log(`${en(t)} ${du.gray("[hidden]")}`),Tr.trace(`${en(t)} [hidden]`)):(console.log(`${en(t)} ${e}`),Tr.trace(`${en(t)} ${e}`)),!1):!0}o(ca,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Ks,"checkForEmptyValue");function hAe(){let e=Object.keys(Ee.INSTALL_PROMPTS),t=XR(e),r=XR(Object.keys(Ee.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=Ee.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(hAe,"checkForPromptOverride");async function pAe(){Tr.trace("Checking for existing install.");let e=uE.getPropsFilePath(),t=await Ys.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=$ye(e),s=kL.getConfigValue(Ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(Ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ys.pathExists(s)}if(!t&&uE.noBootFile()&&(r=!0),r&&!GL){if(Tr.trace(`Install found existing HDB config at:${e}`),await LQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${DQ.version}. Exiting install...`;console.log(bc+du.magenta.bold(nAe)),console.log(du.magenta.bold(s)),Tr.error(s)}else console.log(bc+du.magenta.bold(FL)),Tr.error(FL);process.exit(0)}}o(pAe,"checkForExistingInstall");async function EAe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${tAe}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:aa,transformer:uu,when:ca(e[Ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:Ee.INSTALL_PROMPTS.TC_AGREEMENT,message:en(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:du.yellow("Please enter 'yes' or 'no'"),"validate")},n=await PQ.prompt([r]);n[Ee.INSTALL_PROMPTS.TC_AGREEMENT]&&n[Ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==rAe&&(console.log(du.yellow(CQ)),Tr.error(CQ),process.exit(0))}o(EAe,"termsAgreement");async function _Ae(){let e=uo.join(lo,Ee.HDB_CONFIG_FILE),t;try{t=HL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
111
|
+
install_user = ${t}`,n=uE.getHomeDir(),s=uo.join(n,Ee.HDB_HOME_DIR_NAME),i=uo.join(s,Ee.LICENSE_KEY_DIR_NAME);try{Ys.mkdirpSync(s,{mode:Ee.HDB_FILE_PERMISSIONS}),Ys.mkdirpSync(i,{mode:Ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${Ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=uo.join(s,Ee.BOOT_PROPS_FILE_NAME);try{await Ys.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(Ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(_Ae,"createBootPropertiesFile");async function gAe(e){Tr.trace("Creating HarperDB config file");let t=XR(Object.keys(Ee.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[Ee.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in JR){if(r===qt.HTTP_PORT&&t[qt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??JR[r],t[qt.HTTP_SECUREPORT]=null;continue}else if(r===qt.HTTP_PORT)continue;if(r===qt.OPERATIONSAPI_NETWORK_PORT&&t[qt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??JR[r],t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===qt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=JR[r])}}else t[qt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[qt.HTTP_PORT.toLowerCase()]&&(t[qt.HTTP_SECUREPORT]=null);try{Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]||kL.createConfigFile(t),Ac.initSync()}catch(r){SAe(r)}}o(gAe,"createConfigFile");function SAe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(sAe);let t=uo.resolve(Ac.get(Ac.BOOT_PROPS_FILE_PATH),"../");t&&Ys.removeSync(t),lo&&(MQ?Ys.readdirSync(lo,{withFileTypes:!0}).forEach(n=>{let s=uo.join(n.path,n.name);s!==Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&Ys.removeSync(s)}):Ys.removeSync(lo)),process.exit(1)}o(SAe,"rollbackInstall");async function xQ(e,t){Tr.trace("Creating admin user"),await eAe();let r;try{r=await Qye.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 jye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(xQ,"createAdminUser");async function BQ(e){Tr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await xQ(t,r),delete e[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(BQ,"createSuperUser");async function TAe(e){Tr.trace("Creating Cluster user.");let t;e[Ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[Ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await xQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[Ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(TAe,"createClusterUser");async function RAe(){let e=DQ.version;if(e)await LQ.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(RAe,"insertHdbVersionInfo");function yAe(e){Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]=e}o(yAe,"updateConfigEnv");function AAe(e){GL=e}o(AAe,"setIgnoreExisting")});var qQ=M((TFe,GQ)=>{"use strict";var qL=ie(),Es=Q(),kQ=PL();GQ.exports={processDirectives:bAe};async function bAe(e){console.log("Starting upgrade process...");let t=kQ.getVersionsForUpgrade(e),r=wAe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Es.notify(c),console.log(c);let l=[],u=[];try{l=IAe(a.sync_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await NAe(a.async_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(bAe,"processDirectives");function IAe(e){if(qL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Es.info(`Running function ${r.name}`),!(r instanceof Function)){Es.info("Variable being processed is not a function");continue}let n=r();Es.info(n),t.push(n)}return t}o(IAe,"runSyncFunctions");async function NAe(e){if(qL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Es.info(`Running function ${s.name}`),!(s instanceof Function)){Es.info("Variable being processed is not a function");continue}let i=await s();Es.info(i),t.push(i)}return t}o(NAe,"runAsyncFunctions");function wAe(e){if(qL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=kQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(wAe,"getUpgradeDirectivesToInstall")});var jQ=M((yFe,zQ)=>{"use strict";var ZR=ae();ZR.initSync();var YQ=require("chalk"),$Q=require("fs-extra"),ua=Q(),la=(k(),v(Y)),OAe=qQ(),$L=ie(),WQ=jR(),CAe=GR(),VQ=sA(),PAe=ii(),{packageJson:KQ}=bt(),LAe=require("util").promisify,DAe=LAe(PAe.setSchemaDataToGlobal),VL,{UPGRADE_VERSION:KL}=la.UPGRADE_JSON_FIELD_NAMES_ENUM;zQ.exports={upgrade:MAe};async function MAe(e){await DAe(),VL===void 0&&(VL=gp()),$Q.existsSync(ZR.get(ZR.BOOT_PROPS_FILE_PATH))||(dE("The hdb_boot_properties file was not found. Please install HDB.",la.LOG_LEVELS.ERROR),process.exit(1)),$Q.existsSync(ZR.get(la.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(dE("The hdb settings file was not found. Please make sure HDB is installed.",la.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await WQ.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),dE(`This version of HarperDB is ${KQ.version}`,la.LOG_LEVELS.INFO);let r=t[KL]??KQ.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${la.HDB_SUPPORT_ADDRESS}`),ua.notify("Missing new version field from upgrade info object"),process.exit(1)),await vAe();let n,s=0;try{n=await CAe.forceUpdatePrompt(t)}catch(i){ua.error("There was an error when prompting user about upgrade."),ua.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),ua.info(`Starting upgrade to version ${r}`),await UAe(t),dE(`HarperDB was successfully upgraded to version ${t[KL]}`,la.LOG_LEVELS.INFO)}o(MAe,"upgrade");async function vAe(){let e=!1,t=await VQ.findPs(la.HDB_PROC_NAME);if($L.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await VQ.findPs("hdb_express");$L.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await VL.list();$L.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(YQ.red(r)),ua.error(r),process.exit(1)}}o(vAe,"checkIfRunning");async function UAe(e){try{await OAe.processDirectives(e)}catch(t){throw dE("There was an error during the data upgrade. Please check the logs.",la.LOG_LEVELS.ERROR),t}try{await WQ.insertHdbUpgradeInfo(e[KL])}catch(t){ua.error("Error updating the 'hdb_info' system table."),ua.error(t)}}o(UAe,"runUpgrade");function dE(e,t=void 0){t||(t=ua.info),ua[t](e),console.log(YQ.magenta(e))}o(dE,"printToLogAndConsole")});var rJ=M(fE=>{"use strict";var be=ae();be.initSync();sf();var or=(k(),v(Y)),{CONFIG_PARAMS:Ue}=or,_s=Q(),da=require("fs-extra"),fa=require("path"),xAe=TL(),{install:BAe}=HQ(),YL=require("chalk"),{packageJson:FAe,PACKAGE_ROOT:HAe}=bt(),ma=ie(),WL=wt(),JQ=xc(),QQ=MT(),kAe=jQ(),{compactOnStart:GAe}=(wC(),v(NC)),qAe=require("minimist"),$Ae=as(),{startHTTPThreads:VAe}=(ty(),v(zL)),KAe=jR(),{isMainThread:YAe}=require("worker_threads"),bFe=No(),IFe=Ua(),NFe=rI(),wFe=km(),ey=(k(),v(Y)),fo,bf,XQ=!1,WAe="Upgrade complete. Starting HarperDB.",zAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",jAe="HarperDB not found, starting install process.",QAe="There was an error during install, check install_log.log for more details. Exiting.",JAe="HarperDB successfully started.";function XAe(){if(!XQ){let e=o(()=>{da.removeSync(fa.join(be.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(XAe,"addExitListeners");async function ZQ(e=!1,t=!1){if(console.log(YL.magenta("Starting HarperDB...")),_s.suppressLogging?.(()=>{console.log(YL.magenta(""+da.readFileSync(fa.join(HAe,"utility/install/ascii_logo.txt"))))}),await tJ()===!1){console.log(jAe);try{await BAe()}catch(l){console.error(QAe,l),_s.error(l),process.exit(1)}}if(!e){let l=JQ(Object.keys(or.CONFIG_PARAM_MAP),!0);!ma.isEmpty(l)&&!ma.isEmptyOrZeroLength(Object.keys(l))&&WL.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=bf?.service==="clustering";bf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=fa.join(be.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE),i=nbe(s);i&&i!==1&&sbe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),fo===void 0&&(fo=gp()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await QQ.generateNatsConfig(),await fo.startClusteringProcesses(!0),process.exit()),XAe(),await da.writeFile(fa.join(be.get(ey.CONFIG_PARAMS.ROOTPATH),ey.HDB_PID_FILE),`${process.pid}`),_s.info("HarperDB PID",process.pid);let a;try{let l=await KAe.getVersionUpdateInfo();l!==void 0&&(a=l[or.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await kAe.upgrade(l),console.log(WAe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),_s.error(l)):(console.error(zAe,l),_s.error(l)),process.exit(1)}xAe(),tbe(),await $Ae.reviewSelfSignedCert(),ma.autoCastBoolean(be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&YAe&&await QQ.generateNatsConfig(t)}o(ZQ,"initialize");async function ZAe(e=!1){try{bf=qAe(process.argv),bf.ROOTPATH&&WL.updateConfigObject("settings_path",fa.join(bf.ROOTPATH,or.HDB_CONFIG_FILE)),await ZQ(e,!0),be.get(or.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await GAe();let t=process.env.IS_SCRIPTED_SERVICE&&!bf.service;ma.autoCastBoolean(be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await fo.startClusteringProcesses(),await fo.startClusteringThreads()),await VAe(process.env.DEV_MODE?1:be.get(ey.CONFIG_PARAMS.THREADS_COUNT)??be.get(ey.CONFIG_PARAMS.THREADS)),t||eJ()}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(ZAe,"main");function eJ(){_s.suppressLogging(()=>{console.log(YL.magenta(`HarperDB ${FAe.version} successfully started`))}),_s.notify(JAe)}o(eJ,"started");async function ebe(e=!0){XQ=!e;try{fo===void 0&&(fo=gp()),fo.enterPM2Mode(),await ZQ(),ma.autoCastBoolean(be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await fo.startClusteringProcesses(),await fo.startService(or.PROCESS_DESCRIPTORS.HDB),eJ(),e&&process.exit(0)}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(ebe,"launch");function tbe(){let e=fa.join(be.get(or.CONFIG_PARAMS.ROOTPATH),or.LICENSE_KEY_DIR_NAME,or.LICENSE_FILE_NAME),t=fa.join(e,or.LICENSE_FILE_NAME),r=fa.join(e,or.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=JQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ma.isEmpty(n)||ma.isEmpty(s))return;da.mkdirpSync(e),da.writeFileSync(r,n),da.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),_s.error(s)}}o(tbe,"writeLicenseFromVars");fE.launch=ebe;fE.main=ZAe;fE.isHdbInstalled=tJ;fE.startupLog=rbe;async function tJ(){try{await da.stat(ma.getPropsFilePath()),await da.stat(be.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ma.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw _s.error(`Error checking for HDB install - ${e}`),e}return!0}o(tJ,"isHdbInstalled");function rbe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
|
|
112
|
+
`;be.get(Ue.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${be.get(Ue.REPLICATION_HOSTNAME)}
|
|
113
|
+
`),be.get(Ue.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${be.get(Ue.REPLICATION_URL)}
|
|
114
|
+
`),n+=`${r("Worker Threads:")}${be.get(Ue.THREADS_COUNT)}
|
|
115
|
+
`,n+=`${r("Root Path:")}${be.get(Ue.ROOTPATH)}
|
|
116
|
+
`,be.get(Ue.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=be.get(Ue.THREADS_DEBUG_PORT)?`, TCP: ${be.get(Ue.THREADS_DEBUG_PORT)}
|
|
117
117
|
`:`
|
|
118
|
-
`);let s=fa.join(
|
|
119
|
-
`,n+=r("Default:"),n+=
|
|
120
|
-
`,n+=r("Operations API:"),n+=
|
|
121
|
-
`,n+=r("MQTT:"),n+=
|
|
118
|
+
`);let s=fa.join(be.get(Ue.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${be.get(Ue.LOGGING_LEVEL)}, location: ${s+(be.get(Ue.LOGGING_STDSTREAMS)?", stdout/err":"")}
|
|
119
|
+
`,n+=r("Default:"),n+=be.get(Ue.HTTP_PORT)?`HTTP (and WS): ${be.get(Ue.HTTP_PORT)}, `:"",n+=be.get(Ue.HTTP_SECUREPORT)?`HTTPS (and WS): ${be.get(Ue.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${be.get(Ue.HTTP_CORS)?`enabled for ${be.get(Ue.HTTP_CORSACCESSLIST)}`:"disabled"}
|
|
120
|
+
`,n+=r("Operations API:"),n+=be.get(Ue.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${be.get(Ue.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=be.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${be.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${be.get(Ue.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${be.get(Ue.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${be.get(Ue.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
|
|
121
|
+
`,n+=r("MQTT:"),n+=be.get(Ue.MQTT_NETWORK_PORT)?`TCP: ${be.get(Ue.MQTT_NETWORK_PORT)}, `:"",n+=be.get(Ue.MQTT_NETWORK_SECUREPORT)?`TLS: ${be.get(Ue.MQTT_NETWORK_SECUREPORT)}`:"",n+=be.get(Ue.MQTT_WEBSOCKET)&&be.get(Ue.HTTP_PORT)?`, WS: ${be.get(Ue.HTTP_PORT)}`:"",n+=be.get(Ue.MQTT_WEBSOCKET)&&be.get(Ue.HTTP_SECUREPORT)?`, WSS: ${be.get(Ue.HTTP_SECUREPORT)}
|
|
122
122
|
`:`
|
|
123
|
-
`;let i=
|
|
124
|
-
`;let l=[],u
|
|
125
|
-
`);let m=
|
|
123
|
+
`;let i=be.get(Ue.REPLICATION_PORT)??be.get(Ue.OPERATIONSAPI_NETWORK_PORT),a=be.get(Ue.REPLICATION_SECUREPORT)??be.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
|
|
124
|
+
`;let l=[],u=WL.getConfigObj();for(let h in u)u[h].package&&l.push(h);let d={},f=`${r("REST:")}`;for(let[h,p]of e)for(let _ of p){let g=_.name;g==="rest"&&(f+=`${_.protocol_name}: ${h}, `),l.includes(g)&&(d[g]?d[g]+=`${_.protocol_name}: ${h}, `:d[g]=`${_.protocol_name}: ${h}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
|
|
125
|
+
`);let m=be.get(Ue.HTTP_PORT)?`HTTP: ${be.get(Ue.HTTP_PORT)}, `:"";m+=be.get(Ue.HTTP_SECUREPORT)?`HTTPS: ${be.get(Ue.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let h of l)d[h]?n+=`${r(h+": ")}${d[h].slice(0,-2)}
|
|
126
126
|
`:n+=`${r(h+": ")}${m}
|
|
127
|
-
`;console.log(n),
|
|
128
|
-
`),pE(e,404,0,e.requestId)}function pE(e,t,r,n){let s=EE.logging;if(s){
|
|
127
|
+
`;console.log(n),be.get(Ue.LOGGING_STDSTREAMS)&&_s.logsAtLevel("info")&&_s.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(rbe,"startupLog");function nbe(e){try{return Number.parseInt(da.readFileSync(e,"utf8"),10)}catch{return null}}o(nbe,"readPidFile");function sbe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(sbe,"isProcessRunning")});var nJ={};Oe(nJ,{SERVERS:()=>If,portServer:()=>jL,setPortServerMap:()=>ry});function ry(e,t){let r=jL.get(e)??[];jL.set(e,[...r,t])}var If,jL,QL=le(()=>{If={},jL=new Map;o(ry,"setPortServerMap")});var cy={};Oe(cy,{deliverSocket:()=>EJ,getHttpOptions:()=>cbe,getRequestId:()=>TJ,handleApplication:()=>abe,httpServer:()=>sD,logRequest:()=>pE,proxyRequest:()=>lbe,registerServer:()=>rD,suppressHandleApplicationWarning:()=>obe});function abe(e){EE=e.options.getAll(),e.options.on("change",t=>{EE=e.options.getAll()})}function cbe(){return EE}function EJ(e,t,r){let n=e?.read?e:new cJ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=If[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=If[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ha.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function lbe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=sJ.get(s),r){case"connection":i=EJ(void 0,t),sJ.set(s,i),i.write=(c,l,u)=>(sy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(sy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),sy.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function rD(e,t,r=!0){t||(t=Cr.default.get(U.HTTP_PORT));let n=If[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",aJ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else If[t]=e;e.on("unhandled",aJ)}function nD(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Cr.default.get(U.HTTP_PORT)!=null&&t.push({port:Cr.default.get(U.HTTP_PORT),secure:Cr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Cr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Cr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,lJ.resolvePath)(Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function sD(e,t){let r=[];for(let{port:n,secure:s}of nD(t))r.push(_J(n,s,t)),typeof e=="function"?eD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,rD(e,n,!1)),iy[n]=oy(eD,n);return r}function _J(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(ry(e,{protocol_name:t?"HTTPS":"HTTP",name:ly()}),!ny[e]){let a=i?"operationsApi_network":s??"http",c=Cr.default.get(a+"_keepAliveTimeout"),l=Cr.default.get(a+"_timeout"),u=Cr.default.get(a+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Cr.default.get(U.HTTP_MAXHEADERSIZE)},f=Cr.default.get(a+"_mtls"),m=Cr.default.get(a+"_mtls_required"),h;if(t){let T=Cr.default.get("tls");h=Cr.default.get(a+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,uJ.getTicketKeys)(),SNICallback:(0,dJ.createTLSSelector)(s??"server",f),ciphers:T.ciphers??T[0]?.ciphers})}let p=(0,fJ.checkMemoryLimit)(),_=o(async(T,R)=>{let N=performance.now(),C=0;try{let z=new Ya(T,R);i&&(z.isOperationsServer=!0),EE.logging?.id&&(z.requestId=C=TJ());let F=await iy[e](z);if(!F){if(z._nodeResponse.statusCode){pE(T,z._nodeResponse.statusCode,C,performance.now()-N);return}F=gJ(z)}if(F.headers?.set||(F.headers=new Os(F.headers)),p?F.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):F.headers?.set?.("Server","HarperDB"),F.status===-1){for(let Te of F.headers||[])R.setHeader(Te[0],Te[1]);return T.baseRequest=z,R.baseResponse=F,ny[e].emit("unhandled",T,R)}let $=F.status||200,J=performance.now(),K=J-N,te=F.body,fe,oe=!1;if(!F.handlesHeaders){let Te=F.headers||new Os;te?te.length>=0?(typeof te=="string"?Te.set("Content-Length",Buffer.byteLength(te)):Te.set("Content-Length",te.length),fe=!0):te instanceof Rs&&(te.size?Te.set("Content-Length",te.size):te.on&&(oe=!0,te.on("size",xe=>{R.headersSent||R.setHeader("Content-Length",xe)})),te=te.stream()):(Te.set("Content-Length","0"),fe=!0);let tt=`hdb;dur=${K.toFixed(2)}`;if(F.wasCacheMiss&&(tt+=", miss"),lh(Te,"Server-Timing",tt,!0),!R.headersSent)if(oe){if(R.statusCode=$,Te)if(Te[Symbol.iterator])for(let[xe,tn]of Te)R.setHeader(xe,tn);else for(let xe in Te)R.setHeader(xe,Te[xe])}else R.writeHead($,Te&&(Te[Symbol.iterator]?Array.from(Te):Te));fe&&R.end(te)}let ge=z.handlerPath,Pe=z.method;if(ot(K,"duration",ge,Pe,F.wasCacheMiss==null?void 0:F.wasCacheMiss?"cache-miss":"cache-hit"),Wr($<400,"success",ge,Pe),Wr(1,"response_"+$,ge,Pe),pE(T,$,C,K),!fe)if(te instanceof ReadableStream&&(te=ZL.Readable.fromWeb(te)),(te[Symbol.iterator]||te[Symbol.asyncIterator])&&(te=ZL.Readable.from(te)),te?.pipe){te.pipe(R),te.destroy&&R.on("close",()=>{te.destroy()});let Te=0;te.on("data",tt=>{Te+=tt.length}),te.on("end",()=>{ot(performance.now()-J,"transfer",ge,Pe),ot(Te,"bytes-sent",ge,Pe)})}else te?.then?te.then(Te=>{R.end(Te)},G):R.end(te)}catch(z){G(z)}function G(z){let F=z.headers,$=z.statusCode||500;try{R.writeHead($,F&&(F[Symbol.iterator]?Array.from(F):F))}catch{}R.end(ibe(z)),pE(T,$,C,performance.now()-N),z.statusCode?z.statusCode===500?ha.default.warn(z):ha.default.info(z):ha.default.error(z)}o(G,"onError")},"requestHandler"),g=Og(_,(T,R)=>{R.statusCode=503,R.end("Service unavailable, exceeded request queue limit"),ot(!0,"service-unavailable",e)},Cr.default.get(a+"_requestQueueLimit")),y=ny[e]=(t?h?mJ.createSecureServer:hJ.createServer:ay.createServer)(d,(T,R)=>{let N=T.method;N==="GET"||N==="OPTIONS"||N==="HEAD"?_(T,R):g(T,R)});c>=0&&(y.keepAliveTimeout=c),u>=0&&(y.headersTimeout=u),t&&(y.ports||(y.ports=[]),y.ports.push(e),d.SNICallback.initialize(y),f&&(y.mtlsConfig=f),y.on("secureConnection",T=>{T._parent.startTime&&ot(performance.now()-T._parent.startTime,"tls-handshake",e),ot(T.isSessionReused(),"tls-reused",e)}),y.isSecure=!0),rD(y,e)}return ny[e]}function oy(e,t){let r=gJ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function gJ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Os}}function ube(e,t){sD(e,{requestOnly:!0,...t})}function SJ(e,t){for(let{port:r}of nD(t))iJ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),tD[r]=oy(iJ,r)}function dbe(e,t){let r=[];for(let{port:n,secure:s}of nD(t)){ry(n,{protocol_name:s?"WSS":"WS",name:ly()});let i=_J(n,s,t);mE[n]||(mE[n]=new pJ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),mE[n].on("connection",(a,c)=>{try{let l=new Ya(c);l.isWebSocket=!0;let u=iy[n](l);ha.default.debug("Received WS connection, calling listeners",JL),oJ[n](a,l,u)}catch(l){ha.default.warn("Error in handling WS connection",l)}}),SJ((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):mE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),mE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{tD[n]&&tD[n](a,c,l)})),r.push(i),JL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),oJ[n]=oy(JL,n),iy[n]=oy(eD,n)}return r}function aJ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
128
|
+
`),pE(e,404,0,e.requestId))}function pE(e,t,r,n){let s=EE.logging;if(s){XL||(XL=ha.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";XL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+fbe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function fbe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function TJ(){return hE||(hE=new BigInt64Array([1n]),hE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",hE.buffer))),Number(Atomics.add(hE,0,1n))}var cJ,ha,sy,Cr,lJ,uJ,dJ,fJ,mJ,hJ,ay,ZL,pJ,ibe,mE,ny,iy,eD,EE,obe,sJ,iJ,tD,JL,oJ,XL,hE,iD=le(()=>{cJ=require("node:net"),ha=w(Q()),sy=require("node:worker_threads"),Cr=w(ae());k();lJ=w(wt()),uJ=w(st()),dJ=w(as()),fJ=w(Jd()),mJ=require("node:http2"),hJ=require("node:https"),ay=require("node:http");Ph();uh();Kn();Wi();ZL=require("node:stream");Dr();QL();lf();SN();pJ=require("ws"),{errorToString:ibe}=ha.default;De.http=sD;De.request=ube;De.ws=dbe;De.upgrade=SJ;mE={},ny={},iy={},eD=[],EE={},obe=!0;o(abe,"handleApplication");o(cbe,"getHttpOptions");o(EJ,"deliverSocket");sJ=new Map;o(lbe,"proxyRequest");o(rD,"registerServer");o(nD,"getPorts");o(sD,"httpServer");o(_J,"getHTTPServer");o(oy,"makeCallbackChain");o(gJ,"unhandled");o(ube,"onRequest");Object.defineProperty(ay.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});iJ=[],tD={};o(SJ,"onUpgrade");JL=[],oJ={};o(dbe,"onWebSocket");o(aJ,"defaultNotFound");o(pE,"logRequest");o(fbe,"headersToString");o(TJ,"getRequestId")});var aD=M(gE=>{"use strict";LE();var{isMainThread:oD,parentPort:RJ,threadId:uy,workerData:mbe}=require("node:worker_threads"),{createServer:hbe}=require("node:net"),{unlinkSync:bJ,existsSync:pbe}=require("fs"),IJ;gE.whenComponentsLoaded=new Promise(e=>{IJ=e});var wi=Q(),Ws=ae(),gs=(k(),v(Y)),{server:Ebe}=(Dr(),v($f)),{createServer:_be}=require("node:tls"),{restartNumber:gbe,getWorkerIndex:Nf}=st(),{createReuseportFd:_E}=(Ph(),v(sq)),{createTLSSelector:Sbe}=as(),{resolvePath:Tbe}=wt(),{startupLog:Rbe}=rJ(),{SERVERS:wf,setPortServerMap:yJ,portServer:ybe}=(QL(),v(nJ)),AJ=(iD(),v(cy)),Abe=Xs(),NJ=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG),bbe=Ws.get(gs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);Ebe.socket=Ibe;if(NJ){let e;if(oD)e=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wi.info("Could not close debugger",t)}});else{let t=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Nf()>=0&&(e=t+Nf())}if(e){let t=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ws.get(gs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&oD)try{require("inspector").open(9229)}catch(e){gbe<=1&&wi.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&wi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:kFe,CONFIG_PARAMS:GFe}=gs;Ws.initSync();gE.globals=Abe;gE.listenOnPorts=OJ;gE.startServers=wJ;function wJ(){let e=Ws.get(gs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=dy().loadRootComponents(!0).then(()=>{RJ?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)AJ.deliverSocket(i,s,a);else if(n.requestId)AJ.proxyRequest(n);else if(n.type===gs.ITC_EVENT_TYPES.SHUTDOWN){wi.trace("received shutdown request",uy);for(let c in wf){let l=wf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(p=>p.description.includes("connections")),m=0,h=setInterval(()=>{m++;let p=m>=100;if(!l[f]){p&&l.closeAllConnections?.(),clearInterval(h);return}let _=l[f][p?"all":"idle"]?.()||[];if(_.length===0){p&&clearInterval(h);return}m===1?wi.info(`Closing ${_.length} idle connections`):p&&wi.warn(`Forcefully closing ${_.length} active connections`);for(let g=0,y=_.length;g<y;g++){let T=_[g].socket;T._httpMessage&&!T._httpMessage.finished&&!p||(p?T.destroySoon():T.end(`HTTP/1.1 408 Request Timeout\r
|
|
129
129
|
Connection: close\r
|
|
130
130
|
\r
|
|
131
|
-
`))}},25).unref()}l.close?.(()=>{if(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Nf()==0)try{RJ(_be(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,ay),l.cantCleanupProperly||wi.warn("Had to forcefully exit the thread",ay),process.exit(0)},5e3).unref()})}if(AJ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){wi.info("Could not close debugger",c)}}}).ref();let r;_E&&!Rbe&&(r=IJ()),Promise.resolve(r).then(()=>{if(Nf()===0)try{gbe(Sbe)}catch(n){console.error("Error displaying start-up log",n)}gJ?.postMessage({type:gs.ITC_EVENT_TYPES.CHILD_STARTED})})});return yJ(t),t}o(bJ,"startServers");function IJ(){let e=[];for(let t in wf){let r=wf[t];if(t.includes?.("/")&&Nf()==0){fbe(t)&&RJ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Ws.get(gs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Nf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?_E?n={fd:_E(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:_E?n={fd:_E(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.trace("Listening on port "+t,ay)}).on("error",c)}))}return Promise.all(e)}o(IJ,"listenOnPorts");!rD&&!ube?.noServerStart&&bJ();function ybe(e,t){let r=(lf(),v(Pp)).getComponentName,n;if(t.securePort){SJ(t.securePort,{protocol_name:"TLS",name:r()});let s=Ebe("server",t.mtls),i=Ws.get("tls");n=hbe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),wf[t.securePort]=n}return t.port&&(SJ(t.port,{protocol_name:"TCP",name:r()}),n=dbe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),wf[t.port]=n),n}o(ybe,"onSocket")});async function PJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await sD.get(e,{returnNonexistent:!0});i=new aD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await sD.get(e);a&&a.delete()}i=new uy(e,t)}return n&&(n.id=e,n.user={username:t?.username},SE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function iD(){return ly++,ly>65500&&(ly=1),ly}function oD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new ri(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Ft(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var wJ,Nc,OJ,CJ,NJ,sD,SE,ly,uy,aD,LJ=ce(()=>{Me();Fu();wJ=w(yn()),Nc=w(Q());Bc();OJ=w(nt()),CJ=w(nD());Dr();O_();NJ=100,sD=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),SE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,OJ.getWorkerIndex)()===0&&(async()=>{await CJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of SE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Le.getUser(r.user.username));try{await oD(r,t,r)}catch{(0,Nc.warn)("Failed to publish will",t)}SE.delete(e.id)}})();o(PJ,"getSession");ly=1;o(iD,"getNextMessageId");uy=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(T=>T.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Nc.trace)("Resuming subscription from",s,"from",a);let h=bs.getMatch(u,"mqtt");if(!h){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}m.url=h.relativeURL;let p;if(m.url.indexOf("+")>-1||(p=m.url.indexOf("#"))>-1){let T=m.url.slice(1);if(p--,p>-1&&p!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,T.indexOf("+")===T.length-1)m.onlyChildren=!0,m.url="/"+T.slice(0,T.length-1);else{let y=T.split("/"),N;for(let Z=0;Z<y.length;Z++)if(y[Z].indexOf("+")>-1)if(y[Z]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;y[y.length-1]==="#"&&(y.length--,O=!1),N&&(n=o(Z=>{let G=Z.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(O&&G.length!==y.length)return!1;for(let Y=0;Y<y.length;Y++)if(y[Y]!=="+"&&y[Y]!==G[Y])return!1;return!0},"filter"));let F=y.indexOf("+");m.url="/"+(F>-1?y.slice(0,F):y).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,R=await Ft(m,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i,T.isCollection=m.isCollection;let y=await g.subscribe(m,T);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of y)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=iD());let Z=O.id;if(Array.isArray(Z)&&(Z=Bu(Z)),Z==null&&(Z=""),await this.listener(_+"/"+Z,O.value,F,t)===!1)break;this.awaitingAcks?.size>NJ?await new Promise(Y=>setTimeout(Y,this.awaitingAcks.size-NJ)):await new Promise(setImmediate)}catch(F){(0,Nc.warn)(F)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=iD();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return oD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();Ft(r,async()=>{try{if(!t){let n=await SE.get(this.sessionId);n?.doesExist()&&await oD(n,n.data,r)}}finally{await SE.delete(this.sessionId)}}).catch(n=>{(0,Nc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(oD,"publish");aD=class extends uy{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=iD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Nc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,wJ.getNextMonotonicTime)()),(0,Nc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),sD.put(this.sessionRecord)}}});var cD={};we(cD,{bypassAuth:()=>Abe,start:()=>Ibe});function Abe(){FJ=!0}function Ibe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new BJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),ar.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=MJ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{ar.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),ar.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&fy.notify?.({username:d?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&fy.error?.({username:h,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else ar.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),ar.error?.(h)}else if(l.required)return ar.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&bbe(u.remoteAddress)&&(d=await(0,vJ.getSuperUser)(),ar.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=MJ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{ar.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function MJ(e,t,r,n,s){DJ||(DJ=!0,ch(f=>{dy>0&&f.push({metric:"mqtt-connections",connections:dy,byThread:!0})}));let i;dy++;let a,c={protocolVersion:4},l=(0,my.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){dy--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!1,"connection","mqtt","disconnect"),ar.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),ar.info?.(y);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){ar.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let h=f.topic,p=h?.indexOf("/",1),_=p>0?h.slice(0,p):h;it(f.length,"bytes-received",_,R(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Le.getUser(f.username,f.password.toString(),r),(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&fy.notify?.({username:n?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(K){return(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&fy.error?.({username:f.username,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,K),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let K=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?K(f.will.payload):void 0,delete f.will.payload}a=PJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(K){return ar.error?.(K),s.events.emit("auth-failed",f,e,K),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:K.code||5,returnCode:K.code||128})}s.events.emit("connected",a,e),Wr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let y=o(async(K,$,le,ue)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",K);let se=K.indexOf("/",1),me=se>0?K.slice(0,se):K;g({cmd:"publish",topic:K,payload:await T($),messageId:le||Math.floor(Math.random()*1e8),qos:ue.qos},me);let Pe=e._socket??e;return Pe.writableNeedDrain?new Promise(De=>Pe.once("drain",De)):!Pe.closed}catch(se){return ar.error?.(se),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(y),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let K of f.subscriptions){let $;try{let le=await a.addSubscription(K,K.qos>=1);$=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,K,a),le.statusCode?le.statusCode===500?ar.warn?.(le):ar.info?.(le):ar.error?.(le),$=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push($)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let K=[];for(let $ of f.unsubscriptions)K.push(a.removeSubscription($)?0:17);g({cmd:"unsuback",granted:K,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?F(f.payload):void 0,Y;try{Y=await a.publish(f,G)}catch(K){s.events.emit("error",K,e,f,a),ar.warn?.(K),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:Y===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!0,"connection","mqtt","disconnect"),ar.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,a),ar.error?.(y),g({cmd:"disconnect"})}function g(y,N){let O=(0,my.generate)(y,c);t(O),it(O.length,"bytes-sent",N,R(y),"mqtt")}o(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}o(R,"packetMethodName");function T(y){return ba(y,r)}o(T,"serialize")}),l.on("error",f=>{ar.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var my,vJ,Of,UJ,xJ,BJ,fy,ar,FJ,bbe,DJ,dy,HJ=ce(()=>{my=require("mqtt-packet");LJ();vJ=w(ts());Ro();Wi();Dr();Of=w(oe());k();UJ=w(ei()),xJ=w(Q()),BJ=require("events"),fy=(0,UJ.loggerWithTag)("auth-event"),ar=(0,xJ.forComponent)("mqtt"),FJ=(0,Of.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Abe,"bypassAuth");bbe=o(e=>FJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Ibe,"start");dy=0;o(MJ,"onSocket")});function hy(e,t){if(t?.includes(".."))throw new lD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var lD,uD=ce(()=>{lD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(hy,"resolveBaseURLPath")});function kJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var GJ=ce(()=>{o(kJ,"deriveCommonPatternBase")});function py(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var dD=ce(()=>{o(py,"deriveGlobOptions")});var qJ,fD,TE,$J=ce(()=>{uD();GJ();dD();qJ=require("micromatch"),fD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},TE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=hy(this.name,this.config.urlPath),this.globOptions=py(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new fD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,qJ.scan)(s).base),this.commonPatternBase=kJ(this.patternBases)}}});function VJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function fu(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}}return(0,KJ.join)(e.baseURLPath,t)}var KJ,mD=ce(()=>{KJ=require("node:path");o(VJ,"pathStartsWithBase");o(fu,"deriveURLPath")});function YJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var _y,WJ,zJ,hD,jJ,QJ,Ey,JJ=ce(()=>{_y=require("node:events");$J();WJ=w(Q()),zJ=w(require("chokidar")),hD=require("node:path"),jJ=require("node:fs/promises");mD();QJ=require("micromatch"),Ey=class extends _y.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new TE(t,r,YJ(n)),this.#r=s||WJ.default.loggerWithTag(t),this.ready=(0,_y.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,QJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,hD.join)(this.directory,r);switch(t){case"add":case"change":{let i=fu(this.#e,r,"file");(0,jJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=fu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=fu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,hD.join)(this.#e.directory,r));return this.#t=zJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new TE(this.name,this.directory,YJ(t)),this.#a()}};o(YJ,"castConfig")});var gy,pD=ce(()=>{gy={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Ty,XJ,ZJ,e4,t4,r4,ED,_D,gD,SD,TD,Sy,n4=ce(()=>{Ty=require("events"),XJ=w(require("yaml")),ZJ=w(require("chokidar")),e4=require("node:fs/promises"),t4=require("util"),r4=w(Q());pD();ED=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},_D=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},gD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},SD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},TD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},Sy=class extends Ty.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||r4.default.loggerWithTag(t),this.ready=(0,Ty.once)(this,"ready"),this.#t=ZJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,e4.readFile)(this.#e,"utf-8").then(t=>{this.#n=XJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new ED(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=gy,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,t4.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new _D;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new gD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new SD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new TD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});function s4(){wbe[0]=1}var Nbe,wbe,i4=ce(()=>{Bp();Nbe=ea.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),wbe=new Uint8Array(Nbe);o(s4,"requestRestart")});var Ay,o4,Ry,yy,a4=ce(()=>{Ay=require("node:events");JJ();n4();o4=w(Q());i4();Ry=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},yy=class extends Ay.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=o4.default.forComponent(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,Ay.once)(this,"ready"),this.options=new Sy(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new Ey(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new Ry);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new Ry);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),s4()}}});function mu(e){return typeof e=="string"&&e.trim()!==""}function RD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>mu(t))}function d4(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Obe(e){e.config.root&&RE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new OD(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(d4(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,yE.join)(e.directory,i);by.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function f4(e){let t=!1;if(t=await Obe(e),t)return t;let r=await(0,c4.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,yE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=fu(e,n.path,"directory");by.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=fu(e,n.path,"file"),a=await(0,l4.readFile)(s);by.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else RE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var by,c4,RE,yE,l4,u4,Iy,Oi,yD,AD,bD,ID,ND,wD,OD,CD,PD,m4=ce(()=>{by=require("node:worker_threads"),c4=w(require("fast-glob")),RE=w(Q());uD();dD();yE=require("node:path"),l4=require("node:fs/promises");mD();u4=require("micromatch"),Iy=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!mu(this.config.files)&&!RD(this.config.files)&&!d4(this.config.files))throw new yD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!RD(this.config.files.source)&&!mu(this.config.files.source))throw new AD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new bD(this);if(this.config.files.ignore!==void 0&&!RD(this.config.files.ignore)&&!mu(this.config.files.ignore))throw new ID(this)}if(this.config.root!==void 0&&!mu(this.config.root))throw new wD(this);if(this.config.path!==void 0&&!mu(this.config.path))throw new CD(this);if(this.config.path&&(RE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!mu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new PD(this);this.globOptions=py(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new ND(this,r);return r.startsWith("/")&&(RE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,u4.scan)(r).base),this.baseURLPath=hy(this.name,this.config.urlPath)}},Oi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,yE.basename)(r.directory)}) ${t}`)}},yD=class extends Oi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},AD=class extends Oi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},bD=class extends Oi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},ID=class extends Oi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},ND=class extends Oi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},wD=class extends Oi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},OD=class extends Oi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},CD=class extends Oi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},PD=class extends Oi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(mu,"isNonEmptyString");o(RD,"isArrayOfNonEmptyStrings");o(d4,"isObject");o(Obe,"handleRoots");o(f4,"processResourceExtensionComponent")});var Pp={};we(Pp,{componentErrors:()=>AE,getComponentName:()=>oy,loadComponent:()=>Cy,loadComponentDirectories:()=>E4,setErrorReporter:()=>Pbe});function E4(e,t){t&&(DD=t),e&&(xD=e);let r=[];if((0,Ut.existsSync)(LD)){let s=(0,Ut.readdirSync)(LD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Gr.join)(LD,a);r.push(Cy(c,DD,Ky,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Cy(n,DD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{p4=!0})}function Pbe(e){wy=e}function Lbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{ea.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(ea.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Ut.rmSync)(t,{recursive:!0,force:!0}),(0,Ut.existsSync)((0,Gr.join)(e,"node_modules"))||(0,Ut.mkdirSync)((0,Gr.join)(e,"node_modules")),(0,Ut.symlinkSync)(FD.PACKAGE_ROOT,t,"dir"),r()}finally{ea.primaryStore.unlock(e,0)}})}function _4(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;if(!ea.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(_4(e,t))}))return new Promise((a,c)=>{n=a,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([t.handleApplication(e),new Promise((a,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{ea.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Cy(e,t,r,n,s,i){let a=(0,Ut.realpathSync)(e);if(Ny.has(a))return Ny.get(a);Ny.set(a,!0),s&&(xD=s);try{let c;n&&(AE=new Map);let l=(0,Gr.join)(e,"harperdb-config.yaml");(0,Ut.existsSync)(l)?c=n?(0,Py.getConfigObj)():(0,vD.parseDocument)((0,Ut.readFileSync)(l,"utf8")).toJSON():!n&&(0,Ut.existsSync)(l=(0,Gr.join)(e,"config.yaml"))?c=(0,vD.parseDocument)((0,Ut.readFileSync)(l,"utf8")).toJSON():c=gy;try{let m=(0,Gr.join)(e,"node_modules","harperdb");(n||((0,Ut.existsSync)(m)||!e.startsWith((0,UD.getHdbBasePath)()))&&(!(0,Ut.existsSync)(m)||(0,Ut.realpathSync)(FD.PACKAGE_ROOT)!==(0,Ut.realpathSync)(m)))&&await Lbe(e,m)}catch(m){pa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&pa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=Oy,d={};for(let m in c){Oy=m;let h=c[m];if(AE.set(n?m:(0,Gr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let N=e,O;for(;!(0,Ut.existsSync)(O=(0,Gr.join)(N,"node_modules",m));)if(N=(0,Gr.dirname)(N),N.length<(0,UD.getHdbBasePath)().length){O=null;break}if(O)p=await Cy(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=Cbe[m];if(!p)continue;let g=o(N=>(N.origin=r,ze(N)),"ensureTable"),R=h.network||(h.port||h.securePort)&&h,T=R?.securePort||R?.https&&R.port,y=!R?.https&&R?.port;if("handleApplication"in p&&("start"in p||"startOnMainThread"in p||"handleFile"in p||"handleDirectory"in p||"setupFile"in p||"setupDirectory"in p))throw new Error(`Component ${m} has both 'handleComponent' and 'start' or 'startOnMainThread' methods. Please use only one of them.`);if(t.isWorker&&p.handleApplication){p.suppressHandleApplicationWarning!==!0&&pa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let N=new yy(m,e,l,t,Le);await _4(N,p);continue}if(MD.isMainThread&&(p=await p.startOnMainThread?.({server:Le,ensureTable:g,port:y,securePort:T,resources:t,...h})||p,n&&R))for(let N of[y,T])try{if(+N&&!h4.includes(N)){let O=BD.get(U.HTTP_SESSIONAFFINITY);O&&pa.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!aS)&&(h4.push(N),HD(N,O))}}catch(O){console.error("Error listening on socket",N,O,m)}if(t.isWorker&&(p=await p.start?.({server:Le,ensureTable:g,port:y,securePort:T,resources:t,...h})||p),xD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let N=new Iy({config:h,name:m,directory:e,module:p,resources:t});d[m]=await f4(N)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,Gr.basename)(e)}' due to: ${g.message}`,wy?.(g),((0,bE.getWorkerIndex)()===0?console:pa.default).error(g),t.set(h.path||"/",new el(g),null,!0),AE.set(n?m:(0,Gr.basename)(e),g.message)}}if(Oy=u,MD.isMainThread&&!p4&&i&&(0,bE.watchDir)(e,async()=>E4()),c.extensionModule||c.pluginModule){let m=await oS((0,Gr.join)(e,c.extensionModule||c.pluginModule));return Ny.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;wy?.(new Error(m)),((0,bE.getWorkerIndex)()===0?console:pa.default).error(m),AE.set((0,Gr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||pa.default.warn(`Component ${m} from (${(0,Gr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,wy?.(c),t.set("",new el(c))}}var Ut,Gr,MD,vD,BD,FD,pa,bE,UD,Py,LD,xD,p4,DD,AE,Cbe,h4,Ny,wy,Oy,oy,lf=ce(()=>{Ut=require("node:fs"),Gr=require("node:path"),MD=require("node:worker_threads"),vD=require("yaml"),BD=w(oe()),FD=w(bt());k();hG();bG();FG();KG();YG();iq();Xj();s2();o2();pa=w(Q());p2();bE=w(nt());jN();Dr();Me();XR();UD=w(oe());O2();qT();x2();is();HJ();Py=w(wt());Ph();JA();a4();m4();tD();Bp();pD();LD=(0,Py.resolvePath)(BD.get(U.COMPONENTSROOT)),xD=new Map,AE=new Map;o(E4,"loadComponentDirectories");Cbe={REST:lS,rest:lS,graphql:GN,graphqlSchema:HN,roles:zN,jsResource:QN,fastifyRoutes:rL,login:XN,static:nL,operationsApi:cL,customFunctions:{},http:iy,clustering:hL,replication:Go,authentication:Ap,mqtt:cD,loadEnv:sL,logging:pa.default,dataLoader:aL},h4=[],Ny=new Map;o(Pbe,"setErrorReporter");oy=o(()=>Oy,"getComponentName");o(Lbe,"symlinkHarperModule");o(_4,"sequentiallyHandleApplication");o(Cy,"loadComponent")});var cy=M((ske,S4)=>{var{isMainThread:g4}=require("worker_threads"),{getTables:Dbe,getDatabases:rke,table:nke}=(Me(),v(Et)),{loadComponentDirectories:Mbe,loadComponent:vbe}=(lf(),v(Pp)),{resetResources:Ube}=(Fu(),v(hU)),xbe=FC(),Bbe=wt(),{dirname:Fbe}=require("path"),{getConnection:Hbe}=mr(),kbe=oe(),{CONFIG_PARAMS:Gbe}=(k(),v(W)),{loadCertificates:qbe}=as(),kD=new Map;async function $be(e=!1){!g4&&kbe.get(Gbe.CLUSTERING_ENABLED)&&Hbe();try{g4&&await xbe()}catch(n){console.error(n)}let t=Ube();Dbe(),t.isWorker=e,await qbe(),await vbe(Fbe(Bbe.getConfigFilePath()),t,"hdb",!0,kD),await Mbe(kD,t);let r=[];for(let[n]of kD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o($be,"loadRootComponents");S4.exports.loadRootComponents=$be});var nt=M((oke,Pi)=>{"use strict";LE();var{Worker:Vbe,MessageChannel:Kbe,parentPort:mo,isMainThread:KD,threadId:Ybe,workerData:ho}=require("worker_threads"),{PACKAGE_ROOT:Wbe}=bt(),{join:A4,isAbsolute:zbe,extname:jbe}=require("path"),{server:b4}=(Dr(),v($f)),{watch:Qbe,readdir:Jbe}=require("fs/promises"),{totalmem:T4}=require("os"),{setHeapSnapshotNearHeapLimit:Xbe}=require("v8"),wc=(k(),v(W)),My=oe(),Ci=Q(),{randomBytes:Zbe}=require("crypto"),{_assignPackageExport:eIe}=Xs(),R4=1024*1024,Oc=[],zs=[],tIe=50,YD=1e4,rIe="restart",I4="request_thread_info",N4="resource_report",w4="thread_info",O4="added-port",nIe="ack",GD;eIe("threads",zs);Pi.exports={startWorker:qD,restartWorkers:zD,shutdownWorkers:cIe,workers:Oc,setMonitorListener:EIe,onMessageFromWorkers:lIe,onMessageByType:U4,broadcast:dIe,broadcastWithAcknowledgement:mIe,setChildListenerByType:aIe,getWorkerIndex:C4,getWorkerCount:P4,getTicketKeys:D4,setMainIsWorker:iIe,setTerminateTimeout:sIe,restartNumber:ho?.restartNumber||1};zs.onMessageByType=U4;zs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=zs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Pi.exports.whenThreadsStarted=new Promise(e=>{Pi.exports.threadsHaveStarted=e});My.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&Xbe(1);var WD;function sIe(e){YD=e}o(sIe,"setTerminateTimeout");function C4(){return ho?ho.workerIndex:WD?0:void 0}o(C4,"getWorkerIndex");function P4(){return ho?ho.workerCount:WD?1:void 0}o(P4,"getWorkerCount");function iIe(e){WD=e,Pi.exports.threadsHaveStarted()}o(iIe,"setMainIsWorker");var L4=1,Ly;function D4(){return Ly||(Ly=KD?Zbe(48):ho.ticketKeys,Ly)}o(D4,"getTicketKeys");Object.defineProperty(b4,"workerIndex",{get(){return C4()}});Object.defineProperty(b4,"workerCount",{get(){return P4()}});var M4={[I4](e,t){hIe(t)},[N4](e,t){pIe(t,e)}};function qD(e,t={}){let r=process.constrainedMemory?.()||T4();r=Math.min(r,T4(),2e4*R4);let n=My.get(wc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/R4/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let u of zs){let d=new Kbe;d.existingPort=u,i.push(d),a.push(d.port2)}jbe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];My.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Vbe(zbe(e)?e:A4(Wbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:L4=t.threadCount,name:t.name,restartNumber:Pi.exports.restartNumber,ticketKeys:D4()},transferList:a,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:O4,port:u,threadId:l.threadId},[u]);return vy(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>qD(e,t),l.on("error",u=>{Ci.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Oc.splice(Oc.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<tIe?(t.unexpectedRestarts=l.unexpectedRestarts+1,qD(e,t)):Ci.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{M4[u.type]?.(u,l)}),Oc.push(l),gIe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}o(qD,"startWorker");var oIe=[wc.THREAD_TYPES.HTTP];async function zD(e=null,t=Math.max(L4>3,1),r=!0){if(KD){try{process.chdir(process.cwd())}catch(a){Ci.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=cy();await a()}Pi.exports.restartNumber++,t<1&&(t=t*Oc.length);let n=[],s=[];for(let a of Oc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Ci.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Pi.exports.restartNumber,type:wc.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=oIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},YD*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(h=>{h.type===wc.ITC_EVENT_TYPES.CHILD_STARTED&&(Ci.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Ci.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=sf();r&&(e==="http"||!e)&&My.get(wc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:rIe,workerType:e})}o(zD,"restartWorkers");function aIe(e,t){M4[e]=t}o(aIe,"setChildListenerByType");function cIe(e){return zD(e,1/0,!1)}o(cIe,"shutdownWorkers");var v4=[];function lIe(e){v4.push(e)}o(lIe,"onMessageFromWorkers");var $D=new Map;function U4(e,t){let r=$D.get(e);r||$D.set(e,r=[]),r.push(t)}o(U4,"onMessageByType");var uIe=10;async function dIe(e,t){let r=0;for(let n of zs)try{n.postMessage(e),r++>uIe&&(r=0,await new Promise(setImmediate))}catch(s){Ci.error("Unable to send message to worker",s)}t&&B4(e,null)}o(dIe,"broadcast");var Dy=new Map,fIe=1;function mIe(e){return new Promise(t=>{let r=0;for(let n of zs)try{let s=fIe++,i=o(()=>{Dy.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Dy.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of Dy)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Ci.error("Unable to send message to worker",s)}r===0&&t()})}o(mIe,"broadcastWithAcknowledgement");function hIe(e){e.postMessage({type:w4,workers:x4()})}o(hIe,"sendThreadInfo");function x4(){let e=Date.now();return Oc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(x4,"getChildWorkerInfo");function pIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(pIe,"recordResourceReport");var VD;function EIe(e){VD=e}o(EIe,"setMonitorListener");var _Ie=1e3,y4=!1;function gIe(){y4||(y4=!0,setInterval(()=>{for(let e of Oc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}VD&&VD()},_Ie).unref())}o(gIe,"startMonitoring");var SIe=1e3;if(mo&&ho?.addPorts){vy(mo);for(let e=0,t=ho.addPorts.length;e<t;e++){let r=ho.addPorts[e];r.threadId=ho.addThreadIds[e],vy(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:N4,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},SIe).unref(),GD=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:I4});function r(n){n.type===w4&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else GD=x4;Pi.exports.getThreadInfo=GD;function vy(e,t){zs.push(e),e.on("message",r=>{if(r.type===O4)r.port.threadId=r.threadId,vy(r.port);else if(r.type===nIe){let n=Dy.get(r.id);n&&n()}else B4(r,e)}).on("close",()=>{zs.splice(zs.indexOf(e),1)}).on("exit",()=>{zs.splice(zs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(vy,"addPort");function B4(e,t){for(let n of v4)n(e,t);let r=$D.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Ci.error(s)}}o(B4,"notifyMessageListeners");if(KD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await Jbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(A4(s,a.name));try{for await(let{filename:a}of Qbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await zD(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Pi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else mo.on("message",async e=>{let{type:t}=e;t===wc.ITC_EVENT_TYPES.SHUTDOWN&&(Pi.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate",Ybe),process.exit(0)},YD).unref())})});var VL={};we(VL,{startHTTPThreads:()=>RIe,startSocketServer:()=>HD,updateWorkerIdleness:()=>Y4});async function RIe(e=2,t){fN().catch(r=>Mf.error?.("Error recording hostname for analytics:",r));try{if(t)JD(0,1,!0);else{let{loadRootComponents:r}=cy();if(e===0)return(0,js.setMainIsWorker)(!0),await nD().startServers(),Promise.resolve([]);await r()}K4();for(let r=0;r<e;r++)JD(r,e);return Promise.all(V4)}finally{(0,js.threadsHaveStarted)()}}function K4(){let e=(0,G4.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),QD=setInterval(()=>{Mf.notify(e)},TIe).unref())}function JD(e,t=1,r){if(jD++,(0,js.startWorker)("server/threads/threadServer.js",{name:eA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===Qy.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});V4.push(s),await s,Cf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=xy.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Cf.indexOf(n);a>-1&&Cf.splice(a,1)}if(o(i,"removeWorker"),Pf){let a=Pf;Pf=[];for(let c of a)$4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{XD?XD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,js.shutdownWorkers)(),jD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function HD(e=0,t){if(typeof e=="string")try{(0,By.existsSync)(e)&&(0,By.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=yIe:r=AIe(t):r=ZD;let n=(0,Lf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=$4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),XD=!0,r(i,(a,c)=>{if(!a){if(F4){let u=i._socket||new Lf.Socket({handle:i,writable:!0,readable:!0});F4.deliverSocket(u,e,c),u.resume()}else jD>0?(Pf.length===0&&setTimeout(()=>{Pf.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,Pf.push(i)):(console.log("start up a dynamic thread to handle request"),JD(0));it(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Lf.Socket({handle:i,writable:!0,readable:!0});NIe(u,a,e)}it(!0,"socket-routed")})},Mf.info(`HarperDB ${q4.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function ZD(e,t){let r,n=0;for(let s of Cf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Uy)return Uy=i,t(r);n=i}Uy=0,t(r)}function yIe(e,t){let r={};e.getpeername(r);let n=r.address,s=Df.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ZD(e,a=>{Df.set(n,{worker:a,lastUsed:i}),t(a)})}function AIe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Lf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Df.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);ZD(n,f=>{Df.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function Y4(){Uy=0;for(let e of Cf)e.expectedIdle=e.recentELU.idle+bIe,e.requests=1;Cf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function NIe(e,t,r){let n=IIe++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),xy.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),xy.delete(n)),s.event=="destroy"&&(e.destroy(),xy.delete(n))})}var js,Lf,Mf,By,k4,G4,q4,Cf,Pf,$4,F4,jD,V4,QD,TIe,XD,Uy,H4,Df,bIe,xy,IIe,XR=ce(()=>{js=w(nt()),Lf=require("net");k();Mf=w(Q()),By=require("fs");Wi();k4=require("worker_threads"),G4=w(Jd()),q4=w(bt()),Cf=[],Pf=[],$4=[],jD=0,V4=[];k4.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,js.onMessageFromWorkers)(e=>{e.type===Zy.RESTART&&QD&&(clearInterval(QD),K4())}));TIe=6e5;o(RIe,"startHTTPThreads");o(K4,"licenseWarning");o(JD,"startHTTPWorker");o(HD,"startSocketServer");Uy=0;o(ZD,"findMostIdleWorker");H4=36e5,Df=new Map;o(yIe,"findByRemoteAddressAffinity");o(AIe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Df)r.lastUsed+H4<e&&Df.delete(t)},H4).unref();bIe=1e3;o(Y4,"updateWorkerIdleness");(0,js.setMonitorListener)(Y4);xy=new Map,IIe=1;o(NIe,"proxySocket")});LE();var{startHTTPThreads:wIe,startSocketServer:W4}=(XR(),v(VL));wIe(0,!0);W4(9925);W4(9926);
|
|
131
|
+
`))}},25).unref()}l.close?.(()=>{if(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Nf()==0)try{bJ(Tbe(Ws.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,uy),l.cantCleanupProperly||wi.warn("Had to forcefully exit the thread",uy),process.exit(0)},5e3).unref()})}if(NJ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){wi.info("Could not close debugger",c)}}}).ref();let r;_E&&!bbe&&(r=OJ()),Promise.resolve(r).then(()=>{if(Nf()===0)try{Rbe(ybe)}catch(n){console.error("Error displaying start-up log",n)}RJ?.postMessage({type:gs.ITC_EVENT_TYPES.CHILD_STARTED})})});return IJ(t),t}o(wJ,"startServers");function OJ(){let e=[];for(let t in wf){let r=wf[t];if(t.includes?.("/")&&Nf()==0){pbe(t)&&bJ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Ws.get(gs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Nf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?_E?n={fd:_E(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:_E?n={fd:_E(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),wi.trace("Listening on port "+t,uy)}).on("error",c)}))}return Promise.all(e)}o(OJ,"listenOnPorts");!oD&&!mbe?.noServerStart&&wJ();function Ibe(e,t){let r=(lf(),v(Pp)).getComponentName,n;if(t.securePort){yJ(t.securePort,{protocol_name:"TLS",name:r()});let s=Sbe("server",t.mtls),i=Ws.get("tls");n=_be({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),wf[t.securePort]=n}return t.port&&(yJ(t.port,{protocol_name:"TCP",name:r()}),n=hbe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),wf[t.port]=n),n}o(Ibe,"onSocket")});async function MJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await cD.get(e,{returnNonexistent:!0});i=new dD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await cD.get(e);a&&a.delete()}i=new my(e,t)}return n&&(n.id=e,n.user={username:t?.username},SE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function lD(){return fy++,fy>65500&&(fy=1),fy}function uD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new ri(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Ft(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var PJ,Nc,LJ,DJ,CJ,cD,SE,fy,my,dD,vJ=le(()=>{Me();Fu();PJ=w(An()),Nc=w(Q());Bc();LJ=w(st()),DJ=w(aD());Dr();O_();CJ=100,cD=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),SE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,LJ.getWorkerIndex)()===0&&(async()=>{await DJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of SE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await De.getUser(r.user.username));try{await uD(r,t,r)}catch{(0,Nc.warn)("Failed to publish will",t)}SE.delete(e.id)}})();o(MJ,"getSession");fy=1;o(lD,"getNextMessageId");my=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(T=>T.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Nc.trace)("Resuming subscription from",s,"from",a);let h=bs.getMatch(u,"mqtt");if(!h){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}m.url=h.relativeURL;let p;if(m.url.indexOf("+")>-1||(p=m.url.indexOf("#"))>-1){let T=m.url.slice(1);if(p--,p>-1&&p!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,T.indexOf("+")===T.length-1)m.onlyChildren=!0,m.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),N;for(let z=0;z<R.length;z++)if(R[z].indexOf("+")>-1)if(R[z]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let C=!0;R[R.length-1]==="#"&&(R.length--,C=!1),N&&(n=o(z=>{let F=z.id;if(!Array.isArray(F))if(F?.indexOf?.("/")>-1)F=F.split("/");else return!1;if(C&&F.length!==R.length)return!1;for(let $=0;$<R.length;$++)if(R[$]!=="+"&&R[$]!==F[$])return!1;return!0},"filter"));let G=R.indexOf("+");m.url="/"+(G>-1?R.slice(0,G):R).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,y=await Ft(m,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i,T.isCollection=m.isCollection;let R=await g.subscribe(m,T);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let C of R)try{let G;if(C.type&&C.type!=="put"&&C.type!=="delete"&&C.type!=="message"&&C.type!=="patch"||n&&!n(C))continue;r?(C.topic=s,G=this.needsAcknowledge(C)):(C.acknowledge?.(),G=lD());let z=C.id;if(Array.isArray(z)&&(z=Bu(z)),z==null&&(z=""),await this.listener(_+"/"+z,C.value,G,t)===!1)break;this.awaitingAcks?.size>CJ?await new Promise($=>setTimeout($,this.awaitingAcks.size-CJ)):await new Promise(setImmediate)}catch(G){(0,Nc.warn)(G)}})();return R});if(y)return y.topic=s,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){let r=lD();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 uD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();Ft(r,async()=>{try{if(!t){let n=await SE.get(this.sessionId);n?.doesExist()&&await uD(n,n.data,r)}}finally{await SE.delete(this.sessionId)}}).catch(n=>{(0,Nc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(uD,"publish");dD=class extends my{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=lD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Nc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,PJ.getNextMonotonicTime)()),(0,Nc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),cD.put(this.sessionRecord)}}});var fD={};Oe(fD,{bypassAuth:()=>Nbe,start:()=>Obe});function Nbe(){GJ=!0}function Obe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new kJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),ar.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=xJ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{ar.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),ar.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&py.notify?.({username:d?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&py.error?.({username:h,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else ar.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),ar.error?.(h)}else if(l.required)return ar.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&wbe(u.remoteAddress)&&(d=await(0,BJ.getSuperUser)(),ar.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=xJ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{ar.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function xJ(e,t,r,n,s){UJ||(UJ=!0,ch(f=>{hy>0&&f.push({metric:"mqtt-connections",connections:hy,byThread:!0})}));let i;hy++;let a,c={protocolVersion:4},l=(0,Ey.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){hy--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!1,"connection","mqtt","disconnect"),ar.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),ar.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){ar.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let h=f.topic,p=h?.indexOf("/",1),_=p>0?h.slice(0,p):h;ot(f.length,"bytes-received",_,y(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await De.getUser(f.username,f.password.toString(),r),(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&py.notify?.({username:n?.username,status:Zs.SUCCESS,type:ya.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,Of.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&py.error?.({username:f.username,status:Zs.FAILURE,type:ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let J=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=MJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return ar.error?.(J),s.events.emit("auth-failed",f,e,J),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),Wr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,K,te,fe)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let oe=J.indexOf("/",1),ge=oe>0?J.slice(0,oe):J;g({cmd:"publish",topic:J,payload:await T(K),messageId:te||Math.floor(Math.random()*1e8),qos:fe.qos},ge);let Pe=e._socket??e;return Pe.writableNeedDrain?new Promise(Te=>Pe.once("drain",Te)):!Pe.closed}catch(oe){return ar.error?.(oe),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let K;try{let te=await a.addSubscription(J,J.qos>=1);K=te?te.qos||0:c.protocolVersion<5?128:143}catch(te){s.events.emit("error",te,e,J,a),te.statusCode?te.statusCode===500?ar.warn?.(te):ar.info?.(te):ar.error?.(te),K=c.protocolVersion<5?128:te.statusCode===403?135:te.statusCode===404?143:128}N.push(K)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let K of f.unsubscriptions)J.push(a.removeSubscription(K)?0:17);g({cmd:"unsuback",granted:J,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let C=f.qos===2?"pubrec":"puback",G=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type"))),F=(f.payload?.length||0)>0?G(f.payload):void 0,$;try{$=await a.publish(f,F)}catch(J){s.events.emit("error",J,e,f,a),ar.warn?.(J),f.qos>0&&g({cmd:C,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:C,messageId:f.messageId,reasonCode:$===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!0,"connection","mqtt","disconnect"),ar.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),ar.error?.(R),g({cmd:"disconnect"})}function g(R,N){let C=(0,Ey.generate)(R,c);t(C),ot(C.length,"bytes-sent",N,y(R),"mqtt")}o(g,"sendPacket");function y(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(y,"packetMethodName");function T(R){return ba(R,r)}o(T,"serialize")}),l.on("error",f=>{ar.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var Ey,BJ,Of,FJ,HJ,kJ,py,ar,GJ,wbe,UJ,hy,qJ=le(()=>{Ey=require("mqtt-packet");vJ();BJ=w(ts());Ro();Wi();Dr();Of=w(ae());k();FJ=w(ei()),HJ=w(Q()),kJ=require("events"),py=(0,FJ.loggerWithTag)("auth-event"),ar=(0,HJ.forComponent)("mqtt"),GJ=(0,Of.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Nbe,"bypassAuth");wbe=o(e=>GJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Obe,"start");hy=0;o(xJ,"onSocket")});function _y(e,t){if(t?.includes(".."))throw new mD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var mD,hD=le(()=>{mD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(_y,"resolveBaseURLPath")});function $J(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var VJ=le(()=>{o($J,"deriveCommonPatternBase")});function gy(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var pD=le(()=>{o(gy,"deriveGlobOptions")});var KJ,ED,TE,YJ=le(()=>{hD();VJ();pD();KJ=require("micromatch"),ED=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},TE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=_y(this.name,this.config.urlPath),this.globOptions=gy(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new ED(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,KJ.scan)(s).base),this.commonPatternBase=$J(this.patternBases)}}});function WJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function fu(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(WJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(WJ(n,t)){t=t.slice(n.length+1);break}}}return(0,zJ.join)(e.baseURLPath,t)}var zJ,_D=le(()=>{zJ=require("node:path");o(WJ,"pathStartsWithBase");o(fu,"deriveURLPath")});function jJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var Ty,QJ,JJ,gD,XJ,ZJ,Sy,e4=le(()=>{Ty=require("node:events");YJ();QJ=w(Q()),JJ=w(require("chokidar")),gD=require("node:path"),XJ=require("node:fs/promises");_D();ZJ=require("micromatch"),Sy=class extends Ty.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new TE(t,r,jJ(n)),this.#r=s||QJ.default.loggerWithTag(t),this.ready=(0,Ty.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,ZJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,gD.join)(this.directory,r);switch(t){case"add":case"change":{let i=fu(this.#e,r,"file");(0,XJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=fu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=fu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,gD.join)(this.#e.directory,r));return this.#t=JJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new TE(this.name,this.directory,jJ(t)),this.#a()}};o(jJ,"castConfig")});var Ry,SD=le(()=>{Ry={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Ay,t4,r4,n4,s4,i4,TD,RD,yD,AD,bD,yy,o4=le(()=>{Ay=require("events"),t4=w(require("yaml")),r4=w(require("chokidar")),n4=require("node:fs/promises"),s4=require("util"),i4=w(Q());SD();TD=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},RD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},yD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},AD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},bD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},yy=class extends Ay.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||i4.default.loggerWithTag(t),this.ready=(0,Ay.once)(this,"ready"),this.#t=r4.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,n4.readFile)(this.#e,"utf-8").then(t=>{this.#n=t4.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new TD(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=Ry,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,s4.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new RD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new yD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new AD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new bD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});function a4(){Pbe[0]=1}var Cbe,Pbe,c4=le(()=>{Bp();Cbe=ea.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),Pbe=new Uint8Array(Cbe);o(a4,"requestRestart")});var Ny,l4,by,Iy,u4=le(()=>{Ny=require("node:events");e4();o4();l4=w(Q());c4();by=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},Iy=class extends Ny.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=l4.default.forComponent(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,Ny.once)(this,"ready"),this.options=new yy(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new Sy(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new by);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new by);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),a4()}}});function mu(e){return typeof e=="string"&&e.trim()!==""}function ID(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>mu(t))}function h4(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Lbe(e){e.config.root&&RE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new DD(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(h4(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,yE.join)(e.directory,i);wy.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function p4(e){let t=!1;if(t=await Lbe(e),t)return t;let r=await(0,d4.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,yE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=fu(e,n.path,"directory");wy.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=fu(e,n.path,"file"),a=await(0,f4.readFile)(s);wy.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else RE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var wy,d4,RE,yE,f4,m4,Oy,Oi,ND,wD,OD,CD,PD,LD,DD,MD,vD,E4=le(()=>{wy=require("node:worker_threads"),d4=w(require("fast-glob")),RE=w(Q());hD();pD();yE=require("node:path"),f4=require("node:fs/promises");_D();m4=require("micromatch"),Oy=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!mu(this.config.files)&&!ID(this.config.files)&&!h4(this.config.files))throw new ND(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!ID(this.config.files.source)&&!mu(this.config.files.source))throw new wD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new OD(this);if(this.config.files.ignore!==void 0&&!ID(this.config.files.ignore)&&!mu(this.config.files.ignore))throw new CD(this)}if(this.config.root!==void 0&&!mu(this.config.root))throw new LD(this);if(this.config.path!==void 0&&!mu(this.config.path))throw new MD(this);if(this.config.path&&(RE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!mu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new vD(this);this.globOptions=gy(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new PD(this,r);return r.startsWith("/")&&(RE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,m4.scan)(r).base),this.baseURLPath=_y(this.name,this.config.urlPath)}},Oi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,yE.basename)(r.directory)}) ${t}`)}},ND=class extends Oi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},wD=class extends Oi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},OD=class extends Oi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},CD=class extends Oi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},PD=class extends Oi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},LD=class extends Oi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},DD=class extends Oi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},MD=class extends Oi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},vD=class extends Oi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(mu,"isNonEmptyString");o(ID,"isArrayOfNonEmptyStrings");o(h4,"isObject");o(Lbe,"handleRoots");o(p4,"processResourceExtensionComponent")});var Pp={};Oe(Pp,{componentErrors:()=>AE,getComponentName:()=>ly,loadComponent:()=>Dy,loadComponentDirectories:()=>S4,setErrorReporter:()=>Mbe});function S4(e,t){t&&(xD=t),e&&(kD=e);let r=[];if((0,Ut.existsSync)(UD)){let s=(0,Ut.readdirSync)(UD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Gr.join)(UD,a);r.push(Dy(c,xD,zy,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Dy(n,xD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{g4=!0})}function Mbe(e){Py=e}function vbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{ea.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(ea.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Ut.rmSync)(t,{recursive:!0,force:!0}),(0,Ut.existsSync)((0,Gr.join)(e,"node_modules"))||(0,Ut.mkdirSync)((0,Gr.join)(e,"node_modules")),(0,Ut.symlinkSync)(qD.PACKAGE_ROOT,t,"dir"),r()}finally{ea.primaryStore.unlock(e,0)}})}function T4(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;if(!ea.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(T4(e,t))}))return new Promise((a,c)=>{n=a,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([t.handleApplication(e),new Promise((a,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{ea.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Dy(e,t,r,n,s,i){let a=(0,Ut.realpathSync)(e);if(Cy.has(a))return Cy.get(a);Cy.set(a,!0),s&&(kD=s);try{let c;n&&(AE=new Map);let l=(0,Gr.join)(e,"harperdb-config.yaml");(0,Ut.existsSync)(l)?c=n?(0,My.getConfigObj)():(0,FD.parseDocument)((0,Ut.readFileSync)(l,"utf8")).toJSON():!n&&(0,Ut.existsSync)(l=(0,Gr.join)(e,"config.yaml"))?c=(0,FD.parseDocument)((0,Ut.readFileSync)(l,"utf8")).toJSON():c=Ry;try{let m=(0,Gr.join)(e,"node_modules","harperdb");(n||((0,Ut.existsSync)(m)||!e.startsWith((0,HD.getHdbBasePath)()))&&(!(0,Ut.existsSync)(m)||(0,Ut.realpathSync)(qD.PACKAGE_ROOT)!==(0,Ut.realpathSync)(m)))&&await vbe(e,m)}catch(m){pa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&pa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=Ly,d={};for(let m in c){Ly=m;let h=c[m];if(AE.set(n?m:(0,Gr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let N=e,C;for(;!(0,Ut.existsSync)(C=(0,Gr.join)(N,"node_modules",m));)if(N=(0,Gr.dirname)(N),N.length<(0,HD.getHdbBasePath)().length){C=null;break}if(C)p=await Dy(C,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=Dbe[m];if(!p)continue;let g=o(N=>(N.origin=r,ze(N)),"ensureTable"),y=h.network||(h.port||h.securePort)&&h,T=y?.securePort||y?.https&&y.port,R=!y?.https&&y?.port;if("handleApplication"in p&&("start"in p||"startOnMainThread"in p||"handleFile"in p||"handleDirectory"in p||"setupFile"in p||"setupDirectory"in p))throw new Error(`Component ${m} has both 'handleComponent' and 'start' or 'startOnMainThread' methods. Please use only one of them.`);if(t.isWorker&&p.handleApplication){p.suppressHandleApplicationWarning!==!0&&pa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let N=new Iy(m,e,l,t,De);await T4(N,p);continue}if(BD.isMainThread&&(p=await p.startOnMainThread?.({server:De,ensureTable:g,port:R,securePort:T,resources:t,...h})||p,n&&y))for(let N of[R,T])try{if(+N&&!_4.includes(N)){let C=GD.get(U.HTTP_SESSIONAFFINITY);C&&pa.default.warn("Session affinity is not recommended and may cause memory leaks"),(C||!aS)&&(_4.push(N),$D(N,C))}}catch(C){console.error("Error listening on socket",N,C,m)}if(t.isWorker&&(p=await p.start?.({server:De,ensureTable:g,port:R,securePort:T,resources:t,...h})||p),kD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let N=new Oy({config:h,name:m,directory:e,module:p,resources:t});d[m]=await p4(N)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,Gr.basename)(e)}' due to: ${g.message}`,Py?.(g),((0,bE.getWorkerIndex)()===0?console:pa.default).error(g),t.set(h.path||"/",new el(g),null,!0),AE.set(n?m:(0,Gr.basename)(e),g.message)}}if(Ly=u,BD.isMainThread&&!g4&&i&&(0,bE.watchDir)(e,async()=>S4()),c.extensionModule||c.pluginModule){let m=await oS((0,Gr.join)(e,c.extensionModule||c.pluginModule));return Cy.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;Py?.(new Error(m)),((0,bE.getWorkerIndex)()===0?console:pa.default).error(m),AE.set((0,Gr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||pa.default.warn(`Component ${m} from (${(0,Gr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,Py?.(c),t.set("",new el(c))}}var Ut,Gr,BD,FD,GD,qD,pa,bE,HD,My,UD,kD,g4,xD,AE,Dbe,_4,Cy,Py,Ly,ly,lf=le(()=>{Ut=require("node:fs"),Gr=require("node:path"),BD=require("node:worker_threads"),FD=require("yaml"),GD=w(ae()),qD=w(bt());k();gG();OG();qG();jG();QG();lq();t2();a2();l2();pa=w(Q());g2();bE=w(st());XN();Dr();Me();ty();HD=w(ae());L2();KT();H2();is();qJ();My=w(wt());Ph();eb();u4();E4();iD();Bp();SD();UD=(0,My.resolvePath)(GD.get(U.COMPONENTSROOT)),kD=new Map,AE=new Map;o(S4,"loadComponentDirectories");Dbe={REST:lS,rest:lS,graphql:VN,graphqlSchema:qN,roles:JN,jsResource:ZN,fastifyRoutes:oL,login:tw,static:aL,operationsApi:fL,customFunctions:{},http:cy,clustering:gL,replication:Go,authentication:Ap,mqtt:fD,loadEnv:cL,logging:pa.default,dataLoader:dL},_4=[],Cy=new Map;o(Mbe,"setErrorReporter");ly=o(()=>Ly,"getComponentName");o(vbe,"symlinkHarperModule");o(T4,"sequentiallyHandleApplication");o(Dy,"loadComponent")});var dy=M((ake,y4)=>{var{isMainThread:R4}=require("worker_threads"),{getTables:Ube,getDatabases:ike,table:oke}=(Me(),v(_t)),{loadComponentDirectories:xbe,loadComponent:Bbe}=(lf(),v(Pp)),{resetResources:Fbe}=(Fu(),v(gU)),Hbe=qC(),kbe=wt(),{dirname:Gbe}=require("path"),{getConnection:qbe}=mr(),$be=ae(),{CONFIG_PARAMS:Vbe}=(k(),v(Y)),{loadCertificates:Kbe}=as(),VD=new Map;async function Ybe(e=!1){!R4&&$be.get(Vbe.CLUSTERING_ENABLED)&&qbe();try{R4&&await Hbe()}catch(n){console.error(n)}let t=Fbe();Ube(),t.isWorker=e,await Kbe(),await Bbe(Gbe(kbe.getConfigFilePath()),t,"hdb",!0,VD),await xbe(VD,t);let r=[];for(let[n]of VD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(Ybe,"loadRootComponents");y4.exports.loadRootComponents=Ybe});var st=M((lke,Pi)=>{"use strict";LE();var{Worker:Wbe,MessageChannel:zbe,parentPort:mo,isMainThread:jD,threadId:jbe,workerData:ho}=require("worker_threads"),{PACKAGE_ROOT:Qbe}=bt(),{join:N4,isAbsolute:Jbe,extname:Xbe}=require("path"),{server:w4}=(Dr(),v($f)),{watch:Zbe,readdir:eIe}=require("fs/promises"),{totalmem:A4}=require("os"),{setHeapSnapshotNearHeapLimit:tIe}=require("v8"),wc=(k(),v(Y)),xy=ae(),Ci=Q(),{randomBytes:rIe}=require("crypto"),{_assignPackageExport:nIe}=Xs(),b4=1024*1024,Oc=[],zs=[],sIe=50,QD=1e4,iIe="restart",O4="request_thread_info",C4="resource_report",P4="thread_info",L4="added-port",oIe="ack",KD;nIe("threads",zs);Pi.exports={startWorker:YD,restartWorkers:XD,shutdownWorkers:dIe,workers:Oc,setMonitorListener:SIe,onMessageFromWorkers:fIe,onMessageByType:F4,broadcast:hIe,broadcastWithAcknowledgement:EIe,setChildListenerByType:uIe,getWorkerIndex:D4,getWorkerCount:M4,getTicketKeys:U4,setMainIsWorker:cIe,setTerminateTimeout:aIe,restartNumber:ho?.restartNumber||1};zs.onMessageByType=F4;zs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=zs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Pi.exports.whenThreadsStarted=new Promise(e=>{Pi.exports.threadsHaveStarted=e});xy.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&tIe(1);var JD;function aIe(e){QD=e}o(aIe,"setTerminateTimeout");function D4(){return ho?ho.workerIndex:JD?0:void 0}o(D4,"getWorkerIndex");function M4(){return ho?ho.workerCount:JD?1:void 0}o(M4,"getWorkerCount");function cIe(e){JD=e,Pi.exports.threadsHaveStarted()}o(cIe,"setMainIsWorker");var v4=1,vy;function U4(){return vy||(vy=jD?rIe(48):ho.ticketKeys,vy)}o(U4,"getTicketKeys");Object.defineProperty(w4,"workerIndex",{get(){return D4()}});Object.defineProperty(w4,"workerCount",{get(){return M4()}});var x4={[O4](e,t){_Ie(t)},[C4](e,t){gIe(t,e)}};function YD(e,t={}){let r=process.constrainedMemory?.()||A4();r=Math.min(r,A4(),2e4*b4);let n=xy.get(wc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/b4/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let u of zs){let d=new zbe;d.existingPort=u,i.push(d),a.push(d.port2)}Xbe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];xy.get(wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Wbe(Jbe(e)?e:N4(Qbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:v4=t.threadCount,name:t.name,restartNumber:Pi.exports.restartNumber,ticketKeys:U4()},transferList:a,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:L4,port:u,threadId:l.threadId},[u]);return By(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>YD(e,t),l.on("error",u=>{Ci.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Oc.splice(Oc.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<sIe?(t.unexpectedRestarts=l.unexpectedRestarts+1,YD(e,t)):Ci.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{x4[u.type]?.(u,l)}),Oc.push(l),RIe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}o(YD,"startWorker");var lIe=[wc.THREAD_TYPES.HTTP];async function XD(e=null,t=Math.max(v4>3,1),r=!0){if(jD){try{process.chdir(process.cwd())}catch(a){Ci.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=dy();await a()}Pi.exports.restartNumber++,t<1&&(t=t*Oc.length);let n=[],s=[];for(let a of Oc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Ci.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Pi.exports.restartNumber,type:wc.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=lIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},QD*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(h=>{h.type===wc.ITC_EVENT_TYPES.CHILD_STARTED&&(Ci.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Ci.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=sf();r&&(e==="http"||!e)&&xy.get(wc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:iIe,workerType:e})}o(XD,"restartWorkers");function uIe(e,t){x4[e]=t}o(uIe,"setChildListenerByType");function dIe(e){return XD(e,1/0,!1)}o(dIe,"shutdownWorkers");var B4=[];function fIe(e){B4.push(e)}o(fIe,"onMessageFromWorkers");var WD=new Map;function F4(e,t){let r=WD.get(e);r||WD.set(e,r=[]),r.push(t)}o(F4,"onMessageByType");var mIe=10;async function hIe(e,t){let r=0;for(let n of zs)try{n.postMessage(e),r++>mIe&&(r=0,await new Promise(setImmediate))}catch(s){Ci.error("Unable to send message to worker",s)}t&&k4(e,null)}o(hIe,"broadcast");var Uy=new Map,pIe=1;function EIe(e){return new Promise(t=>{let r=0;for(let n of zs)try{let s=pIe++,i=o(()=>{Uy.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Uy.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of Uy)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Ci.error("Unable to send message to worker",s)}r===0&&t()})}o(EIe,"broadcastWithAcknowledgement");function _Ie(e){e.postMessage({type:P4,workers:H4()})}o(_Ie,"sendThreadInfo");function H4(){let e=Date.now();return Oc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(H4,"getChildWorkerInfo");function gIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(gIe,"recordResourceReport");var zD;function SIe(e){zD=e}o(SIe,"setMonitorListener");var TIe=1e3,I4=!1;function RIe(){I4||(I4=!0,setInterval(()=>{for(let e of Oc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}zD&&zD()},TIe).unref())}o(RIe,"startMonitoring");var yIe=1e3;if(mo&&ho?.addPorts){By(mo);for(let e=0,t=ho.addPorts.length;e<t;e++){let r=ho.addPorts[e];r.threadId=ho.addThreadIds[e],By(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:C4,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},yIe).unref(),KD=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:O4});function r(n){n.type===P4&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else KD=H4;Pi.exports.getThreadInfo=KD;function By(e,t){zs.push(e),e.on("message",r=>{if(r.type===L4)r.port.threadId=r.threadId,By(r.port);else if(r.type===oIe){let n=Uy.get(r.id);n&&n()}else k4(r,e)}).on("close",()=>{zs.splice(zs.indexOf(e),1)}).on("exit",()=>{zs.splice(zs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(By,"addPort");function k4(e,t){for(let n of B4)n(e,t);let r=WD.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Ci.error(s)}}o(k4,"notifyMessageListeners");if(jD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await eIe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(N4(s,a.name));try{for await(let{filename:a}of Zbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await XD(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Pi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else mo.on("message",async e=>{let{type:t}=e;t===wc.ITC_EVENT_TYPES.SHUTDOWN&&(Pi.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Ci.warn("Thread did not voluntarily terminate",jbe),process.exit(0)},QD).unref())})});var zL={};Oe(zL,{startHTTPThreads:()=>bIe,startSocketServer:()=>$D,updateWorkerIdleness:()=>j4});async function bIe(e=2,t){pN().catch(r=>Mf.error?.("Error recording hostname for analytics:",r));try{if(t)tM(0,1,!0);else{let{loadRootComponents:r}=dy();if(e===0)return(0,js.setMainIsWorker)(!0),await aD().startServers(),Promise.resolve([]);await r()}z4();for(let r=0;r<e;r++)tM(r,e);return Promise.all(W4)}finally{(0,js.threadsHaveStarted)()}}function z4(){let e=(0,V4.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),eM=setInterval(()=>{Mf.notify(e)},AIe).unref())}function tM(e,t=1,r){if(ZD++,(0,js.startWorker)("server/threads/threadServer.js",{name:nA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===Zy.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});W4.push(s),await s,Cf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=Hy.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Cf.indexOf(n);a>-1&&Cf.splice(a,1)}if(o(i,"removeWorker"),Pf){let a=Pf;Pf=[];for(let c of a)Y4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{rM?rM=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,js.shutdownWorkers)(),ZD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function $D(e=0,t){if(typeof e=="string")try{(0,ky.existsSync)(e)&&(0,ky.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=IIe:r=NIe(t):r=nM;let n=(0,Lf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=Y4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),rM=!0,r(i,(a,c)=>{if(!a){if(G4){let u=i._socket||new Lf.Socket({handle:i,writable:!0,readable:!0});G4.deliverSocket(u,e,c),u.resume()}else ZD>0?(Pf.length===0&&setTimeout(()=>{Pf.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,Pf.push(i)):(console.log("start up a dynamic thread to handle request"),tM(0));ot(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Lf.Socket({handle:i,writable:!0,readable:!0});CIe(u,a,e)}ot(!0,"socket-routed")})},Mf.info(`HarperDB ${K4.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 nM(e,t){let r,n=0;for(let s of Cf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Fy)return Fy=i,t(r);n=i}Fy=0,t(r)}function IIe(e,t){let r={};e.getpeername(r);let n=r.address,s=Df.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);nM(e,a=>{Df.set(n,{worker:a,lastUsed:i}),t(a)})}function NIe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Lf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Df.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);nM(n,f=>{Df.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function j4(){Fy=0;for(let e of Cf)e.expectedIdle=e.recentELU.idle+wIe,e.requests=1;Cf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function CIe(e,t,r){let n=OIe++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),Hy.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),Hy.delete(n)),s.event=="destroy"&&(e.destroy(),Hy.delete(n))})}var js,Lf,Mf,ky,$4,V4,K4,Cf,Pf,Y4,G4,ZD,W4,eM,AIe,rM,Fy,q4,Df,wIe,Hy,OIe,ty=le(()=>{js=w(st()),Lf=require("net");k();Mf=w(Q()),ky=require("fs");Wi();$4=require("worker_threads"),V4=w(Jd()),K4=w(bt()),Cf=[],Pf=[],Y4=[],ZD=0,W4=[];$4.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,js.onMessageFromWorkers)(e=>{e.type===rA.RESTART&&eM&&(clearInterval(eM),z4())}));AIe=6e5;o(bIe,"startHTTPThreads");o(z4,"licenseWarning");o(tM,"startHTTPWorker");o($D,"startSocketServer");Fy=0;o(nM,"findMostIdleWorker");q4=36e5,Df=new Map;o(IIe,"findByRemoteAddressAffinity");o(NIe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Df)r.lastUsed+q4<e&&Df.delete(t)},q4).unref();wIe=1e3;o(j4,"updateWorkerIdleness");(0,js.setMonitorListener)(j4);Hy=new Map,OIe=1;o(CIe,"proxySocket")});LE();var{startHTTPThreads:PIe,startSocketServer:Q4}=(ty(),v(zL));PIe(0,!0);Q4(9925);Q4(9926);
|